Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
|
haproxy [2026/02/21 23:13] jango |
haproxy [2026/02/21 23:26] (aktuell) jango |
||
|---|---|---|---|
| Zeile 469: | Zeile 469: | ||
| server app1 192.168.1.10: | server app1 192.168.1.10: | ||
| server app2 192.168.1.11: | server app2 192.168.1.11: | ||
| + | </ | ||
| + | |||
| + | =====Sticky Tables===== | ||
| + | |||
| + | Eine Stick-Table ist im Prinzip eine kleine In-Memory-Datenbank in HAProxy: | ||
| + | |||
| + | * Schlüssel (z. B. Client-IP) | ||
| + | * Werte/ | ||
| + | * Ablaufzeit | ||
| + | * automatische Updates durch Regeln | ||
| + | |||
| + | Beispiel: "Für jede IP speichere: wie viele Fehlversuche pro Minute" | ||
| + | |||
| + | ====Stick Table definieren==== | ||
| + | |||
| + | < | ||
| + | stick-table type ip size 200k expire 15m store gpc0 | ||
| + | </ | ||
| + | |||
| + | * type ip → Key ist Client-IP | ||
| + | * size 200k → max 200 000 Einträge | ||
| + | * expire 15m → Eintrag verfällt nach 15 min ohne Aktivität | ||
| + | * store gpc0 → speichere Feld gpc0 (= Generic Purpose Counter 0) | ||
| + | |||
| + | Für jede IP gibt es einen Zähler gpc0 | ||
| + | |||
| + | ====Eintrag wählen==== | ||
| + | |||
| + | < | ||
| + | http-request track-sc0 src if host_webmail | ||
| + | </ | ||
| + | |||
| + | * nimm src (Client-IP) als Schlüssel | ||
| + | * speichere ihn in Stick-Counter Slot 0 (sc0) | ||
| + | * nur wenn Bedingung stimmt | ||
| + | |||
| + | sc0 = " | ||
| + | |||
| + | !!! Man kann mehrere Slots haben (sc0, sc1, sc2,..) | ||
| + | |||
| + | ====Zähler erhöhen==== | ||
| + | |||
| + | < | ||
| + | http-request sc-inc-gpc0(0) if host_webmail is_owa_login is_post | ||
| + | </ | ||
| + | |||
| + | * erhöhe gpc0 | ||
| + | * im Slot sc0 | ||
| + | * wenn Bedingung passt | ||
| + | |||
| + | Syntax: sc-inc-< | ||
| + | |||
| + | !!! sc-inc-gpc0(0) = erhöhe gpc0 im sc0-Eintrag | ||
| + | |||
| + | ====Wert lesen==== | ||
| + | |||
| + | < | ||
| + | acl owa_too_many sc_get_gpc0(0) ge 5 | ||
| + | </ | ||
| + | |||
| + | * lies gpc0 im sc0-Eintrag | ||
| + | * wenn ≥ 5 → ACL true | ||
| + | |||
| + | Syntax: sc_get_< | ||
| + | |||
| + | ====Aktion bei Limit==== | ||
| + | |||
| + | < | ||
| + | http-request deny deny_status 429 if owa_too_many | ||
| </ | </ | ||