这个问题是关于 iptables 的,我想知道如何才能阻止这些 ip 1 小时而不是只阻止很短的时间.. 因为它们发出了太多的 sql 请求,我用它来阻止但它是不够的,因为无论如何都有 100k 个 ip 攻击,然后对 sql 服务器的请求太多了。
iptables -N SYN-LIMIT
iptables -A SYN-LIMIT -m hashlimit --hashlimit 8/second --hashlimit-mode srcip --hashlimit-name SYN-LIMIT -j RETURN
iptables -A SYN-LIMIT -j DROP
iptables -I INPUT -p tcp --dport 80 --syn -j SYN-LIMIT
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 6 -j REJECT --reject-with tcp-reset
我怎样才能做同样的事情但长时间阻止 IP?(不是手动的!)
答案1
如果您的内核支持(2.6+),您可以使用 SET 来存储长期禁止的 IP。
您需要在服务器上安装 ipset,并通过发出以下命令创建一个集合
ipset create http_abuse hash:ip timeout $TIMEOUT
其中 $TIMEOUT 是 IP 应保持禁止状态的秒数。
然后,用下面的方法替换你的 iptables 规则就可以了
iptables -N SYN-LIMIT
iptables -A SYN-LIMIT -m set --match-set http_abuse src -j DROP
iptables -A SYN-LIMIT -m hashlimit --hashlimit 8/second --hashlimit-mode srcip --hashlimit-name SYN-LIMIT -j RETURN
iptables -A SYN-LIMIT -j SET --add-set http_abuse src
iptables -A SYN-LIMIT -j DROP
iptables -I INPUT -p tcp --dport 80 --syn -j SYN-LIMIT
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 6 -j REJECT --reject-with tcp-reset
您可以在以下位置找到有关 IPset 的更多详细信息IPSet 网站。