Archwiki 上有一篇文章,其中提出了一些建议有状态的 iptables 防火墙。他们推荐一些欺骗端口扫描器的规则,但建议它们为 DoS 攻击打开漏洞。具体来说,通过拒绝不断尝试访问已关闭端口的 IP 的访问,潜在攻击者可以使用伪造的 IP 发送这些数据包,这样我的防火墙就会将合法用户拒之门外。
建议的 TCP 规则如下:
# iptables -I TCP -p tcp -m recent --update --rsource --seconds 60 --name TCP-PORTSCAN -j REJECT --reject-with tcp-reset
# iptables -A INPUT -p tcp -m recent --set --rsource --name TCP-PORTSCAN -j REJECT --reject-with tcp-reset
我的问题是,如果我将数据包的 TTL 添加到规则中,是否可以限制所述 DoS 攻击的有效性?根据iptables 的手册页:
--rttl:[···] 这会将匹配范围缩小到仅当地址在列表中并且当前数据包的 TTL 与命中 --set 规则的数据包的 TTL 匹配时才会发生。如果您遇到有人伪造其源地址以便通过此模块对您进行 DoS 攻击的问题,通过向您发送虚假数据包来禁止其他人访问您的站点,这可能会很有用。
它会起作用吗或者我遗漏了什么?
答案1
为此目的使用 TTL 选项存在一些问题。您本质上是在建议在识别地址时使用 TTL 作为识别的附加组件。
然而,就像攻击者可以伪造 IP 来锁定合法客户端一样,他们也可以伪造数据包的 TTL 值;任何人都可以生成具有任意 TTL 值的数据包,而不仅限于从假定的初始值开始。
此外,随着网络基础设施的变化,您和攻击者之间的跳数也会随着时间而变化,从而限制了 TTL 作为唯一标识符的实际用途。
这种技术的最后一个问题是,攻击者与您之间的跳数完全有可能与许多合法主机与您之间的跳数相同。因此,即使没有任何 TTL 欺骗,他们也可能实现某种程度的 DoS 攻击。
答案2
这实际上并没有回答您的问题,因为它是 iptables 之外的东西,但如果您想防止端口扫描,PSAD 是一个更好的选择。您可以将其配置为阻止任何对您的系统进行端口扫描的 IP。 http://cipherdyne.org/psad/
这使用了 iptables,但它不一定只是一个 iptables 规则