ファイアウォールでポートを制限しても、公開ポートへのブルートフォース攻撃は防げません。fail2banはログを監視して攻撃元IPを自動的にブロックするツールです。
fail2banのインストールと基本設定
⚠️ 設定は必ず jail.local に書きます。jail.conf を直接編集するとアップデート時に上書きされます。
# インストール
$ sudo apt install fail2ban # Ubuntu/Debian
$ sudo dnf install fail2ban # CentOS/RHEL
# 設定ファイルをコピー(必ずlocalを作成する)
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# fail2banを有効化・起動
$ sudo systemctl enable fail2ban
$ sudo systemctl start fail2ban
jail.local の基本設定
# /etc/fail2ban/jail.local
[DEFAULT]
# ブロック除外リスト(自分のIPは必ず入れる)
ignoreip = 127.0.0.1/8 ::1
# ⚠️ /24(サブネット全体)の除外は同一セグメント全体を緩めることになります
# 本来は自分の固定IPやVPN出口のIPのみを指定するのが安全です
# ignoreip = 127.0.0.1/8 ::1 203.0.113.10 # 固定IPの例
# 何秒間ログを監視するか
findtime = 600 # 10分間
# 何回失敗したらブロックするか
maxretry = 5
# 何秒間ブロックするか(-1 = 永久ブロック)
bantime = 3600 # 1時間
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
maxretry = 3 # SSHは3回失敗でブロック
# 設定を反映
$ sudo systemctl restart fail2ban
fail2banの管理コマンド
# 全ジェイルの状態を確認
$ sudo fail2ban-client status
# 特定ジェイルの詳細(ブロックされているIPを確認)
$ sudo fail2ban-client status sshd
# IPを手動でブロック
$ sudo fail2ban-client set sshd banip 192.168.1.100
# IPのブロックを解除
$ sudo fail2ban-client set sshd unbanip 192.168.1.100
# ブロックログを確認
$ sudo tail -f /var/log/fail2ban.log
Nginxのブルートフォース対策
# /etc/fail2ban/jail.local に追記
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
[nginx-limit-req]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10
まとめ
- 設定は
jail.confをコピーしたjail.localに書く(直接編集しない) ignoreipに自分のIPを必ず登録。自分がロックアウトされる事故を防ぐ- SSHは
maxretry = 3に設定して厳しくブロック fail2ban-client status sshdでブロック中のIPを確認- 攻撃が多い場合は
bantime = -1(永久ブロック)も検討する
📋 Linuxサーバー運用・管理チェックリスト完全版でPhase 2の全要点を確認できます。



コメント