Fail2Banサービスは、サイトのパスワードを試行錯誤しているボットのIPアドレスをブロックするのに役立ちます。最近では、大量のPOSTリクエストがWebサーバーに負荷をかける攻撃によく使用されています。この例では、人気のあるCMSであるWordPressやSSHサービスに対するIPアドレスのブロックを解説します。
1. Fail2Banサービスのインストール
1.1 Epelリポジトリを接続する
yum install epel-release
次に、/etc/yum.repos.d/epel.repoでenabled=1
に設定します。
yum install fail2ban
2. 一般設定
Fail2Banの設定ファイルは、/etc/fail2banディレクトリに保存されます。そこにはデフォルト設定が記載されたjail.conf
というファイルがありますが、このファイルはパッケージの更新によって上書きされる可能性があるため、使用しない方が良いです。代わりに、新しいjail.local
ファイルを作成します。このファイルで定義された値は、jail.conf
の値を上書きします。
jail.conf
には[DEFAULT]セクションがあり、それに続いて個別のサービスのセクションがあります。jail.local
はこれらの値を上書きすることができます。また、/etc/fail2ban/jail.d/のファイルも、これらのファイルの設定を上書きするために使用されます。ファイルは以下の順序で適用されます:
/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/*.conf (アルファベット順)
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/*.local (アルファベット順)
デフォルトの設定を確認し、/etc/fail2ban/jail.localファイルに追加します。
[DEFAULT]
# ホストを1時間ブロックする:
bantime = 3600
# /etc/fail2ban/jail.d/00-firewalld.confを上書き:
banaction = iptables-multiport
[sshd]
enabled = true
サービスを再起動します。
service fail2ban restart
次に、状態を以下のコマンドで確認します。
fail2ban-client status
3. WordPressフィルター
WordPressの管理画面(/wp-login.php)に10分間に10回以上アクセスしたIPアドレスをブロックするフィルターとルール(jail)を追加します。
3.1 フィルターの作成
/etc/fail2ban/filter.d/wordpress.conf
[Definition]
failregex = ^.* "POST .*/wp-login.php([/\?#\\].*)? HTTP/.*" 200
ignoreregex =
このフィルターに基づいてIPアドレスを検索します。
3.2 Jailの追加
/etc/fail2ban/jail.d/wordpress.conf
[wordpress]
action = iptables-multiport[name="wordpress", port="http,https"]
filter = admin-wordpress
logpath = /var/www/vhosts/system/*/logs/*access*log
/var/log/httpd/*access_log
別のWebサーバーを使用している場合は、ログの形式に応じてフィルターを変更し、正しいログファイルのパス(access_log)を指定する必要があります。設定を変更した後、サービスを再起動してください。