HAProxy Rate Limiting und Security Header

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Was ist das?

Beide Funktionen sind nativ in HAProxy verfügbar – kein Zusatztool erforderlich.

Rate Limiting mit Stick Tables

HAProxy kann Requests pro IP begrenzen und bei Überschreitung mit HTTP 429 antworten.

Die folgende Konfiguration ergänzt den bestehenden frontend ft_https und backend backend_www:

  • nano /etc/haproxy/haproxy.cfg
# Stick Table im Backend definieren
backend backend_www
    stick-table type ip size 100k expire 30s store http_req_rate(10s)
    http-request track-sc0 src
    http-request deny deny_status 429 if { sc_http_req_rate(0) gt 50 }
    server www 10.88.2XX.11:443 ssl verify none check
Erklärung
  • stick-table – speichert Request-Raten pro IP im RAM
  • http_req_rate(10s) – zählt Requests innerhalb von 10 Sekunden
  • gt 50 – blockiert ab mehr als 50 Requests in 10 Sekunden
  • deny_status 429 – antwortet mit 429 Too Many Requests

Security Headers

Im frontend ft_https ergänzen:

frontend ft_https
    # ... bestehende Konfiguration ...
    http-response set-header Strict-Transport-Security "max-age=31536000; includeSubDomains"
    http-response set-header X-Frame-Options "SAMEORIGIN"
    http-response set-header X-Content-Type-Options "nosniff"
    http-response set-header Referrer-Policy "strict-origin-when-cross-origin"

Test

In der Ausgabe sollten die gesetzten Header sichtbar sein:

< strict-transport-security: max-age=31536000; includeSubDomains
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff

Rate Limiting testen (z.B. mit ab oder einer Schleife):

Ab Request 51 sollte 429 erscheinen.