パスワード総当たり攻撃に対するFail2ban
Fail2banのインストールと設定です。SSHとWebフォームの総当たり攻撃のブロック、自分のアドレスのホワイトリスト登録、動作確認、自分のブロック解除を説明します。
更新日 2026年8月23日
Fail2banはログを読み取り、単一のアドレスからのログイン失敗回数をカウントし、ファイアウォールルールで一時的にブロックします。鍵認証によるログインを置き換えるものではありませんが、バックグラウンドで行われる総当たり攻撃のトラフィックの大半を排除し、ログの負荷を軽減します。
インストールと基本設定
apt install -y fail2ban
独自のファイル /etc/fail2ban/jail.local を使用してください。jail.conf への編集はアップデートで上書きされます。
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.5
banaction = ufw
[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 24h
systemctl enable --now fail2ban
fail2ban-client status
fail2ban-client status sshd
自宅やオフィスのアドレスを ignoreip に記述してください。これは自分自身をBANしないための保険です。アドレスが変わった場合でも、パネルの /hosting/vds/m/<id> にあるコンソールが安全網となります。これはネットワークやルールに関係なく動作します。
banaction は使用しているファイアウォールに合わせる必要があります。ufw なら ufw、nftables なら nftables-multiport です。
結果を確認する場所
fail2ban-client status sshd
tail -f /var/log/fail2ban.log
journalctl -u fail2ban -n 50
ステータスには失敗回数とBANされたアドレスの一覧が表示されます。公開アドレスでは、1日あたり数百件のカウントは正常であり、標的型攻撃の兆候ではありません。
アドレスのBANを解除する(自分自身のアドレスを含む):
fail2ban-client set sshd unbanip 203.0.113.5
SSH以外の保護
Fail2banは、失敗した試行が記録されているあらゆるログで動作します。
[nginx-http-auth]
enabled = true
[nginx-limit-req]
enabled = true
logpath = /var/log/nginx/error.log
[postfix-sasl]
enabled = true
独自のアプリケーションにはフィルターが必要です。これは /etc/fail2ban/filter.d/ 内のファイルで、アドレスを <HOST> としてマークした正規表現を記述します。
[Definition]
failregex = ^.*login failed.*ip=<HOST>.*$
ignoreregex =
実際のログに対して式をテストします。
fail2ban-regex /var/log/myapp.log /etc/fail2ban/filter.d/myapp.conf
このコマンドは一致した行数を表示します。一致がゼロの場合、ルールが間違っています。そして、黙って失敗する保護は、保護がないよりも有害です。
よくある間違い
| 間違い | 結果 | 解決策 |
|---|---|---|
jail.conf への編集 | アップデートで失われる | jail.local に記述する |
ignoreip に自分のアドレスがない | いつか自分自身をBANする | 追加するか、パネルのコンソール経由で接続する |
banaction がファイアウォールと一致しない | BANが適用されない | ufwまたはnftablesに合わせる |
| フィルターがログ形式と一致しない | 保護ではなく無音 | fail2ban-regex で確認する |
| サービスがsystemdログを読み取れない | ステータスが空 | backend = systemd を設定する |
実際にテストしてください。外部のアドレスから故意に必要な回数だけ間違ったパスワードを入力し、BANリストに入ることを確認します。設定されていないfail2banは、偽りの安心感を生み出します。
仕上げに、ファイアウォール自体で接続レート制限を設定してください — ufw limit 22/tcp。