
Basierend aufRepositoryIch möchte Fail2ban-Filter verwenden, um meine Nginx-Protokolle zu analysieren und verdächtige Anfragen und IPs zu sperren.
Auf meinem Server verwende ich ein benutzerdefiniertes Protokollformat für nginx. Da ich mehrere Sites hoste, haben die Protokolldateien die folgende Struktur.
log_format custom_format '$server_name $remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent" "$gzip_ratio"'
Was erzeugt einen Protokolleintrag wie diesen:
www.example.com 62.210.129.246 - - [24/Aug/2018:11:07:46 +0200] "POST /wp-login.php HTTP/1.1" 301 185 "http://example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36" "-"
Da ich den Servernamen vor „remote_addr“ einfüge, wird die <HOST>
Regex-Gruppe (fail2ban) aufgelöst und es (?:::f{4,6}:)?(?P<host>\S+))
gibt keine Übereinstimmung. Ich bin nicht sicher, wie ich den Regex ändern soll, damit er zu meinem Protokollformat passt.
Irgendwelche Ideen?
Antwort1
Ehrlich gesagt, verschwenden Sie Ihre CPU nicht damit, die „WebExploits“ sind wirklich nur Hintergrundrauschen. Die Verwendung von fail2ban zur Reduzierung von Weblogs bietet keinen wirklichen Sicherheitsvorteil.
Wenn es wirklich sein muss, fügen Sie $server_name
danach $remote_addr -
das Nginx-Protokollformat ein, das dem (nicht) WebExploits-Konzept von regulären Ausdrücken entspricht.
Alternativ ersetzen Sie ^<HOST>
in Ihrem regulären Ausdruck durch ^[^ ]* <HOST>
. Dies bedeutet, dass alle Zeichen, die kein Leerzeichen sind, gefolgt von einem Leerzeichen und dann<HOST>