WordPress サイトに対するブルート フォース攻撃と持続的な xmlrpc 攻撃および wp-login 攻撃を Fail2ban でブロックしようとしています。
Apache のログ ファイル名に問題があります。selinux の問題を克服するのはかなり面倒でしたが、動作にかなり近づいています。
まず、ここに私のFail2Ban wordpress.confファイルがあります(jail.d内)
[wordpress]
enabled = true
usedns = no
port = http,https
filter = wordpress
banaction = firewallcmd-rich-rules
banaction_allports = firewallcmd-rich-rules
logpath = /var/www/html/site1/logs/*-access.log.*
/var/www/html/site2/logs/*-access.log.*
... etc ...
maxretry = 1
findtime = 1200
bantime = 1440
これは機能していますが、「fail2ban-client status wordpress」の出力を見ると、10 個のログ ファイルがリストされており、これは無意味かつ非効率的です。サービスを再起動せずに、現在の (今日の) ログ ファイルを取得することはできません。
ちなみに、現在 43 個の IP アドレスが「現在禁止」として表示されています。
./logsフォルダ内
2023-08-23-access.log
access.log.1692835200
問題は、Apache ログ ファイルを常に「access.log」という名前にして、日付の形式にローテーションしたいということです。すると、fail2ban は「access.log」だけを見て、常に現在の日付のファイルで作業することになります。日付スタンプ サフィックス (日付スタンプであると仮定) がどこから来るのかはわかりません。
問題の原因となっている apache sites.conf ファイルのエントリは次のとおりです。
ErrorLog "|/usr/sbin/rotatelogs /var/www/html/site1/logs/error.log"
CustomLog "|/usr/sbin/rotatelogs /var/www/html/site1/logs/access.log 86400" combined
ファイルにスタンプを押すように指示しているわけではないのに、なぜそうするのでしょうか?
ログのローテーションについては、ここで説明します。 https://httpd.apache.org/docs/2.4/programs/rotatelogs.html
答え1
現在アクティブなファイル名を常に同じままにしておくことを避けるように設計されています。定義済みの間隔/条件で、一意だが予測可能なサフィックス (デフォルト) または名前パターン (文字を使用する場合) をrotatelogs
使用して新しいファイルを開きます。%
訪問者数が少ないサイトでは、次の設定をお勧めします:
CustomLog "|/usr/sbin/rotatelogs -c /var/www/html/site1/logs/access.log.%Y.%m" combined
2023 年 8 月の名前パターンを使用して、毎月新しいログ ファイルを生成します (例: access.log.2023.08
.
より多くのトラフィックを生成するサイトの場合:毎日新しいログファイルを生成し(これは86400オプションで行ったことです)、
CustomLog "|/usr/sbin/rotatelogs -c /var/www/html/site1/logs/access.log.%Y.%m.%d " combined
これにより、2023 年 8 月 24 日のような名前パターンを持つ新しいログ ファイルが毎日生成されますaccess.log.2023.08.24
。(このようなパターンにより、ls -l
ファイルが時系列順に並べ替えられるようになり、たとえば よりもはるかに使いやすいと思います。 access.log.24082023
これは個人的な好みです。)
予測可能なファイル名パターンができたので、真夜中過ぎに実行される cron ジョブを設定できます。
#!/bin/bash
basefile="/var/www/html/site1/logs/access.log"
currentlog=$(date +$basefile.%Y.%m.%d)
rm $basefile
ln -s $currentlog $basefile
# and you can do some maintenance here as well, like for example
# compress the log file from a week ago
oldlog=$(date --date="1 week ago" +$basefile.%Y.%m.%d)
gzip $oldlog
これにより、accesss_log からその日の現在のログ ファイルへのシンボリック リンクが作成されます。
fail2ban を、期待される静的ファイル名で構成すれば/var/www/html/site1/logs/access.log
、すべて問題ありません。
これを望まない場合は、通常、Apache httpd を次のように構成します。
CustomLog /var/www/html/site1/logs/access.log combined
するとApache hhtpdは常にログイベントを/var/www/html/site1/logs/access.log
しかし、ログファイルをローテーションするための外部関数を設定する必要があり、Apache httpdはファイルハンドルを開いて名前を変更してもそのファイルハンドルが閉じられない/var/www/html/site1/logs/access.log
ため/var/www/html/site1/logs/access.log.old-label
、Apache httpdを再起動する必要があります。Apache httpdを
再起動しないと、すべてのログイベントが引き続き書き込まれ/var/www/html/site1/logs/access.log.old-label
、新しいログファイルに書き込まれません。/var/www/html/site1/logs/access.log
もちろん自分でスクリプトを作成することもできますが、ほとんどの人はlogrotate
車輪の再発明をするのではなく、そのために。
答え2
HBruijn はすでにログ ファイルの部分について詳しく説明していますが、私はあなたの目標に戻りたいと思います。
WordPress サイトに対するブルート フォース攻撃と持続的な xmlrpc 攻撃および wp-login 攻撃を Fail2ban でブロックしようとしています。
Apache のアクセス ログは、この目的には非常に詳細になる可能性があり、Fail2ban がそれらをすべて消化して分析しようとするため、構成によってパフォーマンスの問題が発生する可能性があります。
WordPressプラグインには次のようなものがありますWP フェイル2バンログイン失敗のみを記録する監査イベントを作成することで、この問題を解決できます/var/log/auth.log
。
WP fail2ban は、WordPress と fail2ban 間のリンクを提供します。
Oct 17 20:59:54 foobar wordpress(www.example.com)[1234]: Authentication failure for admin from 192.168.0.1 Oct 17 21:00:00 foobar wordpress(www.example.com)[2345]: Accepted password for admin from 192.168.0.1
wordpress-hard.conf
WPf2b には、、、の3 つの fail2ban フィルターが付属しています。これらは、カスタム構成用の追加ルールを使用してwordpress-soft.conf
、wordpress-extra.conf
即時禁止 (ハード) と従来のより緩やかなアプローチ (ソフト) を分割できるように設計されています。