見出し画像

#1ChatGPTに聞いた、fail2banとは?SSH守る番犬ツール入門!

fail2banは、ログを監視して不審なアクセスを検出し、iptablesなどのファイアウォールに自動でBAN(遮断)させるセキュリティツールです。 とくにSSHやWebログインなど、総当たり攻撃(ブルートフォース)に対する自動防御として、実務現場で広く使われています。


✅ この用語はなに?

fail2banとは、Linuxサーバを外部攻撃から守るためのログ監視型セキュリティツールです。

主な機能は以下の通り:

  • ログをリアルタイムで監視して、SSHやFTPなどの認証失敗、アクセス拒否、Webアプリケーションの攻撃痕跡などを検出

  • 攻撃と判定されたIPアドレスに対し、**iptablesやnftables、firewalldなどを通じて自動的にアクセス遮断(BAN)**を実施

  • 一定時間が経過すれば、自動で解除も行い、過剰なブロックを防ぐ

fail2banの設計思想は「シンプル・柔軟・拡張可能」。

  • ログからの検出には 正規表現ベースのfilter を使用し、柔軟なパターンマッチが可能

  • 対応するサービスはSSHやNginxだけでなく、Postfix、vsftpd、Dovecotなど幅広く、任意のログを対象にできる

  • アクション(BAN方法)は複数あり、メール通知・カスタムスクリプト実行なども追加できる

  • fail2banは「ログ × iptables」連携によって、怪しいアクセスを即遮断してくれるツール。

  • SSH、FTP、Nginxなどのログファイルを監視して、特定の失敗パターンが複数回検出されたらそのIPをBANする。

  • BAN方法はiptablesやnftables、firewalldなど複数のアクションに対応。

  • デフォルトのBAN時間後に自動で解除も可能。監視と対応が完全に自動化される。


✅ なぜ必要なのか?

  • サーバは常に外部からログインを狙われている(特にポート22)

  • 人力でログをずっと監視するのは不可能

  • fail2banを使えば、自動で守り、自動で解除もできる

  • 統計的にSSHは最も多く攻撃されており、初期防御策として定番


🔧 インストールと基本設定

Debian/Ubuntu 系:

sudo apt install fail2ban

RHEL/CentOS/Fedora 系:

sudo dnf install fail2ban

インストール後の設定ファイル構成:

  • /etc/fail2ban/jail.conf(初期設定、直接編集は非推奨)

  • /etc/fail2ban/jail.local(上書き用カスタム設定ファイル)

  • /etc/fail2ban/filter.d/(ログ内の失敗パターンを定義するfilter)

  • /etc/fail2ban/action.d/(BAN実行の具体的方法を記述するアクション)


🛠️ jail(ジェイル)とは?

fail2banにおける「jail(監獄)」は、1つの監視対象サービスに関する設定のまとまりを指します。

例えば、sshd に対する攻撃を検知・遮断したい場合、そのためのルールセット(ログの場所、失敗回数、BAN時間など)をひとつの jail として定義します。

fail2banでは、複数のjailを同時に動かして、複数サービスを並行して監視・保護することが可能です。

  • 各jailは[サービス名]のセクションとして jail.local に記述

  • それぞれが独立して動作するミニセキュリティモジュールのような存在

🛠️ jail.local とは?(書き方とその役割)

jail.local は、fail2banの設定ファイルのひとつで、自分のサーバに合わせた“上書き設定”を書く場所です。

jail.local は、fail2banの設定ファイルのひとつで、自分のサーバに合わせた“上書き設定”を書く場所です。

fail2banにはもともと jail.conf という設定ファイルがありますが、これはアップデート時に上書きされる可能性があるため、 変更内容は `` に書くのが安全なベストプラクティスです。

このファイルで「どのサービスを監視するか」「ログのどこを見て何回失敗したらBANするか」などを定義できます。


🛠️ jail.local の書き方(例:sshd + nginx)

以下は、jail設定で使用できる主なオプション一覧です。これらを組み合わせて細かな挙動を制御できます:

これらを使うことで、サービスの特性に合わせた柔軟な保護設定が可能になります。

ファイルパス:/etc/fail2ban/jail.local

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/secure
maxretry = 3
findtime = 600
bantime = 3600
backend = systemd

[nginx-http-auth]
enabled = true
port = http,https
filter = nginx-http-auth
logpath = /var/log/nginx/error.log
maxretry = 5
findtime = 300
bantime = 1800

複数のjailをこのファイルに追記して、同時に多くのサービスを保護できる。


📖 ログとの関係(filterとは)

fail2banの心臓部ともいえるのが「ログの監視」です。 サーバ内で発生するあらゆるイベントはログに記録されますが、fail2banはそのログを読み取り、不正アクセスの兆候を見つける役割を担っています。

どのログを監視するの?

  • sshd → /var/log/secure や /var/log/auth.log

  • nginx → /var/log/nginx/error.log

  • postfix → /var/log/maillog

  • など、サービスごとに適切なログファイルを logpath に指定します。

どうやってログから不正を見つけるの?

fail2banは、filterファイル(/etc/fail2ban/filter.d/*.conf) に定義された 正規表現(failregex) を使って、ログから「認証失敗」「拒否された接続」などのパターンを抽出します。

例えば、sshd.conf フィルターにはこんなルールが入っています:

failregex = ^%(__prefix_line)sFailed password for .* from <HOST> port .*
  • <HOST> の部分には動的にIPアドレスがマッチし、そのIPがBAN対象になります。

フィルターを自作・拡張するには?

独自アプリケーションのログや、日本語ログなどにも対応できます:

  1. /etc/fail2ban/filter.d/ に新しい .conf ファイルを作成

  2. failregex に不正検知パターンを記述

  3. jail.local でそのfilterを指定

これにより、fail2banはどんなログでも「怪しい行動」を検知して、自動でBAN対応が可能になります。

  • fail2banは、ログから「失敗した認証」「不正なリクエスト」などを正規表現で抽出する

  • これを定義しているのが /etc/fail2ban/filter.d/ 内のフィルタファイル

  • 例:sshd.conf の内容

failregex = ^%(__prefix_line)sFailed password for .* from <HOST> port .*
  • <HOST> というタグが使われ、IPアドレスを自動で抽出できる仕組みになっている

カスタムサービスを追加したい場合は、自作で filter ファイルを作るだけで対応可能。


🔁 アクションとは?(iptablesとの連携)

fail2banの「アクション」とは、不審なアクセスを検出したときに実行する具体的な対処方法のことです。 たとえば、検出したIPアドレスを iptables でブロックしたり、通知メールを送ったり、カスタムスクリプトを走らせたりすることができます。

アクションは /etc/fail2ban/action.d/ にあるテンプレートファイルをもとに、jailごとに指定します。

主なアクションの種類(代表例の詳細)

以下はfail2banで使用可能な代表的なアクションの一覧です。

アクションの書き方(jail内)

[sshd]
action = iptables[name=SSH, port=ssh, protocol=tcp]

この例では:

  • iptables:使用するアクションテンプレート

  • name=SSH:ログやログプレフィックス用の識別名

  • port=ssh:対象となるポート

  • protocol=tcp:プロトコルの種類

アクションファイルの構成(例:iptables.conf)

各アクションテンプレートは以下のような構成になっています:

[Definition]
actionstart = <起動時の処理>
actionstop = <停止時の処理>
actioncheck = <監視前の事前チェック>
actionban = <IPをブロックする処理>
actionunban = <IPのブロックを解除する処理>

これを編集・拡張することで、fail2banはネットワーク遮断に限らず、あらゆる対処を自動化可能になります(例:ログ記録、Webhook送信、通知音など)

fail2banは、「見つけたらどうするか?」まで細かく決められる柔軟なツールです。

  • jailが発火(トリガー)すると、設定されたアクション(BAN方法)を実行する

  • 代表的なアクション:

    • iptables-multiport

    • nftables-multiport

    • firewalld

    • sendmail-whois(通知)

action = iptables[name=SSH, port=ssh, protocol=tcp]

アクションファイルの中身(/etc/fail2ban/action.d/iptables.conf など)はカスタマイズも可能。


💡 実用Tips

fail2banを実務で使う際に便利なノウハウや応用例を以下にまとめました:

  • 複数サービスの同時監視

    • sshd, nginx, vsftpd, dovecot, postfix などを複数のjailで同時に保護可能。

    • サービスごとに bantime, findtime, maxretry を個別に設定できるので、セキュリティポリシーの微調整が可能。

  • 日本語ログ・独自ログ対応

    • 日本語やカスタム出力ログに対応させたい場合、filter.d/ に自作の .conf ファイルを作成し、failregex を適切に設計することで検出可能。

  • 誤BAN防止

    • ignoreip = 127.0.0.1 <自分のIP> をjail設定に入れておくと、万が一ログイン失敗してもBANされない。

  • 通知連携

    • sendmail-whois でメール通知の他、カスタムアクションでSlack通知やWebhook連携も可能。

  • ログ可視化・分析

    • /var/log/fail2ban.log を logwatch や Grafana などで可視化・統計分析し、攻撃傾向を把握する運用にも発展可能。

  • ログローテーション対応

    • logrotate と連携して、ログ肥大化を防止しながら運用継続。

  • fail2banのバージョン確認と再起動


🔍 状態確認とIP解除

# fail2ban全体の状態を確認
fail2ban-client status

# sshdの状態(バンされたIP一覧)
fail2ban-client status sshd

# 特定のIPを解除
fail2ban-client set sshd unbanip 1.2.3.4

その他:

  • fail2ban-client reload:設定の再読み込み

  • systemctl restart fail2ban:fail2banサービスの再起動


まとめ

fail2banは、24時間働いてくれるログ監視AI番犬。 怪しい奴を見つけたら「おい、iptables!このIP即閉め出せ!」と命令してくれる。 設定がシンプルで拡張性もあり、Linuxサーバ防御の“最初の一歩”として本当に頼れる存在です🐾

自分のサーバを守りたい人がまず入れておくべき、“コスパ最強の自動防御ツール”。

いいなと思ったら応援しよう!