Caddy-Modul
Eine ipscanner-Direktive im Site-Block, und jeder Besucher wird vor reverse_proxy geprüft. Das Modul startet im Monitor-Modus und blockiert nichts, bis Sie umschalten.
Kostenlos, MIT-LizenzCaddy 2.8+
Access-Log
Verkehrsklassen
Jeder Besucher erhält eine Klasse. Blockieren Sie eine Klasse im Dashboard oder tragen Sie sie in block_classes ein.
Einrichtung
Caddy liest ihn aus IPSCANNER_API_KEY oder aus api_key im Caddyfile.
export IPSCANNER_API_KEY=<your API key>Mit xcaddy oder in Docker. Benötigt Caddy 2.8 oder neuer.
xcaddy build --with github.com/ipscanner/ipscanner-caddy
./caddy list-modules | grep ipscannerDie Website hält die Richtlinie und zeigt den Verkehr. Kopieren Sie ihre Site-ID.
Website anlegenSite-ID
site_4fQ8nZ2kLm7xR1vT9cBw
Keine globale order-Zeile nötig: Sie läuft vor basic_auth und reverse_proxy.
example.com {
ipscanner {
site_id site_4fQ8nZ2kLm7xR1vT9cBw
}
reverse_proxy localhost:8080
}Ohne Website
Modus und blockierte Klassen stehen dann in der Konfiguration. Ein Matcher wie ipscanner /app/* beschränkt die Prüfung auf bestimmte Pfade.
example.com {
ipscanner {
mode enforce
block_classes malicious_automation tor
}
reverse_proxy localhost:8080
}Platzhalter
Von der Direktive gesetzt, für log_append, vars-Matcher und Header.
| Platzhalter | Werte |
|---|---|
{http.vars.ipscanner.status}ok, error, timeout, backoff, skipped | ok, error, timeout, backoff, skipped |
{http.vars.ipscanner.class}Verkehrsklasse, gesetzt bei Status ok | Verkehrsklasse, gesetzt bei Status ok |
{http.vars.ipscanner.action}allow, flag, block, would_flag, would_block | allow, flag, block, would_flag, would_block |
log_append ipscanner_class {http.vars.ipscanner.class}
log_append ipscanner_action {http.vars.ipscanner.action}
@flagged vars ipscanner.action flag
request_header @flagged X-Review 1Client-IP
Das Modul prüft die Client-IP, die Caddy ermittelt hat. Vertrauen Sie Ihren Proxys, und trusted_proxies_strict verhindert, dass ein Besucher einen falschen Hop einschiebt.
{
servers {
trusted_proxies static 10.0.0.0/8
trusted_proxies_strict
}
}Einstellungen
Alle optional. Die JSON-Konfiguration nutzt dieselben Namen.
| Subdirektive | Standard | Wirkung |
|---|---|---|
api_keyAPI-Schlüssel. Ohne ihn geht jede Anfrage durch. | {env.IPSCANNER_API_KEY} | API-Schlüssel. Ohne ihn geht jede Anfrage durch. |
site_idWebsite im Dashboard, die Modus und Richtlinie vorgibt. | Leer | Website im Dashboard, die Modus und Richtlinie vorgibt. |
modeMonitor oder Enforce. Mit Website wirkt nur Monitor. | monitor | Monitor oder Enforce. Mit Website wirkt nur Monitor. |
block_classesIm Enforce-Modus ohne Website blockiert. | malicious_automation | Im Enforce-Modus ohne Website blockiert. |
timeoutZeitbudget pro Prüfung. | 1.5s | Zeitbudget pro Prüfung. |
cache_ttlWie lange ein Urteil pro Besucher gilt. | 10m | Wie lange ein Urteil pro Besucher gilt. |
cache_sizeEinträge im Urteils-Cache. | 10000 | Einträge im Urteils-Cache. |
policy_ttlWie lange die Richtlinie im Cache bleibt. | 30s | Wie lange die Richtlinie im Cache bleibt. |
skip_pathsRegex für Pfade, die nie geprüft werden. | Statische Assets | Regex für Pfade, die nie geprüft werden. |
block_messageText der 403-Seite. | Blocked by IPScanner edge guard. | Text der 403-Seite. |
debugDebug-Header und eine Logzeile pro Entscheidung. | Aus | Debug-Header und eine Logzeile pro Entscheidung. |
api_urlBasis-URL der API. | https://ipscanner.io | Basis-URL der API. |
Kommt immer durch
skip_paths.Fragen
Caddy mit dem Modul bauen, eine Woche Entscheidungen lesen, dann blockieren.