De ISA/TMG à pfsense / HA Proxy

Il y a 20 ans Microsoft s’était mis en tête de proposer un firewall / reverse proxy maison. A l’époque on ne parlait pas encore de cloud à toutes les sauces, mais juste de permettre aux itinérants de se connecter aux applications d’entreprise, quelques une en web, mais surtout des applications lourdes via le VPN maison (PPTP). Mais surtout Microsoft a réussit à imposer ISA Serveur à beaucoup de ses clients disposant de serveurs Exchange, qui succédait alors à MS Mail, en saupoudrant le tout d’un peu de complexité plus ou moins utile et en imposant de coûteux certificats SAN. Ainsi nous avons eu ISA 2000, ISA 2004, ISA 2006, au passage Microsoft a même produit des appliances avec HP pour terminer par TMG 2010 qui était la dernière itération de la série.

Et après ? Et bien Microsoft a (quasiment) du jour au lendemain décidé que la sécurité d’accès ce n’était pas leur job et en gros ils ont planté là tout le monde. Démerdez vous. Bien sur d’autres éditeurs et constructeurs ont pris le relais (Kemp par exemple) mais la transition n’a pas été facile pour tout le monde, principalement pour des questions de coût. Résultat on trouve encore aujourd’hui des installations basées, dans le meilleur des cas, sur la dernière itération du produit Microsoft, qui dans le meilleur des cas tourne sur un Windows 2008R2 qui comme toute la famille W7 ne reçoit plus de mises à jour, sans passer à la caisse.

Il arrive un moment ou il faut se résoudre à détruire ces vieilleries et se tourner vers quelque chose de plus moderne, et ce d'autant plus qu'on parle ici de sécurité, en gros la porte d'entrée numérique de l'entreprise. Si les grands comptes ont les moyens de leur sécurité en s’offrant des pare-feu et autres équilibreurs de charge à plusieurs milliers d’Euros, voire dizaine de millier d’euros, les PME, quand elles sont malines, peuvent se tourner vers l’open source.

Après avoir un peu cherché, il existe plusieurs pistes, j’ai choisit une base pfsense (on peut partir aussi sur OPNsense) avec HA Proxy comme composant reverse proxy. On peut également utiliser Squid, l’avantage de HA Proxy étant qu’il s’agit d’un bon équilibreur de charge et qu'il sera également possible de s'en servir pour publier d'autres sites sur une ou plusieurs IP publiques. L’autre avantage de pfsense est le support total de Acme et qu’il est ainsi possible de générer automatiquement un certificat SAN nécessaire à Exchange.

En version eco point d’appliance pfsense, je l’ai donc installé sur une VM ESXi selon les recommandation de l’éditeur, avec un WAN et un LAN. Je ne vais pas vous décrire, c’est très bien expliqué ici.

Une fois notre pfsense installé on va lui ajouter quelques packages en allant dans System/Packages ou est disponible tout un catalogue de composant additionnels. Encore une fois la règle est la même, moins on installe de choses, mieux on se porte...

  • Open VMWare Tools : pour faire le lien avec l'hyperviseur
  • Acme : pour générer des certificats SSL Let'Encrypt en se basant sur les API des DNS (chez nous Gandi ou OVH par exemple).
  • HA Proxy : car on est venu pour lui !

Je passe sur Acme qui est assez intuitif et on va voir comment publier un serveur Exchange. Dans cet exemple je l'ai fait sans répartition de charge, mais il est tout à fait possible de publier un (ou plusieurs) FrontEND et coté BackEND répartir la charge sur plusieurs serveurs Exchange selon des règles à définir, soit en spécialisant les serveurs (EAS, Mapi, etc...) soit en hiérarchisant leur importance et leur besoin de disponibilité en fonction du type d'utilisateurs (petit peuple, VIP, etc...). Ce ne sont que des exemples et les serveurs peuvent êtres (ou pas) multipliés (plusieurs serveurs, plusieurs hyperviseurs, plusieurs SAN, etc...) selon la sensibilité de l'infrastructure.

Alors vous allez me dire, pourquoi encore maintenir des serveurs Exchange à l'heure du cloud ? Si pour de petites structures ça n'a pas trop de sens, pour certaines entreprise sensibles il peut s'agit d'une question de confidentialité qu'aucun cloud ne pourra offrir, et pour d'autres simplement pour une question de coût, car même en additionnant le coût des licences (prohibitif, genre 80% d'un projet), le matériel, l'infrastructure, l’exploitation et de bons consultants, au delà d'un certain seuil c'est très rentable par rapport à des licences 365 à 15 € / mois.

Mais au lieu de polémiquer, revenons à notre HA Proxy...

HA Proxy se décompose en deux parties principales. Le FrontEND, c'est ce qui va recevoir les connections entrantes, et le BackEND ou seront connecté les serveurs internes et ou on redirigera les flux après les avoir isolés. Je dis bien isolés car ici on ne fait pas de routage mais du proxy. D'ailleurs pour s'en rendre compte, le serveur Exchange n'a pas besoin d'avoir le serveur pfsense / HA Proxy en passerelle par défaut...

Dans les paramètres généraux on déterminera le nombre de connexions maximum, ce qui a une incidence directe sur l'occupation mémoire, mais également un serveur SysLog si on veut deboguer un peu la chose...

Sur le FrontEND on va configurer une entrée en utilisant une des IP publique disponibles et on va la configurer en type http/https (offloading). Logique et important.

En option et pour plus de sécurité on va fixer des ACL sur les chemins utilisés par Exchange. Çà fonctionne bien sur sans, mais c’est une sécurité supplémentaire recommandable. C'est également la possibilité de rediriger des chemins (path), donc des services vers des serveurs différents via plusieurs BackEND, par exemple le web mail /OWA vers un serveur et les mobiles /Microsoft-Server-ActiveSync vers un ou plusieurs autres serveurs via un second BackEND.

Sur cette même page de configuration au chapitre SSL Offloading on choisira notre certificat (préalablement créé avec Acme ou simplement importé) et surtout on cochera la bonne case afin de restreindre les requêtes aux seul domaines et sous domaines déclarés dans en Subjet Alternative Name de notre certificat SAN, cela nous évite d'avoir à déclarer d'autres ACL plus haut ou en des entrées en SNI.

Il est bien sur possible d'ajouter d'autres sécurités, comme des certificats client, mais comme je ne bosse pas pour un service secret je me suis abstenu.

Passons maintenant au BackEND. On va ici définir le ou les serveur(s) qui seront utilisés pour nos différents services. En l’occurrence je n'en ai qu'un seul sans quoi j'aurais créé plusieurs entrées ou plusieurs BackEND si je souhaitait répartir les services.

Je vais identifier mon serveur par son adresse IP et son port. Ensuite je vais choisir si ce serveur répond en SSL et s'il est nécessaire de vérifier la validité du certificat. Exchange répond en SSL, mais s'agissant de trafic interne je pourrais très bien à l'avenir choisir de ne pas vérifier la validité de son certificat ou utiliser un certificat ausigné. Le poids n'est à renseigner que si on a plusieurs serveurs en BackEND à équilibrer.

Pour d'autres types de serveurs web je peux également y accéder seulement en HTTP en interne, sachant que le client externe lui le verra en HTTPS. C'est un choix lié au niveau de sécurité de l'infrastructure, mais dans bien des cas on ne se préoccupe pas de chiffrer l'interne.

Le cas échéant on réglera plus loin la méthode d'équilibrage, un Timeout à passer 10000 pour Exchange, une méthode pour tester la disponibilité des serveurs et si l'on souhaite ou pas des statistiques, statistiques très utiles pour valider une répartition / équilibrage de charge.


Le FrontEND


Le BackEND

Voilà, à partir de là on a quelque chose de fonctionnel pour tous les ports HTTPS. Il va nous reste à traiter les ports TCP nécessaires au fonctionnement d'un serveur de messagerie (SMTP, POP, IMAP). Si POP et IMAP sont peu en vogue dans les entreprises qui utilisent Exchange, le port SMTP (25) sera nécessaire pour le trafic entrant. Cependant Exchange assurant un service minimum au niveau de la protection certains choisiront de faire transiter le trafic entrant par une passerelle de sécurité (Anti Spam, Anti Virus, etc...).

Dans l'absolu il est possible d'utiliser HA Proxy pour répartir la charge du trafic TCP en configurant un FrontEND TCP et en lui associant un ou plusieurs BackEND.

J'ai du louper quelque chose car le trafic sur ces ports n'était pas stable, alors que d'autres l'ont fait avec de bons résultats. J'ai donc fait un rétropédalage rapide sur ce point et pour l’instant je me suis contenté de faire du NAT classique, donc sans possibilité de répartition de charge. A suivre prochainement.

DNS public

Pour ce qui est du DNS public j'ai fait le choix le plus simple consistant à utiliser uniquement mon nom de domaine. D'autres feront le choix d'utiliser un sous domaine du genre mail.domaine.tld...

@ 3600 IN A 55.235.45.30
@ 3600 IN MX 10 domaine.tld. 
@ 3600 IN TXT "v=spf1 mx mx:domaine.tls~all" 
_autodiscover 3600 IN SRV 10 10 443 domaine.tld. 
autodiscover 3600 IN CNAME  domaine.tld.

Il ne reste plus qu'à tester en configurant les trois types de clients utilisant HTTPS :

  • Un client Outlook sur Mac ou PC sous MAPI qui va utiliser le processus AutoDiscovery pour trouver son serveur en se basant uniquement sur l'adresse mail de l'utilisateur.
  • Un client mobile IOS ou Android qui utilisera ActiveSync (EAS) et AutoDiscovery pour s'y retrouver. A noter que l'application Courrier proposée sur Windows 10 utilise ce même protocole.
  • Et enfin un client web mail en pointant sur domaine.tld/owa

Si tout se passe bien on valide le SMTP entrant / sortant, éventuellement IMAP et POP et il est possible de facturer le client.

Sources

 

Commentaires (2) -

  • Bonjour, j'essaye d'appliquer votre procédure pour remplacer mon vieux TMG par un pfSense et je rencontre des problèmes, je n'ai pas de trafic entrant sur mon serveur Exchange.
    Avez-vous trouvé une solution au problème de stabilité du trafic observé ?
    Merci.
    Pascal
    • Je suppose que tu parles du trafic TCP (IMap, SMTP). Je ne me souvient plus trop pourquoi mais j'ai finalement fait ça en NAT et pas via HA Proxy qui lui ne me sert qu'au trafic HTTPS (web, EAS, MAPI, etc...). Et ça tourne très bien depuis bientôt deux ans...

Ajouter un commentaire

Loading