Configuration d'un serveur mail privé
Ce document décrit l'installation et la configuration d'un serveur mail privé. Il récupère les e-mails de mes différentes adresses par POP3 et les dépose dans une boîte aux lettres locale, accessible en IMAP4 et par webmail.
Environnement
Le tout est installé sur mon serveur (Debian Etch); cela guide donc certains choix en fonction de ce qui est déjà installé ou peut l'être par aptitude. En l'occurence, je dispose déjà d'un Exim 4 et d'un Apache 2 avec PHP installés.
Configuration d'Exim
Exim ne pourra pas recevoir les e-mails de l'extérieur, ni en envoyer directement puisque les providers ont l'habitude de bloquer le port 25 et donc les serveurs mails privés. Il faut donc le configurer en conséquence. Par contre, il pourra recevoir et relayer des e-mails depuis mon réseau interne, évitant ainsi aux notifications e-mails de mes backups de quitter mon réseau. Le serveur est mon routeur; il a ainsi une adresse sur mon réseau privé (192.168.128.1
) et une adresse dynamique sur Internet.
Taper dpkg-reconfigure exim4-config
et répondre comme suit aux questions:
- Type de configuration
- Envoi via relais ("smarthost") - réception SMTP ou fetchmail
- Nom de courriel du système
- debona.dyndns.org
- Liste d'adresses où Exim sera en attente de connexions SMTP entrantes
- 127.0.0.1;192.168.128.1
- Autres destinations dont le courriel doit être accepté
- debona.dyndns.org;espresso
- Machines à relayer
- 192.168.128.0/24
- Nom réseau ou adresse IP du système "smarthost":
- mail.teledisnet.be
- Méthode de distribution du courrier local
- Format "Maildir" dans le répertoire de base (home)
La limitation des adresses me permet de ne faire écouter le serveur que là; où; j'en ai besoin et où les réseaux sont sûrs. Je lui indique de déposer dans les boîtes locales le courrier vers les adresses *@debona.dyndns.org et *@espresso (le nom du serveur), et d'envoyer le reste vers le relais de mon provider. Le format de boîte aux lettres Maildir stocke chaque e-mail dans un fichier distinct. Il y a des avantages et inconvénients par rapport au format mbox (tous les e-mails dans un seul fichier), mais ce qui m'intéresse est:
- la possibilité d'accès concurrents
- un comportement plus sympa pour les programmes de backup
- un format à mon sens plus résistant à un éventuel crash ou coupure de courant
On peut alors tester le comportement d'Exim en configurant un ordinateur du réseau pour utiliser ce serveur en tant que relais, et envoyer un e-mail vers Internet et un utilisateur du serveur.
Configuration fine
J'ai également ajouté dans /etc/exim4/exim4.conf.template
(ma configuration n'est pas splitée) les lignes suivantes (sous le commentaire "REWRITE CONFIGURATION"):
begin rewrite julien@bawet.org julien@localhost T julien@espresso.debona.sere julien@bawet.org frs
La première ligne indique le début des déclarations de réecriture des adresses e-mails. La 2ème intervient s'il m'arrive de m'envoyer un e-mail depuis mon réseau interne: il ne sera pas envoyé à julien@bawet.org mais directement sur mon serveur local. Ca évite le transfert vers l'extérieur, puis le rapatriement avec fetchmail. La troisième modifie les champs From:, Reply-To: et Sender: des courriers que je pourrais envoyer localement, afin qu'ils correspondent à mon adresse e-mail publique et que les destinataires aient une adresse valide pour me répondre.
Installation de Dovecot
Dovecot est un serveur IMAP sécurisé et performant, tout en restant simple à configurer. On l'installe par la commande aptitude install dovecot-imapd
. Ensuite, il faut le configurer en éditant le fichier /etc/dovecot/dovecot.conf
, où il faut ajouter des lignes protocols = imap
, mail_location = maildir:~/Maildir
et disable_plaintext_auth = no
. Pour finir, redémarrer Dovecot: /etc/init.d/dovecot restart
.
A ce point, on peut configurer un client IMAP (ex: Thunderbird) dans le réseau local et le faire pointer vers ce serveur. L'authentification est la même que pour le système (login et mot de passe).
Installation d'un webmail
Installer les paquets squirrelmail et squirellmail-locales et l'activer en incluant le fichier /etc/squirrelmail.apache.conf
dans la config d'apache (lien dans /etc/apache2/conf.d
ou inclusion par une directive include). La configuration par défaut de ce fichier rend squirrelmail accessible dans le sous-répertoire squirrelmail du serveur.
Récupération des e-mails
Pour récupérer les e-mails d'une boîte extérieure et les ajouter dans ma boîte aux lettres locale, on peut utiliser le classique fetchmail, contenu dans le package du même nom. Une fois installé, activer le daemon dans le fichier /etc/default/fetchmail
. Créer aussi le fichier /etc/fetchmailrc
, lui donner les permissions 600 et y entrer les informations des comptes à rapatrier.
Le fichier /etc/fetchmailrc
dont contenir les lignes suivantes pour récupérer les e-mails (en POP3):
poll mail.mon_provider.net with protocol pop3 user mon_login there is julien here password "mon_mot_de_passe" keep;
Les infos de login sont celles de la boîte aux lettres à télécharger; julien est le nom de ma boîte locale. L'option keep permet de laisser les mails sur le serveur (pratique à titre temporaire).
Cryptage des communications
Je veux pouvoir accéder facilement à mon mail depuis l'extérieur, sans pour autant laisser passer mon mot de passe en clair. En IMAP, je devrai donc utiliser la variante sécurisée IMAPS, et pour le webmail, je devrai configurer Apache pour servir le webmail en HTTPS.
Apache 2 et HTTPS
Tout d'abord, installer le package libapache2-mod-ssl
(pour Apache 2 sous Debian), puis créer la clé privée du serveur et un certificat autosigné:
mkdir /etc/apache2/ssl cd ssl openssl req -new > server.csr # Répondre aux questions, en précisant le nom du serveur pour le Common Name # Retirer le mot de passe; cela permet au serveur de démarrer sans intervention externe openssl rsa -in privkey.pem -out server.key # Créer le certificat openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 # Faire le ménage rm server.csr privkey.pem
Ensuite, ajouter les deux lignes suivantes dans /etc/apache2/mods-available/ssl.conf
, et créer des liens vers ce fichier et le fichier ssl.load dans /etc/apache2/mods-enabled
.
SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key
Apache est maintenant, après redémarrage, d'utiliser SSL; il reste à configurer où cela doit être fait. Dans ports.conf, ajouter une ligne Listen 443
. Ensuite, dans les tags "VirtualHost", ajouter explicitement le port ( ":80") après l'astérisque (ex: <VirtualHost *:80>
). Ajouter un VirtualHost sur *:443 avec la configuration désirée et la ligne SSLEngine on
.
S'il y a un firewall, ne pas oublier de laisser passer le trafic entrant sur le port 443, qui est le port par défaut du HTTPS.
Dovecot et IMAPS
L'installation du package Debian est presque complète: il suffit de rajouter imaps à la ligne protocols = ...
. Les certificat et clé nécessaires sont dans `/etc/ssl (répertoires certs et private). Le certificat est autosigné pour localhost, et il est donc avantageux de le remplacer, au moins par un certificat autosigné.
La procédure est la même que pour Apache, sauf qu'il faut copier le certificat (resp. la clé privée) dans /etc/ssl/certs/dovecot.pem
(resp. /etc/ssl/private/dovecot.pem
).
Et voilà! Mes mails sont accessibles depuis chez moi de manière centralisée.