- Image based on crazymax/fail2ban:1.1.1 with inotify-tools - Filters npm-scanner and npm-wplogin, tested with fail2ban-regex in the build - jail.local generated from .env, optional npm-wplogin and recidive - Watcher reloads the jails when NPM creates a new proxy host log - check command, docs, testbed for LXC Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
Betrieb
Alle Befehle im Projektordner (zum Beispiel /home/docker-projekte/npm-scanner) als root.
Status und Logs
docker compose ps
docker logs --tail 50 npm-scanner
docker logs -f npm-scanner
docker exec npm-scanner fail2ban-client status
docker exec npm-scanner fail2ban-client status npm-scanner
Überwachte Dateien:
docker exec npm-scanner fail2ban-client get npm-scanner logpath
Meldungen des Watchers (neue Proxy-Hosts):
docker logs npm-scanner 2>&1 | grep npm-newlog
Sperren
docker exec npm-scanner fail2ban-client get npm-scanner banip --with-time
docker exec npm-scanner fail2ban-client set npm-scanner unbanip 198.51.100.7
docker exec npm-scanner fail2ban-client set npm-scanner banip 198.51.100.7
docker exec npm-scanner fail2ban-client unban 198.51.100.7 # aus allen Jails
Regeln auf dem Host:
iptables -S DOCKER-USER
iptables -S f2b-npm-scan
Filter gegen echte Logs testen
Ändert nichts, zeigt nur die Treffer:
docker exec npm-scanner sh -c 'fail2ban-regex "$(ls -S /logs/npm1/proxy-host-*_access.log | head -1)" /etc/fail2ban/filter.d/npm-scanner.conf' | grep -E '^Lines:'
docker exec npm-scanner sh -c 'fail2ban-regex --print-all-matched "$(ls -S /logs/npm1/proxy-host-*_access.log | head -1)" /etc/fail2ban/filter.d/npm-scanner.conf' | grep -E '^\| \[' | head -20
Update
docker compose pull
docker compose up -d
docker logs --tail 30 npm-scanner
Die Sperren bleiben erhalten (fail2ban-DB in ./data/db).
Backup
mkdir -p /backups/config_backups/$(hostname)
docker compose stop npm-scanner
tar -cpzf /backups/config_backups/$(hostname)/$(date +%F)_npm-scanner.tar.gz -C .. "$(basename "$PWD")"
docker compose start npm-scanner
Fehlerbehebung
| Meldung | Ursache | Lösung |
|---|---|---|
NPM_LOG_DIR missing in .env |
Variable fehlt | .env prüfen |
/logs/npm1 is missing |
Pfad in NPM_LOG_DIR existiert nicht |
ls <pfad> auf dem Host |
no proxy-host-*_access.log found yet |
Falscher Ordner oder NPM hat noch keine Hosts | Schritt 1 der Installation wiederholen |
Have not found any log file for npm-scanner jail |
Keine einzige Logdatei gefunden | wie oben |
iptables chain DOCKER-USER does not exist |
Docker auf dem Host läuft nicht oder ohne iptables | systemctl status docker, iptables -S DOCKER-USER |
iptables-nft is not supported by the host, falling back to iptables-legacy |
Host nutzt iptables-legacy | nur Hinweis; prüfen, dass die Regeln mit iptables -S auf dem Host sichtbar sind |
| Regeln im Container, nicht auf dem Host | network_mode: host fehlt |
docker-compose.yaml prüfen |
| Jede Zeile zählt doppelt | Derselbe Ordner zweimal über verschiedene Pfade eingebunden | NPM_LOG_DIR2 leer lassen |
| Eigene IP gesperrt | Fehlt in WHITELIST |
entsperren (siehe oben), WHITELIST ergänzen, docker compose up -d |
| Container startet nicht | Fehler in der Konfiguration | docker compose run --rm npm-scanner check |
Notfall – alle Sperren sofort aufheben:
docker compose stop npm-scanner
fail2ban entfernt beim Stoppen seine Regeln. Bleiben sie trotzdem hängen:
iptables -D DOCKER-USER -j f2b-npm-scan
iptables -F f2b-npm-scan
iptables -X f2b-npm-scan
Rückbau
docker compose down
iptables -S | grep f2b- || echo "keine f2b-Regeln mehr"
Danach den Projektordner löschen, wenn die Sperr-Historie nicht mehr gebraucht wird.