HAproxy reverse

Started by oasis_ck, January 29, 2019, 02:32:53 PM

Previous topic - Next topic
January 29, 2019, 02:32:53 PM Last Edit: January 29, 2019, 04:53:22 PM by oasis_ck
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 }