iptables を使用してポート 80 のレート制限を行うのは無駄だと思われますか?

iptables を使用してポート 80 のレート制限を行うのは無駄だと思われますか?

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

...そしてそれをベンチマークします。

関連情報