Bonjour à toutes et à tous,
je sollicite vos connaissances concernant la configuration du reverse proxy.
voici un petit plan réseau
SRV1:80/443
- site1
- site2
SRV2:80/443
- site3
Les sites ont le même domaine, ont un certificat let's encrypt, redirigent le port 80 vers le 443 de son serveur respectif et sont accessibles depuis le réseau privé. Les 2 ports sont ouverts dans le pare-feu OPNsense en TCP any to any.
Je suis parti sur un reverse proxy HTTP pour le port 80 et TCP pour le 443 (SSL pass-through). Ma configuration me parait logique mais elle ne fonctionne pas, et j'avoue je bloque complètement.
A vous lire, merci ;)
Informations supplémentaires :
curl http://site1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://site1:443/">here</a>.</p>
</body></html>
Donc le reverse proxy fait son travail et le serveur web redirige bien vers le port 443
curl https://site1
curl: (35) Unknown SSL protocol error in connection to site1:443
Dans le log via GUI, les connexions se sont bien
Jan 30 10:16:00 haproxy[95522]: Connect from IP:51011 to IP:80 (http/HTTP)
Jan 30 10:15:50 haproxy[95522]: Connect from IP:23126 to IP:443 (https/TCP)
OK je réponds à moi-même
En fait TLS chiffre de la couche transport à la couche application donc l'en-tête HTTP host est chiffré. L'extension SNI du protocole TLS est là pour remédier à ce problème (req.ssl_sni)
Voici ma conf pour le https
frontend https
bind *:443 name *:443
mode tcp
# tuning options
timeout client 30s
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }
# logging options
option tcplog
# ACL: cond-HTTPS-site1
acl acl_5c63419cd140a8.74128944 req.ssl_sni -i site1
# ACL: cond-HTTPS-site2
acl acl_5c6341a8755db8.76123983 req.ssl_sni -i site2
# ACL: cond-HTTPS-site3
acl acl_5c634184b69f94.68079095 req.ssl_sni -i site3
# ACTION: rule-HTTPS-SRV1
use_backend pool.https.SRV1 if acl_5c63419cd140a8.74128944 || acl_5c6341a8755db8.76123983
# ACTION: rule-HTTPS-SRV2
use_backend pool.https.SRV2 if acl_5c634184b69f94.68079095
Cependant je suis obligé d'ajouter à la main car pas d'emplacement prévu dans OPNSense
tcp-request inspect-delay 5s
tcp-request content accept if { req_ssl_hello_type 1 }