haproxy problèmes...

Répondre
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

haproxy problèmes...

Message par kalistyan »

Bonjour à tous,

Je viens de monter un petit haproxy, ceci afin de donner accès à une console.
Afin de personnaliser l'accès aux clients, il se connecte via leur url.

antispam.client1.fr
antispam.client2.fr
etc...

Ci-dessous, la conf de haproxy.cfg

Code : Tout sélectionner

global
	log /dev/log	local0
	log /dev/log	local1 notice
	chroot /var/lib/haproxy
	stats socket /run/haproxy/admin.sock mode 660 level admin
	stats timeout 30s
	user haproxy
	group haproxy
	daemon

	# Default SSL material locations
	ca-base /etc/ssl/certs
	crt-base /etc/ssl/private

	# Default ciphers to use on SSL-enabled listening sockets.
	# For more information, see ciphers(1SSL). This list is from:
	# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
	ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
	ssl-default-bind-options no-sslv3
	tune.ssl.default-dh-param 2048

defaults
	log	global
	mode	http
	option	httplog
	option	dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
	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

frontend	https-client1
	bind	*:80
	bind	*:443 ssl crt /etc/haproxy/certs/antispam.client1.fr
        redirect scheme https if !{ ssl_fc }
	acl host_antispam hdr_dom(host) -i antispam
	use_backend antispam_cluster if host_antispam

frontend	https-client2
	bind	*:80
	bind	*:443 ssl crt /etc/haproxy/certs/antispam.client2.com
        redirect scheme https if !{ ssl_fc }
        acl host_antispam hdr_dom(host) -i antispam
        use_backend antispam_cluster if host_antispam

backend	antispam_cluster
	balance roundrobin
	mode	http
	http-request set-header X-Forwarded-Proto https if { ssl_fc }
	cookie SERVERID insert indirect
	server scw-xeams00 10.2.168.85:443 ssl verify none cookie xeams00 check weight 80
	server scw-xeams01 10.2.191.211:443 ssl verify none cookie xeams01 check weight 20
Malheureusement et de manière complément aléatoire, il arrive que client 1 tombe sur le certificat du client 2 (ou inversement). :o

Cette configuration est-elle possible ? Si oui, une idée de comment faire ? :ange:

Merci :jap:
gizmo78
Messages : 20037
Inscription : ven. 12 janv. 2018 17:44

haproxy problèmes...

Message par gizmo78 »

regarde les acl_rule pour faire correspondre un ndd avec un backend ;)

et sinon: ELLE EST OU L'INDENTATION????!!! :fou:

( :D )
Avatar de l’utilisateur
dsebire
Messages : 12716
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

haproxy problèmes...

Message par dsebire »

+1
bind *:443 dans les 2 cas, ça me surprend pas que tu ai ce comportement. ;)
Avatar de l’utilisateur
Zedoune
Messages : 15343
Inscription : ven. 12 janv. 2018 17:44

haproxy problèmes...

Message par Zedoune »

faudrait que haproxy gère le SNI, du coup en fonction du nom d'hôte demandé il peut utiliser un certificat SSL ou un autre.
Sinon ben à l'ancienne il te faut une adresse IP par certificat.
ou un certificat avec tous les domaines dessus
Avatar de l’utilisateur
poulpito
Messages : 12402
Inscription : ven. 12 janv. 2018 17:44
Localisation : Grenoble

haproxy problèmes...

Message par poulpito »

oui il gère

[cpp]frontend https
bind *:443 ssl no-sslv3 crt /etc/ssl/letsencrypt
mode http
default_backend z

http-response set-header Strict-Transport-Security max-age=31536000;\ includeSubdomains;\ preload

acl forum_x hdr_beg(host) -i x.com
acl forum_x hdr_beg(host) -i x.fr
use_backend y if forum_x

[/cpp]
et d'ailleurs il va chercher le certif qui va bien suivant le ndd dans le dossier de letsencrypt
moyennant un petit
cat $domain/privkey.pem $domain/fullchain.pem > $domain.pem

(en fait j'ai un script qui va concaténer les clef par domaine d'ou le $domain :p )
gizmo78
Messages : 20037
Inscription : ven. 12 janv. 2018 17:44

haproxy problèmes...

Message par gizmo78 »

tu peux même définir tes paramètres ssl dans le global, perso j'ai ca:
ssl-default-bind-options no-sslv3
        ssl-default-bind-ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
        tune.ssl.cachesize 100000
        tune.ssl.lifetime 600
        tune.ssl.maxrecord 1460
        tune.ssl.default-dh-param 2048
Avatar de l’utilisateur
poulpito
Messages : 12402
Inscription : ven. 12 janv. 2018 17:44
Localisation : Grenoble

haproxy problèmes...

Message par poulpito »

oui +1 dans le global

[cpp] global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon

ssl-default-bind-options no-sslv3
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!D$

ssl-default-server-options no-sslv3
ssl-default-server-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:$


defaults
log global
mode http
option httplog
option dontlognull
option forwardfor
option http-server-close
timeout connect 5000
timeout client 50000
timeout server 50000

[/cpp]
tu peux te rajouter la partie stats aussi avec un frontend supplémentaire pour avoir une belle page web
[cpp]frontend stats
bind *:9000
mode http
balance
timeout client 5000
timeout connect 4000
timeout server 30000

stats uri /haproxy_stats
stats realm HAProxy\ Statistics

#The user/pass you want to use.
stats auth xxxxx:yyyyyyy

#This allows you to take down and bring up back end servers.
#This will produce an error on older versions of HAProxy.
stats admin if TRUE

[/cpp]
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

haproxy problèmes...

Message par kalistyan »

Un grand merci pour vos différents retours, après quelques heures... Cela fonctionne avec la configuration ci-dessous.

Code : Tout sélectionner

frontend https-in
	bind	*:80
	bind	*:443 ssl crt /etc/haproxy/certs/antispam.client1.fr crt /etc/haproxy/certs/antispam.client2.com
	reqadd X-Forwarded-Proto:\ https
	redirect scheme https if !{ ssl_fc }	
	acl host_antispam hdr(host) -m str antispam.client1.fr antispam.client2.com
	use_backend antispam_cluster if host_antispam
	
backend	antispam_cluster
	balance roundrobin
	mode	http
	cookie SERVERID insert indirect
	server scw-xeams00 10.2.168.85:80 check cookie xeams00
	server scw-xeams01 10.2.191.211:80 check cookie xeams01
Reste encore un problème étrange avec Google Chrome, la console ne fonctionne pas correctement... Alors que l'utilisateur peut s'authentifier sans problème.
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

haproxy problèmes...

Message par kalistyan »

reqadd X-Forwarded-Proto:\ https #=> Ajout header
http://www.alasta.com/haproxy/2014/12/1 ... ading.html

Qu'est-ce que cela apporte ?
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

haproxy problèmes...

Message par kalistyan »

Reste encore un problème étrange avec Google Chrome, la console ne fonctionne pas correctement... Alors que l'utilisateur peut s'authentifier sans problème.
Finalement, il n'y a pas que "Chrome" qui pose problème ! :o
Avatar de l’utilisateur
dsebire
Messages : 12716
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

haproxy problèmes...

Message par dsebire »

reqadd X-Forwarded-Proto:\ https #=> Ajout header
http://www.alasta.com/haproxy/2014/12/1 ... ading.html

Qu'est-ce que cela apporte ?
j'ai pas lu la doc HAproxy, mais sur apache ya un truc similaire.
ça permet de remplir les champs X-forwarded-by et X-forwarded-for qui permettent au serveur derrière ton reverse de savoir par quel proxy la requête est passée (le by) et quel est l'IP du client (le for)

donc au niveau applicatif, ça te permet par exemple de savoir quel client s'est connecté, donc par exemple de le connecter automatiquement par son IP, sans authentification.
gizmo78
Messages : 20037
Inscription : ven. 12 janv. 2018 17:44

haproxy problèmes...

Message par gizmo78 »

kali: suivant ce que tu veux faire passer, c'est peut être pas du http mais voir pour tester le mode tcp
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

haproxy problèmes...

Message par kalistyan »

J'avance tout doucement mais sûrement. :)
frontend https-in
	bind *:80
	bind *:443 ssl crt /etc/haproxy/certs
	redirect scheme https if !{ ssl_fc }
	mode http
	acl host_antispam hdr_beg(host) antispam.
	use_backend antispam_cluster if host_antispam

backend	antispam_cluster
	mode http
	balance roundrobin
	cookie SERVERID insert indirect
	server scw-xeams00 10.2.168.85:443 ssl verify none check cookie xeams00
	server scw-xeams01 10.2.191.211:443 ssl verify none check cookie xeams01
Edit : MAJ ;)
root@scw-3c719c:/# haproxy -v
HA-Proxy version 1.7.5-2ppa1~xenial 2017/05/27
Copyright 2000-2017 Willy Tarreau 

root@scw-3c719c:/#
gizmo78
Messages : 20037
Inscription : ven. 12 janv. 2018 17:44

haproxy problèmes...

Message par gizmo78 »

mr utilise scaleway, bon choix :D
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

haproxy problèmes...

Message par kalistyan »

:sol:
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

haproxy problèmes...

Message par kalistyan »

Au départ, les clients accédaient à la console via une unique url

https://console.service.fr

Maintenant, il y accède via leur url perso.

https://antispam.client1.fr
https://antispam.client2.com
Etc.

Le hic, pour que cela fonctionne correctement, je dois vider le cache du navigateur. :/

N'y aurait-il pas une commande miracle dans haproxy, qui permettrait de ne rien utilisé en cache lors de la première connexion ?
Avatar de l’utilisateur
poulpito
Messages : 12402
Inscription : ven. 12 janv. 2018 17:44
Localisation : Grenoble

haproxy problèmes...

Message par poulpito »

ce sera plutôt sur le serveur web que sur le haproxy
gizmo78
Messages : 20037
Inscription : ven. 12 janv. 2018 17:44

haproxy problèmes...

Message par gizmo78 »

+1 gestion du cache coté serveur, sinon voir pour du nocache avec haproxy mais pas sur que ca règle le soucis
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

haproxy problèmes...

Message par kalistyan »

:hello:

Lorsque j'arrête le serveur antispam1, HAProxy me renvoi bien vers le serveur antispam 2, mais lorsque le que 1 est de nouveau up, je reste sur le 2... :heink:
gizmo78
Messages : 20037
Inscription : ven. 12 janv. 2018 17:44

haproxy problèmes...

Message par gizmo78 »

dans haproxy tu peux mettre des prio ;)
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

haproxy problèmes...

Message par kalistyan »

Avec la conf' ci-dessous, cela fonctionne avec Firefox et Vivaldi. Quant à Google chrome, il reste sur le serveur 2. :heink:

Code : Tout sélectionner

backend xeams
	mode http
balance roundrobin
	cookie SERVERID insert indirect nocache
	option http-server-close
	server xeams01 192.168.189.21:5272 cookie xeams01 check 
	server xeams02 192.168.189.22:5272 cookie xeams02 check backup
Testé avec "cookie JSESSIONID prefix nocache" à la place de cookie "SERVERID insert indirect nocache" le résultat est le même ! :o
Avatar de l’utilisateur
dsebire
Messages : 12716
Inscription : ven. 12 janv. 2018 17:44
Localisation : Loiret - entre la ville et les champs

haproxy problèmes...

Message par dsebire »

il reste ad-vitam ou tu as essayé que pendant 5 mn ?
certains soft ne reviennent vers le primaire qu'après un certain temps

(je parle en général, pas de proxy / antispam)
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

haproxy problèmes...

Message par kalistyan »

En fait cela fonctionne, j'utilise une extension (SessionBox) et à la fermeture de Chrome, elle reste en mémoire ! Par conséquent, Chrome n'était pas totalement fermé. :o
kalistyan
Messages : 14259
Inscription : ven. 12 janv. 2018 17:44
Localisation : LYON
Contact :

Re: haproxy problèmes...

Message par kalistyan »

Suite de mes aventures avec HAproxy.

Je viens de m'apercevoir d'un truc !

J'ai un soucis d'url, si l'on ce pointe directement à la racine du site, console.domain.tld la bascule fonctionne bien, le serveur de backup répond.

... Par contre, si on ce pointe via une autre url, genre console.domain.tld/exemple c'est le serveur primaire qui répond ! :heink: Alors qu'il est HS !

Une idée ?

Merci
gizmo78
Messages : 20037
Inscription : ven. 12 janv. 2018 17:44

Re: haproxy problèmes...

Message par gizmo78 »

t'as pas une histoire d'acl ou de réglage de cookies?
Répondre