Debian 9 : HAproxy avec SSL – SSL Termination
Debian 9 : HAproxy avec SSL – SSL Termination
Articles liés : HAproxy : afficher les statistiques Debian 9 : HAproxy avec SSL – Pass-Through
IP | Rôle | Nom de l’hôte |
---|---|---|
172.16.0.10 | HAproxy | ha |
172.16.0.11 | Server web 1 | web1 |
172.16.0.12 | Server web 2 | web2 |
: le type de load balancing pour cette procédure est le roundrobin.
Sur ha, installation de haproxy
.
root@debian~#: apt install -y haproxy
Configuration de HAproxy avec SSL
Définit la taille maximale des paramètres Diffie-Hellman utilisés pour générer la clé Diffie-Hellman éphémère / temporaire.
global […] tune.ssl.default-dh-param 2048 […]
Changer le type de redirection de tcp (couche 4 du modèle OSI) vers http (couche 7 du modèle OSI).
root@debian~#: vim /etc/haproxy/haproxy.cfg
aperçu du contenu du fichier
[…] defaults log global option forwardfor except 127.0.0.1 mode http option httplog […]
La ligne option forwardfor except 127.0.0.1 permet de ne pas faire suivre les entêtes si elles proviennent de HAproxy.
Dans ce même fichier ajouter les frontend et les backend.
aperçu du contenu du fichier
[…] frontend www bind *:80 bind *:443 ssl crt-list /etc/ssl/private/crt-list.txt mode http default_backend web backend web mode http option httpchk HEAD / HTTP/1.1\r\nHost:localhost http-request set-header X-Forwarded-Port %[dst_port] http-request add-header X-Forwarded-Proto https if { ssl_fc } balance roundrobin server web1 172.16.0.11:80 check server web2 172.16.0.12:80 check
option httpchk HEAD / HTTP/1.1\r\nHost:localhost et http-request […] permettent de rediriger les entêtes.
Créer le fichier /etc/ssl/private/crt-list.txt.
root@debian~#: vim /etc/ssl/private/crt-list.txt
contenu du fichier
/etc/ssl/private/stan.pem
: HAproxy s’attend a 1 fichier par domaine pour gérer les certificats SSL. Il faut donc créer ce fichier à partir du certificat et de la clé de ce certificat.
Génération du *.pem.
root@debian~#: cat /etc/apache2/ssl/stan-selfsigned.crt /etc/apache2/ssl/stan-selfsigned.key > /etc/ssl/private/stan.pem
Vérifier tester le fichier de configuration.
root@debian~#: haproxy -c -V -f /etc/haproxy/haproxy.cfg
sortie
Configuration file is valid
Redémarrer le service.
root@debian~#: systemctl restart haproxy
haproxy
est en place, pour le tester il suffit naviguer sur http://172.16.0.10/ qui mène à l’un des serveur web.
Pour s’assurer que le load balancing fonctionne comme attendu, faire un tail -f
sur le fichier de logs haproxy
.
root@debian~#: tail -f /var/log/haproxy.log
aperçu du contenu du fichier
Jan 12 14:01:59 ha haproxy[842]: 172.16.0.1:51560 [12/Jan/2019:14:01:50.314] www web/web1 1/0/8963 1513 -- 0/0/0/0/0 0/0 Jan 12 14:02:13 ha haproxy[842]: 172.16.0.1:51564 [12/Jan/2019:14:02:05.964] www web/web2 1/0/8002 503 -- 0/0/0/0/0 0/0 Jan 12 14:02:30 ha haproxy[842]: 172.16.0.1:51566 [12/Jan/2019:14:02:14.537] www web/web1 1/0/15912 1266 -- 0/0/0/0/0 0/0 Jan 12 14:02:43 ha haproxy[842]: 172.16.0.1:51572 [12/Jan/2019:14:02:31.980] www web/web2 1/0/11195 754 -- 0/0/0/0/0 0/0 Jan 12 14:02:45 ha haproxy[842]: 172.16.0.1:51576 [12/Jan/2019:14:02:44.026] www web/web1 1/0/1685 754 -- 0/0/0/0/0 0/0 Jan 12 14:02:49 ha haproxy[842]: 172.16.0.1:51580 [12/Jan/2019:14:02:47.417] www web/web2 1/0/1962 752 -- 0/0/0/0/0 0/0
: On voit que le frontend www fait appel au backend web lui-même renvoyant vers web1 ou web2.
Redirection HTTP vers HTTPS
Pour forcer la navigation en https, il faut créer un ACL dans le frontend.
aperçu du contenu du fichier
[…] frontend www bind *:80 bind *:443 ssl crt-list /etc/ssl/private/crt-list.txt redirect scheme https if !{ ssl_fc } mode http default_backend web backend web balance roundrobin mode http server web1 172.16.0.11:80 check server web2 172.16.0.12:80 check
Configuration des logs de Apache
Pour avoir l’IP du client (et non cette du proxy) dans les logs de Apache, il faut modifier le format des logs.
root@debian~#: vim /etc/apache2/apache2.conf
aperçu du contenu du fichier
La ligne :
[…] LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined […]
Devient :
[…]
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
[…]
by Nicolas SHINEY | February 3, 2019 | No Comments | Système