需要解释一下 iptables 规则

需要解释一下 iptables 规则

有人能帮助我理解下面的 iptables 规则吗?

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

答案1

Radhil 删除了他的回复,显得太过谨慎,虽然他的回复需要整合,但是正确的。

首先,规则的字面意思:它丢弃(-j DROP)所有开始新连接(-m state --state NEW)的数据包,这些数据包不是TCP 协议 (-p tcp) 的 SYN 类型 (!--syn)。

然后是一些评论。在 TCP 协议中,连接由三个数据包的例行交换发起,SYN(客户端到服务器)-> SYN/ACK(服务器到客户端)-> ACK(客户端到服务器)。连接不是由 SYN 数据包发起的攻击,就像上面的 iptables 规则丢弃的攻击一样,是一种建立追求不同目的的连接的不正确方式,正如 radhil 正确指出的那样。

这条规则经常被错误地认为是抑制网络上的 syn-flood 攻击所必需的:例如此网页,其中明确指出:

下一个要拒绝的模式是 syn-flood 攻击。

iptables -A 输入 -p tcp !--syn -m 状态--状态 NEW -j DROP

SYN-Flood-Attacks 是指攻击者打开新的连接,但并未说明他们想要什么(即 SYN、ACK 等)。他们只是想占用我们服务器的资源。我们不会接受此类包。

当然,试图通过以下方式化解 syn-flood 攻击是没有意义的接受(!!!!) 用于新连接的 SYN 数据包。它应该是数据包,而不是包。

Syn-flood 攻击确实带来了一些尚未完全解决的问题。这导致了一个名为 SYNPROXY 的新 iptables 模块的开发,您可能会在其中找到讨论这里. 经常使用速率限制,例如这里但这确实引发了前面提到的问题,IEconntrack 模块是跟踪哪些连接是新的、哪些是旧的以及处于哪种状态所必需的,它在连接数量有限的情况下工作正常,但当连接数量增加时(例如,由于 SYN 洪水攻击),它会消耗不成比例的时间。这就是所谓的可扩展性问题。

总而言之,我不完全清楚上述 iptables 规则是否有任何有意义的用途。

答案2

-A INPUT– 附加到“INPUT”链的末尾

-p tcp– 匹配TCP协议

! --syn– 匹配没有 TCP SYN 标志的数据包

-m state– 使用“state”模块(已弃用;新规则集应改用“conntrack”)

--state NEW– 匹配具有“新”状态的数据包(即不属于任何已建立的连接)

-j DROP– 跳转到“DROP”目标(丢弃数据包的最终目标)

基本上,TCP 数据包要么打开新连接(并且始终带有 SYN 标志),要么属于现有连接,要么尝试关闭已中止的连接(带有 RST 标志),要么就是垃圾。因此,此规则会尝试丢弃最后一个类别中的数据包,这些数据包既不会尝试打开新连接,也不属于现有连接。

在我看来,这有点多余……也许它应该用来防御各种奇怪的端口扫描类型(如 nmap 中所示)。也可能只是一种偏执。

相关内容