Une bonne introduction à la partie networking de Kubernetes
Pour passer un Host Header au niveau du healthcheck d'un backend HAproxy, il est possible de parametrer le header dans la version HTTP utilisé par le check.
C'est utile quand on souhaite mettre un apache avec plusieurs vhosts derrière le HAproxy.
<version> is the optional HTTP version string. It defaults to "HTTP/1.0"
but some servers might behave incorrectly in HTTP 1.0, so turning
it to HTTP/1.1 may sometimes help. Note that the Host field is
mandatory in HTTP/1.1, and as a trick, it is possible to pass it
after "\r\n" following the version string.
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www.example.com
Quand on gère un HAproxy avec beaucoup de backends, il est possible d'utiliser un fichier de map pour sélectionner vers quel backend router chaque appel. Cette configuration simplifie énormément la configuration par rapport aux acls.
Un guide très complet pour monter une archi HAproxy en HA derrière un ELB avec la terminaison SSL au niveau du HAproxy (utile pour avoir plusieurs certificats SSL sur le même HAproxy par exemple).
Parmi les points importants:
- utiliser le mode TCP au niveau de l'ELB pour laisser HAproxy gérer la terminaison SSL
- activer le Proxy Protocol au niveau ELB (
ProxyProtocolPolicyType
) et HAproxy (accept-proxy
) pour récupérer les IP sources dans les logs HAproxy - créer un frontend sans le Proxy Protocol sur le HAproxy dédié au Healthcheck ELB (les healthcheck ELB ne supportent pas encore le ProxyProtocol)
Également pas mal d'autres astuces pour ajouter des fonctions de sécurité basiques au niveau HAproxy (URL filtering, Rate limiting, DDOS protection...)
Quelques astuces pour se protéger des attaques DDOS au niveau du HAproxy
- Pour limiter les attaques DDOS de type TCP Syn Flood au niveau de l'HAproxy, modifier les parmètre suivant dans
sysctl
:net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.tcp_max_syn_backlog = 1024
- Pour limiter les attaques de type Slowloris, ajouter le paramètre
timeout http-request 5s
dans le fichier de configuration HAproxy
Egalement d'autres astuces, pour:
- paramétrer des limites max de connexions différentes pour le contenu static et dynamique (en utilisant 2 backends différents)
- limiter le nombre de connexions par user
- limiter le nombre de connexions par secondes par user
- limiter le nombre de requêtes par secondes
- détecter et bloquer les scans de vulnerabilités
Configuration HAproxy pour bloquer les attaques Slow POST.
frontend my-frontend
...
option http-buffer-request
timeout http-request 10s
Une explication des problématiques rencontrées sur une architecture Web répartie (horizontal scaling)