我们的 iptables 配置文件 /etc/sysconfig/iptables 中有以下规则
-A INPUT -s 84.23.99.97 -j DROP
当我执行 iptables --list 时,我得到以下内容
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 84.23.99.97 anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
但是,如果我执行 tcpdump,我仍然可以看到来自该 ip 的所有这些流量,为什么?
tcpdump -ttttn tcp port 1234 | grep 84.23.99.97
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
2010-10-21 23:49:33.828011 IP 84.23.99.97.9061 > myip: Flags [S], seq 3522466008, win 65535, options [mss 1460,sackOK,eol], length 0
2010-10-21 23:49:33.832182 IP 84.23.99.97.64804 > myip: Flags [S], seq 1088176500, win 65535, options [mss 1460,sackOK,eol], length 0
....
答案1
tcpdump在进入 iptables 之前查看入站流量. 在上述示例中,这解释了为什么您能看到入站 SYN,但看不到来自您机器的 SYN/ACK。
答案2
您需要保存规则。也许您保存了,但没有提到?如果没有,请尝试以下操作:% sudo /sbin/service iptables save
这将导出当前使用的规则并启动防火墙。无论 /etc/sysconfig/iptables 中的内容是什么,它都会告诉您防火墙实际正在使用什么。