WAF-Demo: HAProxy mit Coraza auf Rocky Linux

Reverse Proxy mit TLS-Terminierung und Web Application Firewall, zusätzlich abgesichert durch firewalld und SELinux. Zwei Anfragen im Vergleich: eine normale und ein Angriffsversuch.

HAProxy selbst kann keine Anfragen inhaltlich prüfen, es leitet nur Verbindungen weiter. Für die WAF-Funktion reicht HAProxy jede Anfrage über SPOE (Stream Processing Offload Engine) an einen externen Prozess weiter, bevor sie ans Backend geht. SPOE ist ein eigenes, einfaches Protokoll von HAProxy dafür.

Coraza läuft als coraza-spoa auf genau der Gegenseite dieses Protokolls (SPOA, Stream Processing Offload Agent) und bringt die eigentliche WAF-Engine samt OWASP Core Rule Set mit. HAProxy schickt Methode, Pfad, Header und Body der Anfrage an coraza-spoa, wartet auf dessen Antwort (erlaubt/blockiert) und entscheidet erst danach, ob die Anfrage ans Backend weitergeht.

Dadurch bleibt die eigentliche Prüflogik komplett von HAProxy getrennt: HAProxy kümmert sich um TLS und Weiterleitung, coraza-spoa ausschließlich um die Regelauswertung.

firewalld: nur 443/tcp SELinux: haproxy_connect_any TLS, verify none revproxy.it2XX.int Client Internet HAProxy TLS-Terminierung :443 haproxy_t Coraza (SPOE) 127.0.0.1:8000 OWASP CRS www .it2XX.int TLS :443
firewalld

Netzwerkebene. Von außen ist ausschließlich Port 443/tcp auf revproxy erreichbar, unabhängig davon, was HAProxy oder Coraza konfiguriert haben.

SELinux

Mandatory Access Control. Regelt unabhängig von firewalld, auf welchen Port HAProxy überhaupt binden darf, ob es das eigene Zertifikat lesen darf und ob es die lokale Verbindung zu Coraza aufbauen darf.

Coraza / OWASP CRS

Anwendungsebene. Prüft jede Anfrage inhaltlich gegen bekannte Angriffsmuster, bevor www.it2XX.int überhaupt erreicht wird.