Forward auth voor je server
Eén container naast je server controleert elk verzoek op bots, Tor, VPN's en proxy's. Hij start in monitor-modus en blokkeert niets tot je omschakelt.
Gratis, MIT-licentieDocker, amd64 en arm64
Verkeersklassen
Elke klasse komt bij je app binnen als X-IPScanner-Class. Sta hem per site toe, markeer of blokkeer hem in het dashboard.
malicious_automation
ai_agent
tor
vpn
proxy
hosting
relay
verified_bot
human
Installatie
Het gratis plan is genoeg om te beginnen.
IPSCANNER_API_KEY
pk_live_••••••••3f9a
Op hetzelfde Docker-netwerk als je proxy. Publiceer de poort niet.
services:
ipscanner:
image: ghcr.io/ipscanner/forward-auth:0.1
restart: unless-stopped
environment:
IPSCANNER_API_KEY: ${IPSCANNER_API_KEY}
SITE_ID: site_...SITE_IDHet dashboard bewaart dan het beleid van de site en toont het verkeer.
SITE_ID
site_4fQ8nZ2kLm7xR1vT9cBw
Kies hieronder je server. Elk snippet is van begin tot eind getest.
Serverconfiguratie
Kopieer die voor jouw setup. Traefik en Caddy werken ook via dezelfde container.
Hoort in je server-blok. Start eerst de gate: nginx zoekt ipscanner op bij het opstarten.
Gate uit: verzoeken gaan na 1 s door
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;
}Instellingen
Zet ze op de container. CACHE_TTL en POLICY_TTL nemen ook waarden als 10m.
| Variabele | Standaard | Wat het doet |
|---|---|---|
IPSCANNER_API_KEYJe API-sleutel. Zonder sleutel gaat elk verzoek doorStandaard:Leeg | Leeg | Je API-sleutel. Zonder sleutel gaat elk verzoek door |
IPSCANNER_API_KEY_FILELeest de sleutel uit een bestand, voor Docker secretsStandaard:Leeg | Leeg | Leest de sleutel uit een bestand, voor Docker secrets |
SITE_IDKoppelt de gate aan een site en het beleid ervanStandaard:Leeg | Leeg | Koppelt de gate aan een site en het beleid ervan |
MODEmonitor of enforce. Met SITE_ID beslist het dashboard, behalve bij monitorStandaard:monitor | monitor | monitor of enforce. Met SITE_ID beslist het dashboard, behalve bij monitor |
BLOCK_CLASSESKlassen die zonder SITE_ID in enforce-modus worden geblokkeerdStandaard:malicious_automation | malicious_automation | Klassen die zonder SITE_ID in enforce-modus worden geblokkeerd |
TRUSTED_PROXIESProxy's waarvan X-Forwarded-For wordt vertrouwdStandaard:private | private | Proxy's waarvan X-Forwarded-For wordt vertrouwd |
IP_HEADERSHeaders voor het IP van de bezoeker, in volgordeStandaard:X-Forwarded-For | X-Forwarded-For | Headers voor het IP van de bezoeker, in volgorde |
TIMEOUT_MSTijd per controle, daarna gaat het verzoek doorStandaard:1500 | 1500 | Tijd per controle, daarna gaat het verzoek door |
CACHE_TTLSeconden dat een oordeel per bezoeker geldtStandaard:600 | 600 | Seconden dat een oordeel per bezoeker geldt |
CACHE_SIZEOordelen in het geheugenStandaard:10000 | 10000 | Oordelen in het geheugen |
POLICY_TTLSeconden dat een sitebeleid geldtStandaard:30 | 30 | Seconden dat een sitebeleid geldt |
SKIP_PATHSPad-regex die de controle overslaatStandaard:Statische bestanden | Statische bestanden | Pad-regex die de controle overslaat |
UPSTREAM_URLZet proxy-modus aan en stuurt toegestane verzoeken hierheenStandaard:Leeg | Leeg | Zet proxy-modus aan en stuurt toegestane verzoeken hierheen |
LISTENLuisteradresStandaard::8080 | :8080 | Luisteradres |
HEALTH_PATHHealth-endpointStandaard:/healthz | /healthz | Health-endpoint |
BLOCK_MESSAGETekst van de 403-paginaStandaard:Blocked by IPScanner edge guard. | Blocked by IPScanner edge guard. | Tekst van de 403-pagina |
IPSCANNER_API_URLBasis-URL van de APIStandaard:https://ipscanner.io | https://ipscanner.io | Basis-URL van de API |
DEBUGEén logregel per beslissingStandaard:false | false | Eén logregel per beslissing |
Container
GET /healthz antwoordt altijd met 200 en laat zien wat de gate doet.
{
"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
Vragen
Start de gate, lees een week aan beslissingen en blokkeer dan.