Docs: tested single-host install, NPM integration, installer --docker
- README: step-by-step installation of web UI and agent on one host, exactly as tested (agent after keygen, all "run" helpers before "up -d", http PUBLIC_URL and TRUSTED_PROXY_HOPS=0 without a proxy) - README: attach to an existing Nginx Proxy Manager in Docker – shared network via docker-compose.override.yaml, no published port, gw_priority so SSH to the agent keeps the source address of the own network (otherwise from= rejects it), TLS settings, test - install.sh --docker: the new manual jail bans in INPUT and DOCKER-USER - Running container: helpers via "docker compose exec … python -m webui" (run fails with "Address already in use"); troubleshooting entries Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
d03aa6f0d2
commit
b36499bbf5
8 files changed
+303
-26
No files matched your search
+15
-5
@@ -101,6 +101,7 @@ Schlüsseleintrag und lässt deine Konfiguration unverändert.
|
||||
| `--authorized-keys-file PFAD` | `~USER/.ssh/authorized_keys` | wohin der Schlüsseleintrag kommt – siehe [verwaltete Schlüssel](#hosts-mit-verwalteten-authorized_keys) |
|
||||
| `--manual-jail NAME` | `manual-block` | Jail für manuelle Sperren |
|
||||
| `--banaction AKTION` | aus `jail.local` | Banaction für ein neu angelegtes manuelles Jail |
|
||||
| `--docker` | – | Docker-Host: das neue manuelle Jail sperrt in `INPUT` **und** `DOCKER-USER` (iptables) – nicht mit `--banaction` kombinierbar |
|
||||
| `--protect NETZE` | – | zusätzliche geschützte Adressen (nur wenn die Konfigurationsdatei geschrieben wird) |
|
||||
| `--no-jail` | – | kein manuelles Jail anlegen |
|
||||
| `--force-config` | – | vorhandene `/etc/f2b-webctl.conf` überschreiben |
|
||||
@@ -150,18 +151,27 @@ manuelle Sperren, dessen Namen mit `--manual-jail` übergeben.
|
||||
|
||||
Die Standardaktionen von fail2ban sperren in der Kette `INPUT`. Verkehr zu **veröffentlichten
|
||||
Docker-Ports** läuft aber nicht über `INPUT`, sondern über `FORWARD` → `DOCKER-USER`; solche
|
||||
Sperren würden deine Container also nicht schützen. Auf einem Docker-Host das manuelle Jail
|
||||
deshalb mit einer Aktion anlegen, die die Kette `DOCKER-USER` nutzt, z. B. mit iptables:
|
||||
Sperren würden deine Container also nicht schützen. Auf einem Docker-Host den Agenten deshalb
|
||||
mit `--docker` installieren – das manuelle Jail sperrt dann in beiden Ketten:
|
||||
|
||||
```bash
|
||||
bash install.sh --key-file /tmp/webui.pub --from 198.51.100.10 \
|
||||
--banaction "iptables-allports[chain=DOCKER-USER]"
|
||||
bash install.sh --key-file /tmp/webui.pub --from 198.51.100.10 --docker
|
||||
```
|
||||
|
||||
Das erzeugt im Jail:
|
||||
|
||||
```ini
|
||||
action = iptables-allports[name=manual-block]
|
||||
iptables-allports[name=manual-block-docker, chain=DOCKER-USER]
|
||||
```
|
||||
|
||||
Ein schon vorhandenes Jail ändert der Installer nicht; die zwei Zeilen dann von Hand in
|
||||
`/etc/fail2ban/jail.d/manual-block.local` eintragen und `fail2ban-client reload` ausführen.
|
||||
|
||||
Nach der ersten Sperre prüfen:
|
||||
|
||||
```bash
|
||||
iptables -S DOCKER-USER | head
|
||||
iptables -S DOCKER-USER | grep f2b
|
||||
```
|
||||
|
||||
Läuft die Weboberfläche auf demselben Docker-Host, in `hosts.yaml` `address: host.docker.internal`
|
||||
|
||||
@@ -21,9 +21,9 @@ hosts:
|
||||
Nach dem Hinzufügen eines Hosts `keyscan` erneut ausführen, dann neu starten:
|
||||
|
||||
```bash
|
||||
docker compose run --rm -it fail2ban-webui keyscan
|
||||
docker compose run --rm fail2ban-webui check
|
||||
docker compose up -d --force-recreate
|
||||
docker compose exec -it fail2ban-webui python -m webui keyscan
|
||||
docker compose exec fail2ban-webui python -m webui check
|
||||
docker compose restart
|
||||
```
|
||||
|
||||
`F2B_HOSTS=name=adresse,name2=adresse2` (Port 22, Benutzer `SSH_USER`) wird aus
|
||||
|
||||
@@ -229,6 +229,13 @@ docker compose logs -f fail2ban-webui # mit Strg+C verlassen
|
||||
Das Log zeigt eine Zusammenfassung wie
|
||||
`fail2ban-webui 1.0.0 – hosts: web01, lxc-proxy, dockerhost – auth: local – loki: off – geoip: on`.
|
||||
|
||||
Ab jetzt läuft der Dienst. `docker compose run …` würde wegen der festen IP-Adresse mit
|
||||
`Address already in use` scheitern – Hilfsbefehle deshalb im laufenden Container aufrufen:
|
||||
|
||||
```bash
|
||||
docker compose exec fail2ban-webui python -m webui check
|
||||
```
|
||||
|
||||
Lokaler Test ohne Proxy:
|
||||
|
||||
```bash
|
||||
|
||||
+4
-2
@@ -8,7 +8,7 @@ Alle Befehle im Verzeichnis mit der `docker-compose.yaml` ausführen (z. B. `/op
|
||||
docker compose ps # Up … (healthy)
|
||||
docker compose logs --tail 100 fail2ban-webui
|
||||
docker compose logs -f fail2ban-webui | grep -E 'AUDIT|LOGIN|ERROR|WARNING'
|
||||
docker compose run --rm fail2ban-webui check # jeder Agent erreichbar?
|
||||
docker compose exec fail2ban-webui python -m webui check # jeder Agent erreichbar?
|
||||
```
|
||||
|
||||
Wichtige Logzeilen:
|
||||
@@ -39,7 +39,7 @@ cp -a .env docker-compose.yaml config /backups/fail2ban-webui_$(date +%F)/ # o
|
||||
docker compose pull
|
||||
docker compose up -d
|
||||
docker compose ps
|
||||
docker compose run --rm fail2ban-webui check
|
||||
docker compose exec fail2ban-webui python -m webui check
|
||||
```
|
||||
|
||||
Vorher das [Changelog](../CHANGELOG.md) lesen – nennt es eine neue Agent-Version, auch die
|
||||
@@ -134,6 +134,8 @@ ein präparierter Benutzername kann also keine zweite Logzeile einschleusen.
|
||||
| Symptom | Ursache / Lösung |
|
||||
|---|---|
|
||||
| `curl: command not found` / `git: command not found` | frisches Minimal-System (z. B. LXC-Template) → `apt install -y curl git` |
|
||||
| `failed to set up container networking: Address already in use` | `docker compose run …` bei laufendem Dienst – die feste IP ist belegt → `docker compose exec fail2ban-webui python -m webui <befehl>` |
|
||||
| `Permission denied (publickey)` nur hinter NPM | Container hängt in zwei Netzen und verbindet mit der Adresse aus dem NPM-Netz → `gw_priority: 1` am eigenen Netz, siehe [README](../README.md#3-weboberfläche-ins-npm-netz-hängen) |
|
||||
| `docker: 'compose' is not a docker command` | nur das eigenständige `docker-compose` vorhanden → `apt install -y docker-compose-plugin` |
|
||||
| Container beendet sich: `… is not writable for UID 10050` | `chown -R 10050:10050 data` |
|
||||
| Container beendet sich: `AUTH_MODE=local needs AUTH_PASSWORD_HASH` | `hash-password` ausführen, Zeile mit einfachen Anführungszeichen einfügen |
|
||||
|
||||
@@ -14,6 +14,11 @@ IP-Adressen zu beschränken kostet wenig und ist dringend empfohlen.
|
||||
|
||||
## Nginx Proxy Manager
|
||||
|
||||
Läuft NPM als Docker-Container auf demselben Host: die getestete Schritt-für-Schritt-Anleitung
|
||||
steht im [README](../README.md#hinter-einem-vorhandenen-nginx-proxy-manager-docker) (gemeinsames
|
||||
Docker-Netz, kein veröffentlichter Port, `gw_priority`, Sperren in `DOCKER-USER`).
|
||||
Für NPM auf einem anderen Host:
|
||||
|
||||
**Hosts → Proxy Hosts → Add Proxy Host**
|
||||
|
||||
| Feld | Wert |
|
||||
|
||||
Reference in new issue
Block a user