date: 26 Oct 2009 title: Home serveur : configuration du serveur de mail - Postfix tags: authentification, configuration, home serveur, mail, mta, planet-libre, postfix, sasl, tls categories: Configuration d'un home serveur, GNU-Linux et Logiciels Libres

Je me suis décidé, nous allons commencer par le serveur de mail :) . Mais comme il y a beaucoup de chose à faire, la configuration s'étalera sur au moins 3 articles.

Principe de fonctionnement

Le domaine des serveurs de mails est assez complexe, je vais donc essayer de simplifier un peu tous ça très rapidement :

Schéma de fonctionnement d'un serveur mail

(admirer au passage ce beau schéma :) )

Ce qu'on peut voir en premier, c'est qu'il y a plusieurs programmes qui s'exécutent sur le serveur :

Donc, pour suivre l'ordre logique de ce schéma, nous allons commencer par configurer le MTA

Installation

On va utiliser postfix comme MTA.

sudo apt-get install postfix
Debian possède par défaut un MTA, exim4, qu'apt va supprimer pour installer postfix.

Lors de l'installation, 2 choses vous sont demandées :

Configuration

La configuration se passe dans le fichier /etc/postfix/main.cf.

Recherchez la ligne "mydestinations = ..." pour y ajouter votre nom de domaine. Vous devriez obtenir quelque chose du genre

mydestination = univers-libre.net, mail.univers-libre.net, heimdall.univers-libre.net, localhost.univers-libre.net, localhost

Ajouter également votre réseau à la liste "mynetworks = ...". Dans mon cas, j'obtiens

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128, 192.168.0.0/24

Authentification

Pour éviter que notre serveur soit utilisé par les spameurs, nous allons installer un serveur d'authentification : SASL. Vous devrez alors vous identifier pour envoyer un mail, comme sur la plupart des serveurs.

On installe d'abord les paquets correspondant :

sudo apt-get install sasl2-bin sasl2-modules
Puis on l'active en remplaçant START=no par yes dans le fichier /etc/default/saslauthd.

Il faut également déplacer le répertoire de travail de saslauth pour qu'il se trouve dans le chroot de postfix. Toujours dans ce fichier, modifier la dernière ligne comme indiquer dans les commentaires du fichier :

OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

Créez maintenant l'arborescence qui contiendra ce répertoire :

sudo mkdir -p /var/spool/postfix/var/run/saslauthd
et supprimez l'ancien :
sudo rm -rf /var/run/saslauthd

Vous devez ajouter postfix au groupe sasl pour qu'ils puissent dialoguer entre eux :

sudo adduser sasl

Maintenant, revenez à la configuration de Postfix pour lui dire de passer par le serveur d'authentification (fichier /etc/postfix/main.cf) :

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination

Précisez enfin le type d'authentification dans le fichier /etc/postfix/sasl/smtpd.conf (créez le) :

pwcheck_method: saslauthd
mech_list: plain login

TLS

Ensuite, occupons nous de TLS. TLS va nous permettre de sécuriser les échanges entre serveur et client, sur le principe des certificats et des clés. Nous devons générer un certificat permettant d'identifier le serveur et une clé privée pour chiffrer les paquets (les commandes qui suivent viennent de kent1, je ne pouvais pas les inventer ;) ).

sudo mkdir /etc/postfix/ssl/ && cd /etc/postfix/ssl
Génération de la clé RSA :
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
chmod 600 smtpd.key
Génération du certificat :
openssl req -new -key smtpd.key -out smtpd.csr
Remplissez les différents champs du certificat. Le Common Name doit être le nom complet de votre serveur mail (ex: mail.univers-libre.net).
openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
openssl rsa -in smtpd.key -out smtpd.key.unencrypted
mv -f smtpd.key.unencrypted smtpd.key
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Complétez les champs de la même manière, notamment le Common Name. Ouf, après tous ça on a notre certificat !

Retournez alors encore une fois dans la config de postfix (le main.cf), à la section TLS, pour indiquer les bons chemins :

smtpd_tls_cert_file=/etc/postfix/ssl/smtp.crt
smtpd_tls_key_file=/etc/postfix/ssl/smtpd.key
smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem

smtpd_use_tls doit normalement être à yes

Modification de votre DNS

Pour que votre serveur de mail soit accessible depuis Internet, vous devez modifier votre configuration DNS de votre domaine. Cela se fait sur l'interface web de votre registar.

Créez un nouvel enregistrement de type MX (Mail eXchanger) et donnez comme valeur le nom complet de votre serveur de mail, sans oublier le point final. Par exemple, "mail.mon-domaine.tld.". Si vous avez plusieurs serveurs mail associés à votre nom de domaine, vous pouvez attribuer une priorité à un enregistrement. Si vous en avez qu'un, mettez la valeur que vous voulez.

Ouverture du port sur la box et le pare feu local

Bien sur, nouveau service implique nouveau port, donc vous allez devoir rediriger le port tcp 25 entrant vers votre serveur, comme vous avez fait pour ssh précédemment. Si votre FAI bloque le port 25 sortant, pensez aussi à le débloquer (si vous en avez la possibilité). Sur notre serveur, il faut aussi ouvrir le port concerné. Rajoutez ces lignes dans le fichier /etc/network/if-pre-up/set_iptables :

# Autorise les connections SMTP
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

Fail2ban permet aussi de surveiller le port smtp, donc autant en profiter. Dans la catégorie "Mail servers", activez (remplacez "enabled = false" par "enabled = true") les filtres postfix, courierauth et sasl.

Configuration du reverse DNS et déréférencement de votre IP de la base PBL

Enfin, dernière configuration, et nous en aurons fini.

Si vous essayez d'envoyer un mail avec votre nouveau serveur, celui ci aura peu de chance d'arriver, et vous recevrez alors l'explication par un mail de retour. En fait, toutes les adresses IP délivrées par les FAI se retrouvent dans une base appelée PBL (Policy Block List), et qui sert aux antispams des autres serveur SMTP afin juger si un mail est considéré comme du spam. Ceci pour éviter que les PC zombies n'envoient trop de spams.

Bien sûr, il est possible de retirer son IP de cette base, si l'on veut avoir son vrai serveur SMTP, à 3 conditions : l'adresse IP doit être fixe, vous devez avoir configuré votre reverse DNS, et évidement que vous n'enverrez pas de spam. Le reverse DNS permet d'obtenir le nom d'hôte à partir de l'adresse IP (le contraire du DNS quoi). Il est aussi vérifié par les antispams (une machine possédant un nom de domaine est plus susceptible d'être un vrai serveur mail qu'une qui n'en a pas).

Suivant les FAI, la manière de modifier le reverse DNS change, et je ne peux pas expliquer la méthode pour chaque FAI, mais vous trouverez ça aisément sur les forums.

Une fois ceci fait, vous pouvez retirer votre IP de la base PBL. Suivez alors les consignes sur http://www.spamhaus.org/.

Attention, vous devez obligatoirement donner votre adresse mail gérée par votre serveur (du style login-du-systeme@mon-domaine.tld), et pas une adresse gmail ou autre. Comme vous n'avez pas encore de serveur imap, utilisez la commande mail pour le lire (tapez n pour lire le message suivant).

Et voila, vous avez maintenant un serveur SMTP fonctionnel, prochaine étape, le serveur IMAP :)