原始套接字、iptables 以及

原始套接字、iptables 以及
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

所以,我只是发现当涉及原始套接字时,这些可爱的规则就不起作用了。

我知道抓取原始套接字需要 root 权限,所以我不关心 OUTPUT 链是否没有被过滤(我确定我没有任何以 SU 身份运行的后门软件)。

但是 INPUT 链呢?不能控制传入的数据包不是很危险吗?如果不是,那么为什么每个人都费心将默认策略设置为丢弃?

答案1

原始套接字不会发起某种特定类型的“原始”流量,不同于 TCP 或 UDP 或其他流量。原始套接字接收整个 L2 = 以太网帧,由应用程序处理上层。例如,ISC DHCP 守护进程使用原始套接字 - 因此,它不受同一主机上的本地 iptables 的约束,但 ISC dhcpd 必须了解 IP 和 UDP 并自行处理它们。

如果您有一台可疑的邻居机器(或虚拟机),其中某些软件已知会打开原始套接字,则您无需“过滤原始流量” - 您只需应用“最小权限”= 允许选择几个 TCP/UDP 端口(可能还有一些必要的 ICMP)并丢弃所有其余端口。可疑主机是通过原始套接字还是正确的 TCP/UDP 套接字(使用其各自的操作系统的 L3/4/5 堆栈)发起流量无关紧要。或者,如果您希望确保主机上的某些软件使用原始套接字的安全,则该软件必须清除它感兴趣的流量,并忽略其余流量。这样,原始套接字就不是主要的入站安全漏洞。

DHCP 守护进程就是一个很好的例子。它确实在原始套接字上进行监听,但原则上它只检查发往众所周知的端口 67 的 UDP。它只愿意响应符合这些标准的数据包。它不会响应发往某个随机端口的 TCP SYN 数据包,也不会受到这些连接尝试的影响,无论是合法的还是恶意的。因此,如果您只想将 dhcpd 的 UDP 端口 67 暴露给可疑网络,您几乎可以应用iptables -A INPUT -i eth123 -j DROP,您甚至不需要有选择地允许 UDP 端口 67 入站,因为 dhcpd 的原始套接字无论如何都会绕过 iptables - 仅适用于其自己的流量。

此外,使用原始套接字来使用 TCP 是一个非常愚蠢的想法。您可能必须在应用程序中实现整个 TCP 堆栈 = 真是浪费精力。除非您只想发起一些类似“new not syn”等的攻击,而您只需要知道要攻击的数据包的正确格式,例如,特定 TCP 堆栈实现(您试图攻击的那个)中的溢出漏洞。

相关内容