次のことを確認したいと思います。最初のルールが次のチェーンを作成するとします。
iptables -I INPUT -p tcp -m multiport --dports 25,465 -j name
つまり、パケットがそれらのポートからのものでない限り、チェーン内のさらに指定されたルールはチェックされないということですか?
私は を使用しておりfail2ban
、 を使用してポート 25、465 を指定する禁止ルールを含むフィルターを作成しました-m multiport --dports 25,465
。しかし、このフィルターによって大量のルールが作成され、プロセスksoftirqd
が CPU を大量に使用してネットワークが遅くなることがありました。サーバーの他のポートで大量の I/O が発生したときに、この問題が発生することに気付きました。
各パケットはチェーン内のすべてのルールを確認していたと思います。上記の最初のルールを追加して、ポート 25 と 465 以外のパケットはチェーン内の残りのルールを確認しないようにすることで、これを回避できると期待しています。これが機能しない場合は、他の可能な解決策を教えていただければ幸いです。
答え1
「from」ではなく「to」です。--dports
リスト行き先ポート。あなたが書いたルールは、「パケットがTCPポート25または465でリッスンしているサービスに送信された場合、チェーンで処理するname
」という意味です。どのように処理されるかは、そのチェーンの内容によって異なります。最終行動( ACCEPT
、REJECT
、DROP
) ルールがそのチェーン内にない場合、またはアクションとルールが一致する場合RETURN
、その処理は呼び出しチェーン ( INPUT
) 内でこのルールに続くルールとともに続行されます。
デフォルトでは、fail2ban
チェーンと、特定のポート宛てのパケットに対してのみチェーンを呼び出すルールを作成します (...-allports
アクションを使用している場合は除きます。アクションはデフォルトではありません)。そのチェーンに、禁止された IP ごとに DROP ルールを追加します。したがって、たとえば、Web サーバー パケットは、指定された jail 用に作成されたチェーンに処理のために送信されませんsshd
。したがって、提案された方法で特定のポートを fail2ban 処理から意図的に「除外」することは生産的ではありません。これはすでにこのように機能しています。
fail2banでルールが多すぎるチェーンを作成しないようにするには、調査してくださいipset関連するアクション。チェーンを作成する代わりにf2b-jailname
、IP設定一致する単一のルールは ipset を参照します。禁止された各 IP は、チェーン内に個別のルールを作成するのではなく、ipset に追加されます。ipset は O(1) の複雑さの特性を持ちます。つまり、処理速度は ipset 内のアイテム数に依存せず、最大 65536 個のアイテムを含めることができます。
これを使用するには、簡単に言うと、banaction = iptables
jailbanaction = iptables-ipset
のデフォルトを上書きする必要があります。ディストリビューション提供の設定ファイルを変更しないでください。代わりに、/etc/fail2ban/jail.local
上書きを追加するファイルを作成してください。
[postfix]
bantime = 1h
enabled = true
banaction = iptables-ipset
(これにより、提供されたメール フィルターが使用されpostfix
、すべてのsmtpd
タイプのサービスに反応します。別のメール サーバーを使用する場合は、それに応じて調整してください。)
ファイアウォールの効率を向上させる他の方法は、nftables
フレームワークの代わりにiptables
。IPセットの機能を備えています統合された、fail2ban では を使用できますbanaction = nftables
。大規模なセットでも効率性の向上はほぼ同じになります。