fail2ban が SSH に対してすること
fail2ban は認証ログを監視し、ログイン失敗が一定回数を超えた IP アドレスを一時的に BAN します ── つまり SSH に総当たり攻撃を仕掛けるボットは、いつまでも叩き続ける代わりにファイアウォールで遮断されます。役立つ防御層ですが、その位置づけははっきりさせておきましょう。すでに SSH 鍵に切り替えてパスワードログインを無効にしているなら、総当たり攻撃はそもそも成功しません。fail2ban は多層防御とログノイズの削減であって、第一の防衛線ではありません。まず鍵を設定し(鍵 vs パスワード)、その上に fail2ban を追加しましょう。
ステップ 1 ── fail2ban をインストールする
sudo apt update && sudo apt install fail2ban # Debian/Ubuntu
# RHEL/Fedora: sudo dnf install fail2ban 妥当なデフォルト値で起動しますが、パッケージ更新で上書きされないよう、自分の設定は jail.local に書くべきです。
ステップ 2 ── SSH の jail を設定する
/etc/fail2ban/jail.local を作成します:
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h これはこう読めます:10 分以内に 5 回ログインに失敗したら、その IP を 1 時間 BAN する。繰り返す相手には bantime を上げられます(1 日にする人もいれば、bantime.increment = true で段階的に増やす人もいます)。SSH を 22 番ポートから移動したなら、port を実際のポートに設定してください。
ステップ 3 ── 再起動して確認する
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd ステータス行には現在 BAN 中の IP と合計が表示されます。誤って BAN したアドレス(例えば、何度か打ち間違えた後の自分自身)を解除するには:
sudo fail2ban-client set sshd unbanip 203.0.113.10
スマホからやる
fail2ban はスマホから SSH 越しに完全に管理できます:SFTP か nano で jail.local を編集し、サービスを再起動し、ステータスを確認する。正確な fail2ban-client のサブコマンドを思い出せなければ、TermAI のアシスタントに説明してください ──「sshd で BAN 中の IP を表示」「このアドレスを解除」── 実行前にコマンドを確認しましょう。
自分を締め出さないように
自分のログインに何度か失敗すると、fail2ban はあなたを BAN することがあります。2 つの安全策:テスト中は使えるセッションを開いたままにしておくこと、そして自分の IP(または Tailscale の範囲)を無視リストに追加すること:
# in [DEFAULT] of jail.local
ignoreip = 127.0.0.1/8 100.64.0.0/10 この 100.64.0.0/10 は Tailscale の範囲です ── Tailscale 経由で SSH に到達するなら、自分の接続は BAN されません。さらに良いのは、SSH を完全に Tailscale の後ろに置くこと。そうすれば公開ボットはそもそも到達できません。
FAQ
SSH 鍵を使うなら fail2ban は必要ですか?
任意です。鍵を使いパスワードログインを無効にしていれば、総当たり攻撃は成功しません。それでも fail2ban はログノイズを減らしトラフィックを遮断するので、多くの管理者は追加の層として動かしています。
fail2ban は IP をどのくらい BAN しますか?bantime に設定した値 ── 1 時間が一般的です。上げることも、繰り返す相手には段階的に増やすこともできます。
fail2ban で IP の BAN を解除するには?fail2ban-client set sshd unbanip <IP> を実行します。信頼できる IP を ignoreip に追加すれば、決して BAN されません。
クイックファクト
- 役割:SSH ログイン失敗が繰り返された後に IP を BAN する
- 位置づけ:多層防御 ── 鍵 + パスワード無効のほうが重要
- 設定:
/etc/fail2ban/jail.local→[sshd]maxretry / findtime / bantime - 自分を BAN しない:自分の IP / Tailscale の範囲を
ignoreipに;さらに良いのは SSH を Tailscale の後ろに置くこと
Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.