Coraza (WAF) sudo apt update sudo apt install -y git make build-essential pkg-config curl ca-certificates golang-go go version sudo useradd --system --no-create-home --shell /usr/sbin/nologin coraza-spoa || true sudo mkdir -p /etc/coraza-spoa sudo mkdir -p /var/log/coraza-spoa sudo chown -R coraza-spoa:coraza-spoa /var/log/coraza-spoa cd /usr/local/src sudo git clone https://github.com/corazawaf/coraza-spoa.git cd coraza-spoa sudo go run mage.go build # binary is in build now sudo install -m 0755 build/coraza-spoa /usr/local/bin/coraza-spoa # test it /usr/local/bin/coraza-spoa -h sudo cp /usr/local/src/coraza-spoa/example/coraza-spoa.yaml /etc/coraza-spoa/coraza-spoa.yaml sudo vi /etc/coraza-spoa/coraza-spoa.yaml # testweise starten sudo -u coraza-spoa /usr/local/bin/coraza-spoa -config /etc/coraza-spoa/coraza-spoa.yaml [root@vpsv-haproxy1 ~]# cat /etc/haproxy/coraza-spoe.cfg [coraza] spoe-agent coraza-agent messages coraza-req option var-prefix coraza timeout hello 2s timeout idle 10s timeout processing 5s use-backend coraza-spoa-backend spoe-message coraza-req args app=str(sample_app) id=unique-id src_ip=src src_port=src_port dst_ip=dst dst_port=dst_port method=method path=path query=query version=req.ver headers=req.hdrs event on-frontend-http-request [root@vpsv-haproxy1 ~]# root@ubuntuserver:~# cat /etc/coraza-spoa/coraza-spoa.yaml bind: 0.0.0.0:9000 # SPOA process logs (daemon-level) log_level: debug log_file: /dev/stdout log_format: console default_application: sample_app applications: - name: sample_app directives: | ################################################################# # Base + CRS ################################################################# Include @coraza.conf-recommended Include @crs-setup.conf.example SecRule REQUEST_FILENAME "@streq /Microsoft-Server-ActiveSync" "id:1001001,phase:1,pass,nolog,ctl:ruleRemoveById=920420" Include @owasp_crs/*.conf SecRuleEngine On ################################################################# # Audit logging (WAF events / transactions) ################################################################# # RelevantOnly = nur Treffer / relevante Transaktionen loggen SecAuditEngine RelevantOnly # Alle Parts für Troubleshooting (später ggf. reduzieren) SecAuditLogParts ABCEFHIJZ # JSON ist einfacher zum Auswerten SecAuditLogFormat JSON # Eine Datei (einfach fürs Testen) SecAuditLog /var/log/coraza-spoa/audit.log ################################################################# # Debug logging (nur vorübergehend!) ################################################################# SecDebugLog /var/log/coraza-spoa/debug.log SecDebugLogLevel 3 ################################################################# # Optional: mehr Sichtbarkeit beim Testen ################################################################# # Wenn du wirklich JEDE Anfrage im Auditlog sehen willst, statt # RelevantOnly -> On setzen: # SecAuditEngine On # HAProxy sendet bei dir aktuell nur Request-Infos response_check: false # Transaktionscache (ms) transaction_ttl_ms: 60000 # App-level logs (coraza-spoa intern) log_level: debug log_file: /dev/stdout log_format: console root@ubuntuserver:~# backend coraza-spoa-backend mode tcp timeout connect 5s timeout server 30s server coraza1 172.21.1.170:9000 frontend outlook bind 172.21.1.169:443 ssl crt /etc/ssl/private/wildcard_chain.pem mode http log global log-format "[outlook] %ci:%cp fe=\"%f\" be=\"%b/%s\" bytes=%B" filter spoe engine coraza config /etc/haproxy/coraza-spoe.cfg http-response set-header X-Coraza-Action %[var(txn.coraza.action)] if { var(txn.coraza.action) -m found } default_backend outlook