我有一个安装了 Debian 10 的 VPS,主要用于网站托管。当我从远程计算机向服务器发出 ping 时,我能够使用-s 65507
标志接收最大约 64Kb 的数据包大小的响应。使用sudo
还使我能够使用该标志将默认 ping 最大频率从每秒 5 次增加-i
。正如man ping
页面所述,这是合理的行为。
我想知道的是,在服务器上,我怎样才能将 ping 响应限制为每秒最大 x 个响应和最大 y Kb 数据包大小?这样以下命令就不可能实现:
sudo ping example.com -s 65507 -i 0.001
即“每秒向 example.com 发送 1000 个 64Kb ping”。
这将使服务器充斥着 64Mb/s 的 ping,所有这些 ping 都会得到响应(尽管有积压)并报告给发出 ping 的远程机器。我再说一遍,出于显而易见的原因,我不希望这种情况发生。尽管有一个基本的防火墙和 fail2ban,但我很惊讶这种情况竟然会发生,而且在默认配置设置下是允许的。
我谷歌搜索无果——几乎所有结果都是关于发出 ping 本身,没有关于如何限制目标服务器响应的信息。我也尝试过将其更改/proc/sys/net/ipv4/icmp_ratelimit
为低于1000
每秒 ICMP 数据包数的值,但这似乎没有效果,即使在 中进行了防重启设置/etc/sysctl.conf
。
理想情况下,我希望设置最大间隔为 0.5 秒,最大数据包大小为 32 字节,我觉得这对于 ping 的目的(即检查连接性和延迟)来说是完全足够和合理的。通过这样做,它可以防止 ping 泛洪,这是一个大问题,因为就目前情况而言,服务器很容易通过此 ICMP 向量遭受 DoS 攻击。
我是否需要其他工具或软件,或者我缺少了什么?
提前谢谢了
答案1
存在通过防火墙限制 ICMP 速率的示例。nftables wiki,速率限制匹配. 服务器故障,使用 nftables 限制 ICMP 洪水攻击速率
但是,如果带宽已饱和,主机防火墙就不是完整的解决方案。内核需要先获取数据包,然后才能将其丢弃。更完整的拒绝服务保护需要更早地通过比攻击者拥有更多带宽的服务来实现。
答案2
您可能也需要更改/proc/sys/net/ipv4/icmp_ratemask
。默认情况下,限制不适用于回应回复。请参阅http://man7.org/linux/man-pages/man7/icmp.7.html