Forward auth voor je server

Blokkeer bots, VPN's en Tor in nginx, Apache en HAProxy

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

Een Tor-bezoeker komt bij nginx, dat de IPScanner-gate vraagt, een 403 krijgt en de blokkeerpagina van de gate toont. Een persoon krijgt een 200 en gaat met de verdict-headers door naar de app. In proxy-modus, voor Apache en HAProxy, zit de gate tussen server en app, en blijft de app de back-up.
Enforce

Verkeersklassen

Wat het kan blokkeren

Elke klasse komt bij je app binnen als X-IPScanner-Class. Sta hem per site toe, markeer of blokkeer hem in het dashboard.

  • Kwaadaardige automatisering

    malicious_automation

  • AI-agent

    ai_agent

  • Tor

    tor

  • VPN

    vpn

  • Proxy

    proxy

  • Hosting

    hosting

  • Privé-relay

    relay

  • Geverifieerde bot

    verified_bot

  • Mens

    human

Installatie

Live in vier stappen

  1. 1

    Maak een API-sleutel

    Het gratis plan is genoeg om te beginnen.

    IPSCANNER_API_KEY

    pk_live_••••••••3f9a

    Maak een gratis API-sleutel
  2. 2

    Start de container

    Op hetzelfde Docker-netwerk als je proxy. Publiceer de poort niet.

    docker-compose.yml
    services:
      ipscanner:
        image: ghcr.io/ipscanner/forward-auth:0.1
        restart: unless-stopped
        environment:
          IPSCANNER_API_KEY: ${IPSCANNER_API_KEY}
          SITE_ID: site_...
  3. 3

    Voeg een site toe en zet SITE_ID

    Het dashboard bewaart dan het beleid van de site en toont het verkeer.

    SITE_ID

    site_4fQ8nZ2kLm7xR1vT9cBw

    Site toevoegen
  4. 4

    Voeg het snippet toe aan je server

    Kies hieronder je server. Elk snippet is van begin tot eind getest.

Serverconfiguratie

Snippets voor je server

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

nginx.conf
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

Omgevingsvariabelen

Zet ze op de container. CACHE_TTL en POLICY_TTL nemen ook waarden als 10m.

Variabele
IPSCANNER_API_KEYJe API-sleutel. Zonder sleutel gaat elk verzoek doorStandaard:Leeg
IPSCANNER_API_KEY_FILELeest de sleutel uit een bestand, voor Docker secretsStandaard:Leeg
SITE_IDKoppelt de gate aan een site en het beleid ervanStandaard:Leeg
MODEmonitor of enforce. Met SITE_ID beslist het dashboard, behalve bij monitorStandaard:monitor
BLOCK_CLASSESKlassen die zonder SITE_ID in enforce-modus worden geblokkeerdStandaard:malicious_automation
TRUSTED_PROXIESProxy's waarvan X-Forwarded-For wordt vertrouwdStandaard:private
IP_HEADERSHeaders voor het IP van de bezoeker, in volgordeStandaard:X-Forwarded-For
TIMEOUT_MSTijd per controle, daarna gaat het verzoek doorStandaard:1500
CACHE_TTLSeconden dat een oordeel per bezoeker geldtStandaard:600
CACHE_SIZEOordelen in het geheugenStandaard:10000
POLICY_TTLSeconden dat een sitebeleid geldtStandaard:30
SKIP_PATHSPad-regex die de controle overslaatStandaard:Statische bestanden
UPSTREAM_URLZet proxy-modus aan en stuurt toegestane verzoeken hierheenStandaard:Leeg
LISTENLuisteradresStandaard::8080
HEALTH_PATHHealth-endpointStandaard:/healthz
BLOCK_MESSAGETekst van de 403-paginaStandaard:Blocked by IPScanner edge guard.
IPSCANNER_API_URLBasis-URL van de APIStandaard:https://ipscanner.io
DEBUGEén logregel per beslissingStandaard:false

Container

Een kleine image met health check

GET /healthz antwoordt altijd met 200 en laat zien wat de gate doet.

  • Geverifieerde zoek- en AI-crawlers komen altijd door.
  • Is IPScanner traag of onbereikbaar, dan gaan verzoeken door.
  • Je API-sleutel komt nooit in de logs.
GET /healthz
{
  "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

  • linux/amd64
  • linux/arm64
  • Kleiner dan 4 MB
  • Geen root, geen shell

Vragen

FAQ over nginx, Apache en HAProxy

Nee. Het is een check per request op het IP en de automatiseringssignalen van de bezoeker, geen WAF met regels die payloads op SQL-injectie of XSS doorzoekt. Heb je die nodig, houd je WAF er dan naast.

Begin in monitor-modus

Start de gate, lees een week aan beslissingen en blokkeer dan.