Bannière

Métadonnées du document:
[ Auteur : Clockover ][ Création le : 28/10/2009 ][ Dernière modification le : 17/03/2011 ][ Version : 2.4 ]

Protéger Microsoft Exchange derrière un serveur frontal Linux

Introduction:

Cet article décrit la procédure pour mettre en place un serveur SMTP et un reverse proxy en frontal devant un serveur Exchange.
Le serveur SMTP en frontal, nous servira à mouliner les mails avec SpamAssassin et ClamAV avant de les renvoyer à Exchange à la manière d'une appliance.
Le reverse proxy peut avoir de nombreuses raisons d'être devant un Exchange (OWA & Proxy RPC): comme la mise en place d'une qualité de service, l'augmentation des performances ou encore de la sécurité. Dans notre cas, cela permettait de faciliter la configuration du routeur et d'augmenter sensiblement la sécurité de l'accès https.
Dans notre exemple, le serveur frontal tournera avec une Debian Lenny et le serveur Exchange sur la version 2010 de ce dernier.

Note: Les variables à adapter sur votre environnement se présenteront sous cette forme ($$VARIABLE$$) tout à long de l'article.

Infrastructure cible:

Comme il est souvent plus simple de comprendre avec un dessin, celui qui va suivre nous montre ce que nous souhaitons obtenir.
Infrastructure cible
Infrastructure cible de cet article

Mise en place du relai SMTP (envoi du courrier):

Nous commencerons par l'étape la plus facile. Celle-ci nous permettra d'envoyer nos mails sur internet non plus avec Exchange mais avec notre serveur frontal. L'intérêt de cette manipulation peut sembler anecdotique mais lorsque l'arrivé SMTP ne se passera plus directement sur l'Exchange non plus, nous pourrons couper entièrement les flux SMTP entre internet et le serveur Exchange.

1. Configuration du serveur frontal

Nous allons commencer par installer postfix. Pour cela, il faut utiliser la commande: apt-get install postfix
Modifiez ensuite le fichier /etc/postfix/main.cf comme ceci:
		smtpd_banner = $$NOM-PUBLIC-DU-MX$$ ESMTP (Debian/GNU)
		biff = no

		# appending .domain is the MUA's job.
		append_dot_mydomain = no

		# Uncomment the next line to generate "delayed mail" warnings
		#delay_warning_time = 4h

		readme_directory = no

		myhostname = $$NOM-LOCAL-DU-SERVEUR$$
		mydestination = $$NOM-LOCAL-DU-SERVEUR$$, localhost.$$DOMAINE$$,localhost
		relayhost =
		mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, $$IP-DU-SERVEUR-EXCHANGE$$/32
		mailbox_size_limit = 0
		recipient_delimiter = +
		inet_interfaces = all		
		
Nous relancerons ensuite Postfix de façon à ce que les modifications soient appliquées (/etc/init.d/postfix restart ).

2. Configuration du serveur Exchange

La seule chose à faire sur l'organisation Exchange est de créer et/ou configurer le connecteur SMTP externe de façon à ce qu'il achemine le flux SMTP par le serveur frontal.
Il suffit juste d'indiquer l'IP du serveur dans les propriétés du connecteur (illustration ci-dessous).
Connecteru SMTP externe
Configuration du connecteur SMTP sortant

Mise en place du filtrage SMTP (réception du courrier):

Cette fois, nous allons mettre en place la stratégie pour le courrier entrant. Nous mettrons donc en place l'antivirus et l'antispam.

1. Configuration du serveur GNU/Linux

Il nous faut installer SpamAssassin pour marquer les spams et Clamsmtp pour filtrer les mails virusés. Pour cela, nous tapperons la commande: apt-get install spamassassin clamsmtp.
Nous rajouterons ensuite dans le fichier /etc/postfix/main.cf les lignes suivantes:
		#Relaying pour:
		relay_domains = $$DOMAINE1$$, $$DOMAINE2$$
		relay_recipient_maps =
		transport_maps = hash:/etc/postfix/transport
	
Le fichier /etc/postfix/transport doit être créé sous cette forme avant d'être traité par la commande: postmap /etc/psotfix/transport:
		$$DOMAINE1$$       	smtp:$$SERVEUR-SMTP$$
		$$DOMAINE2$$		smtp:$$SERVEUR-SMTP$$
	
Pour prendre en charge Spamassassin et Clamsmtpd, le fichier /etc/postfix/master.cf doit également être modifié.
Veuillez ajouter ou modifier les lignes suivantes:
		smtp      inet  n       -       -       -       -       smtpd -o content_filter=spamassassin
		#spamassassin :
		spamassassin    unix    -       n       n       -       -       pipe
		user=nobody argv=/usr/bin/spamc -f -e
		/usr/sbin/sendmail -oi -f ${sender} ${recipient}
		# AV scan filter (used by content_filter)
		scan      unix  -       -       n       -       16      smtp
			-o smtp_send_xforward_command=yes
		# For injecting mail back into postfix from the filter
		127.0.0.1:10025 inet  n -       n       -       16      smtpd
			-o content_filter=
			-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
			-o smtpd_helo_restrictions=
			-o smtpd_client_restrictions=
			-o smtpd_sender_restrictions=
			-o smtpd_recipient_restrictions=permit_mynetworks,reject
			-o mynetworks_style=host
			-o smtpd_authorized_xforward_hosts=127.0.0.0
			retry     unix  -       -       -       -       -       error
	
Les configurations de Clamsmtp et de SpamAssassin ne seront pas abordées dans cet article. En effet, de nombreuses sources d'informations sont disponibles pour les régler plus finement. Nous laisserosn dans les réglages de base. N'oubliez cependant pas d'activer SpamAssassin (/etc/default/spamassassin) et de relancer les différents services (/etc/init.d/postfix restart && /etc/init.d/spamassassin restart).

2. Configuration du serveur Exchange

Du côté du serveur Exchange, nous devons procéder à deux manipulations. L'une doit autoriser le serveur frontal à lui envoyer du courrier. La deuxième permet de régler le comportement de Exchange lorsqu'il récupère du spam détecté par SpamAssassin.
Toutes ce passera à l'aide du nouvel outil: Exchange Management Shell.

flecheAutoriser la connexion entrante: Set-ReceiveConnector -Identity "Default $$NOM-DU-SERVEUR$$" -PermissionGroup "AnonymousUsers".
flecheTransférer les mails tagués comme spam ( X-Spam-Flag: YES dans leur en-tête) dans la boite "courrier indésirable" du destinataire.
		$condition1 = Get-TransportRulePredicate HeaderContains
		$condition1.MessageHeader = "X-Spam-Flag" 
		$condition1.words = @("YES")
		$action1 = Get-TransportRuleAction SetSCL
		$action1.SCLValue = 9
		$Action2 = Get-TransportRuleAction SetHeader
		$Action2.MessageHeader = "X-Spam-Status"
		$Action2.HeaderValue = "Yes"
		new-TransportRule "Spam Score 9" -condition @($condition1) -action @($Action1, $Action2) -Priority 0
		Get-mailbox | set-mailbox -SCLJunkEnabled $true -SCLJunkThreshold 4
	
Nous avons donc maintenant un serveur SMTP en frontal devant Exchange. Nous pouvons donc maintenant bloquer tous les flux SMTP entre internet et le serveur Exchange.

Mise en place du reverse proxy:

Cette dernière partie, nous permettra de protéger l'accès à OWA, ActiveSync et l'accès RPC/HTTPS (maintenant nommé "Outlook Anywhere"). Assurez d'avoir un service Outlook Anywhere fonctionnel avant de commencer les manipulations (si vous allez vous en servir).

1. Configuration du serveur Exchange

Aucune configuration n'est nécessaire sur le serveur Exchange. Assurez-vous juste que OWA et Outlook Anywhere fonctionne correctement.

2. Configuration du serveur GNU/Linux

Nous allons installer la fonction de reverse proxy qui sera assurée par le logiciel squid.
a. Pour Debian Lenny (méthode compilation)
Nous n'utiliserons pas le paquetage fournit avec Debian Lenny car il n'intégre pas le support SSL et est relativement ancien.
Voici la marche à suivre pour compiler une version maison:
  1. apt-get install build-essential g++ openssl libssl-dev
  2. Télécharger les sources de squid sur le site officiel (ici)
  3. tar xvfz squid-$$VERSION$$.tar.gz
  4. cd squid-$$VERSION$$
  5. ./configure --enable-ssl --with-openssl=/usr/include/openssl/ && make && make install
  6. Créer ensuite le cache de squid à l'aide de: /usr/local/squid/sbin/squid -z
Squid est maintenant installé sous le chemin: /usr/local/squid/.
b. Pour Debian Squeeze (méthode Debian)
Sous Debian Squeeze, plus récente, nous utiliserons le paquet fournit mais nous devrons le recompiler poru ajouter le support du SSL.
  1. apt-get install libssl-dev libcppunit-dev devscripts build-essential fakeroot cdbs libsasl2-dev libkrb5-dev comerr-dev
  2. apt-get source squid3
  3. apt-get build-dep squid3
  4. Dans le fichier $$DOSSIER-DES-SOURCES$$/debian/rules, il faut ajouter la ligne: --enable-ssl \ dans la section DEB_CONFIGURE_EXTRA_FLAGS
  5. debuild -us -uc
  6. apt-get install squid-langpack
  7. dpkg -i squid3-common_$$VERSION$$.deb squid3_$$VERSION$$.deb
  8. On bloque la mise à jour du paquet squid: echo "squid3 hold" | dpkg --set-selections et echo "squid3-common hold" | dpkg --set-selections.
Squid est maintenant installé sous le chemin: /etc/squid/.
c. Configuration de Squid
Nous devons maintenant avoir un certificat approuvé par les postes configurés en Outlook Anywhere. Le moyen le plus simple est d'utiliser un certificat fournit par une autorité de certification publique. Voici la marche à suivre:
  1. Créer un répertoire de stockage des certificats: mkdir $$CHEMIN-SQUID$$/certifs/
  2. cd $$CHEMIN-SQUID$$/certifs/
  3. Créer la clé (sans passphrase): openssl genrsa -out $$NOM_FQDN$$.key 1024
  4. Créer la demande de certificat: openssl req -new -key $$NOM_FQDN$$.key -out $$NOM_FQDN$$.csr
  5. Ouvrir le fichier $$NOM_FQDN$$.csr et transmettre son contenu à votre autorité de certification.
  6. Placer le certificat retourné avec votre clé.
Ensuite, il faut modifier le fichier $$CHEMIN-SQUID$$/squid.conf:
		#visible_hostname $$NOM_FQDN$$
		debug_options ALL,1
		#extension_methods RPC_IN_DATA RPC_OUT_DATA

		https_port 443 cert=$$CHEMIN_VERS_CERTIFICAT_PUBLIC$$  key=$$CHEMIN_VERS_CLE_CERTIFICAT$$ defaultsite=$$NOM_FQDN$$

		cache_peer $$IP_SRV_EXCHANGE$$ parent 443 0 no-query proxy-only originserver login=PASS ssl sslflags=DONT_VERIFY_PEER front-end-https=on name=owaServer

		acl owaAcl dstdomain $$NOM_FQDN$$
		cache_peer_access owaServer allow owaAcl

		never_direct allow all
		http_access allow all
		#http_access deny all
		miss_access allow all
		#miss_access deny all
		
La configuration de squid est terminée, il ne nous reste plus qu'à vérifier que Squid se lance automatiquement avec la machine.
Si l'accès à OWA via le squid fonctionne alors nous pouvons maintenant désactiver tout flux HTTP/HTTPS entre internet et le serveur Exchange.

Tests finaux:

flechePour tester le relai SMTP, nous enverrons tout simplement des mails à travers celui-ci. Si nous désirons tester la fonction d'antispam ou d'antivirus, il suffit d'utiliser les outils suivants:
fleche Le GTUBE pour l'antispam: XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
fleche Le faux virus EICAR pour l'antivirus: Téléchargement ici
flechePour le reverse proxy, nous testerons d'abord de nous connecter à OWA (aucun problème de certificat ne devrait apparaitre) puis à Outlook Anywhere.

Il y a 9 commentaire(s) sur ce sujet.
L'intégralité du portail est placé sous licence Creative Commons License NC v2.0 (sauf mentions contraires indiquées sur les pages et/ou documents concernés !). Version: 4.2
Ce portail répond normalement aux critères de compatibilité XHTML v1.1 et CSS v2.0 du W3C:
Valid XHTML 1.1! Valid CSS 2.0!

Page générée en 0.007 secondes