Fail2banは、サーバーやネットワークのセキュリティを強化するために、特にログイン試行やサービスへの不正アクセスを監視し、自動的に攻撃者をブロックするツールです。このツールは、指定されたパターンやルールに基づいてログファイルを監視し、悪意のある行動が検出された場合にIPアドレスを一時的または永久的にブロックします。ここでは、Fail2banの設定ファイルの役割と、その設定を使用して効果的に攻撃者を取り除く方法について詳述します。
Fail2banの構成ファイル
Fail2banは、複数の設定ファイルを利用して動作します。これらの設定ファイルは、どのように攻撃者を検出し、どのアクションを取るかを決定します。主な設定ファイルは以下の通りです:

-
/etc/fail2ban/fail2ban.conf
:- このファイルには、Fail2ban全体の設定に関する基本的な情報が記載されています。通常、特定のロギングやデバッグオプションなどのシステム全体のパラメータを設定します。
-
/etc/fail2ban/jail.conf
:- Fail2banが監視するサービス(例えばSSHやHTTPなど)ごとに設定を行う場所です。各サービスに対して、「jail(監獄)」という設定を行い、攻撃者が特定のサービスにアクセスする際にどのように反応するかを定義します。例えば、SSHのログイン試行の失敗が一定回数を超えた場合に、そのIPアドレスをブロックする、といった設定です。
-
/etc/fail2ban/jail.d/
:jail.conf
と似たような役割を果たしますが、こちらはカスタム設定や上書きされた設定を管理するためのディレクトリです。個別の設定ファイルがここに追加されることがあり、異なるサーバーやサービスごとに設定を分けることができます。
-
/etc/fail2ban/filter.d/
:- ここには、Fail2banが特定のログファイルで検出するパターン(フィルター)に関する設定が含まれています。ログ内でどのような文字列を探すか、そしてそれをどのように解釈するかを定義します。
-
/etc/fail2ban/action.d/
:- 攻撃者がブロックされる条件が満たされたときに、Fail2banがどのようなアクションを取るかを定義する設定ファイルです。例えば、IPアドレスをブロックするためにファイアウォールの設定を変更する、メールで通知するなどのアクションが設定されています。
Fail2banの設定ファイルの基本的な構成
Fail2banの設定ファイルを理解するために、基本的な構成要素について触れていきます。
1. jail.conf の設定
jail.conf
では、個々のサービスごとに設定を行います。以下に、SSHサービスの設定例を示します:
bash[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 600
findtime = 600
action = iptables[name=SSH, port=ssh, protocol=tcp]
ここでは、enabled
をtrue
に設定することで、SSHに対する監視を有効にし、logpath
に指定したログファイル(この場合は/var/log/auth.log
)を監視します。maxretry
は失敗したログイン試行の回数で、bantime
はブロックする時間(秒)です。findtime
は何秒以内に失敗回数をカウントするかを指定します。
action
では、失敗回数がmaxretry
に達した場合に、どのようなアクションを取るかを設定します。ここでは、iptables
を使用して、攻撃者のIPアドレスをTCPのSSHポートでブロックするように設定しています。
2. filter.d の設定
filter.d
には、ログファイル内の特定のパターンを識別するための設定が含まれます。例えば、sshd
に関連する設定ファイル(sshd.conf
)では、SSHサービスに関連するログイン失敗のパターンが設定されています。
bash[Definition]
failregex = .*sshd\[[^\]]*\]: Failed password for.*$
ignoreregex =
この設定は、auth.log
内のログメッセージに一致するパターンを定義しており、SSHログインの失敗メッセージを検出します。この正規表現が一致すると、Fail2banはそのログエントリを検出し、設定されたアクションを実行します。
3. action.d の設定
action.d
ディレクトリには、攻撃者をブロックするためのアクションが設定されています。例えば、iptables
を使ってIPアドレスをブロックする設定は以下のように行われます:
bash[Definition] actionstart = iptables -N fail2ban-SSH iptables -A fail2ban-SSH -j REJECT actionstop = iptables -D fail2ban-SSH -j REJECT iptables -F fail2ban-SSH actioncheck = iptables -n -L fail2ban-SSH actionban = iptables -I fail2ban-SSH 1 -s
-j REJECT actionunban = iptables -D fail2ban-SSH -s -j REJECT
この設定では、Fail2banがIPアドレスをiptables
でブロックする方法を定義しています。actionban
では、特定のIPアドレスをiptables
のルールに追加して拒否します。actionunban
では、ブロックされたIPアドレスを解除します。
Fail2banの動作の流れ
-
ログファイルの監視:
- Fail2banは指定されたログファイルを監視し、設定されたパターンが一致するエントリを検出します。
-
パターンの一致確認:
- 一致するエントリが見つかると、Fail2banはそのIPアドレスが一定回数のログイン失敗を繰り返したかどうかをチェックします(
maxretry
の設定に基づく)。
- 一致するエントリが見つかると、Fail2banはそのIPアドレスが一定回数のログイン失敗を繰り返したかどうかをチェックします(
-
IPアドレスのブロック:
- もしログイン失敗の回数が
maxretry
に達した場合、そのIPアドレスをiptables
などのツールを使ってブロックします。
- もしログイン失敗の回数が
-
時間経過後に解除:
- 設定された時間(
bantime
)が経過すると、Fail2banは自動的にそのIPアドレスのブロックを解除します。
- 設定された時間(
まとめ
Fail2banは、ログファイルを監視し、不正アクセスを自動的にブロックする非常に効果的なツールです。設定ファイルを適切に管理することで、セキュリティの強化を図ることができます。特に、jail.conf
やfilter.d
、action.d
の設定を理解することが、Fail2banの運用において重要です。