Server schützen mit Fail2Ban

Auch wenn es nur ein kleiner Computer ist — sobald er am Internet hängt, ist er gefährdet und kann Angriffen ausgesetzt sein.

Um dem zu entgegnen müsste man eigentlich täglich sämtlich Log-Dateien sichten, herausfinden, von welcher IP der Angriff ausging und dann von Hand diese IP mit Hilfe von IP-Tables sperren, wie es in diesem Beitrag beschrieben ist Spam in WordPress reduzieren durch blockieren von IP-Adressen mit iptables

Eine mitunter zeitraubende aber auf jeden Fall extrem nervige Aufgabe. Es gibt da aber ein Programm, welches einem genau diese Aufgabe abnimmt: Fail2Ban ( Fail2Ban Homepage, Fail2Ban auf Wikipedia )

Ein wirklich großartiges Tool, welches Log-Dateien, die von den einzelnen Diensten sowieso angelegt werden, mit Hilfe von Regular Expressions (RegEx) überwacht und bei Verstößen gegen definierte Richtlinien eine Regel für IPTables aufsetzt und die entsprechende IP für einen bestimmten Zeitraum sperrt.

So einfach es klingt, so genial ist es!

Und die Einrichtung geht auch recht einfach.

Das Programm installieren mit

apt-get install fail2ban

Damit die eingestellten Regeln nach einem Update nicht verloren gehen, wird die Datei jail.conf, in der die Regeln stehen, nach jail.local kopiert.

cd /etc/fail2ban
cp jail.conf jail.local

Das Programm fail2ban arbeitet jetzt mit der Datei jail.local.

Die Datei jail.local besteht im wesentlichen aus drei Teilen: den Default-Werten, festlegung der Aktionen und den Überwachungsregeln – hier heißen sie Jails.

Bei den Default-Werten und den Aktionen braucht man in der Regel nichts zu ändern.

Für viele Dienste gibt es schon fertige Jails, wie SSH, Apache .. Diese braucht man nur noch aktivieren.

Ein(e) Jail – also eine Regel sieht grob folgendermaßen aus:

[apache]

enabled  = false
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 3
bantime = 43200
findtime = 43200
  • Als erstes kommt der Dienstname: [apache]
  • Ob der Dienst überwacht wird, steuert der Wert „enabled“
  • Die Variable „port“ steuert die überwachten Ports
  • Die Variable „filter“ legt fest, nach welchen Verstößen in den Log-Dateien gesucht wird. Diese steht dann als RexEx in der Datei /etc/fail2ban/filter.d/“filter-name“.conf
  • „logpath“ legt fest, welche Log-Dateien für diesen Dienst durchsucht werden sollen
  • „maxretry“ legt fest, wieviele Fehlversuche von einer IP-Adresse erlaubt sind
  • „bantime“ legt die Zeit fest, für die eine IP gesperrt ist – Die Angabe ist in Sekunden. 43200 Sekunden = 12 Stunden. Wenn eine IP für immer gesperrt werden soll, muss -1 gesetzt werden
  • „findtime“ legt den Zeitraum fest, in dem eine IP-Adresse gegen eine Regel verstoßen muss, um vor die Tür gesetzt zu werden

Dadurch, dass die Filter in seperaten Dateien definiert sind, ist das fail2ban so flexibel, dass es leicht um eigene Regeln erweitert werden kann – also vorausgesetzt, man kommt mit Regular Expressions klar .. 🙂

Für NginX gibt es in dieser Datei leider keine vordefinierten Regeln, aber Dank Sergej Müller gibt es auch dafür Regeln.

Diese ligen auf GitHub und können
hier herunter geladen werden.

Danach entpacken und die Einträge für NginX einfach in seine eigene jail.local kopieren. Danach noch die Dateien aus dem Verzeichnis filter.d in sein eigenes /etc/fail2ban/filter.d-Verzeichnis kopieren und das wars.

Weiterhin ist noch darauf zu achrten, dass die Konfiguration der virtuellen Server von NginX dann da noch mitspielt, dass heißt, die Einstellungen für die Log-Dateien sollte so aussehen:

server {

    listen   80;
    server_name example.com;

    access_log   /var/log/nginx/access.example.com.log;
    error_log    /var/log/nginx/error.example.com.log;

    [ .... ]

Dann noch den Dienst starten mit

/etc/init.d/fail2ban restart

und wenn alles gut gegangen ist, sollte in der Log-Datei von Fail2Ban etwas stehen wie:

less /var/log/fail2ban.log

.
.
.
2015-02-08 23:22:18,440 fail2ban.jail   : INFO   Jail 'ssh' started
2015-02-08 23:22:18,484 fail2ban.jail   : INFO   Jail 'nginx-noscript' started
2015-02-08 23:22:18,556 fail2ban.jail   : INFO   Jail 'nginx-badrequests' started
2015-02-08 23:22:18,590 fail2ban.jail   : INFO   Jail 'nginx-badbots' started

Und schon werkelt fail2ban im Hintergrund vor sich hin und der eigene Heimserver ist ein gutes Stück geschützter!!
Und das sogar ohne nennenswert Ressourcen zu verbrauchen.

4 Gedanken zu “Server schützen mit Fail2Ban

Schreibe einen Kommentar