« Haproxy » : différence entre les versions

De Wiki doc

(Page créée avec « HAProxy est une application qui permet de faire du Load Balancing. Dans ce tuto nous allons l'utiliser pour faire du reverse proxy. Voici un schéma simple :... »)
 
(→‎Configuration : Actualisation de la configuration + mise à jour du lien vers la documentation officielle + correction de fautes d'orthographe)
 
(17 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
[[Category:reverse_proxy]]
HAProxy est une application qui permet de faire du Load Balancing. Dans ce tuto nous allons l'utiliser pour faire du reverse proxy.
HAProxy est une application qui permet de faire du Load Balancing. Dans ce tuto nous allons l'utiliser pour faire du reverse proxy.


Ligne 21 : Ligne 22 :


=Installation=
=Installation=
Le paquet haproxy est disponible dans les dépôts Debian. Nous pouvons installer la dernière version de haproxy en activant le backports.
Le paquet haproxy est disponible dans les dépôts Debian. Nous pouvons installer la dernière version de haproxy en activant [[Debian dépôt Backports|le dépôt Backports de Debian]].


  $ apt install haproxy
  $ apt install haproxy
Ligne 42 : Ligne 43 :


=Configuration=
=Configuration=
Plusieurs types de configuration est possible (+/- optimisé). Je vous propose ma version, mais n'hésitez pas a parcourir [http://www.haproxy.org/download/1.8/doc/configuration.txt la documentation de HAProxy] (modifier la version de HAProxy dans l'URL si besion).
Plusieurs types de configurations sont possibles (+/- optimisé). Je vous propose ma version, mais n'hésitez pas à parcourir [http://www.haproxy.org/download/2.2/doc/configuration.txt la documentation de HAProxy] (modifier la version de HAProxy dans l'URL si besoin).


La configuration ce fait dans un seul fichier : /etc/haproxy/haproxy.cfg
La configuration se fait dans un seul fichier : <syntaxhighlight lang="bash" inline>/etc/haproxy/haproxy.cfg</syntaxhighlight>


Voila une configuration : (Les commentaire vous aiderons a mieux comprends)
Voila une configuration (Les commentaires vous aiderons a mieux comprendre) :


global
<syntaxhighlight lang="bash">
daemon
global
maxconn 256
daemon
log 127.0.0.1 local5 debug
maxconn 50
spread-checks 10
#log localhost user info
tune.ssl.default-dh-param 2048
log 127.0.0.1 local5 debug
spread-checks 50
defaults
# tune.ssl.default-dh-param 4096
option dontlognull
log /dev/log    local0
mode http
log /dev/log    local1 notice
stats enable
# https://ssl-config.mozilla.org - 18/01/2022 - j'ai enlevé le 128 bits
default-server inter 30s fastinter 5s
ssl-default-bind-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
log global
ssl-default-bind-options prefer-client-ciphers no-sslv3 no-tlsv10 no-tlsv11 no-tlsv12 no-tls-tickets
option httplog
ssl-default-server-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        timeout connect 5000
ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tlsv12 no-tls-tickets
        timeout client  50000
 
        timeout server  50000
defaults
timeout tunnel 1h
option dontlognull
errorfile 400 /etc/haproxy/errors/400.http
mode http
errorfile 403 /etc/haproxy/errors/403.http
stats enable
errorfile 408 /etc/haproxy/errors/408.http
default-server inter 30s fastinter 5s
errorfile 500 /etc/haproxy/errors/500.http
log global
errorfile 502 /etc/haproxy/errors/502.http
option httplog
errorfile 503 /etc/haproxy/errors/503.http
compression algo gzip
errorfile 504 /etc/haproxy/errors/504.http
compression type text/html text/plain text/xml text/css text/javascript application/javascript application/json text/json
 
        timeout connect 5000
  ###########
        timeout client  50000
  # FONTEND #
        timeout server  50000
  ###########
timeout tunnel 1h
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
 
# Statistiques facultatives des serveurs desservis
listen stats
bind  ip_du_serveur:8280
stats enable
stats uri /
stats show-legends
stats refresh 10s
stats realm Haproxy\ Statistics
stats auth admin:motdepasse
 
  ############
  # FRONTEND #
  ############
   
   
  ###HTTP###
  ###HTTP###
  frontend http
  frontend http
  bind 0.0.0.0:80 <span style="color:#FF0000">#HAproxy écoute sur le port 80</span>
  bind :80 # HAProxy écoute sur le port 80
mode http <span style="color:#FF0000">#Activation du mode HTTP</span>
option httplog <span style="color:#FF0000">#Activation des logs</span>
   
   
  ###ACL###
  ###ACL###
  acl host_web1_via_http hdr_end(host) domaine1.local <span style="color:#FF0000">#Si le host termine par "domaine1.local" alors l'acl "host_web1_via_http" est vrai</span>
  # ACL = Si le nom de domaine demandé contient ça ("host_web1") (ce qui fait web1.domaine1.local)
acl host_web1 hdr_end(host) domaine1.local
   
   
  ###USE_BACKEND###
  ###USE_BACKEND###
  use_backend web1_via_http if host_web1_via_http <span style="color:#FF0000">#Si l'acl "host_web1_via_http" est vrai, le "backend web1_via_http" sera utilisé (en bas de la config)</span>
  # Alors tu redirige vers le backend "web1"
use_backend web1 if host_web1
   
   
  ###DEFAULT_BACKEND###
  ###DEFAULT_BACKEND###
  default_backend gotohttps <span style="color:#FF0000">#Si aucun acl est valide, utiliser le backend "gotohttps" (en bas de la config)</span>
  # Tout le reste sera renvoyer en HTTPS
default_backend tout_https
   
   
  ###HTTPS###
  ###HTTPS###
  frontend https
  frontend https
  <span style="color:#FF0000">#HAproxy écoute sur le port 443, vérifie les certificats, accepte/refuse des ciphers et refuse le protocole sslv3</span>
  http-response add-header X-Frame-Options SAMEORIGIN
bind :443 ssl crt /repertoir/ou/sont/situé/les/certificats ciphers AESGCM+AES128:AES128:AESGCM+AES256:AES256:RSA+RC4+SHA:!RSA+AES:!CAMELLIA:!aECDH:!3DES:!DSS:!PSK:!SRP:!aNULL no-sslv3
# Source: https://ispire.me/http2-ssl-offloading-with-haproxy-and-nginx/
mode http <span style="color:#FF0000">#Activation du mode HTTP</span>
bind :443 ssl crt /etc/haproxy/tls/ alpn h2,http/1.1
option httplog <span style="color:#FF0000">#Activation des logs</span>
# Source: https://raymii.org/s/snippets/haproxy_set_specific_ssl_ciphers.html
# https://www.haproxy.com/fr/documentation/aloha/9-5/traffic-management/lb-layer7/tls/
 
  ###ACL###
  ###ACL###
  acl host_web2_via_https hdr_reg(host) ^(www.|)sousdomain1.domain2.local$ <span style="color:#FF0000">#Si le host est valider par l’expression régulière (www.sousdomaine1.domain2.local ou sousdomaine1.domain2.local) alors l'acl "host_web2_via_https" est vrai</span>
  acl host_web2 hdr_reg(host) ^(www.|)sousdomain1.domain2.local$ # Si l'hôte est validé par l’expression régulière (www.sousdomaine1.domain2.local ou sousdomaine1.domain2.local) alors l'acl "host_web2" est vraie
        acl host_web3_via_https hdr(host) sousdomain2.domain2.local <span style="color:#FF0000">#Si le host est sousdomaine2.domain2.local alors l'acl "host_web3_via_https" est vrai</span>
acl host_web3 hdr(host) sousdomain2.domain2.local # Si l'hôte est sousdomaine2.domain2.local alors l'acl "host_web3" est vrai
 
  ###USE_BACKEND###
  ###USE_BACKEND###
  use_backend web2_via_https if host_web2_via_https<span style="color:#FF0000">#Si l'acl "host_web2_via_https" est vrai, le "backend web2_via_https" sera utilisé (en bas de la config)</span>
  use_backend web2 if host_web2
        use_backend web3_via_https if host_web3_via_https<span style="color:#FF0000">#Si l'acl "host_web3_via_https" est vrai, le "backend web3_via_https" sera utilisé (en bas de la config)</span>
use_backend web3 if host_web3
   
   
  ###########
  ###########
Ligne 113 : Ligne 136 :
  ###########
  ###########
   
   
  backend web1_via_http
  backend web1
  option forwardfor except 127.0.0.1 <span style="color:#FF0000">#Permet de transferer l'IP du visiteur au serveur</span>
  option forwardfor except 127.0.0.1 # Permet de transférer l'IP du visiteur au serveur
  server web1 ADRESESIP:PORT check maxconn 32 <span style="color:#FF0000">#Si le backend "web_en_http" est appelé, la requête http est envoyé sur le serveur dont l'IP et sont port est définit</span>
  server web1 ADRESSESIP:8080 check maxconn 32 # Si le backend "web1" est appelé, la requête http est envoyé sur le serveur dont l'IP et sont port (8080 par exemple) est définit
  backend gotohttps
  backend tout_https
  redirect scheme https code 301 if !{ ssl_fc } <span style="color:#FF0000">#revoie sur le fontend https</span>
  redirect scheme https code 301 if !{ ssl_fc } # revoie sur le fontend https
  backend web2_via_https
  backend web2
  option forwardfor except 127.0.0.1 <span style="color:#FF0000">#Permet de transferer l'IP du visiteur au serveur</span>
  option forwardfor except 127.0.0.1 #Permet de transférer l'IP du visiteur au serveur
  server web2 ADRESESIP:PORT check maxconn 32 <span style="color:#FF0000">#Si le backend "web2_via_https" est appelé, la requête http est envoyé sur le serveur dont l'IP et sont port est définit</span>
  server web2 ADRESSESIP:80 check maxconn 32 # Si le backend "web2" est appelé, la requête http est envoyé sur le serveur dont l'IP et sont port (80 par exemple) est définit
  backend web3_via_https
  backend web3
  option forwardfor except 127.0.0.1 <span style="color:#FF0000">#Permet de transferer l'IP du visiteur au serveur</span>
  option forwardfor except 127.0.0.1 #Permet de transférer l'IP du visiteur au serveur
  server web2 ADRESESIP:PORT check maxconn 32 ssl verify none <span style="color:#FF0000">#Si le backend "web3_via_https" est appelé, la requête http'''s''' est envoyé sur le serveur dont l'IP et sont port est définit</span>
  server web2 ADRESSESIP:443 check maxconn 32 ssl verify none # Si le backend "web3" est appelé, la requête https est envoyé sur le serveur dont l'IP et sont port (443 par exemple, remarque le commande ssl verify none permet de ne pas vérifier le certificat du serveur appelé) est définit
</syntaxhighlight>
 
L'option <syntaxhighlight lang="bash" inline>forwardfor</syntaxhighlight> des sections ''backend'' permet d'ajouter une entête ''X-Forwarded-For'' à la requête ''HTTP'' envoyée au serveur local afin que l'adresse ''IP'' source soit lisible dans les journaux de celui-ci. Une [[Apache2#Journalisation_et_mandataire_inverse|configuration supplémentaire]] de son côté doit être ajouté afin de venir lire cette information.


==Information supplémentaire==
==Information supplémentaire==
===ACL===
===ACL===
Voici les différentes commande pour les acl :
Voici les différentes commande pour les acl :
 
* hdr(host) SOUSDOMAINE.DOMAINE : si l'hôte est "SOUSDOMAINE.DOMAINE"
*hdr(host) SOUSDOMAIN.DOMAIN : si le host est "SOUSDOMAIN.DOMAIN"
* hdr_beg(host) SOUSDOMAINE : si l'hôte commence par le sous-domaine "SOUSDOMAINE"
*hdr_beg(host) SOUSDOMAIN : si le host commence par le sous-domaine "SOUSDOMAIN"
* hdr_end(host) DOMAINE : si l'hôte fini par le domaine "DOMAINE"
*hdr_end(host) DOMAIN : si le host fini par le domain "DOMAIN"
* hdr_reg(host) REGEXP : si l'hôte est validé par la regexp "REGEXP"
*hdr_reg(host) REGEXP : si le host est valider par la regexp "REGEXP"


===Backend===
===Backend===
Voici les différentes commande pour les serveurs contenu des les backend
Voici les différentes commande pour les serveurs contenu des les backend
* check : vérifie que le serveur est disponible
* maxconn 32 : accepte 32 connexion en même temps
* ssl verify none : ne vérifie pas le certificat du serveur appelé
===Certificats===
La commande <syntaxhighlight lang="bash" inline>crt /etc/haproxy/tls/</syntaxhighlight> permet de définir le répertoire où est placé les certificats.
''HAProxy'' gère les certificats chaînés au format ''pem'', que vous pouvez simplement créer de la façon suivante en concaténant le ''.crt'' et le ''.key'' :


*check : verifie que le serveur est dispo
cat sousdomaine2.domaine2.local.crt sousdomaine2.domaine2.local.key > sousdomaine2.domaine2.local.pem
*maxconn 32 : accept 32 connextion en même temps
*ssl verify none : ne verifie pas le certificat du serveur appelé


=Test=
=Test=
Ligne 154 : Ligne 184 :


Celui-ci vous retournera les lignes en erreur.
Celui-ci vous retournera les lignes en erreur.
=Accès par mot de passe=
HAProxy permet de configurer un accès à un site par mot de passe à la manière des ''.htaccess'' d'[[Apache]].
==Création d'un groupe d'utilisateurs==
<syntaxhighlight lang="bash">
userlist liste-utilisateurs
group utilisateurs-seedbox
group utilisateurs-toto
user seedman password $5$cDFwlRsuHkvtybY$xpEFL2ctNPEXXDijQNO.jrzPUsuRYRKHNQaS.n/qFB1 groups utilisateurs-seedbox
# user michal password $5$gZZsvtRWI$9JIU8pfHLG8BtYW5tceAKD1oNAjjfL5e4LwUfAW1sqA groups utilisateurs-seedbox
# user milosz password $1$R29iAdV/$1QUKx8eo6e5pcMIEgaZwt0 groups utilisateurs-toto
# user guest  insecure-password guestpassword
</syntaxhighlight>
Il est possible de préciser un mot de passe haché (DES, MD5, SHA-256 et SHA-512 pris en charge) via la directive '''password''' ou un mot de passe en clair via la directive '''insecure-password'''.
Les mots de passe hachés sont générables via la commande suivante :
printf "toto" | mkpasswd --stdin --method=sha-256
''Note: la commande <syntaxhighlight lang="bash" inline>mkpasswd</syntaxhighlight> provient du paquet <syntaxhighlight lang="bash" inline>whois</syntaxhighlight>.''
==Utilisation d'un groupe d'utilisateurs==
À utiliser à la suite d'une section '''backend''' :
<syntaxhighlight lang="bash">
acl connexion-auth http_auth_group(liste-utilisateurs) utilisateurs-seedbox
http-request auth realm "Authentification requise" unless connexion-auth
</syntaxhighlight>
Notez la précision du groupe pouvant se connecté à la fin de l'ALC. On peut en mettre plusieurs en les séparent par des espaces. Si aucun groupe n'est précisé, Haproxy plante au démarrage.
==Source de la section==
* https://blog.sleeplessbeastie.eu/2018/03/08/how-to-define-basic-authentication-on-haproxy/


=Liens=
=Liens=
*https://blog.victor-hery.com/index.php?article21/configurer-un-reverse-proxy-sous-haproxy
* https://blog.victor-hery.com/index.php?article21/configurer-un-reverse-proxy-sous-haproxy
* Documentation : https://cbonte.github.io/haproxy-dconv/2.4/configuration.html

Dernière version du 9 mai 2023 à 19:29

HAProxy est une application qui permet de faire du Load Balancing. Dans ce tuto nous allons l'utiliser pour faire du reverse proxy.

Voici un schéma simple :

                                                     8080
                                                   ------> Serveur Web
                                                   |
          80/443        80/443                     |   80
Clients --------> BOX --------> Serveur HAProxy ---------> Serveur Web
                                                   |
                                                   |  443
                                                   ------> Serveur Web

Déroulement :

  • Le client envoie une requête web sur mon IP Fixe.
  • Sur la box, le port 80 et 443 est ouvert et celui-ci contact le serveur HAProxy.
  • HAProxy traite la requête web et revoie la requête sur le serveur demandé.
  • Le serveur Web, lui, exécute et revois la réponse.

Cela permet clairement, de contacter plusieurs serveurs web avec une seule IP Fixe.

Installation

Le paquet haproxy est disponible dans les dépôts Debian. Nous pouvons installer la dernière version de haproxy en activant le dépôt Backports de Debian.

$ apt install haproxy

Il faut ensuite activer HAProxy. Éditer le fichier /etc/default/haproxy et remplacer :

ENABLED=0

par :

ENABLED=1

Terminologie

Haproxy utilise des termes assez classiques dans sa configuration, mais que nous allons tout de même revoir ici afin de bien savoir de quoi l'on parle dans la suite.

  • bind : attacher en Anglais, permet de dire sur quelle IP et quel port haproxy va écouter. Par exemple, 192.168.1.1 sur le port 80
  • frontend : c'est un bloc de configuration qui permet de définir toutes les règles qui s'appliqueront (domaines écoutés, limitations, etc). Un frontend peut s'appliquer à un ou plusieurs bind.
  • backend : c'est un autre bloc de configuration, que l'on place derrière un frontend. Si le frontend gère ce qui est publique (à "l"avant" du serveur), le backend gère "l'arrière". C'est là que vous définirez les serveurs web vers lesquels envoyer les requêtes.
  • acl : une "access control list" permet de définir des conditions dans un bloc, par exemple "si le domaine contient site1, alors faire cela, si la requête est en https, alors faire ceci"

Configuration

Plusieurs types de configurations sont possibles (+/- optimisé). Je vous propose ma version, mais n'hésitez pas à parcourir la documentation de HAProxy (modifier la version de HAProxy dans l'URL si besoin).

La configuration se fait dans un seul fichier : /etc/haproxy/haproxy.cfg

Voila une configuration (Les commentaires vous aiderons a mieux comprendre) :

global
	daemon
	maxconn 50
	#log localhost user info
	log 127.0.0.1 local5 debug
	spread-checks 50
	# tune.ssl.default-dh-param 4096
	log /dev/log    local0
	log /dev/log    local1 notice
	# https://ssl-config.mozilla.org - 18/01/2022 - j'ai enlevé le 128 bits
	ssl-default-bind-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
	ssl-default-bind-options prefer-client-ciphers no-sslv3 no-tlsv10 no-tlsv11 no-tlsv12 no-tls-tickets
	ssl-default-server-ciphersuites TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
	ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tlsv12 no-tls-tickets

defaults
	option	dontlognull
	mode	http
	stats	enable
	default-server inter 30s fastinter 5s
	log	global
	option	httplog
	compression algo gzip
	compression type text/html text/plain text/xml text/css text/javascript application/javascript application/json text/json
        timeout connect 5000
        timeout client  50000
        timeout server  50000
	timeout tunnel	1h
	errorfile 400 /etc/haproxy/errors/400.http
	errorfile 403 /etc/haproxy/errors/403.http
	errorfile 408 /etc/haproxy/errors/408.http
	errorfile 500 /etc/haproxy/errors/500.http
	errorfile 502 /etc/haproxy/errors/502.http
	errorfile 503 /etc/haproxy/errors/503.http
	errorfile 504 /etc/haproxy/errors/504.http

# Statistiques facultatives des serveurs desservis
listen stats
	bind  ip_du_serveur:8280
	stats enable
	stats uri /
	stats show-legends
	stats refresh 10s
	stats realm Haproxy\ Statistics
	stats auth admin:motdepasse

 ############
 # FRONTEND #
 ############
 
 ###HTTP###
 frontend http
 	bind :80 # HAProxy écoute sur le port 80
 
 	###ACL###
 	# ACL = Si le nom de domaine demandé contient ça ("host_web1") (ce qui fait web1.domaine1.local)
 	acl host_web1 hdr_end(host) domaine1.local
 
 	###USE_BACKEND###
 	# Alors tu redirige vers le backend "web1"
 	use_backend web1 if host_web1
 
 	###DEFAULT_BACKEND###
 	# Tout le reste sera renvoyer en HTTPS
 	default_backend tout_https
 
 ###HTTPS###
 frontend https
 	http-response add-header X-Frame-Options SAMEORIGIN
	# Source: https://ispire.me/http2-ssl-offloading-with-haproxy-and-nginx/
	bind :443 ssl crt /etc/haproxy/tls/ alpn h2,http/1.1
	# Source: https://raymii.org/s/snippets/haproxy_set_specific_ssl_ciphers.html
	# https://www.haproxy.com/fr/documentation/aloha/9-5/traffic-management/lb-layer7/tls/

 	###ACL###
 	acl host_web2 hdr_reg(host) ^(www.|)sousdomain1.domain2.local$ # Si l'hôte est validé par l’expression régulière (www.sousdomaine1.domain2.local ou sousdomaine1.domain2.local) alors l'acl "host_web2" est vraie
 	acl host_web3 hdr(host) sousdomain2.domain2.local # Si l'hôte est sousdomaine2.domain2.local alors l'acl "host_web3" est vrai

 	###USE_BACKEND###
 	use_backend web2 if host_web2
 	use_backend web3 if host_web3
 
 ###########
 # BACKEND #
 ###########
 
 backend web1
 	option forwardfor except 127.0.0.1 # Permet de transférer l'IP du visiteur au serveur
 	server web1 ADRESSESIP:8080 check maxconn 32 # Si le backend "web1" est appelé, la requête http est envoyé sur le serveur dont l'IP et sont port (8080 par exemple) est définit
 backend tout_https
 	redirect scheme https code 301 if !{ ssl_fc } # revoie sur le fontend https
 backend web2
 	option forwardfor except 127.0.0.1 #Permet de transférer l'IP du visiteur au serveur
 	server web2 ADRESSESIP:80 check maxconn 32 # Si le backend "web2" est appelé, la requête http est envoyé sur le serveur dont l'IP et sont port (80 par exemple) est définit
 backend web3
 	option forwardfor except 127.0.0.1 #Permet de transférer l'IP du visiteur au serveur
 	server web2 ADRESSESIP:443 check maxconn 32 ssl verify none # Si le backend "web3" est appelé, la requête https est envoyé sur le serveur dont l'IP et sont port (443 par exemple, remarque le commande ssl verify none permet de ne pas vérifier le certificat du serveur appelé) est définit

L'option forwardfor des sections backend permet d'ajouter une entête X-Forwarded-For à la requête HTTP envoyée au serveur local afin que l'adresse IP source soit lisible dans les journaux de celui-ci. Une configuration supplémentaire de son côté doit être ajouté afin de venir lire cette information.

Information supplémentaire

ACL

Voici les différentes commande pour les acl :

  • hdr(host) SOUSDOMAINE.DOMAINE : si l'hôte est "SOUSDOMAINE.DOMAINE"
  • hdr_beg(host) SOUSDOMAINE : si l'hôte commence par le sous-domaine "SOUSDOMAINE"
  • hdr_end(host) DOMAINE : si l'hôte fini par le domaine "DOMAINE"
  • hdr_reg(host) REGEXP : si l'hôte est validé par la regexp "REGEXP"

Backend

Voici les différentes commande pour les serveurs contenu des les backend

  • check : vérifie que le serveur est disponible
  • maxconn 32 : accepte 32 connexion en même temps
  • ssl verify none : ne vérifie pas le certificat du serveur appelé

Certificats

La commande crt /etc/haproxy/tls/ permet de définir le répertoire où est placé les certificats.

HAProxy gère les certificats chaînés au format pem, que vous pouvez simplement créer de la façon suivante en concaténant le .crt et le .key :

cat sousdomaine2.domaine2.local.crt sousdomaine2.domaine2.local.key > sousdomaine2.domaine2.local.pem

Test

Pour tester la configuration, il suffi de redémarrer le service:

$ service haproxy restart

Si la commande ne vous revoie pas erreur, c'est que votre configuration est bien pris en compte.

En revanche, si elle retourne une erreur, exécuter la commande de vérification de la configuration :

$ haproxy -c -f /etc/haproxy/haproxy.cfg

Celui-ci vous retournera les lignes en erreur.

Accès par mot de passe

HAProxy permet de configurer un accès à un site par mot de passe à la manière des .htaccess d'Apache.

Création d'un groupe d'utilisateurs

userlist liste-utilisateurs
	group utilisateurs-seedbox
	group utilisateurs-toto

	user seedman password $5$cDFwlRsuHkvtybY$xpEFL2ctNPEXXDijQNO.jrzPUsuRYRKHNQaS.n/qFB1	groups utilisateurs-seedbox
#	user michal password $5$gZZsvtRWI$9JIU8pfHLG8BtYW5tceAKD1oNAjjfL5e4LwUfAW1sqA	groups utilisateurs-seedbox
#	user milosz password $1$R29iAdV/$1QUKx8eo6e5pcMIEgaZwt0				groups utilisateurs-toto
#	user guest  insecure-password guestpassword

Il est possible de préciser un mot de passe haché (DES, MD5, SHA-256 et SHA-512 pris en charge) via la directive password ou un mot de passe en clair via la directive insecure-password.

Les mots de passe hachés sont générables via la commande suivante :

printf "toto" | mkpasswd --stdin --method=sha-256

Note: la commande mkpasswd provient du paquet whois.

Utilisation d'un groupe d'utilisateurs

À utiliser à la suite d'une section backend :

acl connexion-auth http_auth_group(liste-utilisateurs) utilisateurs-seedbox
			http-request auth realm "Authentification requise" unless connexion-auth

Notez la précision du groupe pouvant se connecté à la fin de l'ALC. On peut en mettre plusieurs en les séparent par des espaces. Si aucun groupe n'est précisé, Haproxy plante au démarrage.

Source de la section

Liens