Caddy-Modul

Caddy-Modul gegen Bots, VPNs und Tor

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+

Verkehrsklassen

Was es blockieren kann

Jeder Besucher erhält eine Klasse. Blockieren Sie eine Klasse im Dashboard oder tragen Sie sie in block_classes ein.

  • Menschhuman
  • Verifizierter Botverified_botKommt immer durch
  • KI-Agentai_agent
  • Bösartige Automatisierungmalicious_automationStandard bei Enforce
  • Tortor
  • VPNvpn
  • Proxyproxy
  • Hostinghosting
  • Privat-Relayrelay

Einrichtung

In vier Schritten live

  1. 1

    API-Schlüssel holen

    Caddy liest ihn aus IPSCANNER_API_KEY oder aus api_key im Caddyfile.

    Kostenlosen API-Schlüssel erstellen
    shell
    export IPSCANNER_API_KEY=<your API key>
  2. 2

    Caddy mit dem Modul bauen

    Mit xcaddy oder in Docker. Benötigt Caddy 2.8 oder neuer.

    xcaddy build --with github.com/ipscanner/ipscanner-caddy
    ./caddy list-modules | grep ipscanner
  3. 3

    Website im Dashboard anlegen

    Die Website hält die Richtlinie und zeigt den Verkehr. Kopieren Sie ihre Site-ID.

    Website anlegen
    example.comCaddyMonitor

    Site-ID

    site_4fQ8nZ2kLm7xR1vT9cBw

  4. 4

    Direktive einfügen

    Keine globale order-Zeile nötig: Sie läuft vor basic_auth und reverse_proxy.

    Caddyfile
    example.com {
    	ipscanner {
    		site_id site_4fQ8nZ2kLm7xR1vT9cBw
    	}
    	reverse_proxy localhost:8080
    }

Ohne Website

Caddyfile oder JSON

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

Das Urteil in Logs und Matchern nutzen

Von der Direktive gesetzt, für log_append, vars-Matcher und Header.

Platzhalter
{http.vars.ipscanner.status}ok, error, timeout, backoff, skipped
{http.vars.ipscanner.class}Verkehrsklasse, gesetzt bei Status ok
{http.vars.ipscanner.action}allow, flag, block, would_flag, would_block
Caddyfile
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 1

Client-IP

Hinter Load Balancer oder CDN

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.

Caddyfile
{
	servers {
		trusted_proxies static 10.0.0.0/8
		trusted_proxies_strict
	}
}

Einstellungen

Subdirektiven

Alle optional. Die JSON-Konfiguration nutzt dieselben Namen.

SubdirektiveStandard
api_keyAPI-Schlüssel. Ohne ihn geht jede Anfrage durch.{env.IPSCANNER_API_KEY}
site_idWebsite im Dashboard, die Modus und Richtlinie vorgibt.Leer
modeMonitor oder Enforce. Mit Website wirkt nur Monitor.monitor
block_classesIm Enforce-Modus ohne Website blockiert.malicious_automation
timeoutZeitbudget pro Prüfung.1.5s
cache_ttlWie lange ein Urteil pro Besucher gilt.10m
cache_sizeEinträge im Urteils-Cache.10000
policy_ttlWie lange die Richtlinie im Cache bleibt.30s
skip_pathsRegex für Pfade, die nie geprüft werden.Statische Assets
block_messageText der 403-Seite.Blocked by IPScanner edge guard.
debugDebug-Header und eine Logzeile pro Entscheidung.Aus
api_urlBasis-URL der API.https://ipscanner.io

Kommt immer durch

Was nie blockiert wird

  • Verifizierte Such- und KI-Crawler.
  • Private und Loopback-Adressen sowie OPTIONS-Anfragen.
  • Statische Assets und alles in skip_paths.
  • Jede Anfrage, wenn IPScanner langsam oder nicht erreichbar ist.

Fragen

FAQ zum Caddy-Modul

Nein. Im Monitor-Modus wird eine Anfrage als would_block markiert und durchgelassen. Schalten Sie Website oder Caddyfile auf Enforce, wenn das Log stimmt.

Starten Sie im Monitor-Modus

Caddy mit dem Modul bauen, eine Woche Entscheidungen lesen, dann blockieren.