Je rencontre quelques problèmes de configuration HAProxy. J'ai joué avec pour essayer de le rendre plus résilient aux charges élevées des serveurs et aux attaques par déni de service. Cependant, tout semblait fonctionner correctement jusqu'à ce que je sois soudainement victime d'une attaque (D)DoS - Haproxy signalait que le backend était hors service même si j'y accédais toujours correctement via le port direct.
Est-ce que quelqu'un pourrait vérifier ma configuration HAProxy et voir s'il y a quelque chose qui cloche ou pourquoi je rencontre ce problème... Je n'arrive tout simplement pas à comprendre pourquoi cela se produit.
Merci d'avance (et après bien sûr).
global
# Connexions Globales Max
maxconn 20000
# Autres paramètres
pidfile /var/run/haproxy.pid
stats socket /var/run/haproxy.stat mode 600 level admin
stats timeout 5m
chroot /usr/share/haproxy
daemon
# Paramètres Utilisateur
user haproxy
group haproxy
defaults
# Paramètres de configuration par défaut pour Haproxy
retries 2
maxconn 19500
timeout server 10s
timeout client 10s
timeout queue 10s
timeout connect 10s
timeout http-request 10s
# Fichiers d'erreur
errorfile 503 /etc/phpconf/haErrors/503.http
frontend Connection_Handler
default_backend Primary
bind :80
mode http
option forwardfor
option http-server-close
maxconn 20000
# Vérifier si le cookie existe
#acl cookie_set hdr_sub(cookie) authorized=1
# Si le cookie n'existe pas, essayer de le définir
#redirect prefix * set-cookie authorized=1 if !cookie_set
# Si le cookie n'est toujours pas défini, l'envoyer au backend bloqué
#use_backend Cookie_Block if !cookie_set
## (D)DoS Mitigation ##
# Table de routage des connexions
stick-table type ip size 1m expire 10m store gpc0
# Configurer le DoS src
acl src_DoS src_get_gpc0(Connection_Handler) gt 0
# Utiliser DoS tarpit si src_DoS
use_backend DoS_Tarpit if src_DoS
# Si non bloqué, suivre la connexion
tcp-request connection track-sc1 src if ! src_DoS
listen Statistics_Engine
mode http
bind XX.XXX.XX.XX:9012
stats enable
stats uri /admin?stats=true
stats auth admin:Password
stats hide-version
stats refresh 2s
#stats scope # Ajouter cette option pour fournir des statistiques pour un backend unique
backend Primary
# Configurations d'options
option httpclose
option redispatch
option abortonclose
## (D)DoS Mitigation ##
# La table suivante enregistre l'IP, le taux de connexion et le taux de bytes sortants
stick-table type ip size 200k expire 10s store conn_rate(5s)
# Suivre la demande et appliquer les règles
tcp-request content track-sc2 src
# Marquer comme abus si le taux de connexion est dépassé
acl conn_rate_abuse sc2_conn_rate gt 80
# Marquer comme abus si supérieur à X bytes
acl data_rate_abuse sc2_bytes_out_rate gt 200000
# Définir une règle ACL à appliquer sur le frontend
acl mark_as_DoS sc1_inc_gpc0 gt 0
# Bloquer les connexions marquées comme DoS
tcp-request content reject if conn_rate_abuse mark_as_DoS
#tcp-request content reject if data_rate_abuse mark_as_DoS
# Configurer le Serveur
mode http
option forwardfor
server Primary_HTTP 0.0.0.0:1080 check addr 127.0.0.1 port 80 inter 3000 rise 2 fall 3 maxconn 20000
#fullconn 1024
backend Conn_Tarpit
# Tarpit pour les connexions
mode http
timeout tarpit 20s
reqitarpit .
errorfile 503 /etc/phpconf/haErrors/tarpit_503.txt
backend Cookie_Block
# Bloquer les connexions qui n'accepteront pas de cookie
mode http
reqdeny .
errorfile 503 /etc/phpconf/haErrors/503_cookie.txt
backend DoS_Tarpit
# Tarpit pour les attaques suspectées
log 127.0.0.1 local1 info
timeout tarpit 10s # Tarpit pendant 10 secondes
errorfile 500 /etc/phpconf/haErrors/500_DoS.txt
mode http
reqitarpit .