1. 概要
メールサーバの設定はともかくとして、実は、これが本丸だったりする。
2. フィルタ
「apache」のフィルタとして、デフォルトで下記が用意されています。
/usr/local/etc/fail2ban/filter.d/apache-auth.conf
/usr/local/etc/fail2ban/filter.d/apache-badbots.conf
/usr/local/etc/fail2ban/filter.d/apache-botsearch.conf
/usr/local/etc/fail2ban/filter.d/apache-common.conf
/usr/local/etc/fail2ban/filter.d/apache-fakegooglebot.conf
/usr/local/etc/fail2ban/filter.d/apache-modsecurity.conf
/usr/local/etc/fail2ban/filter.d/apache-nohome.conf
/usr/local/etc/fail2ban/filter.d/apache-noscript.conf
/usr/local/etc/fail2ban/filter.d/apache-overflows.conf
/usr/local/etc/fail2ban/filter.d/apache-pass.conf
/usr/local/etc/fail2ban/filter.d/apache-shellshock.conf
とりあえず、このうち、下記のものを使ってみます。
・apache-auth: 管理画面などのパスワード間違い(401エラー)を監視。
・apache-noscript: php, pl, cgi などのスクリプトを狙った攻撃(403, 404エラー)を監視。
・apache-botsearch: 脆弱性スキャナー(phpMyAdmin などを探す動き)を監視。
3. 設定
vi /usr/local/etc/fail2ban/jail.local
下記を記述します。
[apache-auth]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/www/error.log
banaction = ipfw
maxretry = 3
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/www/access.log
banaction = ipfw
maxretry = 3
[apache-botsearch]
enabled = true
port = http,https
filter = apache-botsearch
logpath = /var/log/www/access.log
banaction = ipfw
maxretry = 2
設定をチェックします。
fail2ban-client -d
特にエラーが出なければ。
再読み込みして有効化します。
service fail2ban reload
4. 追加
前項のみでは、まだ不十分なので。
最近のログを「Gemini」伍長に分析してもらいました。
それで、わかったのが、海外からのクローラーのアクセスが急増しております。
「client denied by server configuration」という、ボットがアクセス禁止領域を強引に読み取ろうとしている形跡。
また、「/actuator/health」「/awstatsicons/browser/...」という存在しない、おそらくは脆弱性をついたアクセス。
「/blog/wp-login.php」、「WordPress」のログインを狙ったアクセス。
が、多数あるようです。
これらを「fail2ban」にかけます。
まず、海外クローラー(アグレッシブなボット)を制限します。
vi /usr/local/etc/fail2ban/filter.d/apache-bot-limit.conf
下記を記述します。
[Definition]
failregex = ^<HOST> -.*"(?:TikTokSpider|serpstatbot|SemrushBot|AhrefsBot).*".*
vi /usr/local/etc/fail2ban/jail.local
下記を追加します。
[apache-bot-limit]
enabled = true
filter = apache-bot-limit
logpath = /var/log/www/access.log
maxretry = 20
findtime = 60
bantime = 86400
上記は、「bot」が、1分間に20回以上アクセスしてきたら1日「BAN」します。
vi /usr/local/etc/fail2ban/filter.d/apache-scan.conf
下記を記述します。
[Definition]
failregex = ^<HOST> -.*"GET .*(?:\.env|\.git|actuator|wp-login|config\.php|setup\.cgi).* HTTP\/.*" (?:403|404)
vi /usr/local/etc/fail2ban/jail.local
下記を追加します。
[apache-scan]
enabled = true
filter = apache-scan
logpath = /var/log/www/access.log
banaction = ipfw
maxretry = 1
bantime = 2592000
上記は、悪質なスキャンなので、1発で長期間(1ヶ月) 「BAN」します。
設定をチェックして。
fail2ban-client -d
再読み込みして有効化します。
service fail2ban reload
5. 参考サイト
本ページは、「Gemini」伍長を参考にさせていただきました。