我想删除每个 IP 上超过 200 个请求以防止 DDoS 攻击。这是我用来检测每个 IP 的请求数的命令:
netstat -alpn | grep :80 | awk '{print $5}' |awk -F: '{print $(NF-1)}' |sort | uniq -c | sort -nr
现在我想将所有发出超过 200 个请求的 IP 地址添加到 IPtables 中以删除输入和输出。
答案1
您还可以使用 iptables 来限制传入连接的速率。例如,如果您不希望某个源每分钟的连接数超过 200 个:
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 200 -j DROP
答案2
您可以创建一个ipset
。这样,您就可以根据需要向集合中添加任意数量的 IP,而无需修改iptables
规则集。
ipset -N myset iphash
ipset -A myset 1.1.1.1
ipset -A myset 2.2.2.2
或者,根据您的情况,使用脚本的输出,并使用类似以下内容读取它:
while read a; do ipset -A myset "$a"; done < <(your script here)
iptables
并在您的规则中引用它:
iptables -A INPUT -m set --set myset src -j DROP
阅读手册页了解更多详细信息和选项。
还有其他方法缓解直接使用 DDOS 攻击iptables
。阅读iptables
有关connlimit
和recent
模块的手册页部分。