有没有办法通过分析某个 IP 在某个端口上建立了多少连接而不限制整体流量来防范 DoS?
例如,假设我不希望某个 IP 每 10 秒发出超过 10 个 http 请求,我该怎么做?如果 10 秒内有 100 个请求,并且每个请求都有不同的 IP,则不会被禁止(仅针对 DOS 而不是 DDOS 进行保护)。
答案1
查看https://www.fail2ban.org/wiki/index.php/Main_Page. 这是一个使用 IP 表的软件速率限制器
答案2
您可以使用它来做到这一点。
iptables -A INPUT -p tcp -m state --state NEW --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 10/second --limit-burst 12 -j ACCEPT
无论如何也要启用 syncookies。将此行添加到 /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
然后运行 sysctl -p 或重新启动以应用。