![tcpdump 会绕过 iptables 吗?](https://linux22.com/image/1453352/tcpdump%20%E4%BC%9A%E7%BB%95%E8%BF%87%20iptables%20%E5%90%97%EF%BC%9F.png)
我错误地设置了开放解析器 DNS 服务器,该服务器很快就被用于一系列来自俄罗斯的 DDoS 攻击。出于这个原因,我完全阻止了两个 DNS 服务器上除受信任 IP 之外的所有人使用端口 53。它确实有效,因为我无法再连接到它们,但我觉得奇怪的是,当我运行 tcpdump eth1
(这是服务器上与公共互联网的接口)时,我看到大量来自攻击者到端口 53 的传入数据包。
即使 iptables 丢弃了这些数据包,tcpdump 仍会显示这些数据包,这是正常的吗?还是我错误地配置了 iptables?
另一方面,我没有看到任何从我的服务器传出的数据包,而之前我看到过,所以我猜想防火墙在工作。令我惊讶的是内核并没有完全丢弃数据包?还是内核tcpdump
以某种方式挂接到内核,以至于在数据包到达 iptables 之前它就能看到它们?
答案1
这是一个好问题。
事实上,tcpdump是经过网络(和 NIC,如果你愿意的话)后发现的第一个软件在,也是路上的最后一辆出去。
Wire -> NIC -> tcpdump -> netfilter/iptables
iptables -> tcpdump -> NIC -> Wire
因此,它可以看到所有到达您接口的数据包,以及所有离开您接口的数据包。由于发往端口 53 的数据包没有收到回复(如 tcpdump 所见),因此您已成功验证您的 iptables 规则已正确配置。
编辑
也许我应该补充一些细节。tcpdump是基于libpcap,创建一个库数据包套接字当网络堆栈接收到常规数据包时,内核第一的检查是否有数据包套接字对新到达的数据包感兴趣,如果有,则将数据包转发到该数据包套接字。如果选项ETH_P_全部被选中,那么全部协议通过数据包套接字。
libpcap实现一个这样的数据包套接字,并激活该选项,保留一份副本供自己使用,并将数据包复制回网络堆栈,内核以通常的方式处理该数据包,包括首先将其传递给网络过滤器,内核空间对应部分iptables. 以相反的顺序做同样的事情(IE,首先是 netfilter,然后最后通过数据包套接字),在出去的路上。
这是否容易受到黑客攻击?当然。肯定有使用概念验证的 rootkitlibpcap拦截发往 rootkit 的通信前防火墙可以控制它们。但与一个简单的 Google 查询就能发现的事实相比,这就算不上什么了在职的代码隐藏流量甚至libpcap。但是,大多数专业人士认为,在调试网络数据包过滤器时,其优点远远大于缺点。