Server

Fail2Banをインストールし、攻撃を防ぐ設定を追加する一連の手順


【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でブロック

-Server