Skip to content
VDS · セキュリティ

パスワード総当たり攻撃に対する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。