9.2.4 常用的主机防火墙规则
当设置主机防火墙时,一般采取先放行,最后全部禁止的方法。也就是说,根据主机的特点,规划出允许进入主机的外界数据包,然后设计规则放行这些数据包。如果某一数据包与放行数据包的规则都不匹配,则与最后一条禁止访问的规则匹配,被拒绝进入主机。下面列出一些主机防火墙中常用的iptables命令及其解释,这些命令添加的规则都放在filter表的INPUT链中。
示例1:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
功能:允许目的端口为80的TCP数据包通过INPUT链。
说明:这种数据包一般是用来访问主机的Web服务,如果主机以默认的端口提供Web服务,应该用这条规则开放TCP80端口。
示例2:
iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j DROP
功能:从接口eth0进来的、源IP地址的前3字节为192.168.1的数据包予以丢弃。
说明:需要注意这条规则的位置,如果匹配这条规则的数据包同时也匹配前面的规则,而且前面的规则是放行的,则这条规则对匹配的数据包将不起作用。
示例3:
iptables -A INPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT
功能:在INPUT链中允许源端口号为53,目标端口号为1024至65535的UDP数据包通过。
说明:这种特点的数据包是当本机查询DNS时,DNS服务器回复的数据包。
示例4:
iptables -A INPUT -p tcp --tcp-flags SYN,RST,ACK SYN -j ACCEPT
功能:SYN、RST、ACK 3个标志位中SYN位为1,其余两个为0的TCP数据包予以放行。符合这种特征的数据包是发起TCP连接的数据包。
说明:“--tcp-flags”子选项用于指定TCP数据包的标志位,可以有SYN、ACK、FIN、RST、URG和PSH共6种。当这些标志位作为“--tcp-flags”的参数时,用空格分成两部分。前一部分列出有要求的标志位,用“,”分隔;后一部分列出要求值为1的标志位,如果有多个,也用“,”分隔,未在后一部分列出的标志位其值要求为0。
%注意:这条命令因为经常使用,可以用“--syn”代替“--tcp-flags SYN,RST,ACK SYN”。
示例5:
iptables -A INPUT -p tcp -m multiport --dport 20:23,53,80,110 -j ACCEPT
功能:接收目的端口为20至23、53、80和110号的TCP数据包。
说明:“-m multiport”用于指定多个端口,最多可以有15项,用“,”分隔。
示例6:
iptables -A INPUT -p icmp -m limit --limit 6/m --limit-burst 8 -j ACCEPT
功能:限制ICMP数据包的通过率,当一分钟内通过的数据包达到8个时,触发每分钟通过6个数据包的限制条件。
说明:以上命令中,除了m表示分以外,还可以用s(秒)、h(小时)和d(天)。这个规则主要用于防止DoS攻击。
示例7:
iptables -A INPUT -p udp -m mac --mac-source ! 00:0C:6E:AB:AB:CC -j DROP
功能:拒绝源MAC地址不是00:0C:6E:AB:AB:CC的UDP数据包。
说明:该规则不应该放在前面,否则,大部分的UDP数据包都将被拒绝,随后的规则将不会使用。