OPNsense Forum

International Forums => French - Français => Topic started by: oasis_ck on January 29, 2019, 02:32:53 pm

Title: HAproxy reverse
Post by: oasis_ck on January 29, 2019, 02:32:53 pm
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 ;)
Title: Re: HAproxy reverse
Post by: oasis_ck on January 30, 2019, 10:18:59 am
Informations supplémentaires :
Code: [Select]
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
Code: [Select]
curl https://site1

curl: (35) Unknown SSL protocol error in connection to site1:443

Dans le log via GUI, les connexions se sont bien
Code: [Select]
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)
Title: Re: HAproxy reverse
Post by: oasis_ck on February 12, 2019, 11:27:45 pm
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
Code: [Select]
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
Code: [Select]
    tcp-request inspect-delay 5s
    tcp-request content accept if { req_ssl_hello_type 1 }