Fail2ban (不正アクセス遮断)
作成: Shintaro / Acia
対象OS: Debian 13 (Sakura VPS)
目的
SSH やメールサービス(Postfix / Dovecot)への総当たり攻撃や不正アクセスを自動検出・自動遮断し、
ログイン試行の失敗回数に応じて一定時間ブロックする。
本ドキュメントは、Debian 13 上での sshd / Postfix / Dovecot を対象にした Fail2ban 構成を
「再現性のある手順」として残すことを目的とする。
設定方針
- ルールは **
/etc/fail2ban/jail.localに集約**(配布既定のjail.confは直接編集しない)。 - Debian 13 / Fail2ban 1.0 系では **
postfix-saslフィルタは廃止**されており、
Postfix の認証失敗(SASL)は **postfix[mode=auth]** で扱う。
- 監視対象サービス:
- SSH:
[sshd] - Postfix(SMTP/Submission/SMTPS + SASL 認証):
[postfix] - Dovecot(IMAP/POP3/各種 SSL/TLS):
[dovecot] - Debian 13 では
backend = systemdにより systemd-journald 経由の監視が安定(logpathは補助的扱い)。
導入
Fail2ban 本体のインストールと起動:
sudo apt update
sudo apt install -y fail2ban
sudo systemctl enable --now fail2ban
sudo systemctl status fail2ban --no-pager
現行設定例(2025-11-21 時点)
Fail2ban のローカル設定は **/etc/fail2ban/jail.local** に集約する。
5.1 /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
logpath = /var/log/auth.log
backend = systemd
maxretry = 5
bantime = 1h
findtime = 10m
[postfix]
enabled = true
port = smtp,ssmtp,submission
filter = postfix[mode=auth]
logpath = /var/log/mail.log
backend = systemd
maxretry = 5
bantime = 1h
findtime = 10m
[dovecot]
enabled = true
port = imap,imaps,pop3,pop3s
filter = dovecot
logpath = /var/log/mail.log
backend = systemd
maxretry = 5
bantime = 1h
findtime = 10m
5.2 設定のポイント
[sshd]- SSH ログイン失敗を監視し、5 回失敗で 1 時間 BAN(
maxretry=5,bantime=1h)。 backend=systemdにより journald を参照しつつ、/var/log/auth.logも補助的に利用。
[postfix]filter = postfix[mode=auth]が 重要。- 旧世代の
postfix-saslフィルタは Debian 13 / Fail2ban 1.0 系では提供されないため使用しない。 - これにより Submission(587) / SMTPS(465) / SMTP(25) での 認証失敗ログ(SASL LOGIN authentication failed 等) を検知して BAN できる。
- ポートは
smtp,ssmtp,submissionとし、25/465/587 を一括監視。
[dovecot]- IMAP/IMAPS/POP3/POP3S のログイン失敗を監視し、POP3S/IMAPS での総当たり攻撃を遮断。
- Postfix と同じく
backend=systemdで journald 監視。
メモ: -
backend=systemdの場合、Fail2ban は journald からログを読むため、logpathは 主にフィルタ上のメタ情報として扱われる。 -/var/log/mail.logが存在しない場合は、rsyslog導入と mail ログ有効化を 07_postfix.md / 08_dovecot.md の手順で実施しておく。
検証
6.1 Fail2ban 全体の状態
sudo fail2ban-client status
出力例(要約):
Status→ACTIVEJail list:にsshd,postfix,dovecotが含まれていること。
6.2 個別ジェイルの状態
sudo fail2ban-client status sshd
sudo fail2ban-client status postfix
sudo fail2ban-client status dovecot
各ジェイルについて、以下を確認する:
- Filter:
Currently failed: 最近の失敗回数Total failed: 累計失敗回数- Actions:
Currently banned: 現在 BAN 中の IP 数Total banned: 累計 BAN 数
6.3 動作確認(テストの一例)
- SSH:
- 意図的に誤パスワードで複数回 SSH ログインを試行し、
sshdジェイルでTotal failedが増加することを確認。 maxretry回数を超えた後、対象 IP がCurrently bannedに入ることを確認。
- Postfix:
- 存在しないユーザ名や誤パスワードで Submission(587) に対して SMTP AUTH を複数回試行。
fail2ban-client status postfixでTotal failedが増加し、一定回数で BAN されることを確認。
- Dovecot:
- POP3S(995) または IMAPS(993) に対して、誤パスワードで複数回ログインを試行。
fail2ban-client status dovecotで同様にカウント・BAN を確認。
運用ノート
7.1 遮断解除(アンバン)
特定 IP を BAN 解除する:
sudo fail2ban-client set sshd unbanip <IPアドレス>
sudo fail2ban-client set postfix unbanip <IPアドレス>
sudo fail2ban-client set dovecot unbanip <IPアドレス>
7.2 現在のブロック一覧
sudo fail2ban-client status sshd
sudo fail2ban-client status postfix
sudo fail2ban-client status dovecot
Banned IP list: に現在遮断中の IP が列挙される。
7.3 ホワイトリスト(除外 IP)
管理端末など、絶対に BAN したくない IP は ignoreip で除外する。
/etc/fail2ban/jail.local の先頭などで [DEFAULT] セクションを定義:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1
- グローバル IP や自宅回線を追加する場合は CIDR で追記(例:
ignoreip = 127.0.0.1/8 ::1 203.0.113.4)。 - 誤って広範囲(例:
0.0.0.0/0)を指定しないように注意。
7.4 感度調整
- 攻撃が多い場合:
bantimeを延長(例:12h,1d)。findtimeを延長(例:1h)して「短時間の連続攻撃」に対する感度を上げる。- 誤検知が気になる場合:
maxretryを増やす(例:10)。findtimeを短縮することで「1 回ミスしただけのユーザ」が BAN されにくくなる。
7.5 バックエンドについて
- Debian 13 では
backend=systemdが標準的かつ安定。 /var/log/auth.logや/var/log/mail.logを主軸にしたい場合は、backend=autoも選択肢だが、
journald との二重管理になるため本構成では systemd を採用している。
7.6 UFW との連携
- UFW は 静的なポリシー層(どのポートを開けるか)
- Fail2ban は 動的な遮断層(不正な IP を一時 BAN)
として併用する。
- UFW は、サービス完成後に開放したいポートのみ許可(例: 22/25/465/587/993/995)。
- Fail2ban は、その上で 総当たり攻撃など悪意ある接続元を自動遮断する役割。
将来の拡張・注意点
- Postfix 側のログフォーマットや Dovecot 側のログレベルを変更した場合、Fail2ban フィルタと整合が取れているか
fail2ban-regexで確認すること。 - 新たな公開サービス(例: HTTP API、管理用パネルなど)を追加する場合は、必要に応じて専用のジェイル(filter + jail)を追加する。
変更履歴
| 日付 | 編集者 | 内容 |
|---|---|---|
| 2025-10-27 | Shintaro / Acia | 初版作成。[sshd] ジェイルのみ有効化し、backend=systemd, maxretry=5, bantime=1h, findtime=10m の運用と基本操作を記載。 |
| 2025-11-21 | Acia | メールサーバ導入に伴い、Postfix/Dovecot 用ジェイルを正式に追加。Debian 13 / Fail2ban 1.0 系で postfix-sasl フィルタが廃止されたことを踏まえ、postfix[mode=auth] を採用する構成に改訂し、UFW・メールログとの連携および運用ノートを更新。 |