====== 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** :
{{ ::config_site_internet_postfix.png?600 |Choix du type de configuration de PostFix}}
Puis indiquer le domaine de messagerie à utiliser :
{{ ::config_site_internet_postfix2.png?600 |Renseignement du nom de courrier}}
===== 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 <> et <> : 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'
postconf -e 'smtp_tls_policy_maps = hash:/etc/postfix/tls_policy'
Afin que SMTP-TLS vérifie bien le domaine, créer le fichier ''/etc/postfix/tls_policy'' contenant :
nocterie.local verify
:!: ''nocterie.local'' doit être remplacé par le nom du domaine à vérifier.
Appliquer les changements avec :
postmap /etc/postfix/tls_policy
chgrp postfix /etc/postfix/tls_policy*
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 '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=no'' en ''START=yes''
* ''OPTIONS="-c -m /var/run/saslauthd"'' en ''OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"''
Enfin, créer le fichier ''/etc/pam.d/smtp'' contenant :
auth required pam_mysql.so user=postfix passwd=password host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=2
account sufficient pam_mysql.so user=postfix passwd=password host=localhost db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=2
===== 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 userpassword -s smtp -f /var/spool/postfix/var/run/saslauthd/mux
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" :
{{ ::courrier_rep_web_yes.png?600 |Faut-il créer les répertoires web}}
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 =====
Ouvrir la console MySQL et créer l'utilisateur en ajoutant différentes entrées :
use postfix;
INSERT INTO domain (domain,description) VALUES ('domain.tld','Test Domain');
INSERT INTO alias (address,goto) VALUES ('alias@domain.tld', 'test@domain.tld');
INSERT INTO mailbox (username,password,name,maildir) VALUES ('test@domain.tld',ENCRYPT('userpassword'),'Mailbox User','test@domain.tld/');
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 :
{{ ::config_client_mail_utilisateur.png?600 |configuration d'un compte mail dans le client de messagerie}}
On peut faire un test lors de la configuration dans Outlook pour vérifier que cela fonctionne :
{{ ::checkimaputilisateur.png?600 |Vérification des paramètres de connexion au compte}}