HAProxy est un puissant répartiteur de charge et serveur proxy open-source qui assure une haute disponibilité, une évolutivité et une fiabilité pour les applications web. Il distribue efficacement le trafic entrant sur plusieurs serveurs, optimisant les performances et garantissant une expérience utilisateur fluide. Dans ce tutoriel, nous vous guiderons à travers le processus d’installation, de sécurisation et d’utilisation de HAProxy.
Installation
Prérequis
Avant de commencer, assurez-vous d’avoir un serveur exécutant une distribution Linux telle qu’Ubuntu/Debian ou CentOS.Mise à jour du système
Il est toujours recommandé de mettre à jour votre système avant d’installer un nouveau logiciel. Exécutez les commandes suivantes :sudo apt update
sudo apt upgrade
Installation de HAProxy
Installez HAProxy à l’aide du gestionnaire de paquets de votre distribution. Par exemple, sur Ubuntu, exécutez :sudo apt install haproxy
Sur CentOS, utilisez plutôt la commande suivante :sudo yum install haproxy
Sécurisation
Activation des règles du pare-feu
Configurez le pare-feu de votre serveur pour autoriser le trafic entrant sur les ports nécessaires. Par défaut, HAProxy utilise le port 80 pour HTTP et le port 443 pour HTTPS. Utilisez les commandes suivantes pour ouvrir ces ports :sudo ufw allow 80
sudo ufw allow 443
sudo ufw reload
Configuration SSL/TLS
Si vous prévoyez d’utiliser HAProxy avec HTTPS, vous devez sécuriser votre site web avec un certificat SSL/TLS. Obtenez un certificat auprès d’une autorité de certification (CA) de confiance et suivez la documentation fournie par le CA pour installer le certificat sur votre serveur. Une fois que vous avez les fichiers de certificat, mettez à jour votre configuration HAProxy pour activer la terminaison SSL/TLS. Ajoutez les lignes suivantes dans le fichier de configuration HAProxy (/etc/haproxy/haproxy.cfg) : frontend http-in bind *:443 ssl crt /etc/haproxy/cert.pem mode http option httplog default_backend servers Remplacez /etc/haproxy/cert.pem par le chemin vers votre fichier de certificat SSL/TLS.Configuration de la liste blanche et de la liste noire d’adresses IP
Vous pouvez restreindre l’accès à votre serveur HAProxy en autorisant uniquement certaines adresses IP (liste blanche) ou en bloquant certaines adresses IP (liste noire). Voici un exemple de configuration pour la liste blanche et la liste noire d’adresses IP :# Liste blanche d'adresses IP autorisées
acl whitelist src 192.168.0.100 192.168.0.101
# Liste noire d'adresses IP bloquées
acl blacklist src 192.168.0.200 192.168.0.201
# Bloquer toutes les adresses IP sauf celles de la liste blanche
http-request deny unless whitelist
# Bloquer les adresses IP de la liste noire
http-request deny if blacklist
Cela permettra de n’autoriser que les adresses IP spécifiées dans la liste blanche et de bloquer celles présentes dans la liste noire.Configuration pour l’authentification basée sur des certificats
Si vous souhaitez utiliser l’authentification basée sur des certificats, vous pouvez configurer HAProxy pour cela. Voici un exemple de configuration :# Activer l'authentification basée sur des certificats
frontend http-in
bind *:443 ssl crt /etc/haproxy/cert.pem ca-file /etc/haproxy/ca.pem
mode http
option httplog
default_backend servers
Assurez-vous d’avoir généré et configuré les certificats appropriés pour l’authentification basée sur des certificats.Configuration pour prévenir les attaques de type DDoS en utilisant des filtres
Pour prévenir les attaques de type DDoS, vous pouvez configurer des filtres dans HAProxy. Voici un exemple de configuration pour limiter la taille des en-têtes et du corps des requêtes :# Activer le filtr
User
continu
ChatGPT
age pour prévenir les attaques DDoS
frontend http-in
bind *:80
mode http
option http-buffer-request
tcp-request content reject if { req.hdr_len_gt 32768 }
tcp-request content reject if { req.body_len_gt 1048576 }
default_backend servers
Ces filtres permettent de rejeter les requêtes dont la taille de l’en-tête ou du corps dépasse certaines limites, ce qui peut aider à prévenir les attaques de type DDoS.Utilisation
Une fois que vous avez installé et sécurisé HAProxy, vous pouvez configurer les serveurs backend vers lesquels le trafic sera distribué. Modifiez le fichier de configuration HAProxy pour spécifier les serveurs backend. Vous pouvez utiliser des algorithmes de répartition de charge avancés tels que « leastconn » (utilisation du serveur avec le moins de connexions), « source » (utilisation du serveur basée sur l’adresse IP source) ou « uri » (utilisation du serveur basée sur l’URI de la requête). Voici un exemple de configuration avec l’algorithme « leastconn » :backend servers
mode http
balance leastconn
server webserver1 192.168.0.1:80 check
server webserver2 192.168.0.2:80 check
Vous pouvez également configurer des options avancées telles que la persistance des sessions, la compression HTTP, la limitation de débit, etc. Référez-vous à la documentation officielle de HAProxy pour en savoir plus sur ces fonctionnalités.Monitoring et statistiques
HAProxy offre des fonctionnalités de monitoring et de génération de statistiques pour surveiller les performances de votre infrastructure. Vous pouvez activer le module de statistiques de HAProxy et accéder à une interface web pour visualiser les informations sur les connexions, les taux d’erreur, les temps de réponse, etc. Voici un exemple de configuration pour activer les statistiques :listen stats
bind *:8080
mode http
stats enable
stats uri /stats
stats realm HAProxy Statistics
stats auth username:password
Remplacez « username » et « password » par les identifiants que vous souhaitez utiliser pour accéder aux statistiques.Gestion des erreurs et basculement automatique
HAProxy permet de configurer des actions spécifiques en cas d’erreur sur les serveurs backend. Vous pouvez définir des règles pour rediriger le trafic vers d’autres serveurs en cas d’échec ou d’indisponibilité d’un serveur spécifique. Par exemple, vous pouvez rediriger le trafic vers un serveur de secours ou afficher une page d’erreur personnalisée. Voici un exemple de configuration pour le basculement automatique vers un serveur de secours en cas d’erreur :
backend servers
mode http
balance roundrobin
option httpchk HEAD /check.html HTTP/1.1\r\nHost:\ www.example.com
server webserver1 192.168.0.1:80 check
server webserver2 192.168.0.2:80 check backup
Dans cet exemple, si le serveur webserver1 échoue, le trafic sera automatiquement redirigé vers le serveur webserver2 qui est configuré en tant que serveur de secours.