tcpdump是否绕过iptables?


48

我错误地设置了开放解析器DNS服务器,该服务器很快被用于从/到俄罗斯某地的一堆DDoS攻击。因此,除了受信任的IP之外,我完全阻止了所有DNS服务器上的端口53。它确实可以工作,但我无法再与它们连接,但是对我来说似乎很奇怪的是,当我在eth1上运行tcpdump(这是服务器与公共Internet的接口)时,我看到了许多从攻击者到端口53的传入数据包。

即使iptables丢弃它们,tcpdump显示这些数据包是否正常?还是我将iptables配置错误?

另一方面,我没有看到服务器发出的任何传出数据包,就像以前一样,因此我认为防火墙可以正常工作。内核没有完全丢弃数据包让我感到惊讶吗?还是tcpdump以一种甚至在数据包到达iptables之前就可以看到数据包的方式挂接到内核?

Answers:


61

这是一个很好的问题。

实际上,tcpdump是在IN线路(如果需要的话,还有网卡)之后找到的第一个软件,在OUT路上找到的最后一个软件。

Wire -> NIC -> tcpdump -> netfilter/iptables

iptables -> tcpdump -> NIC -> Wire

因此,它会看到所有到达您接口的数据包,以及所有离开您接口的数据包。如tcpdump所示,由于到端口53的数据包未得到答复,因此您已成功验证iptables规则已正确配置。

编辑

也许我应该添加一些细节。tcpdump基于libpcap(一个创建数据包套接字的库)。当在网络堆栈中接收到常规数据包时,内核首先检查是否有对新到达的数据包感兴趣的数据包套接字,如果有,则将数据包转发到该数据包套接字。如果选择选项ETH_P_ALL,则所有协议都通过数据包套接字。

libpcap在激活选项的情况实现了一个这样的数据包套接字,保留了一个副本供自己使用,然后将数据包复制回网络堆栈,由内核以通常的方式对其进行处理,包括先将其传递给内核netfilteriptables的空格对应项。同样的事情,以相反的顺序(,首先是netfilter,然后最后是通过数据包套接字的通道)在出路。

这容易被黑客入侵吗?但是当然。在防火墙可以放手之前,肯定有概念验证的rootkit使用libpcap拦截发往rootkit的通信。但是与一个简单的Google查询挖掘出可以隐藏甚至来自libpcap的流量的工作代码相比,这甚至显得苍白无力。但是,大多数专业人员认为,在调试网络数据包筛选器时,其优点远大于缺点。


有没有一种显示方式,以便我可以查看允许哪些数据包和哪些数据包被丢弃?
Petr 2015年

2
@Petr,您可以记录iptables丢弃的数据包,thegeekstuff.com
2012/08 /
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.