Files
schiwagoaandClaude Opus 5.5 d7dcd9d6b1 Initial version: npm-scanner image, filters, entrypoint, watcher, testbed
- 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>
2026-10-25 20:41:08 +01:00

3.4 KiB
Raw Permalink Blame History

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.