Ubuntu 22.04 fail2ban で ssh への攻撃対策 備忘録

ail2ban で ssh への攻撃対策 PC・サーバー

ssh への総当り (Brute Force Attack) のためログファイル (/var/log/auth.log) が埋め尽くされていますよね。fail2ban を導入する流れを備忘録として書き留めることに。
fail2Ban は、ログファイル (/var/log/auth.log) をスキャンし、ログインの失敗が多い IP アドレスを自動でブロック (Ban) してくれる機能があります。

まずは fail2ban のインストールから ...

サービスの開始および自動起動の有効化コマンドは以下の通り。これだけで ssh に対して fail2ban が有効になります。

ステータスの確認コマンドは以下の通り。

なお、再起動コマンドは以下の通り。設定の変更時には反映するように忘れずに!

/etc/fail2ban/jail.d/defaults-debian.conf に以下の内容が書いてあるので start コマンドのみで有効になるようです。

[sshd]
enabled = true

デフォルト設定されている /var/log/fail2ban.log で状況が確認できますが、一部の IP の [Found] ... [Ban]、10分後の [Unban] の繰り返しがあまりにも多いことに気付くはずでしょう。いろいろと設定を変えて観察してみても効果は期待できませんね。たぶん多くの同胞諸君は、無期懲役の刑にしたくなりますよ。 55555 ...

さて、基本的な設定値は /etc/fail2ban/fail2banjail.conf に記述されています。今回、注目する値は以下の3つです。デフォルトでは「10分内で5回失敗すると 10分間 Ban」の設定です。

bantime = 10m(Banされる時間)
findtime = 10m(指定時間内に maxretry 回でBan)
maxretry = 5(Banするまでの失敗回数)

この設定を変更して永久 Ban にするのですが、当該 conf ファイルの冒頭に「ここは変更するな。jail.local または、jail.d/ ディレクトリーの下に別の .conf ファイルを用意しろ。」の旨が書いてありますね。どうも fail2ban 自身のデフォルト値に使うようで、アップデートで内容に変更が入る可能性があるようなのです。今回は、同じ階層に jail.local ファイルを用意します。
これを以下のように jail.local に記述し、fail2ban の再起動。
60分内で3回失敗すると永久 Ban する設定です。bantime = にマイナス値を設定すると永久 Ban とのこと。

[DEFAULT]
bantime = -1
findtime = 60m
maxretry = 3

/var/log/fail2ban.log から [Unban] がなくなっていることが確認できると思います。なお、設定値は各自の運用を考慮の上、自己責任でお願いします。まずは、様子を見て不都合があれば設定値を変更してください。なお、不測の事態が生じた場合には、Webmin や cPanel などのコントロールパネルがあれば対応は可能でしょう。

こぼれ話
あまりにも酷い場合には ssh port 番号を変更する手があります。port 番号の変更に自信のない方は、閉じてみるのも面白いかも? 契約サーバー情報の管理画面からファイアウォールの変更が可能なら ssh port を無効化(閉じる)して、必要な時のみ ssh port を有効化する運用を試してみてはどうでしょう。諦めてくれるアタッカーがいるかも ...

ところで、以下のコマンドを実行すると ...

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N f2b-sshd
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A f2b-sshd -s 114.107.226.xxx/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 124.222.42.xx/32 -j REJECT --reject-with icmp-port-unreachable
-A f2b-sshd -s 110.182.85.xxx/32 -j REJECT --reject-with icmp-port-unreachable
 ︙

fail2ban の blocktype のデフォルトは「REJECT」ですね。もし「DROP」にしたいなら、/etc/fail2ban/action.d/iptables-common.local ファイルを用意して、以下の内容を記入後、fail2ban の再起動。

[Init]
blocktype = DROP
[Init?family=inet6]
blocktype = DROP

再起動後の iptables -S の表示は以下の通り。なお、必要性は自己判断で ...

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N f2b-sshd
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A f2b-sshd -s 150.95.25.xxx/32 -j DROP
-A f2b-sshd -s 43.153.14.xx/32 -j DROP
-A f2b-sshd -s 95.90.12.xxx/32 -j DROP
 ︙