🐰

うさぎでもわかるFail2ban入門 🐰 サーバーを守る番うさぎ

に公開

うさぎでもわかるFail2ban入門 🐰 サーバーを守る番うさぎ

👇️PodCastでも聴けます
https://youtu.be/m-bZlDC4-to

こんにちは!テックブログを毎日発信している🐰です。今日は初めて知った「Fail2ban(フェイルトゥーバン)」について、うさぎでも分かるように説明しますね!

あなたのサーバーに悪いうさぎ(攻撃者)が何度も間違ったパスワードでログインしようとしたら...困りますよね?そんな時、Fail2banが自動で悪いうさぎをブロックしてくれるんです!まるでサーバーの番うさぎみたい🐰

うさぎの経験では、最初は「不正アクセスって怖いな...」と思っていましたが、実はFail2banを使えば自動で守ってくれることを知って安心しました!

Fail2banって何?基本のき

Fail2banは、ログファイルを監視して、不正なアクセスや攻撃を検知すると、自動的にそのIPアドレス(インターネット上の住所のようなもの)をブロックするツールです。2005年にCyril Jaquierさんが開発を始めて、今ではサーバーセキュリティの定番ツールになっています。

主な特徴

  • ログファイル監視 - システムのログファイル(記録ファイル)を常に見張っています
  • 自動BAN機能 - 不審なアクセスを検知したら自動でIPアドレスをブロック
  • 柔軟な設定 - ブロック時間や検知条件を自由に設定できます
  • 複数サービス対応 - SSH、Apache、Nginx、Postfixなど様々なサービスに対応

Fail2banの基本概念

うさぎでもわかる仕組み

では、Fail2banがどうやって動くのか、うさぎでも分かるように説明しますね🐰

1. ログファイル監視の流れ

  1. ログファイルをチェック - /var/log/auth.logなどのログファイルを監視
  2. パターンマッチング - 設定したパターン(正規表現と呼ばれる検索パターン)で失敗ログを検出
  3. カウント - 同じIPアドレスからの失敗回数をカウント
  4. 判定 - 設定した閾値(しきいち)を超えたらBANの準備
  5. 実行 - ファイアウォール(iptables等)でIPアドレスをブロック

ここまで理解できたあなたは素晴らしいです!次に進みましょう🐰

システム構成

Fail2banシステム構成図

Fail2banは主に以下の要素で構成されています。

  • jail(ジェイル) - 監視対象のサービスごとの設定単位(牢屋みたいな意味)
  • filter(フィルター) - ログから攻撃を検出するための正規表現パターン
  • action(アクション) - 攻撃を検知した時の対処方法(ブロックなど)

導入してみよう!インストール方法

それでは実際にFail2banをインストールしてみましょう!うさぎでも簡単にできますよ🐰

**ここは少し時間がかかります(5-10分程度)**ので、ゆっくり進めましょう。

Ubuntu/Debian系

# パッケージリストを更新
sudo apt update

# Fail2banをインストール
sudo apt install fail2ban

# サービスを有効化
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

もしエラーが出たら、以下を確認してください:

  • インターネット接続を確認
  • 管理者権限(sudo)があるか確認
  • パッケージリストの更新が必要かも(sudo apt updateを再実行)

RedHat/CentOS/Rocky Linux系

# EPELリポジトリを有効化(必要な場合)
sudo yum install epel-release

# Fail2banをインストール
sudo yum install fail2ban

# サービスを有効化
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

注意: CentOS 8以降ではdnfコマンドを使うこともあります。うさぎの経験では、yumでエラーが出たらdnfを試すと良いですよ!

インストールが完了したら、以下のコマンドで動作確認ができます。

# 状態確認
sudo systemctl status fail2ban

# バージョン確認
fail2ban-client version

インストールお疲れ様でした!ここまで来れば大丈夫です🐰

設定ファイルの構造を理解しよう

Fail2banの設定ファイルは主に/etc/fail2ban/ディレクトリにあります。うさぎにも分かりやすく整理されています🐰

主要な設定ファイル

  • jail.conf - デフォルトの設定ファイル(直接編集しない)
  • jail.local - カスタム設定ファイル(ここに自分の設定を書く)
  • filter.d/ - フィルター定義ファイルのディレクトリ
  • action.d/ - アクション定義ファイルのディレクトリ

重要な注意点: 最初はこう考えていましたが、実はjail.confを直接編集すると、アップデート時に上書きされてしまうんです!必ずjail.localを使いましょう。

基本的な設定項目

[DEFAULT]
# バンする時間(秒)
bantime = 3600    # 1時間のブロック

# この時間内での失敗回数をカウント(秒)
findtime = 600    # 10分間

# 失敗回数の閾値
maxretry = 5      # 5回失敗したらブロック

# 除外するIPアドレス(自分のIPアドレスなど)
ignoreip = 127.0.0.1/8 ::1

jail.localの作成

# デフォルト設定をコピーして編集
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

ここは見つけづらいですが、nanoエディタが開いたら、矢印キーで移動して編集します。保存はCtrl+XYEnterです。

実践!よく使われる設定例

実際によく使われる設定例を見てみましょう。うさぎでも真似できる設定です🐰

うさぎの経験では、まずはSSHの保護から始めるのが効率的でした!

SSHアクセスの保護設定

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3      # SSHは3回でブロックがおすすめ
bantime = 3600

Webサーバー(Nginx)の保護

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

[nginx-limit-req]
enabled = true
filter = nginx-limit-req
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 10
bantime = 3600

注意: ログファイルのパスは環境によって異なることがあります。もし/var/log/nginx/error.logが見つからない場合は、/var/log/nginx/access.logを確認してみてください。

Apache の保護

[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 5
bantime = 3600

カスタムフィルターの作成

自分だけのフィルターも作れます!/etc/fail2ban/filter.d/myapp.confとして保存。

[Definition]
failregex = Authentication failed for .* from <HOST>
            Invalid user .* from <HOST>
ignoreregex =

運用のポイント

Fail2banを運用する上で大切なポイントをうさぎ目線で紹介します🐰

fail2ban-clientコマンドの使い方

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

# 特定のjailの状態確認
sudo fail2ban-client status sshd

# 手動でIPアドレスをBAN
sudo fail2ban-client set sshd banip 192.168.1.100

# BANを解除
sudo fail2ban-client set sshd unbanip 192.168.1.100

# 設定を再読み込み(設定変更後は必須!)
sudo fail2ban-client reload

うさぎの経験では、設定を変更した後にreloadを忘れることが多いです。必ず実行しましょう!

ログの確認方法

# Fail2banのログを確認
sudo tail -f /var/log/fail2ban.log

# BANされたIPアドレスの一覧
sudo fail2ban-client banned

誤BANへの対処法

もし自分や正当なユーザーがBANされてしまった場合の対処法です。

  1. ignoreipに追加 - 信頼できるIPアドレスを除外リストに追加
  2. 一時的な解除 - fail2ban-client unbanipコマンドで解除
  3. 設定の見直し - maxretryやbantimeの値を調整

重要: 自分のIPがBANされると焦りますが、落ち着いて対処しましょう!コンソール接続や別のIPから解除できます。

トラブルシューティング

うさぎでも解決できるトラブルシューティング方法です🐰

よくある問題と解決方法

  1. Fail2banが起動しない

    # ログを確認
    sudo journalctl -u fail2ban
    
    # 設定ファイルの文法チェック
    sudo fail2ban-client -t
    

    もしエラーが出たら

    • 設定ファイルの文法エラーを確認
    • 必要なログファイルが存在するか確認
  2. ログファイルが見つからない

    • logpathの設定が正しいか確認
    • ログファイルの権限を確認
    • サービスが実際に動いているか確認
  3. BANが効かない

    • iptablesが正しく設定されているか確認
    • actionの設定を確認
    • ファイアウォールが有効になっているか確認

デバッグモード

詳細なログを出力してデバッグできます。

# デバッグモードで起動
sudo fail2ban-client set loglevel DEBUG

注意: デバッグモードはログが大量に出力されるので、問題解決後は必ず通常モードに戻しましょう。

まとめ

お疲れ様でした!ここまで読み進めたあなたは、もう立派なFail2banユーザーです🐰

Fail2banは、サーバーを守る頼もしい番うさぎのようなツールです:

  • ログファイルを監視して不正アクセスを自動検知
  • 攻撃者のIPアドレスを自動的にブロック
  • 柔軟な設定で様々なサービスに対応可能

最初はこう考えていましたが、実はセキュリティは設定して終わりではなく、定期的なログ確認と設定の見直しが大切だということを学びました。

これでうさぎも安心してサーバー運用ができますね!次は、より高度な設定や他のセキュリティツールとの連携について学んでいきましょう。

参考リンク

🐰 今日も一緒に学んでくれてありがとう!あなたのサーバーが安全に運用できることを願っています。明日もテックブログで会いましょう!

Discussion