网络故障排查中,经常要抓包,windows有wireshark,linux最常用的是tcpdump,其中被问得最多的一个问题:"iptables限制后,tcpdump还能抓到包吗?",首先看下数据包进入OS及出去的顺序:
网卡nic
-> tcpdump
-> iptables(netfilter)
-> app
-> iptables(netfilter)
-> tcpdump
-> 网卡nic
显而易见,数据包到达网卡后,tcpdump有能力直接捕获到,不受iptables的影响,此时数据包还没有到达iptables的PREROUTING
链,到达APP后,处理完报文从iptables出去,出去最终要走到POSTROUTING
链再到tcpdump,所以此时受到iptables的OUTPUT
和POSTROUTING
链影响,这两条链的规则决定tcpdump能不能抓到出去的包,iptables各个链工作顺序如下(图片来源于网络):