Discussion – 

0

Discussion – 

0

Héberger Microsoft Exchange derrière une seule IP publique avec HAProxy et Nginx (et garder NTLM)

Architecture hybride L4 / L7 compatible NTLM et ActiveSync

Héberger Microsoft Exchange 2019 derrière une seule IP publique peut rapidement devenir complexe lorsqu’on utilise un reverse proxy comme Nginx Proxy Manager.

Problème fréquent :
Exchange utilise NTLM, ActiveSync, MAPI et des connexions persistantes qui ne supportent pas toujours correctement la terminaison SSL en Layer 7.

Dans cet article, nous détaillons :

  • Pourquoi Nginx peut poser problème avec Exchange
  • Pourquoi un reverse proxy Layer 4 est plus adapté
  • Comment combiner HAProxy et Nginx proprement
  • Une configuration complète prête à déployer
  • Un comparatif clair L4 vs L7

Pourquoi Exchange ne supporte pas toujours un reverse proxy L7 ?

Microsoft Exchange repose sur :

  • NTLM (authentification stateful)
  • Connexions TCP persistantes
  • Négociation d’authentification multi-étapes
  • ActiveSync
  • MAPI over HTTP

Lorsque le reverse proxy termine le SSL (mode L7 classique), il peut :

  • Casser la négociation NTLM
  • Interrompre les sessions Outlook
  • Générer des erreurs 401 répétées
  • Provoquer des demandes de mot de passe en boucle

👉 Typiquement, les utilisateurs voient Outlook redemander leurs identifiants en permanence.


Solution retenue : HAProxy en Layer 4 (TCP Passthrough)

Au lieu de terminer le SSL en frontal, nous utilisons :

  • HAProxy en mode TCP
  • Lecture du SNI uniquement
  • Redirection vers Exchange sans déchiffrement
  • Persistance par IP source

Cela permet :

✔ Compatibilité totale NTLM
✔ Sessions ActiveSync stables
✔ Une seule IP publique
✔ Conservation de Nginx pour les autres applications


Schéma d’architecture

                     INTERNET
                         |
                  IP Publique
                         |
                    HAProxy (L4)
                TCP passthrough + SNI
                         |
       ---------------------------------------
       |                                     |
Microsoft Exchange                    Nginx Proxy Manager
192.168.10.2                           192.168.20.2

Flux détaillé

Pour exchange.dyb.test

Client Outlook
     |
TLS 443
     |
HAProxy (lecture SNI)
     |
TCP passthrough
     |
Exchange 192.168.10.2

SSL est terminé par Exchange directement.


Pour les autres services web

Navigateur Web
     |
TLS 443
     |
HAProxy
     |
Nginx Proxy Manager
     |
Applications internes

Nginx continue de gérer :

  • Let’s Encrypt
  • Redirections HTTP → HTTPS
  • Reverse proxy applicatif

Configuration HAProxy complète

global
    log /dev/log local0
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    user haproxy
    group haproxy
    daemon
    maxconn 50000

    ca-base /etc/ssl/certs
    crt-base /etc/ssl/private
    ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
    log global
    mode tcp
    option tcplog
    option dontlognull
    timeout connect 10s
    timeout client 3600s
    timeout server 3600s
    timeout tunnel 3600s

frontend https_in
    bind *:443
    mode tcp

    tcp-request inspect-delay 5s
    tcp-request content accept if { req_ssl_hello_type 1 }

    use_backend exchange_back if { req_ssl_sni -i exchange.dyb.test }
    use_backend exchange_back if { req_ssl_sni -i autodiscover.dyb.test }

    default_backend npm_https_back

frontend http_in
    bind *:80
    mode tcp
    default_backend npm_http_back

backend exchange_back
    mode tcp

    stick-table type ip size 50k expire 30m
    stick on src

    server exchange01 192.168.10.2:443 check

backend npm_https_back
    mode tcp
    server npm01 192.168.20.2:443 check

backend npm_http_back
    mode tcp
    server npm01 192.168.20.2:80 check

frontend stats
    bind *:8404
    mode http
    stats enable
    stats uri /stats
    stats refresh 10s
    stats auth admin:changeme

Comparatif Reverse Proxy Layer 4 vs Layer 7

CritèreLayer 4 (TCP)Layer 7 (HTTP)
Niveau OSITransportApplication
Terminaison SSLNon obligatoireOui
Lecture HTTP headersNonOui
Compatible NTLMOuiParfois instable
Compatible ActiveSyncOuiPeut poser problème
WAF possibleNonOui
PerformanceTrès élevéeÉlevée
Idéal pour Exchange⚠️

Quand choisir cette architecture ?

Cette architecture est recommandée si :

  • Vous disposez d’une seule IP publique
  • Vous hébergez Exchange en interne
  • Vous utilisez déjà Nginx ou NPM
  • Vous souhaitez éviter les erreurs NTLM
  • Vous voulez conserver Let’s Encrypt automatique

Avantages de l’architecture hybride

✔ Séparation claire des rôles
✔ Haute compatibilité Exchange
✔ Scalabilité
✔ Performance élevée
✔ Architecture maintenable


Sécurité : bonnes pratiques complémentaires

Pour sécuriser davantage cette architecture :

  • Filtrage firewall strict
  • IDS/IPS (Suricata / Snort)
  • Protection SMTP dédiée
  • Séparation DMZ
  • Monitoring des logs HAProxy

Conclusion

Héberger Microsoft Exchange derrière une seule IP publique est parfaitement possible, à condition d’utiliser la bonne approche.

La combinaison :

HAProxy en Layer 4 + Nginx en Layer 7

offre un équilibre optimal entre compatibilité, sécurité et flexibilité.

Chez DYB, nous mettons en place ce type d’architecture pour garantir :

  • Une disponibilité maximale
  • Une compatibilité totale Outlook / ActiveSync
  • Une infrastructure robuste et évolutive

Arthur Perrot

Vous allez surement aimer :