Skip to content

Fail2Ban

Daniel Bieli edited this page Jun 11, 2019 · 8 revisions

Fail2Ban Logo

Inhaltsverzeichnis

  1. Fail2Ban Kommandos
  2. Fail2Ban Filter & Jail Konfiguration für nginx HTTP Auth

Weitere Links:

Fail2Ban Kommandos

fail2ban Konfig neu laden

fail2ban-client reload

fail2ban Jail & Actions ausgeben

fail2ban-client -d

fail2ban Jail Status abfragen

fail2ban-client status sshd
fail2ban-client status nginx-http-auth
fail2ban-client status nginx-botsearch
fail2ban-client status php-url-fopen
fail2ban-client status monit
fail2ban-client status postfix
fail2ban-client status ee-wordpress

Fail2Ban Filter & Jail Konfiguration für nginx HTTP Auth

Inhalt:

Fail2ban Filter für nginx HTTP Auth erstellen

Erstellen Sie dann den nginx-Filter, wenn Sie sich auf dem neuesten fail2ban befinden, haben Sie diese Datei möglicherweise bereits, in diesem Fall können Sie mit dem Befehl fail2ban-regex zum Testen übergehen.

sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf

Fügen Sie folgenden Text ein: Quelle

[Definition]
failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: <HOST>, server: \S*, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"(, referrer: "\S+")?\s*$

ignoreregex = 

Ctrl+X, Y + Enter um zu speichern und zu beenden.

Jetzt können wir den nginx HTTP-Authortfilter testen, indem wir das im virtuellen Host von nginx angegebene Fehlerprotokoll scannen.

fail2ban-regex /var/log/nginx/wpbullet.error.log /etc/fail2ban/filter.d/nginx-http-auth.conf

Du wirst diese Ausgabe sehen, die zeigt, dass sie die von uns zuvor erzeugten Login-Fehler gefunden hat.

Running tests
=============

Use   failregex file : /etc/fail2ban/filter.d/nginx-http-auth.conf
Use         log file : /var/log/nginx/wp-bullet.error.log


Results
=======

Failregex: 2 total
|-  #) [# of hits] regular expression
|   1) [2] ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: , server: \S+, request: "GET /wp-login.php.*$
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [2] Year/Month/Day Hour:Minute:Second
`-

Lines: 2 lines, 0 ignored, 2 matched, 0 missed

Erstelle ein fail2ban Jail für nginx HTTP Auth

Stellen Sie sicher, dass ein fail2ban Jail-Ordner existiert.

sudo mkdir -p /etc/fail2ban/jail.d

Erstellen Sie die fail2ban nginx http auth Jail-Konfigurationsdatei.

sudo nano /etc/fail2ban/jail.d/nginx-http-auth.conf

Fügen Sie die Konfiguration ein, die den zuvor erstellten Filter verwendet. Sie scannt alle nginx-Protokolldateien und sperrt Benutzer für 6000 Minuten, deren HTTP Authentifikation in einem Zeitraum von 60 Sekunden dreimal fehlschlägt.

[nginx-http-auth]
enabled = true
filter = nginx-http-auth
port = http,https
logpath = /var/log/nginx/*.log
findtime = 60
bantime = 6000
maxretry = 3

Jetzt, da wir wissen, dass das Jail erstellt wurde, testen Sie die fail2ban-Syntax, um sicherzustellen, dass alles funktioniert.

sudo fail2ban-client -d

Wenn du keine Fehler bekommen hast (Warnungen sind OK), dann können wir fail2ban neu starten.

service fail2ban restart

Überprüfen des nginx HTTP Auth fail2ban Status

Der fail2ban-Client kann verwendet werden, um die Statistiken seiner Jails anzuzeigen.

sudo fail2ban-client status nginx-http-auth

Während eines lokalen Tests gelang es mir, die Gateway-IP zu sperren.

Status for the jail: nginx-http-auth
|- filter
|  |- File list:        /var/log/nginx/wp-bullet.error.log /var/log/nginx/error.log
|  |- Currently failed: 0
|  `- Total failed:     3
`- action
   |- Currently banned: 1
   |  `- IP list:       192.168.60.1
   `- Total banned:     1

Sie können auch die iptables auflisten.

sudo iptables -L -n

Dies zeigt die iptables-Kette zur Begrenzung von nginx HTTP Auth Anfragen.

Chain f2b-nginx-http-auth (2 references)
target     prot opt source               destination
REJECT     all  --  192.168.0.1          0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Unzählige Bots scannen das Web und testen ihre Listen mit Standardpasswörtern an allen WordPress Installationen die sie finden. Diese werden nun schnell gesperrt. Nach der Installation dieser WordPress-Sicherheitslösung werden keine schweren PHP-Plugins wie WordFence mehr benötigt. Sämtliche Attacken werden geblockt ohne auch nur ein einziges Mal PHP oder MySQL auszuführen. Dies führt zu massivem Performance Gewinn gegenüber jeder Plugin basierten Lösung.

Quellen: