tcpdump 是否绕过 iptables?

Pet*_*etr 65 networking iptables tcpdump

我错误地设置了开放式解析器 DNS 服务器,该服务器很快被用于从/到俄罗斯某处发起的一系列 DDoS 攻击。出于这个原因,除了受信任的 IP 之外,我完全阻止了每个人在两个 DNS 服务器上的端口 53。它确实有效,因为我无法再连接到它们,但对我来说似乎很奇怪的是,当我在eth1(这是服务器与公共 Internet 的接口)上运行 tcpdump 时,我看到很多来自攻击者到端口 53 的传入数据包.

即使 iptables 丢弃这些数据包,tcpdump 也会显示这些数据包是否正常?或者我是否错误地配置了 iptables?

另一方面,我没有看到来自我的服务器的任何传出数据包,这是我以前做过的,所以我认为防火墙有点工作。内核没有完全丢弃数据包让我感到惊讶?或者tcpdump以一种甚至在数据包到达 iptables 之前就可以看到数据包的方式连接到内核?

Mar*_*iae 90

这是一个很好的问题。

事实上,tcpdump是在IN的路上找到的第一个软件(和 NIC,如果你愿意的话),也是最后一个在OUT的路上找到的软件。

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

iptables -> tcpdump -> NIC -> Wire
Run Code Online (Sandbox Code Playgroud)

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

编辑

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

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

这容易被黑客入侵吗?但是当然。肯定有概念验证 rootkit 使用libpcap拦截发往 rootkit 的通信,然后防火墙才能对它们进行干预。但与这样一个事实相比,即使是这样,一个简单的谷歌查询也能发现隐藏流量的工作代码,即使是从libpcap也相形见绌。尽管如此,大多数专业人士认为,在调试网络数据包过滤器时,优势远远大于劣势。

  • @Petr 您可以记录 iptables 丢弃的数据包,http://www.thegeekstuff.com/2012/08/iptables-log-packets/ (2认同)