【Linux】Fail2Banを使ってApacheへの不正アクセスを防御する方法【dnf対応】
この記事では、dnfでFail2Banをインストールし、Apacheへのボット・スキャナー攻撃(xmlrpc.php攻撃、.envスキャン、古いHTTP/1.0リクエストなど)を防ぐ設定を追加する方法を解説します。
インストール対象サーバの情報はMIRACLE LINUX8のLinuxサーバです。
Fail2Banをdnfでインストール
まず、EPELリポジトリを有効化してFail2Banをインストールします。
# EPELリポジトリ追加
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf install epel-release -y
# fail2banインストール
sudo dnf install fail2ban -y
Fail2Banの起動と自動起動設定
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
動作確認:
sudo systemctl status fail2ban
sudo fail2ban-client ping
sudo fail2ban-client status
カスタムフィルターを作成(Apacheボット・スキャナー対策)
/etc/fail2ban/filter.d/apache-botscanner.conf
を作成します。
sudo vi /etc/fail2ban/filter.d/apache-botscanner.conf
内容:
[Definition]
failregex = ^<HOST> - - \[.*\] ".*HTTP/1\.0".*
^<HOST> - - \[.*\] ".*" \d+ \d+ ".*" ".*(curl|wget|python-requests|Go-http-client|zgrab|MJ12bot|Iceweasel|scaninfo@paloaltonetworks\.com).*"
^<HOST> - - \[.*\] "GET /.env HTTP/.*"
^<HOST> - - \[.*\] "POST /xmlrpc.php HTTP/.*"
^<HOST> - - \[.*\] "GET /wp-login.php HTTP/.*"
ignoreregex =
カスタムフィルターは面倒でも目的別に作成した方が、後々幸せになれるような気がします。
Grafanaとかを利用して可視化する時にきっと役立ちます。
jail設定を追加
/etc/fail2ban/jail.d/apache-botscanner.local
を作成します。
sudo vi /etc/fail2ban/jail.d/apache-botscanner.local
内容:
[apache-botscanner]
enabled = true
filter = apache-botscanner
action = iptables[name=apache-botscanner, port=http, protocol=tcp]
logpath = /var/log/httpd/access_log
maxretry = 1
findtime = 600
bantime = 86400
ポイント
logpath
はApacheのアクセスログパスに合わせて変更してください。
複数のファイルを対象にすることも可能です。
空白を間に入れて1行で記載してください。maxretry = 1
→ 1回攻撃で即BAN。bantime = 86400
→ 24時間BAN(秒単位)。
Fail2Banの再起動と確認
sudo systemctl restart fail2ban
sudo fail2ban-client status apache-botscanner
現在BANされているIPを確認:
sudo fail2ban-client status apache-botscanner
攻撃の例(Fail2Banが防ぐアクセス)
Fail2Banで防御する不正アクセス例:
213.136.84.241 - - [08/Jul/2025:18:23:13 +0900] "GET /global.zip HTTP/1.1"
69.49.112.68 - - [08/Jul/2025:19:02:54 +0900] "POST /xmlrpc.php HTTP/1.1"
103.252.35.206 - - [08/Jul/2025:23:28:07 +0900] "GET /.env HTTP/1.1"
93.174.93.12 - - [09/Jul/2025:14:27:15 +0900] "GET / HTTP/1.0"
まとめ
- Fail2Banで攻撃の大半を自動ブロックできる
- Apacheへの攻撃は増加傾向(WordPressサイトやAPIが狙われる)
- カスタムフィルターで柔軟に防御できる
📌 追加オプション
- メール通知(Fail2Banのaction設定で可能)
- firewalld対応(
action = firewallcmd-ipset
) - Cloudflareと連携してWAFでブロック