fail2banの設定方法|Apacheサーバーを不正アクセスから守る基本手順
Apache サーバーをインターネットへ公開すると、公開直後から自動化されたアクセスが大量に飛んでくることがあります。
特に多いのは、次のようなパターンです。
-
Basic認証への総当たり
-
存在しない PHP や CGI を探すスキャン
-
管理画面や旧URLを狙うボット
-
不正な User-Agent を使った巡回
-
大量の失敗リクエストを伴う探索行為
こうしたアクセスのすべてを Fail2Ban だけで完全に防げるわけではありません。
ただし、ログに現れる明確な不審挙動をもとに自動で遮断するという点で、Apache 公開サーバーの基本防御として非常に有効です。
特に初心者のうちは、次のような疑問を持ちやすいです。
-
fail2ban は何をしてくれるのか
-
Apache ではどの jail を有効化すればいいのか
-
jail.confとjail.localの違いは何か -
apache-authとapache-badbotsはどう違うのか -
iptablesとnftablesのどちらを使うのか -
ban された IP を確認・解除するにはどうするのか
-
logpathはどこを見るべきなのか -
設定変更後は何を確認すればいいのか
この記事では、Fail2Ban で Apache サーバーを保護する方法について、インストールから jail 設定、ログ確認、テスト、運用時の注意点までを、できるだけわかりやすく解説します。
fail2banとは何か
Fail2Ban は、ログファイルを監視して、不審なアクセス元を自動的に一時遮断する侵入防止ツールです。公式 README では、/var/log/auth.log のような認証ログだけでなく、Apache の標準ログも対象にできると説明されています。Ubuntu コミュニティの解説でも、SSH や Apache などのログを読み取り、iptables 系のプロファイルを使ってブルートフォース対策を行う仕組みとして紹介されています。
どうやって動くのか
仕組みはシンプルです。
-
Apache のログを監視する
-
指定回数以上の失敗や不審アクセスを検知する
-
その送信元 IP を一定時間 ban する
-
一定時間後に自動解除する、または手動解除する
Fail2Ban の設定は、主に filter、action、jail の3要素で構成されます。Debian の man page でも、filter.d/*.conf は検出条件、action.d/*.conf は ban / unban の処理、jail.conf はそれらを組み合わせる定義と説明されています。
Apache保護で fail2ban が向いている理由
Apache は外部公開されることが多く、攻撃者やボットの探索対象になりやすいです。
Fail2Ban の公式 README では、Apache 向けの標準ログをそのまま読めるとされており、実際に Apache 用の jail と filter が同梱されています。設定例として広く使われている jail には、apache-auth、apache-badbots、apache-botsearch、apache-noscript などがあります。
Apache 向け Fail2Ban の代表的な用途は次のとおりです。
-
Basic認証失敗の監視 →
apache-auth -
悪質なボットの検知 →
apache-badbots -
不審なURL探索の検知 →
apache-botsearch -
存在しないスクリプト探索の検知 →
apache-noscript
ただし、これらを全部いきなり強く有効化すると、正規アクセスまで巻き込む可能性があります。
そのため、最初は apache-auth を中心に安全寄りの設定から始めるのが現実的です。
まず知っておきたい設定ファイルの考え方
Fail2Ban では、設定を直接 jail.conf に書き換えるより、jail.local や jail.d/*.local で上書きするのが基本です。Debian の man page でも、Fail2Ban は複数の設定ファイルタイプを持ち、jail 定義は jail.conf 系で管理されると説明されています。一般的な運用では、パッケージ更新で上書きされうる jail.conf を直接編集しない方が安全です。
よくある構成
-
/etc/fail2ban/jail.conf
パッケージ標準の基本設定 -
/etc/fail2ban/jail.local
管理者が自分で上書きする設定 -
/etc/fail2ban/jail.d/*.conf/*.local
jail ごとに分割して管理したいときの設定
初心者には、まず /etc/fail2ban/jail.local を作る方法がわかりやすいです。
インストールする
Ubuntu / Debian 系では、まずパッケージを入れます。
sudo apt install fail2ban
Ubuntu コミュニティの解説でも、Fail2Ban はパッケージから導入する手順が案内されています。
サービス状態を確認する
起動していなければ、開始します。
現在の状態を確認する
Fail2Ban には専用クライアントがあり、現在の jail 状態を確認できます。
このコマンドで、
-
起動しているか
-
有効な jail がいくつあるか
-
jail 名一覧
を確認できます。
特定の jail を詳しく見たい場合は、たとえば次のようにします。
これで、現在 ban されている IP や対象ログなどを確認できます。
最初に作る jail.local の基本形
まずは、グローバル設定と Apache 向け jail を最小限書いた jail.local を作ります。
例
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 ::1
[apache-auth]
enabled = true
port = http,https
logpath = %(apache_error_log)s
ここで指定している意味
-
bantime
ban する時間 -
findtime
何分間の間に失敗が集中したら対象にするか -
maxretry
何回失敗したら ban するか -
ignoreip
ban 対象から除外するIP -
enabled
jail を有効化する -
port
関連ポート -
logpath
監視するログ
Fail2Ban の設定概念として、jail は filter と action の組み合わせであり、Apache 用には標準 filter が複数用意されています。apache-auth の典型設定例でも、port = http,https と logpath = %(apache_error_log)s が使われています。
apache-auth とは何か
apache-auth は、Apache の認証失敗系を監視する jail です。
Basic認証や認証保護された領域があるサイトでは、まずこれを有効化する価値があります。
どんなログを見るのか
典型的には Apache の error log 側を見ます。
設定例でも %(apache_error_log)s を使う形が一般的です。
どんな場面で有効か
-
/admin/に Basic認証をかけている -
ステージング環境に Basic認証がある
-
一部ページに認証をかけている
-
CMS管理画面前段に認証を置いている
Apache の認証保護をしていないサイトでは、apache-auth だけではほとんど効果が見えないことがあります。
その場合は後述の apache-badbots や apache-botsearch を検討します。
Si quieres conocer otros artículos parecidos a fail2banの設定方法|Apacheサーバーを不正アクセスから守る基本手順 puedes visitar la categoría Puroguramingu.
