Forward Auth für Ihren Server
Ein Container neben Ihrem Server prüft jede Anfrage auf Bots, Tor, VPNs und Proxys. Er startet im Monitor-Modus und blockiert nichts, bis Sie umschalten.
Kostenlos, MIT-LizenzDocker, amd64 und arm64
Traffic-Klassen
Jede Klasse erreicht Ihre App als X-IPScanner-Class. Erlauben, markieren oder blockieren Sie sie pro Website im Dashboard.
malicious_automation
ai_agent
tor
vpn
proxy
hosting
relay
verified_bot
human
Einrichtung
Für den Start reicht der Free-Plan.
IPSCANNER_API_KEY
pk_live_••••••••3f9a
Im selben Docker-Netzwerk wie Ihr Proxy. Veröffentlichen Sie seinen Port nicht.
services:
ipscanner:
image: ghcr.io/ipscanner/forward-auth:0.1
restart: unless-stopped
environment:
IPSCANNER_API_KEY: ${IPSCANNER_API_KEY}
SITE_ID: site_...SITE_ID setzenDas Dashboard hält dann die Richtlinie der Website und zeigt ihren Traffic.
SITE_ID
site_4fQ8nZ2kLm7xR1vT9cBw
Wählen Sie unten Ihren Server. Jedes Snippet ist Ende zu Ende getestet.
Server-Konfiguration
Kopieren Sie das passende. Traefik und Caddy funktionieren auch über denselben Container.
Gehört in Ihren server-Block. Starten Sie das Gate zuerst: nginx löst ipscanner beim Start auf.
Gate aus: Anfragen gehen nach 1 s durch
location / {
auth_request /_ipscanner;
auth_request_set $ipscanner_status $upstream_http_x_ipscanner_status;
auth_request_set $ipscanner_class $upstream_http_x_ipscanner_class;
auth_request_set $ipscanner_action $upstream_http_x_ipscanner_action;
auth_request_set $ipscanner_network $upstream_http_x_ipscanner_network_class;
auth_request_set $ipscanner_anonymized $upstream_http_x_ipscanner_anonymized;
auth_request_set $ipscanner_risk $upstream_http_x_ipscanner_risk;
auth_request_set $ipscanner_country $upstream_http_x_ipscanner_country;
auth_request_set $ipscanner_site $upstream_http_x_ipscanner_site;
auth_request_set $ipscanner_request_id $upstream_http_x_ipscanner_request_id;
error_page 403 = @ipscanner_blocked;
proxy_set_header X-IPScanner-Status $ipscanner_status;
proxy_set_header X-IPScanner-Class $ipscanner_class;
proxy_set_header X-IPScanner-Action $ipscanner_action;
proxy_set_header X-IPScanner-Network-Class $ipscanner_network;
proxy_set_header X-IPScanner-Anonymized $ipscanner_anonymized;
proxy_set_header X-IPScanner-Risk $ipscanner_risk;
proxy_set_header X-IPScanner-Country $ipscanner_country;
proxy_set_header X-IPScanner-Site $ipscanner_site;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://app:80;
}
location = /_ipscanner {
internal;
proxy_pass http://ipscanner:8080/check;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Original-URI $request_uri;
proxy_set_header X-Original-Method $request_method;
proxy_connect_timeout 1s;
proxy_read_timeout 5s;
error_page 500 502 503 504 = @ipscanner_down;
}
location @ipscanner_down {
return 204;
}
location @ipscanner_blocked {
internal;
proxy_method GET;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_set_header X-IPScanner-Request-Id $ipscanner_request_id;
rewrite ^ /blocked break;
proxy_pass http://ipscanner:8080;
}Einstellungen
Setzen Sie diese am Container. CACHE_TTL und POLICY_TTL nehmen auch Werte wie 10m.
| Variable | Standard | Wirkung |
|---|---|---|
IPSCANNER_API_KEYIhr API-Schlüssel. Ohne ihn geht jede Anfrage durchStandard:Leer | Leer | Ihr API-Schlüssel. Ohne ihn geht jede Anfrage durch |
IPSCANNER_API_KEY_FILELiest den Schlüssel aus einer Datei, für Docker SecretsStandard:Leer | Leer | Liest den Schlüssel aus einer Datei, für Docker Secrets |
SITE_IDVerknüpft das Gate mit einer Website und ihrer RichtlinieStandard:Leer | Leer | Verknüpft das Gate mit einer Website und ihrer Richtlinie |
MODEmonitor oder enforce. Mit SITE_ID entscheidet das Dashboard, außer bei monitorStandard:monitor | monitor | monitor oder enforce. Mit SITE_ID entscheidet das Dashboard, außer bei monitor |
BLOCK_CLASSESKlassen, die ohne SITE_ID im Enforce-Modus blockiert werdenStandard:malicious_automation | malicious_automation | Klassen, die ohne SITE_ID im Enforce-Modus blockiert werden |
TRUSTED_PROXIESProxys, deren X-Forwarded-For vertraut wirdStandard:private | private | Proxys, deren X-Forwarded-For vertraut wird |
IP_HEADERSHeader für die Besucher-IP, in dieser ReihenfolgeStandard:X-Forwarded-For | X-Forwarded-For | Header für die Besucher-IP, in dieser Reihenfolge |
TIMEOUT_MSZeitbudget pro Prüfung, danach geht die Anfrage durchStandard:1500 | 1500 | Zeitbudget pro Prüfung, danach geht die Anfrage durch |
CACHE_TTLSekunden, die ein Ergebnis pro Besucher giltStandard:600 | 600 | Sekunden, die ein Ergebnis pro Besucher gilt |
CACHE_SIZEErgebnisse im SpeicherStandard:10000 | 10000 | Ergebnisse im Speicher |
POLICY_TTLSekunden, die eine Richtlinie giltStandard:30 | 30 | Sekunden, die eine Richtlinie gilt |
SKIP_PATHSPfad-Regex, die die Prüfung überspringtStandard:Statische Assets | Statische Assets | Pfad-Regex, die die Prüfung überspringt |
UPSTREAM_URLSchaltet den Proxy-Modus ein und leitet erlaubte Anfragen hierhinStandard:Leer | Leer | Schaltet den Proxy-Modus ein und leitet erlaubte Anfragen hierhin |
LISTENListen-AdresseStandard::8080 | :8080 | Listen-Adresse |
HEALTH_PATHHealth-EndpunktStandard:/healthz | /healthz | Health-Endpunkt |
BLOCK_MESSAGEText der 403-SeiteStandard:Blocked by IPScanner edge guard. | Blocked by IPScanner edge guard. | Text der 403-Seite |
IPSCANNER_API_URLBasis-URL der APIStandard:https://ipscanner.io | https://ipscanner.io | Basis-URL der API |
DEBUGEine Logzeile pro EntscheidungStandard:false | false | Eine Logzeile pro Entscheidung |
Container
GET /healthz antwortet immer mit 200 und zeigt, was das Gate gerade tut.
{
"status": "ok",
"version": "0.1.0",
"mode": "forward_auth",
"enabled": true,
"site": "site_4fQ8nZ2kLm7xR1vT9cBw",
"backoff": false,
"policyMode": "monitor",
"policyVersion": 3,
"cachedVerdicts": 128
}ghcr.io/ipscanner/forward-auth:0.1
Fragen
Gate starten, eine Woche Entscheidungen lesen, dann blockieren.