Apache-Zugriffsprotokoll

Apache-Zugriffsprotokoll

Ich verwende fail2ban, um böswillige Anfragen an alle meine gehosteten Domänen zu erkennen, was bis auf eine Ausnahme sehr gut funktioniert.

Wenn eine Anfrage an die IP statt an einen FQDN oder eine Subdomäne gesendet wird, wird sie abgefangen und in other_vhosts_access.log geschrieben, da die IP selbst kein virtueller Host ist.

Beispieleintrag:

somedomain.de:80 20.37.96.167 - - [24/Jan/2020:15:47:04 +0100] "POST //4walls/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1" 301 587 "https://www.google.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, wie Gecko) Chrome/79.0.3945.88 Safari/537.36"

Es scheint also, dass Apache eine umgekehrte Suche nach der IP durchführt und den Hostnamen an erster Stelle aufschreibt.

Dies führt dazu, dass fail2ban die IP des Servers und nicht die IP des Anforderers selbst sperrt.

Wie kann ich den Eintrag somedomain.de:80 verhindern?

Antwort1

Apache führt eine umgekehrte Suche nach der IP durch und schreibt den Hostnamen an die erste Stelle.

Wenn Dein Filter richtig gemacht ist (zB verankerte Regex ohne Catch-All‘s) ist es egal, wo genau die Domain und die Fremdadresse eingetragen sind.

Ich gehe davon aus, dass in Ihrem Beispielprotokolleintrag somedomain.deIhr Eintrag ist und 20.37.96.167die Adresse „Eindringling“ lautet. Dann würde der richtige Failregex folgendermaßen aussehen:

# ban everything (with code 300-599):
failregex = ^\S+\s+<ADDR>\s+\S+\s+\S+\s+\[\]\s+"[^\"]+" [345]\d+

Der verankerte Teil ^\S+\s+<ADDR>stimmt überein somedomain.de:80 20.37.96.167und würde nur aufgrund des Ankers im String von begin suchen ^.
Das würde auch als Regex reichen, wenn man alles von sperren muss other_vhosts_access.log(unabhängig vom resultierenden http-Status).

Wenn Sie eine Fail2ban-Version <= 0.9 haben, verwenden Sie <HOST>anstelle von <ADDR>.

Sie können auch prüfen, fail2ban-regexob einige Fehlalarme erfasst werden, zum Beispiel:

fail2ban-regex --raw -vv /path/to/log '^\S+\s+<ADDR>\s+\S+\s+\S+\s+\[\]\s+"[^\"]+" [345]\d+' \
  | grep <your-IP-or-hostname>

verwandte Informationen