Page 1 sur 1

haproxy problèmes...

Publié : jeu. 1 juin 2017 11:27
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:

haproxy problèmes...

Publié : jeu. 1 juin 2017 11:30
par gizmo78
regarde les acl_rule pour faire correspondre un ndd avec un backend ;)

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

( :D )

haproxy problèmes...

Publié : jeu. 1 juin 2017 11:47
par dsebire
+1
bind *:443 dans les 2 cas, ça me surprend pas que tu ai ce comportement. ;)

haproxy problèmes...

Publié : jeu. 1 juin 2017 11:55
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

haproxy problèmes...

Publié : jeu. 1 juin 2017 13:44
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 )

haproxy problèmes...

Publié : jeu. 1 juin 2017 13:55
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

haproxy problèmes...

Publié : jeu. 1 juin 2017 13:59
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]

haproxy problèmes...

Publié : jeu. 1 juin 2017 14:57
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.

haproxy problèmes...

Publié : jeu. 1 juin 2017 16:39
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 ?

haproxy problèmes...

Publié : ven. 2 juin 2017 00:21
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

haproxy problèmes...

Publié : ven. 2 juin 2017 06:22
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.

haproxy problèmes...

Publié : ven. 2 juin 2017 09:43
par gizmo78
kali: suivant ce que tu veux faire passer, c'est peut être pas du http mais voir pour tester le mode tcp

haproxy problèmes...

Publié : ven. 2 juin 2017 11:05
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:/#

haproxy problèmes...

Publié : ven. 2 juin 2017 11:42
par gizmo78
mr utilise scaleway, bon choix :D

haproxy problèmes...

Publié : ven. 2 juin 2017 11:55
par kalistyan
:sol:

haproxy problèmes...

Publié : sam. 3 juin 2017 00:27
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 ?

haproxy problèmes...

Publié : sam. 3 juin 2017 00:46
par poulpito
ce sera plutôt sur le serveur web que sur le haproxy

haproxy problèmes...

Publié : sam. 3 juin 2017 11:42
par gizmo78
+1 gestion du cache coté serveur, sinon voir pour du nocache avec haproxy mais pas sur que ca règle le soucis

haproxy problèmes...

Publié : mer. 12 juil. 2017 19:01
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:

haproxy problèmes...

Publié : mer. 12 juil. 2017 21:36
par gizmo78
dans haproxy tu peux mettre des prio ;)

haproxy problèmes...

Publié : jeu. 13 juil. 2017 01:39
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

haproxy problèmes...

Publié : jeu. 13 juil. 2017 06:55
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)

haproxy problèmes...

Publié : jeu. 13 juil. 2017 09:55
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

Re: haproxy problèmes...

Publié : jeu. 19 avr. 2018 17:54
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

Re: haproxy problèmes...

Publié : ven. 20 avr. 2018 09:44
par gizmo78
t'as pas une histoire d'acl ou de réglage de cookies?