SSH ist das wichtigste Tor zu deinem Server – und damit auch das beliebteste Angriffsziel. Mit Fail2Ban kannst du verdächtige Loginversuche automatisch blockieren. In Kombination mit einer GeoIP-Filterung sperrst du zusätzlich ganze Länder aus, von denen du keinen Zugriff benötigst.
In diesem Tutorial zeigen wir, wie du beides auf einem Ubuntu Server einrichtest.


1. Voraussetzungen

  • Ubuntu Server (22.04 oder neuer)
  • Root- oder Sudo-Zugriff
  • SSH läuft auf Standard-Port oder benutzerdefiniertem Port

2. Fail2Ban installieren

Installiere Fail2Ban aus den offiziellen Repositories:

sudo apt update
sudo apt install fail2ban -y

Starte und aktiviere den Dienst:

sudo systemctl enable --now fail2ban

3. Grundkonfiguration

Erstelle eine lokale Kopie der Standardkonfiguration:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

Suche nach dem Abschnitt [sshd] und aktiviere ihn:

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
findtime = 10m

Erklärung:

  • maxretry = 3: Nach 3 Fehlversuchen wird die IP gesperrt.
  • bantime = 1h: Sperre dauert 1 Stunde.
  • findtime = 10m: Zeitraum, in dem Fehlversuche gezählt werden.

Anschließend Dienst neu starten:

sudo systemctl restart fail2ban

4. Status prüfen

Um zu sehen, ob Fail2Ban aktiv ist:

sudo fail2ban-client status sshd

Hier siehst du die aktuell gebannten IP-Adressen.


5. GeoIP-Filterung einrichten

Mit der GeoIP-Filterung kannst du Zugriffe aus bestimmten Ländern blockieren – z. B. alles ausser Schweiz und Deutschland.
Dazu benötigst du iptables und das GeoIP-Modul:

sudo apt install xtables-addons-common libtext-csv-xs-perl libmoosex-types-netaddr-ip-perl libnet-cidr-lite-perl -y
sudo xtables-multi geoipupdate

Aktualisiere die GeoIP-Daten:

sudo geoipupdate

Dann kannst du z. B. nur CH und DE zulassen:

sudo iptables -A INPUT -p tcp --dport 22 -m geoip ! --src-cc CH,DE -j DROP

Damit blockierst du alle SSH-Verbindungen, die nicht aus der Schweiz oder Deutschland stammen.

Tipp:
Wenn du Docker nutzt, setze diese Regel besser auf der Host-Firewall, nicht in Container-Netzwerken.


6. Regeln dauerhaft speichern

Damit die GeoIP-Regel nach einem Neustart aktiv bleibt:

sudo apt install iptables-persistent -y
sudo netfilter-persistent save

7. Kombination mit UFW (optional)

Wenn du UFW verwendest, kannst du Fail2Ban damit kombinieren.
In /etc/fail2ban/jail.local einfach den banaction-Wert anpassen:

banaction = ufw

So verwaltet Fail2Ban die Sperren direkt über UFW.


8. Sicherheit weiter erhöhen

Weitere sinnvolle SSH-Härtungen:

  • Root-Login deaktivieren:
  PermitRootLogin no
  • Nur bestimmte Benutzer zulassen:
  AllowUsers deinuser
  • Zwei-Faktor-Authentifizierung aktivieren (siehe dein eigener Blog zu „2FA für SSH“)
  • Standard-Port ändern (z. B. 2222 statt 22)

9. Fazit

Mit Fail2Ban und einer GeoIP-Filterung schützt du deinen Ubuntu-Server effektiv vor Brute-Force-Angriffen.
Fail2Ban sperrt automatisch verdächtige IPs, während GeoIP-Regeln ungewollte Länder ausschliessen.

Das Ergebnis: weniger Logeinträge, weniger Angriffe und deutlich mehr Sicherheit – bei minimalem Aufwand.


Tipp:
Kombiniere Fail2Ban mit einem zentralen Monitoring-Tool wie Grafana oder Graylog, um Loginversuche und Sperren visuell zu überwachen.