我正在考虑将下面的规则添加到我的IP表中:
-A INPUT -p tcp -m state --state NEW -m recent --update --dport 80 --seconds 5 --hitcount 10 -j DROP -A INPUT -p tcp -m state --state NEW -m recent --set --dport 80 -j ACCEPT
以避免意外的基于Ajax的滥用(太多请求)我的Web API。
这种有状态的过滤是否被认为是资源密集型的,或者由于端口80请求的共同性而造成浪费?(比如速率限制端口22会导致更less的状态)? 我意识到在专用的防火墙中这样做是理想的,但我试图看看我可以在我的服务器上完成什么。
我不知道在SYN数据包上使用状态模块和过滤的性能(这将有效地执行相同的技巧)。
也许你可以testing这个…尝试添加你的规则 – 然后使用Apache Bench或者类似的方法,在监视你的服务器的CPU和内存使用情况时,尽可能多地生成请求。 然后尝试添加以下规则:
-N tcpsyn -A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j tcpsyn -A tcpsyn -p tcp --dport 80 -m limit --limit 5/second --limit-burst 20 -j RETURN -A tcpsyn -p tcp --dport 80 -j DROP
并以此为基准。