Linux Server setup

SSH mit Fail2ban schützen

Die Software Fail2ban überwacht Logdateien und kann eine IP-Adresse vorübergehend sperren, wenn innerhalb eines festgelegten Zeitfensters zu viele fehlgeschlagene Anmeldeversuche auftreten. Hier setzen wir sie für SSH ein.

Fail2ban ist vor allem sinnvoll, wenn die passwortbasierte SSH-Anmeldung erlaubt ist, weil es wiederholte Versuche zum Erraten eines Passworts begrenzt. Wenn du die Passwortanmeldung bereits deaktiviert hast und nur noch die schlüsselbasierte Anmeldung erlaubst, ist Fail2ban für die Sicherheit der SSH-Anmeldung nicht erforderlich. Als zusätzliche Maßnahme kann es dennoch wiederholte Anfragen reduzieren und die Logdateien übersichtlicher halten.

Wir konfigurieren Fail2ban so, dass es auf zu viele fehlgeschlagene SSH-Anmeldeversuche innerhalb eines festgelegten Zeitfensters reagiert.

Zuerst installieren wir Fail2ban.

Das Paketverwaltungssystem von Linux (apt) schauen wir uns im Kapitel Linux-Server aktualisieren genauer an, daher führen wir die Installation an dieser Stelle ohne weitere Erklärung aus.

Fail2ban mit apt installieren:


__$ sudo apt install fail2ban -y
 

Wir legen zunächst eine jail.local Datei mit touch an:


__$ sudo touch /etc/fail2ban/jail.local
 

An dieser jail.local Datei können wir unsere Modifikationen vornehmen. Diese bleibt uns bei Updates erhalten und wird nicht wie die jail.conf überschrieben.

Öffnen wir sie zum Bearbeiten mit nano:


__$ sudo nano /etc/fail2ban/jail.local
 

In die Datei schreiben wir folgende Konfiguration:

/etc/fail2ban/jail.local


[sshd]

enabled   = true
port      = ssh,22123
filter    = sshd
logpath   = /var/log/auth.log
ignoreip  = 127.0.0.1/8
bantime   = 3600
findtime  = 600
maxretry  = 6

Bei den Parametern gibt es eigentlich nicht viel Spielraum, bis auf maxretry, nämlich bei der Anzahl der Fehlversuche innerhalb eines Zeitfensters. In diesem Fall sind 6 Anmeldeversuche erlaubt, bevor die IP temporär verbannt wird.

Kurze Erklärung zu den wichtigsten Parametern:

  • ignoreip = 127.0.0.1/8: das setzt eine Ausnahme für interne Dienste
  • port = ssh,22123: berücksichtigt sowohl den Standardport als auch den später im Tutorial verwendeten SSH-Port
  • bantime = 3600: Sekunden, die eine IP geblockt wird (3600 = 60 Minuten)
  • findtime = 600: Zeitfenster für Fehlversuche
  • maxretry = 6: Anzahl der Fehlversuche, bis eine IP geblockt wird

Starten wir Fail2ban neu, damit die Änderungen wirksam werden:


__$ sudo systemctl restart fail2ban
 

Und überprüfen auch den Status:


__$ sudo systemctl status fail2ban
 

Es sollte eine active (running) Rückmeldung kommen.

Testen ist gänzlich einfach. Einfach die eingestellten Fehlversuche (maxretry) ausreizen. Aber beachte: Wenn du gesperrt bist brauchst du entweder eine neue IP vom Provider (wenn möglich) oder du setzt vorher die Sekunden der bantime herunter (bei Änderung fail2ban.service neustarten).

IP-Adressen in Fail2ban wieder freischalten

Freigabe einer IP in Fail2ban (mehrere IPs mit Leerzeichen trennen):


__$ sudo fail2ban-client unban 116.203.69.89 123.456.789.013
 

Fail2ban IP Tabelle leeren:


__$ sudo fail2ban-client unban --all