Apache-Logdateien Fail2ban und WordPress

Apache-Logdateien Fail2ban und WordPress

Ich versuche, Fail2ban dazu zu bringen, Brute-Force- und anhaltende XMLRPC- und WP-Login-Angriffe auf eine WordPress-Site zu blockieren.

Ich habe ein Problem mit den Dateinamen im Apache-Logging. Die Selinux-Probleme zu lösen war ziemlich knifflig, aber ich bin kurz davor, es zum Laufen zu bringen.

Zunächst einmal ist hier meine Fail2Ban wordpress.conf-Datei (in 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

Das funktioniert, aber wenn ich mir die Ausgabe von „fail2ban-client status wordpress“ anschaue, werden Dutzende von Protokolldateien aufgelistet, was sinnlos und ineffizient ist. Ich kann es nicht dazu bringen, die aktuelle (heutige) Protokolldatei abzurufen, ohne den Dienst neu zu starten.

Aktuell werden übrigens 43 IP-Adressen als „derzeit gesperrt“ angezeigt.

in meinem ./logs-Ordner

2023-08-23-access.log
access.log.1692835200

Das Problem ist, dass ich möchte, dass die Apache-Protokolldatei immer „access.log“ heißt und dann in das Format mit dem Datum umgewandelt wird. Dann kann fail2ban einfach „access.log“ ansehen und arbeitet immer an der Datei des aktuellen Tages. Ich weiß nicht, woher das Datumsstempel-Suffix (vorausgesetzt, es ist ein Datumsstempel) kommt.

Hier ist der Eintrag in der Apache-Sites.conf-Datei, der das Problem verursacht.

ErrorLog "|/usr/sbin/rotatelogs /var/www/html/site1/logs/error.log"
CustomLog "|/usr/sbin/rotatelogs /var/www/html/site1/logs/access.log 86400" combined

Ich sage ihm nicht, dass er einen Stempel auf die Datei setzen soll. Warum tut er es also?

Das Rotieren von Protokollen wird hier beschrieben: https://httpd.apache.org/docs/2.4/programs/rotatelogs.html

Antwort1

Dadurch soll vermieden werden, dass für die aktuell aktive Datei immer der gleiche Dateiname beibehalten wird. In den vordefinierten Intervallen/Bedingungen rotatelogswird eine neue Datei mit einem eindeutigen, aber vorhersehbaren Suffix (standardmäßig) oder Namensmuster (bei Verwendung von Zeichen) geöffnet .%

Auf Websites mit geringer Besucherzahl würde ich eine Einstellung vorschlagen:

CustomLog "|/usr/sbin/rotatelogs -c /var/www/html/site1/logs/access.log.%Y.%m" combined 

das jeden Monat eine neue Protokolldatei mit dem Namensmuster für August 2023 wie generiert access.log.2023.08.

Für Websites mit hohem Datenverkehr: Erstellen Sie täglich eine neue Protokolldatei (was bei der von Ihnen verwendeten Option 86400 der Fall war) und verwenden Sie

CustomLog "|/usr/sbin/rotatelogs -c /var/www/html/site1/logs/access.log.%Y.%m.%d " combined 

Dadurch wird jeden Tag eine neue Protokolldatei mit dem Namensmuster für den 24. August 2023 wie erstellt . ( access.log.2023.08.24Ein solches Muster stellt sicher, dass die ls -lDatei in chronologischer Reihenfolge sortiert wird, und ist meiner Meinung nach viel einfacher zu verwenden, als beispielsweise zu glauben, access.log.24082023dass dies eine persönliche Vorliebe ist.)

Da ich jetzt ein vorhersehbares Dateinamenmuster habe, kann ich einen Cron-Job einrichten, der kurz nach Mitternacht ausgeführt wird und Folgendes ausführt:

#!/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 

Dadurch wird ein symbolischer Link von accesss_log zur aktuellen Protokolldatei für diesen Tag erstellt.

Sie können fail2ban mit dem erwarteten statischen Dateinamen konfigurieren /var/www/html/site1/logs/access.logund alles ist gut.


Wenn Sie dies nicht möchten, konfigurieren Sie Apache httpd normalerweise wie folgt:

CustomLog  /var/www/html/site1/logs/access.log combined

Dann schreibt Apache hhtpd Protokollereignisse immer in/var/www/html/site1/logs/access.log

Dann müssen Sie jedoch eine externe Funktion konfigurieren, um die Protokolldatei zu rotieren. Da Apache httpd einen Datei-Handle öffnet und das Umbenennen /var/www/html/site1/logs/access.logdiesen /var/www/html/site1/logs/access.log.old-labelDatei-Handle nicht schließt, müssen Sie Apache httpd neu starten.
Wenn Sie Apache httpd nicht neu starten, werden alle Protokolle weiterhin geschrieben /var/www/html/site1/logs/access.log.old-labelund nicht in eine neue/var/www/html/site1/logs/access.log

Sie können das natürlich selbst skripten, aber die meisten Leute verwendenlogrotatedafür, anstatt das Rad neu zu erfinden.

Antwort2

HBruijn hat die Teile der Protokolldatei bereits gut abgedeckt, aber ich möchte auf Ihr Ziel zurückkommen:

Ich versuche, Fail2ban dazu zu bringen, Brute-Force- und anhaltende XMLRPC- und WP-Login-Angriffe auf eine WordPress-Site zu blockieren.

Die Zugriffsprotokolle von Apache können für diesen Zweck recht ausführlich sein und es könnten Leistungsprobleme mit Ihrer Konfiguration auftreten, da Fail2ban versucht, sie alle zu verarbeiten und zu analysieren.

Es gibt WordPress-Plugins wieWP fail2bandas kann dabei helfen, indem es Prüfereignisse erstellt, die nur die Anmeldefehler in protokollieren /var/log/auth.log.

WP fail2ban stellt die Verbindung zwischen WordPress und fail2ban her:

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

WPf2b verfügt über drei Fail2ban-Filter: wordpress-hard.conf, wordpress-soft.conf, und wordpress-extra.conf. Diese sind so konzipiert, dass sie eine Trennung zwischen sofortigem Ausschluss (hart) und dem traditionellen, sanfteren Ansatz (weich) ermöglichen, mit zusätzlichen Regeln für benutzerdefinierte Konfigurationen.

verwandte Informationen