Installation serveur Mail : Postfix Dovecot
Prérequis :
Un serveur Linux,
Un serveur tournant sous Linux évidement. Dans mon cas j'utiliserai et présenterai les commandes au sein d'une distribution Debian.
Un nom de domaine,
Si vous souhaitez que votre serveur mail soit accessible sur internet vous allez à voir besoin d'un nom de domaine (ou plusieurs) qui est (sont) plus sympa qu'une adresse IP.
Un serveur DNS,
Si vous avez un nom de domaine il y a de forte chance pour que vous ayez, sur votre machine ou chez un hébergeur, un serveur DNS afin de résoudre votre IP. Voir même un DynamicDNS tels que DynDNS ou No-IP. Et il faut ajouter à votre domaine un MX Record vers un sous-domaine tel que "mail", ce qui fait que tout mail dirigé vers "example.org" sera envoyé à "mail.example.org".
Des connaissance en Linux,
Des connaissances basique dans le système d'exploitation Linux, afin de comprendre et de pouvoir adapter votre configuration, en Shell notamment car toutes les étapes se réalisent en terminale. Ainsi que des connaissance dans l'utilisation d'un éditeur en terminale tels que vi ou nano. Dans mon cas ce sera vi.
Une Base De Données,
Vous allez avoir besoin d'une base de données MySQL car ce tuto présente le fonctionnement pour des utilisateurs virtuels, une méthode plus compliquée mais aussi plus intéressante.
Mise à jour du système :
apt-get update
apt-get upgrade
Débuguage des services :
Le fichier de log pour les services postfix, et dovecto est /var/log/mail.log
Installation de PostfixAdmin :
PostfixAdmin est un module web permettant de gérer la base de données contenant les différents utilisateurs virtuels, les différents domaines ainsi que les alliasses.
Installation :
apt-get install postfixadmin
Utilisez la configuration automatique avec Apache, postfixadmin créer son propre utilisateur et laissez le générer un mot de passe aléatoire.
Création de la Base De Données :
Lors de l'installation de postfixadmin, la base de donnée à été créée automatiquement.
Pour y accéder, en utilisant phpmyadmin (http://example.org/phpmyadmin
par défaut), connectez y vous en root.
Puis allez dans l'onglet utilisateurs et ajoutez un utilisateur,
je l'appellerai "mailuser" avec le mot de passe "azerty",
pour le type de client sélectionnez "local" pour que l'utilisateur ne soit accessible qu'en local ("localhost"),
quant aux privilèges ne donnez uniquement des droits sur les données, j'ai choisi d'attribuer les 4 utiles "SELECT", "INSERT", "UPDATE" et "DELETE" pour une question de facilité mais cochez au moins le privilège "SELECT".
Configuration de la BDD et création des tables :
Rendez vous à l'adresse du site : http://example.org/postfixadmin/setup.php
(où example.org
est votre nom de domaine ou adresse IP).
La connexion est un peu longue car la création de l'ensemble des tables de la base de données postfixadmin est créée, puis le résultat s'affiche, il faut qu'il y ai "OK" ou "done" partout.
Ensuite on vous invite à rentré un nouveau mot de passe pour le setup. Cela génère un hash du mot de passe et comme indiquer, si vous souhaitez l'utiliser il faut le copier comme indiquer dans le fichier :
vi /etc/posfixadmin/config.inc.php
Configuration de PostfixAdmin :
Ensuite connectez-vous à l'adresse : http://example.org/postfixadmin/login.php
Sélectionnez "Nouveau domaine" dans l'onglet "Liste domaines", puis pour "Domaine" inscrivez votre domaine, par exemple example.org
, vous pouvez écrire une description si vous le souhaitez et mettez 0 pour "Alias" et "Comptes courriels" afin de pouvoir utiliser une infinité d'alias et de compte, mais si vous souhaitez définir un nombre maximum vous le pouvez.
Si vous avez un autre domaine tel que example.com
, réitérez l'opération pour votre(vos) autre(s) domaine (s).
Après avoir validé vous pouvez le(s) voir dans "Liste domaines".
Ajout des utilisateurs :
Vous pouvez maintenant ajouter un ou plusieurs utilisateurs, pour ce faire il suffit de sélectionner "Ajouter un compte courriel" dans l'onglet "Liste virtuels". Il suffit de remplir le formulaire comme indiquer, vous pouvez décocher l'envoie d'un message de bienvenue car le service smtp n'est pas encore mis en place pour l'instant, pour les prochains utilisateurs vous pouvez laisser le mail de bienvenue.
Vous pouvez aussi créer des alias, ce sont des adresses mails qui redirigerons vers une autre adresse, pour ce faire dans le même onglet selectionnez "Ajouter un alias".
Mise en place de Postfix :
Postfix est le serveur SMTP, c'est à dire que c'est un système qui permet la livraison des courriers électroniques. Postfix permet donc l'échange des mails entre les serveurs.
Installation :
Installation de postfix avec la couche mysql, les utilisateurs virtuels seront en base de données et sasl2 pour l'authentification.
apt-get install postfix postfix-mysql libsasl2-modules sasl2-bin
Répondez "site internet" à la première question (les autres ne nous intéressent pas), puis donnez le nom de domaine que vous avez pris (example.org
par exemple) à la suivante.
L'ensemble de la configuration se fait dans le répertoire : /etc/postfix/
.
Configuration :
Modifiez le fichier main.cf
et modifier :
myhostname = mail.example.org
mydomain = example.org
myorigin = example.org
# mailbox_command = procmail -a "$EXTENSION"
Relier postfix à la BDD :
Il faut que postfix puisse savoir si le mail lui est destiné et que le destinataire existe réellement, pour cela il faut relier postfix à la base de données. Toujours dans le fichier main.cf
ajouter ou modifier les lignes :
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Vérifier le domaine
Ajouter le fichier mysql-virtual-mailbox-domains.cf
et dedans écrivez :
user = mailuser
password = azerty
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT 1 FROM domain WHERE domain='%s'
Ce fichier va permettre à postfix, quand il reçoit un mail destiné à user@example.org
, de terminer si notre serveur est bien en charge du domaine example.org
depuis la base de données.
Pour activer utilisez la commande suivante :
postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Et pour tester utilisez cette commande :
postmap -q example.org mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
Si elle ne retourne rien elle a échoué, si elle retourne 1 alors c'est bon.
Vérifier la boîte mail
Ensuite on vérifie que la boîte mail (l'utilisateur virtuel) existe, dans le fichier mysql-virtual-mailbox-maps.cf
écrivez :
user = mailuser
password = azerty
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT 1 FROM mailbox WHERE username='%s'
Puis activez et testez :
postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
postmap -q user@example.org mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
Gestion des alias
Il faut rediriger les alias vers la bonne boîte mail, dans le fichier mysql-virtual-alias-maps.cf
:
user = mailuser
password = azerty
hosts = 127.0.0.1
dbname = postfixadmin
query = SELECT goto FROM alias WHERE address='%s'
Et enfin activez et testez le fichier, le test doit retourner l'adresse mail qui correspond :
postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf
postmap -q alias@example.org mysql:/etc/postfix/mysql-virtual-alias-maps.cf
Changer les droits des fichiers :
Il faut modifier les droits de ce fichier car il contient en clair le mot de passe SQL.
chgrp postfix /etc/postfix/mysql-*.cf
chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf
Activation des ports :
Modifiez le fichier master.cf
en ajoutant ou décommentant les lignes suivantes :
submission inet n - - - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
smtps inet n - - - - smtpd
-o syslog_name=postfix/smtps
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
Activation du SASL :
Sasl permet de forcer l'authentification pour envoyer des mails, pour éviter à un spammer d'utiliser votre serveur comme relai.
Modifier le fichier main.cf
en ajoutant les lignes suivantes :
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = yes
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination
Dans le fichier /etc/default/saslauthd
modifier START
en START = yes
, puis relancer le service :
service saslauthd restart
Mise en place du relai :
Le relayhost permet d'envoyer et de recevoir des mails depuis internet en passant par son FAI, ici Orange, ajoutez dans le fichier main.cf
.
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
sender_canonical_maps = hash:/etc/postfix/sender_canonical
[..le reste du fichier..]
relayhost = smtp.orange.fr
Ensuite créez un nouveau fichier pour définir l'authentification SMTP /etc/postfix/sasl_passwd
et ajouter votre identifiant (mail ou numéro télephone) et mot de passe orange :
smtp.orange.fr [utilisateur]:[mot de passe]
Créer un fichier pour définir le mapping des expéditeurs : /etc/postfix/sender_canonical
, ajoutez l'utilisateur et le nom d'utilisateur virtuel qu'il prendra :
root [adresse expéditeur]
Puis exécutez ces commandes :
postmap hash:/etc/postfix/sasl_passwd
postmap hash:/etc/postfix/sender_canonical
/etc/init.d/postfix restart
Maintenant vous pouvez envoyer des mails avec la commande mail et en recevoir.
Préparation de Postfix :
Il faut préparer postfix pour qu'il transmette les mails qu'il reçoit à dovecot, qui les rangera correctement, pour cela il faut modifier le fichier master.cf
en ajoutant à la fin :
dovecot unix - n n - - pipe
flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/dovecot-lda -f ${sender} -d ${recipient}
Lancement :
Redémarrez le service postfix :
service postfix restart
Mise en place de Dovecot :
Dovecot est un service qui permet de, une fois les mails récupérés, il faut les classer dans les dossier correspondant aux utilisateurs virtuels car sinon ils sont envoyés à la mailbox de l'utilisateur physique s'il existe sinon ils sont perdu.
Installation :
Installation des paquets Dovecot.
apt-get install dovecot-mysql dovecot-pop3d dovecot-imapd dovecot-managesieved
A partir de là tout ce passe dans le répertoire /etc/dovecot
, ainsi que dans le sous-répertoire /etc/dovecot/conf.d
.
Configuration de l'authentification :
Il faut ensuite permettre la connexion, pour cela il faut modifier le fichier 10-auth.conf
dans le sous-répertoire, et modifier la ligne en :
auth_mechanisms = plain login
Ensuite il faut modifier le type d'authentification avec les "include" à la fin de ce fichier avec l'authentification sql :
#!include auth-system.conf.ext
!include auth-sql.conf.ext
#!include auth-ldap.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext
Configuration de SQL :
Pour cela il suffit de modifier le fichier auth-sql.conf.ext
que nous avons sélectionné à l'étape précédente.
Pour cela les seuls lignes qui doivent être dans le fichier sont :
passdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
driver = sql
args = /etc/dovecot/dovecot-sql.conf.ext
}
Ces lignes disent que pour l'authentification, lorsque dovecot souhaite authentifier l'utilisateur, il peut vérifier le mot de passe et le pseudo grâce au fichier dovecot-sql.conf.ext
.
Il faut donc configurer ce fichier, ajouter à la fin :
driver = mysql
connect = host=127.0.0.1 dbname=postfixadmin user=mailuser password=azerty
default_pass_scheme = MD5
password_query = SELECT username as user, password FROM mailbox WHERE username='%u';
user_query = SELECT maildir, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active='1'
Donc lorsque dovecot voudra vérifier le mot de passe il appellera la user_query
en utilisant les données de connexion connect
pour une base de données de type driver
. Et pour vérifier le mot de passe dovecot uilisera la password_query
et vu que dans la base de données le mot de passe est crypté, il faut avant de le comparer à celui de la base de données aussi le crypté en utilisant la méthode default_pass_scheme
, qui correspond au même mode que dans la base de données évidement.
Configuration mail :
Pour gérer les mails, où ils seront placés, il faut éditer le fichier 10-mail.conf
dans le sous-répertoire, et vérifier que les lignes ci-dessous sont décommentés et existes :
mail_location = maildir:/var/vmail/%d/%n
namespace inbox {
separator = /
inbox = yes
}
mail_privileged_group = mail
Quelques petites explications :
Tout d'abord on configure avec mail_location
, là où ils seront placés, ils seront donc dans ce cas dans le répertoire /var/vmail/
puis dans le répertoire %d
qui correspond au nom de domaine, dans ce tuto c'est example.org
. Puis dans le répertoire %n
qui correspond au nom d'utilisateur par exemple toto
.
Ensuite on définit pour l'espace/le fichier ou seront enregistrés les mails de tels manière que le séparateur soit un '/' et non un point '.' comme ça peut l'être ce qui fait que les mails seront dans le répertoire /var/vmail/%d/%n
et non dans un répertoire du genre vmail.%d.%n
. C'est une affaire de goût mais je préfère une arborescence, c'est plus clair et plus propre.
Configuration SSL :
Ensuite nous configurons la sécurité du service dans le fichier 10-ssl.conf
du sous-répertoire avec :
ssl = yes
ssl_cert = </etc/ssl/certs/mailserver.pem
ssl_key = </etc/ssl/private/mailserver.pem
La propriété ssl peut valoir 'no' si vous ne voulais pas crypter en RSA, 'yes' si vous laissez le choix au client ou 'required' si vous voulez forcer le client à utiliser de la cryptographie RSA.
Les certificats ne sont pas encore créés, pour se faire exécutez la commande suivante, si vous avez installez le paquet openssl avant :
openssl req -new -x509 -days 3650 -nodes -newkey rsa:4096 -out /etc/ssl/certs/mailserver.pem -keyout /etc/ssl/private/mailserver.pem
Configuration LDA : (A vérifier l'utilité)
Pour pouvoir déplacer les fichier il faut activer le plugin 'sieve' dans le fichier 15-lda.conf
trouvez puis modifier ou écrivez le code suivant :
protocol lda {
mail_plugins = $mail_plugins sieve
}
Protection et lancement :
Modifier les droits des différents fichiers et relancer le démon.
chown root:root /etc/dovecot/dovecot-sql.conf.ext
chmod go= /etc/dovecot/dovecot-sql.conf.ext
chgrp vmail /etc/dovecot/dovecot.conf
chmod g+r /etc/dovecot/dovecot.conf
service dovecot restart
Règles iptables :
Afin que l'on puisse utiliser l'ensemble des services que nous avons mis en place il faut que les différents ports paramétrés soient ouverts. Pour ce faire il faut modifier la table iptable
, ajoutez dans un fichier (ici /etc/iptables.rules) les lignes suivantes pour chacun des services que vous avez mis en place :
# Allows SMTP access
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# Allows pop and pops connections
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
# Allows imap and imaps connections
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
A chaque redémarrage de la machine, la table iptables se réinitialise et supprime donc les règles que nous ajoutons, il faut donc que ces règles ce remettent en place à chaque redémarrage de la machine. Pour ce faire nous allons ajouter à la fin du fichier /etc/network/interfaces
, qui paramètre entre autres la connexion réseau, la ligne suivante :
pre-up iptables-restore < /etc/iptables.rules
Cette ligne permet qu'à chaque redémarrage, une fois que les règles réseaux sont mises en place les règles du fichier /etc/iptables.rules
sont appliquées.
Attention malgré tout à cela s'il y a d'autres règles importantes, je ne suis pas certain de la pleine efficacité de cela. Mais dans utilisation normal, c'est-à-dire pour un utilisateur qui ne modifie pas déjà cette table, cela fonctionne parfaitement.
Sinon il est possible d'écrire un script :
iptables -D INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -D INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -D INPUT -p tcp -m tcp --dport 995 -j ACCEPT
iptables -D INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -D INPUT -p tcp -m tcp --dport 993 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
est de l'exécuter quand c'est nécessaire.
Voilà et maintenant vous avez un magnifique serveur mail fonctionnel, ne vous reste plus qu'à configurer votre boîte de messagerie préféré ou d'installer un web mail sur votre serveur