Fail2banおよびiptablesルールの氾濫(帯域幅不足の発生)

Fail2banおよびiptablesルールの氾濫(帯域幅不足の発生)

過去6か月間、私のサーバーでこのパターンが何度も発生することを確認しました。

  • まず、fail2banボットの多くのSSH試みが検出され、正常にブロックされました。実際、/etc/fail2ban/jail.conf私は以下を持っています:

    [ssh]
    enabled  = true
    port     = ssh
    filter   = sshd
    logpath  = /var/log/auth.log
    maxretry = 3
    findtime = 86400
    bantime = 2678400
    
  • それから結果iptablesとしてとてもたくさんルールは私の知る限り、~ 4000 ルールこのように:

    -D fail2ban-ssh -s 1.2.3.4/32 -j DROP
    -D fail2ban-ssh -s 5.6.7.8/32 -j DROP
    ...
    
  • 最後に、サーバーの完全なインターネット接続は次のとおりです。非常に遅い(SFTPを使用してローカルコンピュータにファイルをダウンロードしている間、帯域幅は最大160 KB /秒にすぎないことがわかりました。)おそらく、これらの規則はすべてそうです。

一時的に解決しました。

iptables -S |grep DROP| sed 's/-A/-D/' >rules
cat rules | while read line; do iptables $line; done
iptables -S |wc -l     # ~100 rules (instead of ~4000), good, back to normal!

これを実行してから数秒後、ローカルコンピュータの帯域幅が再び正常に戻ります。つまり、5MB/秒以上なら大丈夫です。

しかし、そのようなことが何度も起こったので、数週間後に再び起こります。

この長期的な問題を避ける方法は?

ベストアンサー1

ipsetこの問題を解決することを目指しています。 IPまたはサブネットセットを作成できます。

ipset create bannedv4 hash:net family ipv4 comment
ipset create bannedv6 hash:net family ipv6 comment

次のようにiptablesルールを追加します。

iptables -A INPUT -m set --match-set bannedv4 src -j DROP
ip6tables -A INPUT -m set --match-set bannedv6 src -j DROP

その後、禁止セットに多くの項目を追加できます。それを使用するためにFail2banを設定する方法がわかりません。私にとっては、ipset操作はすでに定義されていますが、/etc/fail2ban/action.dディストリビューションによって異なる場合があります。

ipset add bannedv4 1.2.3.4/16 comment "SSH bot"
ipset add bannedv6 64:ff9b::1.2.3.4/112 comment "SSH bot"

期限切れのアイテムがある可能性があります。グループを作成するときにtimeout 6048001週間だけブロックするオプションを追加するだけです。同じオプションをに渡すことで、このデフォルトのタイムアウトを上書きできますipset add。 iptables ルールを保存するのと同じように、初期化スクリプトに設定を保存することもできます。 iptablesルールの以前の設定を復元する必要があります。

ipset save > /var/lib/firewall/ipset
ipset restore < /var/lib/firewall/ipset

おすすめ記事