这是一个很好的问题。
实际上,tcpdump是在IN线路(如果需要的话,还有网卡)之后找到的第一个软件,在OUT路上找到的最后一个软件。
Wire -> NIC -> tcpdump -> netfilter/iptables
iptables -> tcpdump -> NIC -> Wire
因此,它会看到所有到达您接口的数据包,以及所有离开您接口的数据包。如tcpdump所示,由于到端口53的数据包未得到答复,因此您已成功验证iptables规则已正确配置。
编辑
也许我应该添加一些细节。tcpdump基于libpcap(一个创建数据包套接字的库)。当在网络堆栈中接收到常规数据包时,内核首先检查是否有对新到达的数据包感兴趣的数据包套接字,如果有,则将数据包转发到该数据包套接字。如果选择选项ETH_P_ALL,则所有协议都通过数据包套接字。
libpcap在激活选项的情况下实现了一个这样的数据包套接字,保留了一个副本供自己使用,然后将数据包复制回网络堆栈,由内核以通常的方式对其进行处理,包括先将其传递给内核netfilter。iptables的空格对应项。同样的事情,以相反的顺序(即,首先是netfilter,然后最后是通过数据包套接字的通道)在出路。
这容易被黑客入侵吗?但是当然。在防火墙可以放手之前,肯定有概念验证的rootkit使用libpcap拦截发往rootkit的通信。但是与一个简单的Google查询挖掘出可以隐藏甚至来自libpcap的流量的工作代码相比,这甚至显得苍白无力。但是,大多数专业人员认为,在调试网络数据包筛选器时,其优点远大于缺点。