CrowdSec¶
Der Bouncer für CrowdSec ist ein eigenständiger vorgelagerter Server, der die Entscheidungen von CrowdSec mit dem Myra EU CAPTCHA verbindet. IP-Adressen mit der Entscheidung captcha erhalten eine Challenge, IP-Adressen mit der Entscheidung ban den Statuscode 403. Der übrige Verkehr erreicht Ihre Anwendung unverändert.
Ablauf¶
- Der Bouncer fragt den Entscheidungsstrom von CrowdSec unter
/v1/decisions/streamab und hält die Entscheidungen im Arbeitsspeicher. - Bei jeder Anfrage schlägt er die IP-Adresse des Besuchers nach:
| Entscheidung | Verhalten |
|---|---|
ban |
Der Bouncer beantwortet die Anfrage mit dem Statuscode 403 Forbidden. |
captcha |
Der Bouncer leitet auf /__captcha__ um, zeigt das Widget an, prüft das Token serverseitig, setzt ein signiertes Cookie und leitet zurück. |
| keine Entscheidung | Der Bouncer reicht die Anfrage an Ihre Anwendung weiter. |
Voraussetzungen¶
Die folgenden Voraussetzungen müssen erfüllt sein:
| Voraussetzung | Wert |
|---|---|
| CrowdSec | Laufender Agent mit erreichbarer Local API |
| Go | ab Version 1.22 für den Bau aus den Quellen |
| Zugangsdaten | Öffentlicher Sitekey und Secret aus der Ansicht Details |
Bouncer installieren¶
Laden Sie das fertige Programm für Ihre Plattform von der Seite der Veröffentlichungen herunter:
# Linux amd64
curl -L https://github.com/Myra-Security-GmbH/eu-captcha-crowdsec/releases/latest/download/cs-eucaptcha-bouncer-linux-amd64 \
-o cs-eucaptcha-bouncer
chmod +x cs-eucaptcha-bouncer
Programme stehen für Linux (amd64, arm64), macOS (amd64, arm64) und Windows (amd64) bereit.
Aus den Quellen bauen Sie wie folgt:
git clone https://github.com/Myra-Security-GmbH/eu-captcha-crowdsec.git
cd eu-captcha-crowdsec
make build
# produces ./cs-eucaptcha-bouncer
Bouncer einrichten¶
Um den Bouncer einzurichten, gehen Sie wie folgt vor:
- ► Melden Sie den Bouncer bei CrowdSec an:
- ↳ CrowdSec zeigt einen API-Schlüssel an.
- ► Legen Sie die Konfigurationsdatei an:
- ► Tragen Sie die erforderlichen Werte ein:
listen_addr: "0.0.0.0:8080"
upstream_url: "http://localhost:3000" # your application
crowdsec:
lapi_url: "http://localhost:8080"
api_key: "<API key from cscli bouncers add>"
update_interval: "10s"
eu_captcha:
sitekey: "EUCAPTCHA_SITE_KEY" # from app.eu-captcha.eu
secret: "EUCAPTCHA_SECRET_KEY" # from app.eu-captcha.eu
session:
secret: "<random hex string>" # openssl rand -hex 32
ttl: "1h"
- ► Starten Sie den Bouncer:
- ➔ Der Bouncer schreibt sein Protokoll als strukturiertes JSON auf die Standardausgabe.
Richten Sie anschließend Ihren Lastverteiler oder Ihr DNS auf die Adresse aus listen_addr aus.
Einstellungen¶
Die folgenden Einstellungen stehen zur Verfügung:
| Einstellung | Vorgabe | Wirkung |
|---|---|---|
listen_addr |
0.0.0.0:8080 |
Adresse, auf der der Bouncer Anfragen entgegennimmt. |
upstream_url |
erforderlich | Adresse Ihrer Anwendung. |
crowdsec.lapi_url |
http://localhost:8080 |
Adresse der Local API von CrowdSec. |
crowdsec.api_key |
erforderlich | API-Schlüssel aus cscli bouncers add. |
crowdsec.update_interval |
10s |
Abstand zwischen zwei Abfragen des Entscheidungsstroms. |
eu_captcha.sitekey |
erforderlich | Öffentlicher Sitekey. |
eu_captcha.secret |
erforderlich | Geheimer Schlüssel. |
eu_captcha.verify_url |
https://api.eu-captcha.eu/v1/verify |
Adresse des Endpunkts für die Prüfung. |
session.secret |
erforderlich | Schlüssel für die HMAC-Signatur. Erzeugen Sie ihn mit openssl rand -hex 32. |
session.cookie_name |
__eucaptcha_pass |
Name des Sitzungs-Cookies. |
session.ttl |
1h |
Gültigkeitsdauer einer bestandenen Challenge. |
trusted_proxies |
leer | CIDR-Bereiche, deren Kopfzeile X-Forwarded-For der Bouncer auswertet. |
Betrieb über systemd¶
[Unit]
Description=EU Captcha CrowdSec Bouncer
After=network.target crowdsec.service
[Service]
ExecStart=/usr/local/bin/cs-eucaptcha-bouncer -config /etc/eu-captcha-bouncer/config.yaml
Restart=on-failure
User=www-data
[Install]
WantedBy=multi-user.target
Betrieb im Container¶
FROM golang:1.22-alpine AS builder
WORKDIR /src
COPY . .
RUN go build -o cs-eucaptcha-bouncer ./cmd/cs-eucaptcha-bouncer
FROM alpine:3.19
COPY --from=builder /src/cs-eucaptcha-bouncer /usr/local/bin/
ENTRYPOINT ["cs-eucaptcha-bouncer", "-config", "/etc/bouncer/config.yaml"]
Belegte Pfade¶
Der Bouncer belegt zwei Pfade der geschützten Domain. Verwenden Sie diese Pfade nicht in Ihrer Anwendung:
| Pfad | Verwendung |
|---|---|
/__captcha__ |
Zeigt die Challenge-Seite an. |
/__captcha__/verify |
Nimmt das gelöste Token entgegen. |