28Apr 2007
Installation d'un serveur de mail sous Debian
11:31 - By Fabien Poulard
L’installation d’un serveur de mail est une étape "initiatrice" qui permet de sauter le pas vers l’administration système avancée... L’email est en effet une partie très technique d’internet !
La mise en place d’une serveur email - smtp, imap, ... - est un petit peu technique, mais pas inaccessible grâce aux merveilleux serveurs développés par la communauté. En route pour le chemin initiatique ...
Installation du serveur Postfix
Si vous connaissez un petit peu l’administration sous Debian, alors vous n’allez pas être surpris de commencer par la commande suivante :
shell# apt-get install postfix postfix-doc
Selon le niveau de votre DEBCONF, vous aurez plus ou moins de questions sur la configuration. Répondez simplement Internet Site à la question sur le type de configuration général. Choisissez également l’adresse à laquelle faire suivre les messages destinés à root. Donnez également la liste des domaines pour lesquels le serveur doit accepter les emails, séparés par des espaces.
Pour ce qui est des mises à jour synchrones, il n’est pas utile des les activer. En effet, il y a vraiment peu de chance qu’un email soit perdu. Ne l’activez donc que si votre serveur ne doit absoluement pas perdre un seul email.
Une fois ces diverses questions répondues, l’installation devrait se dérouler normalement... et vous devriez vous retrouver avec un serveur Postfix fonctionnel, mais très certainement pas configuré exactement selon vos besoins. La configuration du serveur se trouve dans le fichier /etc/postfix/main.cf, nous allons y jeter un coup d’oeil.
Configuration du DNS
La première chose à faire est de configurer le serveur DNS pour choisir le nom sous-lequel le serveur va s’authentifier. La configuration d’un DNS sort du cadre de cet article, je me contenterai donc du minimum. Dans votre fichier /etc/bind/db.mon_domaine, ajoutez deux lignes du type :
mail .mon_domaine. A mon_ip_publique @ MX 5 mail.mon_domaine.
La ligne avec le CNAME déclare un nouveau sous-domaine, tandis que la ligne avec le MX indique que le serveur qui prend en charge le courrier email de ce domaine est celui indiqué par le troisième champs. Le deuxième champs indique la priorité du serveur indiqué par cette entrée. N’oubliez pas non plus de modifier le Serial afin de forcer la synchronisation des autres serveurs DNS.
Vérifiez que la zone est toujours valide par le biais des utilitaires bind :
shell# named-checkzone mon_domaine /etc/bind/db.mon_domaine zone mon_domain/IN: loaded serial 2007042301 OK
Si tout se passe bien, vous pouvez simplement recharger la configuration du serveur DNS :
shell# /etc/init.d/bind9 reload
Testez alors de l’extérieur les réponses du serveur - il se peut qu’il soit nécessaire d’attendre plusieurs heures avant que les changements ne soient visibles de l’extérieur - :
shell$ dig mx festepreuves.com ; <<>> DiG 9.4.0 <<>> mx festepreuves.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12940 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;festepreuves.com. IN MX ;; ANSWER SECTION: festepreuves.com. 10800 IN MX 5 mail.festepreuves.com. ;; ADDITIONAL SECTION: festepreuves.com. 10800 IN A 81.56.231.122 ;; Query time: 140 msec ;; SERVER: 10.44.27.1#53(10.44.27.1) ;; WHEN: Mon Apr 23 23:47:43 2007 ;; MSG SIZE rcvd: 71
Au passage, un petit site très pratique pour tester la configuration de ses serveurs DNS : http://pingability.com/zoneinfo.jsp.
Désormais, le serveur DNS est paré à router tranquillement les emails à destination de notre domaine vers notre serveur. Il ne reste plus qu’à configurer correctement ce dernier :)
Configuration du serveur SMTP (Postfix)
Lançons-nous dans la lecture ... et la compréhension je l’espère, du fichier main.cf. Choisissez votre éditeur préférez et ouvrez le fichier. Ce dernier ne fait qu’une vingtaine de lignes ... comparé à un Apache ça semble être du gâteau ! Rassuré ?
La première chose que nous allons modifier est le contenu de la variable myhostname, cette dernière doit correspondre au nom du serveur email. En gros il faut y mettre ce que vous avez placé dans le champs MX sur votre serveur DNS :
myhostname = my_domaine
La variable relayhost définit si l’on passe par un serveur SMTP tiers, ou bien si l’on gère nous même l’envoi de nos messages. Si nous mettons en place notre propre serveur, c’est bien pour ne pas dépendre d’autres. Laissons donc cette variable vide :
relayhost =
La variable inet_interfaces permet de spécifier les interfaces réseaux sur lesquels doit répondre le serveur. Dans notre cas, nous désirons pouvoir poster du réseau local et d’internet, il est donc nécessaire d’activer toutes les interfaces :
inet_interfaces = all
La variable masquerade_domain permet d’indiquer au serveurs que certains domaines ou sous-domaines ne doivent pas être conservés tels quels, mais transformés. Ainsi, notre serveur répond au sous-domaine mail.mon_domain.com, mais nous voulons que les mails soient envoyés avec l’adresse : mon_domain.com. Indiquons donc que le domaine mail.mon_domain.com doit être géré par le masquerading :
masquerade_domains = mail.mon_domain.com masquerade_exceptions =
Les alias permettent de mettre en relation des adresses du serveur local et d’autres utilisateurs ou adresses. Pour le moment nous allons stocker ces adresses dans le fichier /etc/aliases :
alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases
Test du fonctionnement du serveur de mail
La configuration du serveur est certe incomplète car il manque le stockage des emails et leur consultation à distance, la gestion de plusieurs noms de domaine, la vérification du contenu par un antivirus, l’anti-spam, ... mais chaque chose en son temps.
Commençons par recharger la configuration du serveur avec la commande suivante :
shell# /etc/init.d/postfix reload Reloading Postfix configuration...done.
Si tout va bien il ne devrait pas y avoir de messages d’erreur. Maintenant, tentez de vous envoyer un message à vous même (en gras ce que vous devez taper) à partir du serveur directement :
shell$ mail -s "Petit test" moi@mon_domain.com Voilà, c'est juste un petit test pour voir . Cc: shell$
Vérifions que le message a bien été reçu :
shell$ mail
Mail version 8.1.2 01/15/2001. Type ? for help.
"/var/mail/moi": 1 message 1 new
>N 1 moi@mon_do Sat Apr 28 14:20 14/517 Petit test
& {{1}}
Message 1:
From grdscarabe@festepreuves.com Sat Apr 28 14:20:59 2007
X-Original-To: grdscarabe@festepreuves.com
To: grdscarabe@festepreuves.com
Subject: Petit test
Date: Sat, 28 Apr 2007 14:20:59 +0200 (CEST)
From: grdscarabe@festepreuves.com (GrdScarabe)
Juste un test
& q
Il semble bien que ça fonctionne. Attelons-nous maintenant à ajouter un alias dans le fichier /etc/alias. Par exemple, étant donné que nous n’avons pas mis en place de moyen de récupérer les messages, renvoyons-les vers une adresse que nous possédons déjà :
shell# vi /etc/aliases # /etc/aliases mailer-daemon: postmaster postmaster: root nobody: root hostmaster: root usenet: root news: root webmaster: root www: root ftp: root abuse: root noc: root security: root root: moi moi: moi@mon_autre_adresse.fr shell# postalias /etc/aliases
La commande postalias permet de mettre à jour la base des alias auprès du serveur, sinon il n’aurait pas pris en compte votre modification dans /etc/aliases. Envoyons alors maintenant un message à cette adresse :
shell$ mail -s "Petit test des alias" moi@mon_domain.com Voilà, c'est juste un petit test pour voir si les alias fonctionnent . Cc:
Une fois le message parti, allez voir dans la boîte que vous avez spécifié au niveau de l’alias. Le message doit y apparaître :) Bravo ... vous avez mis en place votre premier serveur de mail. Offrons lui l’ouverture sur le monde maintenant ...
Configuration du firewall
Si vous voulez que votre serveur accepte des mails provenant de l’extérieur, il est nécessaire de laisser le port 25 ouvert au niveau de votre firewall ! Si vous êtes chez free, commencez par lire cet article.
Pour ma part j’utilise directement iptables pour gérer mon firewall, je ne décrirai donc que cette méthode qui est de toute manière certainement la plus complexe. Il y a de fortes chances que si vous n’utilisez pas iptables, il suffise de spécifier à votre firewall de laisser passer les emails ou de débloquer le port 25.
La chaîne permettant d’autoriser l’accès au port 25 et bloquer le reste par le biais d’iptables est la suivante :
shell# iptables -A INPUT -p tcp --dport 25 -j ACCEPT shell# iptables -A INPUT -j REJECT
Si toutefois vous avez d’autres serveurs tournant sur la machine avec leur propre configuration du firewall, il est certainement préférable d’utiliser la chaîne suivante :
shell# iptables -I INPUT 1 -p tcp --dport 25 -j ACCEPT
Si vous voulez en savoir plus sur les règles iptales, je vous conseille de lire cet article.
Vous devriez maintenant pouvoir envoyer/recevoir des mails de votre domaine d’un peu n’importe où dans le monde :)
About the ICS format