過去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 604800
1週間だけブロックするオプションを追加するだけです。同じオプションをに渡すことで、このデフォルトのタイムアウトを上書きできますipset add
。 iptables ルールを保存するのと同じように、初期化スクリプトに設定を保存することもできます。 iptablesルールの以前の設定を復元する必要があります。
ipset save > /var/lib/firewall/ipset
ipset restore < /var/lib/firewall/ipset
答え2
正しく指摘したように、大きなipset
リストに適しています。すべての刑務所のデフォルト動作を指定する
ように設定することができます(fail2ban> = v.0.10)。jail.local
[DEFAULT]
banaction = iptables-ipset-proto6
banaction_allports = iptables-ipset-proto6-allports
2678400(31日?!)の場合、bantime
たった3回の失敗後に長い間禁止することはあまりにも負担になるので、少なくともお勧めできません。
Fail2ban v.0.11がある場合は、増分禁止機能を使用できます。 - 参照https://stackoverflow.com/a/66443690/7161854例えば。