Forward Auth für Ihren Server

Bots, VPNs und Tor in nginx, Apache und HAProxy blockieren

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

Ein Tor-Besucher erreicht nginx. nginx fragt das IPScanner-Gate, erhält 403 und zeigt die Sperrseite des Gates. Eine Person erhält 200 und geht mit den Verdict-Headern weiter zur App. Im Proxy-Modus für Apache und HAProxy sitzt das Gate zwischen Server und App, die App bleibt als Backup.
Enforce

Traffic-Klassen

Was es blockieren kann

Jede Klasse erreicht Ihre App als X-IPScanner-Class. Erlauben, markieren oder blockieren Sie sie pro Website im Dashboard.

  • Bösartige Automatisierung

    malicious_automation

  • KI-Agent

    ai_agent

  • Tor

    tor

  • VPN

    vpn

  • Proxy

    proxy

  • Hosting

    hosting

  • Privat-Relay

    relay

  • Verifizierter Bot

    verified_bot

  • Mensch

    human

Einrichtung

In vier Schritten live

  1. 1

    API-Schlüssel erstellen

    Für den Start reicht der Free-Plan.

    IPSCANNER_API_KEY

    pk_live_••••••••3f9a

    Kostenlosen API-Schlüssel erstellen
  2. 2

    Container starten

    Im selben Docker-Netzwerk wie Ihr Proxy. Veröffentlichen Sie seinen Port nicht.

    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

    Website anlegen und SITE_ID setzen

    Das Dashboard hält dann die Richtlinie der Website und zeigt ihren Traffic.

    SITE_ID

    site_4fQ8nZ2kLm7xR1vT9cBw

    Website anlegen
  4. 4

    Snippet in Ihren Server einfügen

    Wählen Sie unten Ihren Server. Jedes Snippet ist Ende zu Ende getestet.

Server-Konfiguration

Snippets für Ihren Server

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

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;
}

Einstellungen

Umgebungsvariablen

Setzen Sie diese am Container. CACHE_TTL und POLICY_TTL nehmen auch Werte wie 10m.

Variable
IPSCANNER_API_KEYIhr API-Schlüssel. Ohne ihn geht jede Anfrage durchStandard:Leer
IPSCANNER_API_KEY_FILELiest den Schlüssel aus einer Datei, für Docker SecretsStandard:Leer
SITE_IDVerknüpft das Gate mit einer Website und ihrer RichtlinieStandard:Leer
MODEmonitor oder enforce. Mit SITE_ID entscheidet das Dashboard, außer bei monitorStandard:monitor
BLOCK_CLASSESKlassen, die ohne SITE_ID im Enforce-Modus blockiert werdenStandard:malicious_automation
TRUSTED_PROXIESProxys, deren X-Forwarded-For vertraut wirdStandard:private
IP_HEADERSHeader für die Besucher-IP, in dieser ReihenfolgeStandard:X-Forwarded-For
TIMEOUT_MSZeitbudget pro Prüfung, danach geht die Anfrage durchStandard:1500
CACHE_TTLSekunden, die ein Ergebnis pro Besucher giltStandard:600
CACHE_SIZEErgebnisse im SpeicherStandard:10000
POLICY_TTLSekunden, die eine Richtlinie giltStandard:30
SKIP_PATHSPfad-Regex, die die Prüfung überspringtStandard:Statische Assets
UPSTREAM_URLSchaltet den Proxy-Modus ein und leitet erlaubte Anfragen hierhinStandard:Leer
LISTENListen-AdresseStandard::8080
HEALTH_PATHHealth-EndpunktStandard:/healthz
BLOCK_MESSAGEText der 403-SeiteStandard:Blocked by IPScanner edge guard.
IPSCANNER_API_URLBasis-URL der APIStandard:https://ipscanner.io
DEBUGEine Logzeile pro EntscheidungStandard:false

Container

Ein kleines Image mit Health Check

GET /healthz antwortet immer mit 200 und zeigt, was das Gate gerade tut.

  • Verifizierte Such- und KI-Crawler kommen immer durch.
  • Ist IPScanner langsam oder nicht erreichbar, gehen Anfragen durch.
  • Ihr API-Schlüssel erscheint nie in den 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
  • Unter 4 MB
  • Ohne root, ohne Shell

Fragen

FAQ zu nginx, Apache und HAProxy

Nein. Es ist eine Prüfung von IP und Automatisierungssignalen pro Anfrage, keine regelbasierte WAF, die Payloads auf SQL-Injection oder XSS untersucht. Brauchen Sie eine, betreiben Sie Ihre WAF daneben.

Starten Sie im Monitor-Modus

Gate starten, eine Woche Entscheidungen lesen, dann blockieren.