Skip to content

fail2ban auf Debian installieren und konfigurieren

Um Bruteforce Attacken auf ssh oder ftp Servern abzuwehren, empfiehlt sich unter anderem der Einsatz von fail2ban. Über die iptables sperrt fail2ban Quell-IPs, über die versucht wird, ein Passwort zu erraten. Je nach Konfiguration wird die IP nach einer bestimmten Anzahl von Fehlversuchen für eine gewisse Zeit gesperrt.

Installation

Wir benutzen fail2ban aus den Debian Paketquellen. Die aktuelle Version unter Debian Wheezy ist 0.8.6-3wheezy2. Damit wir mehr Informationen von den IP-Adressen bekommen, installieren wir auch noch whois mit dazu.

tux@earth:~$ sudo apt-get install fail2ban whois

Konfiguration

Nach der Installation gehen wir nach /etc/fail2ban und beginnen mit der Konfiguration.

Datei/Verzeichnis Beschreibung
/etc/fail2ban/action.d/ Aktionen, welche ausgeführt werden, wenn eine IP-Adresse gesperrt werden soll
/etc/fail2ban/fail2ban.conf Basis Einstellungen
/etc/fail2ban/filter.d/ Filter (Reguläre Ausdrücke), womit Fail2Ban Angriffe aus dem Logfiles erkennt
/etc/fail2ban/jail.conf Einstellung zur Überwachung der einzelnen Services (nur SSH ist schon aktiv)

Mann soll nicht die Datei /etc/fail2ban/jail.conf benutzen, sondern eine Eigene Datei /etc/fail2ban/jail.local erstellen.

tux@earth:~$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
tux@earth:~$ sudo mv /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.dist

Der Wert ignoreip, schließt diese definierten IP-Adressen aus. Mann könnte somit die NAT-IP-Adresse vom Office eingeben. Der Wert bantime gibt die Zeit in Sekunden an, wie lange die IP-Adresse gesperrt bleibt. Ein wert von -1 bedeutet, dass IP-Adressen permanent gesperrt bleiben. Der Wert destemail ist die Email-Adresse des Administrators (default: root@localhost).

[DEFAULT]
ignoreip  = 127.0.0.1 <NATIP01> <NATIP02>
bantime   = 86400
destemail = tux@example.com
....
[apache-myadmin]
enabled   = true
port      = http,https
filter    = apache-myadmin
banaction = iptables-allports
action    = %(action_mwl)s
logpath   = /var/log/apache*/*error.log
maxretry  = 2

In unserer Konfiguration haben wir einen Eintrag [apache-myadmin] hinzugefügt, welche nicht in der Standard Konfiguration vorhanden ist. Damit dieser Jail funktioniert, müssen wir noch den dazugehörigen Filter erstellen.

[Definition]
failregex = ^[[]client <HOST>[]] File does not exist: *myadmin* *\s*$
    ^[[]client <HOST>[]] File does not exist: *MyAdmin* *\s*$
    ^[[]client <HOST>[]] File does not exist: *mysqlmanager* *\s*$
    ^[[]client <HOST>[]] File does not exist: *setup.php* *\s*$
    ^[[]client <HOST>[]] File does not exist: *mysql* *\s*$
    ^[[]client <HOST>[]] File does not exist: *phpmanager* *\s*$
    ^[[]client <HOST>[]] File does not exist: *phpadmin* *\s*$
    ^[[]client <HOST>[]] File does not exist: *sqlmanager* *\s*$
    ^[[]client <HOST>[]] File does not exist: *sqlweb* *\s*$
    ^[[]client <HOST>[]] File does not exist: *webdb* *\s*
ignoreregex =

Damit nach einem System-Crash Fail2Ban auch wieder korrekt startet, setzen wir in der Datei /etc/default/fail2ban, den Parameter -x in der Variable FAIL2BAN_OPTS. Damit veranlassen wir Fail2Ban, dass nach einem System-Crash die Datei /var/run/fail2ban/fail2ban.sock gelöscht wird.

tux@earth:~$ sudo vi /etc/default/fail2ban
....
FAIL2BAN_OPTS="-x"
....

Je nachdem ob wir ’sendmail‘ oder ’mail‘ als mta verwenden, können wir unter action.d/sendmail-whois-lines.conf bzw. action.d/mail-whois-lines.conf die entsprechenden Einstellungen für die Benachrichtigungen vornehmen. In unserem Fall, möchten wir die Nachrichten in Deutsch bekommen. Dazu kopieren wir die Original Datei nach -en.conf und *-de.conf. Dann löschen wir die Original Datei und setzen einen Symlink auf die *-de.conf* Datei.

tux@earth:~$ sudo cp action.d/sendmail-whois-lines.conf action.d/sendmail-whois-lines-en.conf
tux@earth:~$ sudo cp action.d/sendmail-whois-lines.conf action.d/sendmail-whois-lines-de.conf
tux@earth:~$ sudo rm sendmail-whois-lines.conf && sudo ln -s sendmail-whois-lines-de.conf sendmail-whois-lines.conf

Nun können wir die Ausgabe eine E-Mail Benachrichtigung entsprechen anpassen und übersetzen. Da die Deutsche Sprache Sonderzeichen enthält, sollten wir den Content-Type der E-Mail Nachricht auf text/plain; charset=“UTF8″ ändern. Das geht aber nur, wenn wir dazu keine Eigene Zeile verwenden, sondern wie im Beispiel am Ende der To: Zeile anhängen.

actionstart = printf %%b "Subject: [earth] Fail2Ban - <name>: gestartet
              From: Fail2Ban <<sender>>
              To: <dest>\nContent-Type: text/plain; charset=\"UTF8\"\n
              Hallo,\n
              Der jail <name> wurde erfolgreich gestartet.\n
              Viele Grüße,\n
              Fail2Ban" | /usr/sbin/sendmail -f <sender> <dest>

So, wenn alles getan ist… trinke ein Bier…, nee, das war was anderes :smile:

Nachdem wir nun Fail2Ban soweit eingerichtet haben, starten wir den Service mit folgenden Befehl neu.

tux@earth:~$ sudo service fail2ban restart

Nützliche Befehle für fail2ban

Logfiles von fail2ban ansehen.

tux@earth:~$ sudo tail /var/log/fail2ban.log

Status von fail2ban anzeigen.

tux@earth:~$ sudo fail2ban-client status

Status des jail ssh von fail2ban anzeigen.

tux@earth:~$ sudo fail2ban-client status sshd

Reguläre Ausdrücke des Filters filter.d/sshd.conf testen.

tux@earth:~$ sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

Eine IP-Adresse mit fail2ban-client wieder entsperren.

tux@earth:~$ sudo fail2ban-client set sshd unbanip <IP>

Dokumentation