我正在考慮將以下規則新增到我的 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
以避免對我的 Web API 進行基於 Ajax 的意外濫用(過多請求)。
由於連接埠 80 請求的常見性,這種狀態過濾是否被認為是資源密集的或浪費的(與速率限制連接埠 22 之類的東西相比,這會導致狀態少得多)?我意識到在專用防火牆中執行此操作是理想的,但我正在嘗試查看我可以在我的伺服器中完成什麼。
答案1
我不知道使用狀態模組與過濾 SYN 資料包的性能(這將有效地實現相同的技巧)。
也許您可以測試一下...嘗試添加您的規則 - 然後使用 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
...並對其進行基準測試。