Sobald ein Server über das Internet erreichbar ist, versuchen allerlei Bots und sonstiges Ungeziefer Zugriff auf den Server zu erlangen.
Fail2Ban ist ein einfaches Pestizid dagegen. Es analysiert die Logs nach gewissen Mustern und sperrt bei Zuwiderhandlungen den Angreifer aus. Zu bekommen ist es unter Ubuntu und Debian über die standardmässigen Paketquellen.
apt-get install fail2ban
Ganz gerne setze ich Nginx an vorderster Front im Web ein. Um auf einfache Art und Weise Dinge vor Unbefugten zu schützen, empfinde ich eine Authentifizierung mit Benutzernamen und Passwort über HTTP als praktisch und einfache Lösung. Das Modul “Auth Basic“, welches Nginx üblicherweise mitbringt, stellt diese Funktionalität zur Verfügung.
Nun ist es aber so, dass nach einer falschen Eingabe, direkt der nächste Versuch gestartet werden kann. Dadurch könnte ein Angreifer möglicherweise durch Probieren die “Benutzer Passwort”-Kombination erraten.
Eine Anmeldeversuch wird im Errorlog von Nginx wie folgt erwähnt:
2012/02/12 14:59:45 [error] 1313#0: *33 user "Fliege" was not found in "/etc/nginx/htpasswd", client: 123.123.123.123, server: localhost, request: "GET /geheim HTTP/1.1", host: "123.123.123.123:80"
Erstellen wir also einen neuen Filter für dieses Problem (z.B /etc/fail2ban/filter.d/nginx-auth.conf):
# Fail2Ban configuration file
#
# Author: unknown
#
# $Revision: 1 $
[Definition]
# Option: failregex
# Notes.: no password and user / user not found / password not match
# Values: TEXT
failregex = no user/password was provided for basic authentication.*client:
user .* was not found in.*client:
user .* password mismatch.*client:
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
ignoreregex =
Nun noch den neuen Filter Fail2Ban bekannt geben (/etc/fail2ban/jail.conf):
[nginx]
enabled = true
port = 80
filter = nginx-auth
action = iptables-allports[name=nginx, protocol=all]
logpath = /var/log/nginx/error.log
maxretry = 5
Dazu sei noch angemerkt, dass in der Konfiguration (/etc/nginx/nginx.conf) von Nginx angegeben wird, wo sich die Datei “error.log” befinden soll:
error_log /var/log/nginx/error.log;
Nun noch Fail2Ban die Konfiguration neu einlesen lassen:
/etc/init.d/fail2ban force-reload
Werden 5 Versuche durchgeführt, so wird jegliche Verbindungsversuche zwischen dem Angreifer und dem Server vom Server für 10 Minuten abgelehnt. Die Anzahl der Versuche pro Minute ist durch das Internet ohnehin ziemlich begrenzt. Anzunehmen ist, dass vielleicht 1000 Versuche in der Sekunde möglich sind. Bei folgendem Passwort “f6*d1asfAs” würde man maximal 6.05 x 1019 Versuche oder ca. 20 Millionen Jahrhunderte benötigen. Bei schwachen Passwörtern verleiht die beschriebene Lösung zusätzlichen Schutz, sonst ist sie eher paranoid.
Quellen
http://www.flickr.com/photos/7891209@N04/2695447121/
http://serverfault.com/questions/307575/fail2ban-doesnt-process-jail-even-though-regex-matches
https://www.grc.com/haystack.htm








Im Vorfeld habe ich auf meinem kleine 


Auf dem

