Exception d'un chemin http dans HA Proxy sous pfSense
J'utilise HAProxy sous pfSense pour publier divers sites. Outre l'économie d'adresses IP, j'augmente la sécurité, je peux faire de la répartition de charge et je profite des certificats Let's Encrypt via le plugin Acme.
Tout fonctionne très bien, sauf sur un site ou pour lequel une URL en http a été codée en dur dans un logiciel distribué aux quatre coins du monde, logiciel que les utilisateurs rechignent à mettre à jour. Ce process http fait du GET et du POST et après avoir testé une redirection http vers https de type 308 au lieu de 301 sans grand succès, je me suis dit que la seule solution consisterait à contourner le problème... en faisant une exception pour l'url du formulaire.
Explications (en partant du principe que le lecteur connait un peu le couple pfSense / HAProxy)
- Je crée un
SharedFrontEnd HTTPS
sur une IP publique de typehttp / https (OffLoading)
enSSL OffLoading
sur le port443
- Je crée un premier
FrontEnd
qui s'appuie sur leSharedFrontEnd HTTPS
avec le certificat qui va bien, cela qui va faire transiter le fluxHTTPS
vers monBackEnd
. On vérifie le bon fonctionnement depuis un navigateur avec https://www.domain.tld. OK. - Je crée un
SharedFrontEnd HTTP
sur la même IP publique de typehttp / https (OffLoading)
sansSSL OffLoading
sur le port80
- Je crée un second
FrontEnd
qui s'appuie sur leSharedFrontEnd HTTP
qui lui va faire transiter enHTTP
mon exception via deuxACL
(hostname + path) vers monBackend
avec ces deuxconditions
(au sens HAProxy) et redirigera tout le reste vers le premierFrontEnd
enHTTPS
grâce à une règle qui exclut mon exception.

Voici le règle de redirection que l'on peut également placer en custom rule
.
http-request redirect code 301 location https://%[hdr(host)]%[path] unless REG_PATH
J'avoue que j'en ai un peu bavé (avec l'aide de Victor), mais ça prouve une fois de plus qu'il y a peu de choses en la matière que l'on ne peut faire avec le couple pfSense / HAProxy. D'ailleurs, je ne vais pas l'expliquer ici car je n'ai fait que suivre un bon tuto, mais il est parfaitement possible de publier ainsi un serveur Exchange avec répartition de charge et éviter de coûteux répartiteurs de charge.
Sources :
- https://blog.victor-hery.com/2015/12/configurer-reverse-proxy-haproxy.html
- https://blog.devita.co/pfsense-to-proxy-traffic-for-websites-using-pfsense/#step6enablehttptohttpsredirect
- http://cbonte.github.io/haproxy-dconv/1.8/configuration.html#path
- https://serverfault.com/questions/805816/redirect-all-traffic-to-https-except-specific-url
- https://www.haproxy.com/fr/documentation/aloha/9-5/traffic-management/lb-layer7/http-redirection/
- https://www.haproxy.com/fr/documentation/aloha/7-5/traffic-management/lb-layer7/writing-conditions/
- https://forum.netgate.com/topic/107229/haproxy-and-condition-acl