Ceci est une ancienne révision du document !
Configurer un serveur de messagerie libre sous Linux
Ce tutoriel a pour but de mettre en service un serveur de messagerie libre sous Linux, sécurisé contre les utilisations frauduleuses et utilisant le protocole TLS pour chiffrer le transport des mails.
Pour cela, il faut configurer 3 composants logiciels distincs :
- Un MTA (Mail Transfer Agent) chargé du transport des mails en interne ou vers des domaines de messagerie sur Internet ⇒ PostFix
- Un MDA (Mail Delivery Agent) chargé de délivrer les mails entrants dans les boîtes mails (en faisant du filtrage) ⇒ Procmail
- Un LDA (Local Delivery Agent) chargé de remettre les mails au client de messagerie ⇒ Courrier
Installation des paquets requis
SASLAuthd est le programme qui va permettre d'authentifier les utilisateurs au serveur SMTP. MySQL (ou MariaDB), quant à lui, est un SGBD qui stockera la base de données des comptes de messagerie.
Voici la commande pour installer tous les prérequis :
apt-get install libdb5.1 postfix sasl2-bin procmail libsasl2-modules libsasl2-modules-sql libgsasl7 libauthen-sasl-cyrus-perl sasl2-bin libpam-mysql mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-imap
Si le paquet
mysql-server est indisponible, installer à la place mariadb-server (même chose).
L'assistant de première configuration de PostFix va alors s'ouvrir:
Choisir le réglage Site Internet :
Puis indiquer le domaine de messagerie à utiliser :
Paramétrage de PostFix avec STARTTLS
Ajouter l'utilisateur postfix au groupe sasl :
adduser postfix sasl
Pour configurer PostFix, relancer l'assistant de configuration complète du paquet :
sudo dpkg-reconfigure postfix
On renseigne les mêmes réglages que précédemment, puis l'assistant nous pose des questions supplémentaires :
- Destinataire des courriels «root» et «postmaster» : laisser vide (par défaut)
- Autres destinations pour lesquelles le courrier sera accepté : entrer toutes les domaines de messagerie secondaires à prendre en compte
- Faut-il forcer des mises à jour synchronisées de la file d'attente des courriels ? : Non
- Réseaux internes : laisser par défaut
- Faut-il utiliser procmail pour la distribution locale ? : Oui
- Taille maximale des boîtes mail en octets : 0 (pour aucune limite)
- Caractère d'extension des adresses mail : + (par défaut)
- Protocole à utiliser : IPv4
Ensuite entrer les commandes suivantes pour activer l'authentification avec sasl dans PostFix :
postconf -e 'smtpd_sasl_local_domain =' postconf -e 'smtpd_sasl_auth_enable = yes' postconf -e 'smtpd_sasl_security_options = noanonymous' postconf -e 'broken_sasl_auth_clients = yes' postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination' postconf -e 'inet_interfaces = all'
Créer le fichier des alias PostFix :
postalias /etc/aliases
Maintenant, créer un répertoire, une clé privée, et générer un certificat auto-signé TLS qui permettra de chiffrer les courriels :
mkdir /etc/postfix/ssl cd /etc/postfix/ssl/ openssl genrsa -des3 -rand /dev/urandom -out smtpd.key 2048 openssl req -new -key smtpd.key -out smtpd.csr 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 chmod 600 smtpd.key openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
Remarque : A certaines étapes et à plusieurs reprises, il faudra indiquer une clé privée à garder secrète et les informations à afficher sur les certificats (Code pays, état, ville, organisation, domaine…).
Après on peut paramétrer le serveur mail pour utiliser TLS avec le certificat généré :
postconf -e 'smtpd_tls_auth_only = no' postconf -e 'smtp_use_tls = yes' postconf -e 'smtpd_use_tls = yes' postconf -e 'smtp_tls_note_starttls_offer = yes' #Active STARTTLS postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key' postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt' postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem' postconf -e 'smtpd_tls_loglevel = 1' postconf -e 'smtpd_tls_received_header = yes' postconf -e 'smtpd_tls_session_cache_timeout = 3600s' postconf -e 'tls_random_source = dev:/dev/urandom' postconf -e 'myhostname = nocterie.local' postconf -e 'maillog_file = /var/log/postfix.log'
Par défaut, PostFix tente d'envoyer les mails sortants sur Internet, parfois ce n'est pas possible car l'opérateur bloque la livraison directe du courrier, il faut alors configurer soi-même le relais SMTP à utiliser en sortie :
postconf -e 'relayhost = mail.isp.tld'
Remplacer
mail.isp.tld par le serveur SMTP de votre fournisseur d'accès à Internet.
Enfin, redémarrer le service postfix pour appliquer les changements :
service postfix restart
S'il n'y a aucun retour cela signifie que la configuration est bonne.
Création des comptes d'utilisateur et paramétrage de PostFix
Dans cette partie, on va créer la base de données qui contiendra les comptes de messagerie du domaine.
Démarrer en générant une nouvelle base de données :
mysqladmin -u root --password='motdepasse' create postfix
Remplacer
motdepasse par le mot de passe du compte root.
Ouvrir la console d'administration de MySQL :
mysql -u root -p
Et donner les privilèges sur la base au compte postfix :
GRANT ALL PRIVILEGES ON postfix.* TO "postfix"@"localhost" IDENTIFIED BY 'password';
Remplacer
password par un mot de passe pour le compte postfix.
Puis créer les tables de la base :
USE postfix; CREATE TABLE `alias` ( `address` varchar(200) NOT NULL default '', `goto` text NOT NULL, `domain` varchar(255) NOT NULL default '', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (address) ) ENGINE=MyISAM COMMENT='Postfix Admin - Virtual Aliases'; USE postfix; CREATE TABLE `domain` ( `domain` varchar(200) NOT NULL default '', `description` varchar(255) NOT NULL default '', `aliases` int(10) NOT NULL default '0', `mailboxes` int(10) NOT NULL default '0', `maxquota` int(10) NOT NULL default '0', `transport` varchar(255) default NULL, `backupmx` tinyint(1) NOT NULL default '0', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (domain) ) ENGINE=MyISAM COMMENT='Postfix Admin - Virtual Domains'; USE postfix; CREATE TABLE `mailbox` ( `username` varchar(200) NOT NULL default '', `password` varchar(255) NOT NULL default '', `name` varchar(255) NOT NULL default '', `maildir` varchar(255) NOT NULL default '', `quota` int(10) NOT NULL default '0', `domain` varchar(255) NOT NULL default '', `created` datetime NOT NULL default '0000-00-00 00:00:00', `modified` datetime NOT NULL default '0000-00-00 00:00:00', `active` tinyint(1) NOT NULL default '1', PRIMARY KEY (`username`) ) ENGINE=MyISAM COMMENT='Postfix Admin - Virtual Mailboxes'; quit;
Maintenant, on crée l'utilisateur vmail et son groupe vmail. Cet utilisateur servira à centraliser les boîtes mail. Son répertoire personnel sera /srv/vmail, c'est à dire l'emplacement des boîtes mail des utilisateurs.
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /srv/vmail -m
On continue la configuration de PostFix :
postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf' postconf -e 'virtual_gid_maps = static:5000' postconf -e 'virtual_mailbox_base = /srv/vmail' postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf' postconf -e 'virtual_mailbox_limit = 51200000' postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf' postconf -e 'virtual_minimum_uid = 5000' postconf -e 'virtual_transport = virtual' postconf -e 'virtual_uid_maps = static:5000' postconf -e 'virtual_create_maildirsize = yes' postconf -e 'virtual_mailbox_extended = yes' postconf -e 'virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf' postconf -e 'virtual_mailbox_limit_override = yes' postconf -e 'virtual_maildir_limit_message = Le compte a atteint son quota de mails. Merci de rééssayer plus tard' postconf -e 'virtual_overquota_bounce = yes' postconf -e 'relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf'
Il faut désormais créer les fichiers de configuration pour MySQL. Il y en a 5 à créer :
/etc/postfix/mysql_virtual_alias_maps.cf contenant :
user = postfix password = password hosts = localhost dbname = postfix query = SELECT goto FROM alias WHERE address='%s' AND active = 1
/etc/postfix/mysql_virtual_domains_maps.cf contenant :
user = postfix password = password hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '0' and active = '1'
/etc/postfix/mysql_virtual_mailbox_maps.cf contenant :
user = postfix password = password hosts = localhost dbname = postfix query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
/etc/postfix/mysql_virtual_mailbox_limit_maps.cf contenant :
user = postfix password = password hosts = localhost dbname = postfix query = SELECT quota FROM mailbox WHERE username='%s'
Et enfin /etc/postfix/mysql_relay_domains_maps.cf contenant :
user = postfix password = password hosts = localhost dbname = postfix query = SELECT domain FROM domain WHERE domain='%s' and backupmx = '1' and active = '1'
Pour que PostFix prenne en compte ces fichiers en tant que table, il faut utiliser les commandes suivantes (cette commande doit être executée à chaque modification des fichiers ci-dessus) :
cd /etc/postfix postmap mysql_virtual_alias_maps.cf postmap mysql_virtual_domains_maps.cf postmap mysql_virtual_mailbox_maps.cf postmap mysql_virtual_mailbox_limit_maps.cf postmap mysql_relay_domains_maps.cf
Ne pas oublier de régler les permissions adequates sur les fichiers de configuration :
chown root:postfix /etc/postfix/* chmod 640 /etc/postfix/* chmod o+r /etc/postfix/main.cf chmod +x /etc/postfix/postfix-script
Paramétrage de l'authentification SMTP
Tout d'abord, créer le fichier de configuration de sasl et y indiquer quelques réglages :
touch /etc/postfix/sasl/smtpd.conf
echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf echo 'allow_plaintext: true' >> /etc/postfix/sasl/smtpd.conf
Puis entrer les commandes suivantes :
mkdir -p /var/spool/postfix/var/run/saslauthd rm -fr /var/run/saslauthd ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd chown -R root:sasl /var/spool/postfix/var/ chmod 710 /var/spool/postfix/var/run/saslauthd
Ensuite éditer le fichier /etc/default/saslauthd pour modifier les 2 lignes suivantes :
START=noenSTART=yesOPTIONS=“-c -m /var/run/saslauthd”enOPTIONS=“-c -m /var/spool/postfix/var/run/saslauthd -r”
Tests du protocole SMTP
Démarrer saslauthd, il ne doit pas y avoir d'erreur :
service saslauthd start
Vérifier que SMTP-AUTH et TLS fonctionnent correctement :
telnet localhost 25
Puis faire (remplacer nocterie.local par le domaine de messagerie utilisé) :
EHLO nocterie.local
La commande doit retourner une liste dans laquelle il y a une ligne 250-STARTTLS et une autre 250-AUTH PLAIN LOGIN
Quitter Telnet avec la commande quit.
On peut aussi essayer l'authentification avec un utilisateur local membre du groupe sasl pour voir si elle fonctionne :
testsaslauthd -u utilisateur -p password
Cela doit renvoyer ceci : 0: OK “Success.”, autrement il y a un problème quelquepart.
La dernière commande peut ne pas fonctionner ⇒ Ignorer
Configuration de ProcMail
ProcMail gère la livraison des courriels : c'est le facteur.
Commencer par lui créer un fichier de configuration :
MAILDIR=$HOME/Maildir DEFAULT=$MAILDIR/ :0: $DEFAULT
Installation de Courrier
Courrier est le programme qui permettra de récupérer les courriels grâce aux protocoles POP et IMAP.
Une question sera posée concernant des répertoires web, y répondre “Non” :
Créer l'espace de stockage des mails pour l'utilisateurs courant dans son répertoire /home avec :
maildirmake Maildir maildirmake -f Envoyé Maildir maildirmake -f En_attente Maildir maildirmake -f Spam Maildir maildirmake -f Brouillons Maildir maildirmake -f Supprimés Maildir
Redémarrer les processus de Courrier pour appliquer les réglages :
find /etc/init.d/ | grep courier | while read line; do $line restart; done
Création d'un compte mail
Avec ce système, les comptes de messagerie sont les mêmes que ceux de Linux.
On crée tout d'abord le compte :
useradd utilisateur
On l'ajoute au groupe sasl, c'est à dire le groupe qui peut s'authentifier au serveur SMTP :
adduser utilisateur sasl
On lui crée son espace de stockage pour ses mails, en le rendant propriétaire de son dossier perso :
mkdir -p /home/utilisateur cd /home/utilisateur maildirmake Maildir chown utilisateur:sasl /home/utilisateur
Ne pas oublier de lui définir un mot de passe :
passwd utilisateur
Et c'est terminé !
L'adresse mail de l'utilisateur est composée de son nom d'utilisateur (login) suivi d'un arobase (@) puis du nom de domaine utilisé avec postfix. Ici notre utilisateur aura l'adresse
utilisateur@nocterie.local.
Configuration du client mail
Pour configurer un compte de messagerie dans un client mail standard tel qu'Outlook ou Thunderbird, il suffit de renseigner l'adresse mail, l'identifiant et le mot de passe du compte, ainsi que le protocole de boîte à lettre utilisé (IMAP) et l'adresse du serveur mail :
On peut faire un test lors de la configuration dans Outlook pour vérifier que cela fonctionne :




