iptables
是 Linux 下的一个强大的防火墙工具,用于设置、维护和检查 IP 数据包的过滤规则。其基本用法是通过命令行界面配置流量的过滤策略,分为以下几类规则链:INPUT
(入站流量)、OUTPUT
(出站流量)、FORWARD
(转发流量)。常用的参数有:
-A
:添加规则到链中。-D
:删除链中的规则。-I
:在链的指定位置插入规则。-L
:列出所有规则。-F
:清空所有规则。-P
:设置默认策略(如 ACCEPT 或 DROP)。-s
:源 IP 地址。-d
:目标 IP 地址。-p
:协议(如tcp
、udp
、icmp
)。--dport
和--sport
:指定目标或源端口。-j
:指定跳转动作(如ACCEPT
、DROP
、REJECT
)。
iptables
中三大基本链(INPUT
、OUTPUT
、FORWARD
)的详细说明和示例:
1. INPUT 链(入站流量)
INPUT
链用于处理进入本机的流量,即目标是本机的流量。当你希望控制哪些流量可以进入到你的系统时,使用 INPUT
链。
示例 1: 允许来自 192.168.1.100
IP 地址的 HTTP 请求(端口 80)
iptables -A INPUT -p tcp --dport 80 -s 192.168.1.100 -j ACCEPT
解释:
-A INPUT
:将规则添加到INPUT
链。-p tcp
:匹配 TCP 协议。--dport 80
:目标端口是 80(HTTP 端口)。-s 192.168.1.100
:只允许来自 IP 地址192.168.1.100
的流量。-j ACCEPT
:如果满足条件,允许该流量通过。
示例 2: 拒绝来自 10.0.0.0/24
网段的所有 ICMP 请求(ping)
iptables -A INPUT -p icmp -s 10.0.0.0/24 -j REJECT
解释:
-p icmp
:匹配 ICMP 协议(如 ping 请求)。-s 10.0.0.0/24
:源地址为10.0.0.0/24
网段。-j REJECT
:拒绝该流量。
2. OUTPUT 链(出站流量)
OUTPUT
链用于处理从本机发出的流量。通常,这些规则用于控制哪些程序或服务能够访问外部网络。
示例 1: 允许本机通过 HTTP(端口 80)访问外部网络
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
解释:
-A OUTPUT
:将规则添加到OUTPUT
链。-p tcp
:匹配 TCP 协议。--dport 80
:目标端口是 80(HTTP 端口)。-j ACCEPT
:允许流量通过。
示例 2: 禁止本机通过 SSH(端口 22)访问外部服务器
iptables -A OUTPUT -p tcp --dport 22 -j REJECT
解释:
-A OUTPUT
:将规则添加到OUTPUT
链。-p tcp
:匹配 TCP 协议。--dport 22
:目标端口是 22(SSH 端口)。-j REJECT
:拒绝流量。
3. FORWARD 链(转发流量)
FORWARD
链用于处理转发到其他主机的流量。这个链在路由器或网关设备上尤为重要,特别是那些需要转发流量的场景。只有在本机开启了 IP 转发功能,才会使用该链。
示例 1: 允许从本机转发流量到特定网络
假设你有一个网络接口 eth0
,并且想要允许流量从该接口转发到 192.168.2.0/24
网段。
iptables -A FORWARD -i eth0 -d 192.168.2.0/24 -j ACCEPT
解释:
-A FORWARD
:将规则添加到FORWARD
链。-i eth0
:匹配输入接口为eth0
。-d 192.168.2.0/24
:目标地址是192.168.2.0/24
网段。-j ACCEPT
:允许该流量通过。
示例 2: 拒绝从本机转发流量到特定 IP
假设你不想让任何流量通过本机转发到 IP 地址 203.0.113.10
。
iptables -A FORWARD -d 203.0.113.10 -j DROP
解释:
-A FORWARD
:将规则添加到FORWARD
链。-d 203.0.113.10
:目标地址是203.0.113.10
。-j DROP
:丢弃该流量。
默认策略和链操作
你可以通过设置默认策略来控制没有匹配规则的流量,例如:
# 设置默认策略为 DROP(丢弃)所有入站流量 iptables -P INPUT DROP # 设置默认策略为 ACCEPT(接受)所有转发流量 iptables -P FORWARD ACCEPT
总结
- INPUT 链:控制进站流量(目标为本机)。
- OUTPUT 链:控制出站流量(源自本机)。
- FORWARD 链:控制转发流量(路由流量,目标不为本机)。