# fail2ban-webui Eine schlanke, selbst gehostete Weboberfläche, um **fail2ban-Sperren auf mehreren Hosts anzuzeigen, zu setzen und aufzuheben** – Bare Metal, VMs, LXC-Container oder Docker-Hosts. - Eine Seite für alle Hosts: aktuelle Sperren pro Jail, Herkunft (GeoIP) mit Weltkarte, Suche und Filter - IP dauerhaft auf beliebigen Hosts sperren, pro Jail oder überall entsperren - Protokoll jeder Aktion (wer, wann, von wo) - Optional: Log-Verlauf pro IP aus **Loki**, Links nach **Grafana** - Anmeldung mit lokalem Benutzer, **OpenID Connect** (z. B. Authentik) oder über den Reverse Proxy - Oberfläche auf Englisch und Deutsch, weitere Sprachen über eine JSON-Datei - Läuft als gehärteter Container (schreibgeschützt, ohne Capabilities, nicht als root), `amd64` und `arm64` ``` Browser ──HTTPS──▶ Reverse Proxy ──▶ fail2ban-webui (Docker) │ SSH, ein eingeschränkter Schlüssel ┌─────────────────────┼─────────────────────┐ ▼ ▼ ▼ Host A (Bare Metal) LXC-Container Docker-Host f2b-webctl f2b-webctl f2b-webctl fail2ban fail2ban fail2ban ``` Die Weboberfläche bekommt nie eine Shell auf deinen Hosts. Auf jedem Host läuft ein kleiner Agent, [`f2b-webctl`](agent/f2b-webctl), als SSH-*Forced-Command*. Er kennt nur `list`, `ban `, `unban `, `unban-all ` und `version`, sperrt niemals private Netze, die eigenen Adressen des Hosts oder Einträge seiner Schutzliste und protokolliert jede Aktion im Syslog. Zugriff auf den fail2ban-Socket wäre gleichbedeutend mit root – die Sicherheitsgrenze ist der Agent, nicht die Weboberfläche. ## Schnellstart ```bash mkdir -p /opt/fail2ban-webui/{config,data} && cd /opt/fail2ban-webui curl -fsSLo docker-compose.yaml https://git.retronerd.at/schiwagoa/fail2ban-webui/raw/branch/main/examples/docker-compose.yaml curl -fsSLo .env https://git.retronerd.at/schiwagoa/fail2ban-webui/raw/branch/main/examples/.env.example curl -fsSLo config/hosts.yaml https://git.retronerd.at/schiwagoa/fail2ban-webui/raw/branch/main/examples/hosts.yaml.example chown -R 10050:10050 data docker compose run --rm -it fail2ban-webui hash-password # Zeile in die .env übernehmen docker compose run --rm fail2ban-webui keygen # öffentlicher Schlüssel für die Agenten # auf jedem fail2ban-Host den Agenten installieren (docs/agent.md), danach: docker compose run --rm -it fail2ban-webui keyscan docker compose run --rm fail2ban-webui check docker compose up -d ``` Die Oberfläche lauscht auf `127.0.0.1:8080` – davor gehört ein Reverse Proxy mit TLS. ## Dokumentation | | | |---|---| | [Installation](docs/installation.md) | Weboberfläche Schritt für Schritt, von `mkdir` bis zur ersten Anmeldung | | [Agent](docs/agent.md) | `f2b-webctl` auf Bare Metal, LXC und Docker-Hosts installieren | | [Konfiguration](docs/configuration.md) | alle Einstellungen in `.env` und `hosts.yaml` | | [Anmeldung](docs/authentication.md) | lokaler Login, OpenID Connect (Authentik), Anmeldung über den Reverse Proxy | | [Reverse Proxy](docs/reverse-proxy.md) | Nginx Proxy Manager, Caddy, Traefik, nginx | | [Betrieb](docs/operations.md) | Logs, Updates, Backups, Fehlersuche | | [Entwicklung](docs/development.md) | lokales Testbed, Tests, neue Sprache hinzufügen | | [Sicherheit](SECURITY.md) | Sicherheitsmodell und Melden von Schwachstellen | ## Voraussetzungen - Weboberfläche: Docker mit Compose v2, `amd64` oder `arm64` - Jeder fail2ban-Host: fail2ban ≥ 0.11 (Start-/Endzeiten brauchen `--with-time`), `python3`, `sshd`, `sudo` (oder ein root-Schlüssel), `bash` ## Lizenz [MIT](LICENSE). IP-Geolokalisierung durch [DB-IP Lite](https://db-ip.com) (CC BY 4.0), wird nur bei `GEOIP_AUTO_DOWNLOAD=1` heruntergeladen. Weltkarte von [Natural Earth](https://www.naturalearthdata.com) (Public Domain), in der App enthalten. ---

🏰 Website · 🐘 Mastodon · 🔒 Datenschutz · 💬 Support

© Thomas Werner Schwaighofer · retronerd.AT · MIT Lizenz