Wer einen (Home-)Server betreibt kennt die Quälgeister zur Genüge, die immer wieder mal versuchen sich per Bruteforce Attacke auf dem System einzuloggen. Beliebte Angriffsziele sind v.a. SSH oder FTP-Server.
Auffinden lassen sich die Log-Einträge über (fehlgeschlagene) Verbindungdungsversuche in der Datei /var/log/auth.log.
Hier werde ich dann von Zeit zu Zeit wieder mal fündig:
Apr 8 09:39:26 Devoras sshd[12091]: pam_unix(sshd:auth): check pass; user unknown Apr 8 09:39:26 Devoras sshd[12091]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=61.145.xx.xxx Apr 8 09:39:28 Devoras sshd[12091]: Failed password for invalid user aandrews from 61.145.xx.xxx port 37024 ssh2
Die IP-Adresse habe ich verkürzt, wobei die meisten sowieso wissen woher die meisten Angriffe dieser Art kommen – bei mir stammen sie so gut wie ausschließlich aus China (dies kann man auf die Schnelle mit Utrace prüfen).
Um diesen nervigen Gesellen einen Riegel vorzuschieben, habe ich mich etwas im Internet informiert und bin auf das Tool Fail2Ban gestoßen, das es ermöglicht IP-Adresse nach einer bestimmten Anzahl von Fehllogins für eine definierte Zeit zu sperren (Quelle: fail2ban.org):
Fail2Ban durchsucht Logdateien wie /var/log/pwdfail oder /var/log/apache/error_log und blockt IP-Adressen, die zu viele fehlgeschlagene Loginversuche haben. Es aktualisiert Firewallregeln, um diese IP-Adressen zu sperren. Fail2Ban kann mehrere Logfiles lesen – beispielsweise die von sshd oder apache. Die IP-Adressen werden nach einer vorher festgelegten Zeitspanne wieder aktiviert.
Fail2Ban installieren und einrichten
Fail2Ban ist bei den meisten Distributionen in den Repositories enthalten, so auch unter Ubuntu:
sudo apt-get install fail2ban
Damit bei einem Update von fail2ban die Konfigurationsdatei nicht ungewollt überschrieben wird, kopieren wir diese vor dem Editieren.
Hinweis in der Datei /etc/fail2ban/jail.conf:
# To avoid merges during upgrades DO NOT MODIFY THIS FILE
# and rather provide your changes in /etc/fail2ban/jail.local
Wie im obigen Hinweis beschrieben kopieren wir die Datei entsprechend:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Danach öffnen wir die Datei jail.local zum Editieren:
sudo nano /etc/fail2ban/jail.local
Wir passen nun nachfolgende Zeilen entprechend an:
[DEFAULT] ignoreip = 127.0.0.1/8 192.168.2.105 bantime = 600 maxretry = 3
IPs, die nie blockiert werden sollen, stehen hinter „ingnoreip=„. Es ist sehr ratsam seine interne IP-Adresse dort anzugeben, wenn sich der (Home-)Server im eigenen lokalen Netzwerk befindet. So verhindert man, dass man sich selbst aussperrt.
Danach editieren wir die Sektion für die Überwachung von SSH:
[ssh] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3
Wichtig ist v.a. die Richtigkeit des Pfades zur Logfile „auth.log“ von ssh. „maxretry“ besagt, wie oft ein Client einen falschen Verbindungsversuch ausführen darf, bis er geblockt wird.
Benachrichtigung durch Fail2Ban bei Block/Unblock/Start/Stop
Wir wollen natürlich auch informaiert werden, wenn ein neues Ereignis Fail2Ban in Aktion treten hat lassen. Dies geschieht mit einer kleinen Anpassung in der Sektion der „Actions„.
action = %(action_mwl)s
Standardmäßg versendet Fail2Ban keine Mails, deshalb müssen wir in obiger Zeile beim Wort „action_“ in der Klammer noch die Buchstaben mwl anfügen.
Für den richtigen Versand müssen wir aber noch die Mail-Adresse angeben, an die wir den Bericht gesendet haben wollen:
destemail = you@domain.tld
Abschließend starten wir Fail2Ban neu:
sudo /etc/init.d/fail2ban restart
Nun sollte Fail2Ban Angriffe blocken und euch eine Mail mit Infos über den Angriff bzw. den Block liefern.
Der Status von Fail2Ban lässt sich auch auf der Konsole mit nachfolgendem Befehl auslesen:
sudo fail2ban-client status ssh