# Fail2ban — Brute-Force-Angriffe automatisch abwehren

> Praxis-Guide zu Fail2ban — Logdateien überwachen, IPs per Firewall sperren und Brute-Force-Angriffe auf SSH & Co. mit fail2ban-client abwehren.

Source: https://www.jpkc.com/db/cheatsheets/security/fail2ban/

<!-- PROSE:intro -->
Fail2ban ist dein automatischer Türsteher gegen Brute-Force-Angriffe: Das Tool durchsucht laufend Logdateien – etwa die SSH-Authentifizierungs-Logs – nach fehlgeschlagenen Anmeldeversuchen. Häufen sich die Treffer einer IP-Adresse innerhalb eines Zeitfensters, sperrt Fail2ban sie automatisch per Firewall (iptables oder nftables). Die Konfiguration ist in sogenannte Jails gegliedert – pro Dienst (etwa `sshd`) ein eigenes Regelwerk aus Filter, Action und Schwellwerten. Gesteuert wird alles über `fail2ban-client`. Dieser Guide zeigt dir die wichtigsten Kommandos für den Alltag – von der Status-Abfrage über manuelle Bans bis zum Testen eigener Filter-Regex.
<!-- PROSE:intro:end -->

## Dienst-Verwaltung

`fail2ban-client status` — Zeigt den Gesamtstatus und die Liste der aktiven Jails.

```bash
sudo fail2ban-client status
```

`fail2ban-client status <jail>` — Zeigt den Status eines bestimmten Jails (gesperrte IPs, Fehlversuche).

```bash
sudo fail2ban-client status sshd
```

`fail2ban-client start` — Startet den Fail2ban-Server.

```bash
sudo fail2ban-client start
```

`fail2ban-client stop` — Stoppt den Fail2ban-Server.

```bash
sudo fail2ban-client stop
```

`fail2ban-client reload` — Lädt die Konfiguration neu, ohne den Dienst neu zu starten.

```bash
sudo fail2ban-client reload
```

`fail2ban-client reload <jail>` — Lädt die Konfiguration eines bestimmten Jails neu.

```bash
sudo fail2ban-client reload sshd
```

## Sperren & Entsperren

`fail2ban-client set <jail> banip <ip>` — Sperrt eine IP manuell in einem Jail.

```bash
sudo fail2ban-client set sshd banip 192.168.1.100
```

`fail2ban-client set <jail> unbanip <ip>` — Entsperrt eine IP in einem Jail.

```bash
sudo fail2ban-client set sshd unbanip 192.168.1.100
```

`fail2ban-client unban <ip>` — Entsperrt eine IP in allen Jails.

```bash
sudo fail2ban-client unban 192.168.1.100
```

`fail2ban-client unban --all` — Entsperrt alle IPs in allen Jails.

```bash
sudo fail2ban-client unban --all
```

`fail2ban-client banned` — Zeigt alle aktuell gesperrten IPs über alle Jails hinweg.

```bash
sudo fail2ban-client banned
```

## Jail-Konfiguration

`fail2ban-client get <jail> maxretry` — Zeigt die maximale Anzahl an Fehlversuchen für ein Jail.

```bash
sudo fail2ban-client get sshd maxretry
```

`fail2ban-client set <jail> maxretry <n>` — Setzt die Anzahl der Fehlversuche vor einer Sperre (zur Laufzeit).

```bash
sudo fail2ban-client set sshd maxretry 3
```

`fail2ban-client get <jail> bantime` — Zeigt die Sperrdauer eines Jails.

```bash
sudo fail2ban-client get sshd bantime
```

`fail2ban-client set <jail> bantime <seconds>` — Setzt die Sperrdauer (zur Laufzeit).

```bash
sudo fail2ban-client set sshd bantime 3600
```

`fail2ban-client get <jail> findtime` — Zeigt das Zeitfenster, in dem Fehlversuche gezählt werden.

```bash
sudo fail2ban-client get sshd findtime
```

`fail2ban-client set <jail> addignoreip <ip>` — Setzt eine IP auf die Whitelist (wird nie gesperrt) – ideal für die eigene IP-Adresse, damit du dich nicht selbst aussperrst.

```bash
sudo fail2ban-client set sshd addignoreip 10.0.0.1
```

## Filter testen

`fail2ban-regex <logfile> <filter>` — Testet eine Filter-Regex gegen eine Logdatei.

```bash
sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
```

`fail2ban-regex '<log-line>' '<regex>'` — Testet eine Regex gegen eine einzelne Log-Zeile.

```bash
fail2ban-regex 'Failed password for root from 1.2.3.4' 'Failed .* from <HOST>'
```

`fail2ban-regex --print-all-matched <logfile> <filter>` — Zeigt alle passenden Zeilen einer Logdatei.

```bash
sudo fail2ban-regex --print-all-matched /var/log/nginx/error.log /etc/fail2ban/filter.d/nginx-http-auth.conf
```

## Logs & Fehlersuche

`fail2ban-client get loglevel` — Zeigt das aktuelle Log-Level.

```bash
sudo fail2ban-client get loglevel
```

`fail2ban-client set loglevel <level>` — Setzt das Log-Level (CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG).

```bash
sudo fail2ban-client set loglevel DEBUG
```

`tail -f /var/log/fail2ban.log` — Beobachtet das Fail2ban-Log in Echtzeit.

```bash
tail -f /var/log/fail2ban.log
```

`fail2ban-client get <jail> logpath` — Zeigt, welche Logdatei ein Jail überwacht.

```bash
sudo fail2ban-client get sshd logpath
```

## Häufige Muster

`fail2ban-client status sshd | grep 'Banned IP'` — Schnelle Prüfung auf gesperrte SSH-IPs.

```bash
sudo fail2ban-client status sshd | grep 'Banned IP'
```

`fail2ban-client set <jail> bantime 86400` — Setzt die Sperrdauer auf 24 Stunden.

```bash
sudo fail2ban-client set sshd bantime 86400
```

`fail2ban-client set <jail> bantime -1` — Setzt eine dauerhafte Sperre (kein automatisches Entsperren).

```bash
sudo fail2ban-client set sshd bantime -1
```

`zgrep 'Ban' /var/log/fail2ban.log*` — Durchsucht aktuelle und rotierte Logs nach allen Sperren.

```bash
zgrep 'Ban' /var/log/fail2ban.log*
```

<!-- PROSE:outro -->
## Fazit

Fail2ban gehört auf jeden Server, der aus dem Internet erreichbar ist: Schon mit dem mitgelieferten `sshd`-Jail reduzierst du den Lärm aus Brute-Force-Versuchen drastisch. Zwei Dinge solltest du dir merken: Eigene Anpassungen gehören in `jail.local`, nicht in `jail.conf` – Letztere wird bei Updates überschrieben. Und trag deine eigene IP-Adresse in die `ignoreip`-Whitelist ein, damit du dich nicht versehentlich selbst aussperrst.

## Weiterführende Links

- [Fail2ban – offizielles Wiki](https://github.com/fail2ban/fail2ban/wiki) – Dokumentation und Konfigurationsbeispiele (englisch)
- [fail2ban-client(1) – Manpage](https://manpages.ubuntu.com/manpages/noble/en/man1/fail2ban-client.1.html) – alle Optionen im Überblick (englisch)
- [Fail2ban – Wikipedia](https://de.wikipedia.org/wiki/Fail2ban) – Hintergrund und Funktionsweise
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [age](https://www.jpkc.com/db/cheatsheets/security/age/) – Dateien und Geheimnisse verschlüsseln
- [clamav](https://www.jpkc.com/db/cheatsheets/security/clamav/) – Antivirus-Scanner für Linux-Server
- [firewalld](https://www.jpkc.com/db/cheatsheets/security/firewalld/) – Firewall-Regeln dynamisch verwalten

