# Konfiguration Alle Einstellungen stehen in der `.env` neben der `docker-compose.yaml`. Nach einer Änderung: ```bash 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: ```bash nano ./data/jail.d/50-eigene.local ``` ```ini [npm-scanner] bantime = 48h ``` ```bash docker compose restart npm-scanner ``` Die NPM-Logs liegen im Container unter `/logs/npm1` und `/logs/npm2`.