私はRaspberry Piで950MHzでfail2banを実行していますが、それ以上オーバークロックすることはできません。
Piは時々特定のポートでSYNフラッドを経験します。関心ポートのSYN速度を制限するためにiptablesを設定しました。制限を超えると、SYNを送信するホストがREJECTチェーンに入り、制限を超えた特定のSYNパケットが記録されます。
その後、fall2banは記録されたSYNを監視し、いくつかのSYNを確認してから一定期間ホストを一時的に禁止します(これは私が使用していたアプリケーションの一時的な問題でした)。
問題は、SYNフラッドが時々速すぎる速度に達し、Fail2banが追いつかないことです。毎秒20〜40のログメッセージが表示され、最終的にはSYNフラッドが遅れて効果がなくなります。悪いことに、追いつこうとしている間、多くのCPUを消費し続けます。
Fail2banによって禁止されているホストのDROPリンクパケットが次のようになっていることを確認しました。いいえ負荷が増加しないように記録されます。
ここで私のオプションは何ですか?いくつかのアイデアがありますが、進む明確なパスはありません。
ログの解析正規表現を「より簡単に」作成するのを減らすことはできますか? iptables --log-prefixを使用してログメッセージの先頭にトークンを配置するか、それ以外の場合は失敗の2つの正規表現を単純化/変更するのに役立ちますか?以下は、現在の正規表現を含む failure2ban 構成行です。
failregex = kernel:.*?SRC=(?:::f{4,6}:)?(?P<host>[\w\-.^_]+) DST.*?SYN
制限を超えるFail2ban監視パケットを取得するためにkern.logを解析するよりも高速な方法はありますか?
最小限の非標準魔法を使用してCPythonの代わりにPyPyでFail2banを実行できますか(OSはRaspbian 7なので、ほとんどDebian 7です)。
SYN制限を超えるパケットを監視し、X秒以内にN個以上のパケットが発生した後に問題のあるIPを一時的にiptables DROPバケットに入れ、タイマーが期限切れになったときに削除を無効にするために使用できるFAIL2BANより優れていますか?繰り返しますが、私は Debian パッケージを緊急に構築することができますが、できるだけ Debian で使用できるソフトウェアを多用するソリューションを好みます。
ベストアンサー1
あなたの質問に関するトピックとは少し異なりますが、通常のレベルのSYNフラッドが発生した場合は、SYN Cookieが適切で簡単な軽減になる可能性があります。
# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
Googleでこれがなぜ良いアイデアなのか悪いアイデアなのかを調べてください。
あるいは、すでにカーネルファイアウォールが構成されているので、「最も近い」iptablesモジュールをリミッターとして使用してfall2banを完全にバイパスすることもできます。
# iptables -A INPUT -p tcp -m state --state NEW -m recent --name ftp_limit --update --seconds 60 --hitcount 20 -j DROP
# iptables -A INPUT -p tcp -m state --state NEW -m recent --set --name ftp_limit -m tcp --dport 21 -j ACCEPT
これらのルールは、ftp_limitというリストのIPアドレスのSYN要求(新しい接続)速度を1 IPから1分あたり20(ライン1)に制限し、他のすべての要求を削除します。ポート21(ftp)に新しい接続が確立されるたびに、ライン2は送信元IPアドレスをftp_limitリストに追加します。
トラフィックが単一のIPアドレスで発生するように見えるため、NATの背後にあるネットワークで発生する正当なトラフィックをブロックする危険性があります。信頼できる一部のネットワークをホワイトリストに追加することもできます。