- 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.3 KiB
Konfiguration
Alle Einstellungen stehen in der .env neben der docker-compose.yaml. Nach einer Änderung:
docker compose run --rm npm-scanner check
docker compose up -d
Die jail.local wird bei jedem Start neu aus der .env erzeugt.
Variablen
Allgemein
| Variable | Standard | Bedeutung |
|---|---|---|
NPM_SCANNER_VERSION |
latest |
Image-Tag |
TZ |
Europe/Vienna |
Zeitzone für Log-Zeitstempel |
F2B_LOG_LEVEL |
INFO |
CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG |
F2B_DB_PURGE_AGE |
30d |
So lange bleiben alte Sperren in der DB – Grundlage für die steigende Sperrdauer und recidive |
NPM_LOG_DIR |
– (Pflicht) | Log-Ordner des NPM auf dem Host |
NPM_LOG_DIR2 |
= NPM_LOG_DIR |
Zweiter Log-Ordner (jlesage: logs/). Ist es derselbe Ordner wie NPM_LOG_DIR, wird er nur einmal gelesen. |
WHITELIST |
leer | IPs/Netze, die nie gesperrt werden, mit Leerzeichen getrennt. 127.0.0.1/8 und ::1 sind immer dabei. |
F2B_CHAIN |
DOCKER-USER |
iptables-Kette für die Sperren |
ENABLE_NEWLOG_WATCH |
true |
Neue Proxy-Hosts automatisch überwachen |
NEWLOG_SETTLE_SECONDS |
5 |
Wartezeit nach dem Erscheinen einer neuen Logdatei |
IPTABLES_MODE |
auto |
Vom Basis-Image: auto, legacy (erzwingt iptables-legacy) |
Zeitangaben: Zahl mit Einheit s, m, h, d, w – zum Beispiel 10m, 24h, 4w.
npm-scanner (immer aktiv)
| Variable | Standard | Bedeutung |
|---|---|---|
SCANNER_MAXRETRY |
3 |
Treffer bis zur Sperre |
SCANNER_FINDTIME |
1h |
Zeitfenster für die Treffer |
SCANNER_BANTIME |
24h |
Erste Sperrdauer |
SCANNER_MAXTIME |
4w |
Höchste Sperrdauer bei Wiederholung |
Gelesen werden proxy-host-*_access.log, default-host_access.log, fallback_access.log und
fallback_http_access.log in beiden Log-Ordnern.
npm-wplogin (optional)
Zählt POST auf wp-login.php und xmlrpc.php auf allen Hosts hinter dem NPM.
| Variable | Standard |
|---|---|
ENABLE_WPLOGIN |
false |
WPLOGIN_MAXRETRY |
5 |
WPLOGIN_FINDTIME |
10m |
WPLOGIN_BANTIME |
24h |
WPLOGIN_MAXTIME |
4w |
recidive (optional)
Sperrt Wiederholungstäter über alle Jails in INPUT und F2B_CHAIN.
| Variable | Standard |
|---|---|
ENABLE_RECIDIVE |
false |
RECIDIVE_MAXRETRY |
3 |
RECIDIVE_FINDTIME |
1w |
RECIDIVE_BANTIME |
4w |
Mit recidive schreibt fail2ban sein Log nach ./data/log/fail2ban.log (recidive liest es).
docker logs zeigt es trotzdem weiter an.
Eigene Jails, Filter und Actions
Der Ordner ./data wird beim Start eingebunden:
| Ordner | Wirkung |
|---|---|
./data/jail.d/*.local |
Wird nach der erzeugten jail.local gelesen – eigene Jails oder Überschreibungen |
./data/filter.d/*.conf |
Eigene Filter. Gleichnamige Filter des Images werden ersetzt. |
./data/action.d/*.conf |
Eigene Actions, zum Beispiel für ntfy |
./data/db/ |
fail2ban-Datenbank – nicht von Hand ändern |
Beispiel: Sperrdauer für npm-scanner auf 48 h, ohne die .env zu ändern:
nano ./data/jail.d/50-eigene.local
[npm-scanner]
bantime = 48h
docker compose restart npm-scanner
Die NPM-Logs liegen im Container unter /logs/npm1 und /logs/npm2.