ssh への総当り (Brute Force Attack) のためログファイル (/var/log/auth.log) が埋め尽くされていますよね。fail2ban を導入する流れを備忘録として書き留めることに。
fail2Ban は、ログファイル (/var/log/auth.log) をスキャンし、ログインの失敗が多い IP アドレスを自動でブロック (Ban) してくれる機能があります。
まずは fail2ban のインストールから ...
sudo apt install fail2ban
サービスの開始および自動起動の有効化コマンドは以下の通り。これだけで ssh に対して fail2ban が有効になります。
sudo systemctl start fail2ban sudo systemctl enable fail2ban
ステータスの確認コマンドは以下の通り。
sudo fail2ban-client status sshd
なお、再起動コマンドは以下の通り。設定の変更時には反映するように忘れずに!
sudo systemctl restart 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 を有効化する運用を試してみてはどうでしょう。諦めてくれるアタッカーがいるかも ...
ところで、以下のコマンドを実行すると ...
sudo 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 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 ︙