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.
Comments
p3t3r (not verified)
Hi Bjoern!
Fri, 24.07.2015 - 22:20Hi Bjoern!
Der Link https://github.com/sergejmueller/fail2ban/archive/master.zip resultiert 404.
Kann es sein, dass diese Inhalte gemeint sind?
https://github.com/sergejmueller/sergejmueller.github.io/wiki/Nginx-Fail...
Vielen Dank für die ganze Arbeit - super Anleitungen.
Schönes Wochenende!
p3t3r
Bjoern Stremmel (not verified)
Nochmal Hallo
Sat, 25.07.2015 - 22:26Nochmal Hallo
Danke für den Hinweis. Werde den Link anpassen.
Ich meinte eher diesen Link https://github.com/sergejmueller/sergejmueller.github.io/wiki/Fail2Ban%3...
Aber der Artikel über die Bot-Abwehr ist auch gut und sehr empfehlenswert.
Gruß Bjoern
Peter (not verified)
kann ich diesen schritt hier
Thu, 17.09.2015 - 13:36kann ich diesen schritt hier schon installieren, bevor ich ich das mit dyndns mache?
lg
Bjoern Stremmel (not verified)
Aber natürlich .. :-)
Thu, 17.09.2015 - 20:42Aber natürlich .. :-)
Add comment