Dans la suite de ce tutoriel, nous allons utiliser les caractéristiques suivantes (à adapter selon votre configuration) :
Pour modifier le nom d'hôte, exécutez la commande suivante (n'oubliez pas de remplacer “hostname” par le nom d'hôte de votre serveur) :
echo **mail** > /etc/hostname
Pour modifier le FQDN, il faut editer le fichier /etc/hosts :
# vi /etc/hosts
127.0.0.1 localhost.localdomain localhost IP DU SERVEUR smtp.dams.ovh mail
Redémarrez le serveur pour prendre en compte le changement de nom d'hôte. Ensuite il faut associer le FQDN avec l'adresse IP de votre serveur. Pour cela, vous devez mettre à jour le fichier de zone de votre domaine depuis le site de votre registrar (OVH).
Le plus important dans cette partie, c'est de faire pointer le FQDN ET le MX vers l'adresse IP de votre serveur. L'enregistrement MX permet de déterminer vers quel serveur un email doit être acheminé, si quelqu'un vous envoie un message depuis Gmail par exemple, les serveurs de google vont automatiquement interroger cette entrée pour savoir où transmettre le message. Donc si cette entrée n'est pas ou mal définie, vous ne recevrez jamais d'emails.
On commence par installer Postfix avec le support de mysql. Les domaines, comptes utilisateurs et alias seront ainsi gérés directement au sein d'une base de données, que vous pourrez administrer grâce à vos outils habituels, comme phpMyAdmin par exemple.
apt-get install postfix postfix-mysql
Lors de l'installation de Postfix, vous devez choisir le type du serveur de messagerie, choisissez “Site Internet” pour utiliser SMTP. Ensuite une autre fenêtre apparaît et vous demande le nom du système de mail, entrez alors le FQDN de votre serveur.
mysql -u root -p
CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON `postfix`.* TO 'postfix'@'localhost';
FLUSH PRIVILEGES;
EXIT;
PostfixAdmin est une interface web qui permet de gérer simplement vos domaines, vos adresses virtuelles ainsi que vos alias. Dès que vous aurez besoin d'une nouvelle adresse email, c'est par cette interface qu'il faudra passer.
Il faut dans un premier temps télécharger l'archive la plus récente et la décompresser sur le serveur :
cd /var/www wget http://downloads.sourceforge.net/project/postfixadmin/postfixadmin/postfixadmin-3.2/postfixadmin-3.2.tar.gz tar -xzf postfixadmin-3.2.tar.gz mv postfixadmin-3.2 postfixadmin rm -rf postfixadmin-3.2.tar.gz chown -R www-data:www-data postfixadmin apt-get install php5-imap
Editez le fichier de configuration et modifiez les paramètres suivants :
# vim /var/www/postfixadmin/config.inc.php
$CONF['configured'] = true;
$CONF['default_language'] = 'fr';
$CONF['database_type'] = 'mysqli';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'MOT DE PASSE';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'admin@dams.ovh';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['fetchmail'] = 'NO';
Ajouter un nouveau virtual host Nginx (à adapter selon votre configuration) :
# vim /etc/nginx/sites-enabled/postfixadmin.conf
server { listen 80; server_name postfixadmin.dams.ovh; root /var/www/postfixadmin; index index.php; charset utf-8; location / { try_files $uri $uri/ index.php; } location ~* \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
Redémarrez Nginx pour prendre en compte le nouveau vhost :
service nginx restart
Lancez l'assistant d'installation de PostfixAdmin à l'adresse suivante et suivez les indications :
http://postfixadmin.dams.ovh/setup.php
Le script créé toutes les tables nécessaires au bon fonctionnement de Postfix. En bas de la page générez le hash du mot de passe d'installation et créez un compte administrateur (exemple : admin@dams.ovh). C'est à partir de ce compte que vous allez gérer toutes vos adresses emails. Attention: admin@dams.ovh n'est qu'un compte administrateur, l'adresse email n'existe pas. Si vous voulez la créer, il faudra passer par postfixadmin, comme on va le voir par la suite.
Il ne vous reste plus qu'à mettre le hash généré par l'assistant dans le fichier config.inc.php :
# vim /var/www/postfixadmin/config.inc.php
$CONF['setup_password'] = 'HASH';
Vous pouvez maintenant vous connecter via le formulaire de connexion :
http://postfixadmin.dams.ovh/login.php
On va commencer par ajouter un nouveau domaine, dans notre exemple il s'agit de dams.ovh :
Et une adresse email, exemple damien@dams.ovh :
Voila, vous avez ajouté votre première adresse email, like a boss, maintenant on va passer aux choses sérieuses.
Maintenant nous allons devoir configurer Postfix pour qu'il prenne en charge correctement les connexions SMTP et l'envoie des messages sur le réseau pour chaque utilisateur créé via PostfixAdmin.
Faites une sauvegarde du fichier de conf de Postfix :
cp /etc/postfix/main.cf /etc/postfix/main.cf.bak Ce fichier de configuration est assez complexe, on va voir ensemble comment le configurer correctement. J'ai séparé par bloc de configuration pour que ça soit plus facile à comprendre. Vous retrouverez à la fin de cette section l'ensemble de la configuration de Postfix, n'hésitez pas à faire un diff avec le votre pour voir si vous n'avez pas fait d'erreur.
On va commencer par définir quelques règles (restrictions) au niveau du protocole SMTP afin de sécuriser les échanges et avoir un cadre plus restrictif lors de l'envoie des emails. Attention un client mail mal configuré ou obsolète peut ne pas fonctionner avec cette configuration, à vous d'adapter la configuration en fonction de vos besoins.
# vim /etc/postfix/main.cf
# Règles sur les adresses de destination # permit_sasl_authenticated : Accepter la connexion lorsque le client est authentifié # reject_non_fqdn_recipient : Refuser les adresses de destinations invalides (non FQDN) smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unauth_destination, reject_unknown_recipient_domain, reject_rbl_client zen.spamhaus.org # Règles sur l'échange HELO qui survient avant la connexion # reject_invalid_helo_hostname : Refuser les échanges HELO invalides # reject_non_fqdn_helo_hostname : Refuser les noms d'hôte invalides (non FQDN) # reject_unknown_helo_hostname : Refuser les noms d'hôte qui n'ont pas de champ DNS A ou MX dans leurs DNS. smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, # reject_unknown_helo_hostname # Règles de connexion des clients # permit_sasl_authenticated : Accepter la connexion lorsque le client est authentifié # reject_plaintext_session : Refuser les connexions non sécurisées # reject_unauth_pipelining : Refuser les défauts lors de la connexion smtpd_client_restrictions = permit_mynetworks, permit_inet_interfaces, permit_sasl_authenticated, # reject_plaintext_session, # reject_unauth_pipelining # Règles sur les expéditeurs # reject_non_fqdn_sender : Refuser les expéditeurs invalides (non FQDN) # reject_unknown_sender_domain : Refuser les expéditeurs qui n'ont pas de champ DNS A ou MX dans leurs DNS. # reject_sender_login_mismatch : Refuser les expéditeurs locaux non authentifiés smtpd_sender_restrictions = reject_non_fqdn_sender, reject_unknown_sender_domain, reject_sender_login_mismatch
Ensuite nous allons définir les paramètres de chiffrement via TLS :
# Smtp ( OUTGOING / Client ) smtp_tls_loglevel = 1 smtp_tls_security_level = may smtp_tls_CAfile = /etc/ssl/certs/ca.cert.pem smtp_tls_protocols = !SSLv2, !SSLv3 smtp_tls_mandatory_protocols = !SSLv2, !SSLv3 smtp_tls_mandatory_ciphers = high smtp_tls_exclude_ciphers = aNULL, eNULL, EXPORT, DES, 3DES, RC2, RC4, MD5, PSK, SRP, DSS, AECDH, ADH smtp_tls_note_starttls_offer = yes # --------------------------------------------------------------------------------------------------- # Smtpd ( INCOMING / Server ) smtpd_tls_loglevel = 1 smtpd_tls_auth_only = yes smtpd_tls_security_level = may smtpd_tls_received_header = yes smtpd_tls_protocols = !SSLv2, !SSLv3 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3 smtpd_tls_mandatory_ciphers = medium # Infos (voir : postconf -d) # Medium cipherlist = aNULL:-aNULL:ALL:!EXPORT:!LOW:+RC4:@STRENGTH # High cipherlist = aNULL:-aNULL:ALL:!EXPORT:!LOW:!MEDIUM:+RC4:@STRENGTH # smtpd_tls_exclude_ciphers = NE PAS modifier cette directive pour des raisons de compatibilité # avec les autres serveurs de mail afin d'éviter une erreur du type # "no shared cipher" ou "no cipher overlap" puis un fallback en # plain/text... # smtpd_tls_cipherlist = Ne pas modifier non plus ! smtpd_tls_CAfile = $smtp_tls_CAfile smtpd_tls_cert_file = /etc/ssl/certs/mailserver.crt smtpd_tls_key_file = /etc/ssl/private/mailserver.key smtpd_tls_dh1024_param_file = $config_directory/dh2048.pem smtpd_tls_dh512_param_file = $config_directory/dh512.pem tls_preempt_cipherlist = yes tls_random_source = dev:/dev/urandom smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache lmtp_tls_session_cache_database = btree:${data_directory}/lmtp_scache
Si vous n'avez pas de certificat SSL, exécutez les commandes suivantes pour en générer un (attention il s'agira d'un certificat auto-signé par votre propre autorité de certification) :
cd /etc/ssl/
openssl genrsa -out ca.key.pem 4096 openssl req -x509 -new -nodes -days 1460 -sha256 -key ca.key.pem -out ca.cert.pem Country Name (2 letter code) [AU]: FR State or Province Name (full name) [Some-State]: France Locality Name (eg, city) []: Paris Organization Name (eg, company) [Internet Widgits Pty Ltd]: Corp Ltd Organizational Unit Name (eg, section) []: Certificate Authority Common Name (e.g. server FQDN or YOUR name) []: Root CA
openssl genrsa -out mailserver.key 4096 openssl req -new -sha256 -key mailserver.key -out mailserver.csr Country Name (2 letter code) [AU]: FR State or Province Name (full name) [Some-State]: France Locality Name (eg, city) []: Paris Organization Name (eg, company) [Internet Widgits Pty Ltd]: Corp Ovh Organizational Unit Name (eg, section) []:Mail server Common Name (e.g. server FQDN or YOUR name) []: Dams
openssl x509 -req -days 1460 -sha256 -in mailserver.csr -CA ca.cert.pem -CAkey ca.key.pem -CAcreateserial -out mailserver.crt chmod 444 ca.cert.pem chmod 444 mailserver.crt chmod 400 ca.key.pem chmod 400 mailserver.key mv ca.key.pem private/ mv ca.cert.pem certs/ mv mailserver.key private/ mv mailserver.crt certs/
Création des paramètres Diffie-Hellman :
openssl dhparam -out /etc/postfix/dh2048.pem 2048 openssl dhparam -out /etc/postfix/dh512.pem 512
Ensuite nous allons définir les paramètres de connexion via SASL (fichier main.cf de postfix) :
# Paramètres de connexion SASL # C'est ici que l'on déclare Dovecot comme une passerelle pour authentifier les utilisateurs. # Postfix peut s'appuyer sur Dovecot pour identifier les connexions SMTP. smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_security_options = noanonymous smtpd_sasl_tls_security_options = $smtpd_sasl_security_options smtpd_sasl_local_domain = $mydomain smtpd_sasl_authenticated_header = yes broken_sasl_auth_clients = yes
Maintenant on va s'occuper de la gestion et du stockage des emails. Dans la suite de ce tutoriel nous allons créer un utilisateur nommé vmail avec UID/GID de 5000, avec un HOME par défaut pointant sur /var/mail. Postfix doit le savoir donc on lui indique avec les 4 paramètres suivants :
virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_minimum_uid = 5000 virtual_mailbox_base = /var/mail
Les 4 règles suivantes permettent à Postfix de savoir comment se connecter et lire la base de donnée afin de récupérer des informations sur les différents domaines, adresses virtuelles et alias. Nous allons détailler le contenu de ces 4 fichiers juste après.
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 smtpd_sender_login_maps = mysql:/etc/postfix/mysql-sender-login-maps.cf
Le paramètre virtual_transport est très très important, il permet à Postfix de savoir où envoyer les emails reçus. Dans notre cas, on utilise le protocole LMTP pour les acheminer jusqu'à Dovecot :
virtual_transport = lmtp:unix:private/dovecot-lmtp
Il ne reste plus qu'à definir les paramètres généraux. N'oubliez pas de modifier la valeur de myhostname et myorigin en indiquant votre FQDN.
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no readme_directory = no delay_warning_time = 4h mailbox_command = procmail -a "$EXTENSION" recipient_delimiter = + disable_vrfy_command = yes message_size_limit = 502400000 mailbox_size_limit = 1024000000 inet_interfaces = all inet_protocols = ipv4 myhostname = smtp.dams.ovh myorigin = smtp.dams.ovh mydestination = localhost localhost.$mydomain mynetworks = 127.0.0.0/8 relayhost = alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases
C'est terminé pour le fichier de configuration principale, je vous l'accorde il y a pas mal de paramètres à prendre en compte mais dans le cas d'un serveur SMTP c'est pas étonnant. Vous pouvez aller voir la documentation de Postfix si vous voulez avoir plus d'informations sur sa configuration. http://www.postfix.org/postconf.5.html
On peut maintenant créer les 4 fichiers de configuration qui vont permettre à Postfix d’interagir avec MySQL :
# vim /etc/postfix/mysql-virtual-mailbox-domains.cf
hosts = 127.0.0.1
user = postfix
password = MOT DE PASSE
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = 0 and active = 1
# vim /etc/postfix/mysql-virtual-mailbox-maps.cf
hosts = 127.0.0.1
user = postfix
password = MOT DE PASSE
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = 1
# vim /etc/postfix/mysql-virtual-alias-maps.cf
hosts = 127.0.0.1
user = postfix
password = MOT DE PASSE
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = 1
# vim /etc/postfix/mysql-sender-login-maps.cf
hosts = 127.0.0.1
user = postfix
password = MOT DE PASSE
dbname = postfix
query = SELECT username FROM mailbox WHERE username='%s' AND active = 1
Si vous voulez activer le port 587 pour vous connecter de manière sécurisé par SMTPS avec n'importe quel client mail, il faut décommenter/modifier les lignes suivantes dans le fichier /etc/postfix/master.cf :
submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_dh1024_param_file=${config_directory}/dh2048.pem -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject
Et n'oubliez pas de décommentez cette ligne aussi si ce n'est pas déjà fait :
smtp inet n - - - - smtpd
apt-get install dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql
Ajoutez la liste des protocoles activés après l'instruction “!include_try” dans le fichier /etc/dovecot/dovecot.conf. Dans notre cas, nous allons activer IMAP pour la récupération des emails via le port 993 et LMTP pour l'acheminement des emails entre Postfix et Dovecot :
# vim /etc/dovecot/dovecot.conf !include_try /usr/share/dovecot/protocols.d/*.protocol protocols = imap lmtp listen = * # Assurez-vous que cette ligne est bien décommentée : !include conf.d/*.conf
On indique le chemin du conteneur local qui contiendra tous nos emails. Editez le fichier 10-mail.conf :
# vim /etc/dovecot/conf.d/10-mail.conf # Le contenur local est organisé de cette manière : # /var/mail/vhosts/dams.ovh/utilisateur mail_location = maildir:/var/mail/vhosts/%d/%n/mail maildir_stat_dirs=yes namespace inbox { inbox = yes } mail_uid = 5000 mail_gid = 5000 first_valid_uid = 5000 last_valid_uid = 5000 mail_privileged_group = vmail
Les emails seront stockés dans le répertoire /var/mail. On doit donc créer un répertoire correspondant à notre domaine (celui qui est présent dans la table domain).
mkdir -p /var/mail/vhosts/dams.ovh
Maintenant on ajoute un nouvel utilisateur et un nouveau groupe nommé vmail avec un UID/GID de 5000 :
groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/mail chown -R vmail:vmail /var/mail
Editer le fichier 10-auth.conf et modifier les lignes suivantes :
# vim /etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = yes auth_mechanisms = plain login #!include auth-system.conf.ext # Commenter cette ligne !include auth-sql.conf.ext # décommenter cette ligne
Maintenant on va définir deux méthodes qui vont permettrent à Dovecot de savoir comment obtenir les utilisateurs et les mots de passe correspondants lors de la connexion. Editez le fichier auth-sql.conf.ext :
# vim /etc/dovecot/conf.d/auth-sql.conf.ext # Le mot de passe est obtenu à partir de la base de donnée passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } # Par contre le nom d'utilisateur est obtenu de manière statique à partir du conteneur local # %d = dams.ovh # %n = utilisateur userdb { driver = static args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n }
Ensuite editez le fichier dovecot-sql.conf.ext et modifiez les paramètres suivants :
# vim /etc/dovecot/dovecot-sql.conf.ext
# Paramètres de connexion
driver = mysql
connect = host=127.0.0.1 dbname=postfix user=postfix password=MOT DE PASSE
# Permet de définir l'algorithme de hachage.
# Pour plus d'information: http://wiki2.dovecot.org/Authentication/PasswordSchemes
# /!\ ATTENTION : ne pas oublier de modifier le paramètre $CONF['encrypt'] de PostfixAdmin
default_pass_scheme = MD5-CRYPT
# Requête de récupération du mot de passe du compte utilisateur
password_query = SELECT password FROM mailbox WHERE username = '%u'
Modifiez les permissions sur le répertoire /etc/dovecot :
chown -R vmail:dovecot /etc/dovecot chmod -R o-rwx /etc/dovecot
Editer le fichier 10-master.conf avec le contenu suivant :
# vim /etc/dovecot/conf.d/10-master.conf service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } service_count = 0 } service imap { } service lmtp { # On autorise Postfix à transférer les emails dans le spooler de Dovecot via LMTP unix_listener /var/spool/postfix/private/dovecot-lmtp { mode = 0600 user = postfix group = postfix } } service auth { # On autorise Postfix à se connecter à Dovecot via LMTP unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } # On indique à Dovecot les permissions du conteneur local unix_listener auth-userdb { mode = 0600 user = vmail group = vmail } user = dovecot } service auth-worker { user = vmail }
Enfin, editez le fichier 10-ssl.conf et modifiez les paramètres suivants :
# vim /etc/dovecot/conf.d/10-ssl.conf ssl = required ssl_cert = </etc/ssl/certs/mailserver.crt ssl_key = </etc/ssl/private/mailserver.key ssl_protocols = !SSLv3 ssl_cipher_list = ALL:!aNULL:!eNULL:!LOW:!MEDIUM:!EXP:!RC2:!RC4:!DES:!3DES:!MD5:!PSK:!SRP:!DSS:!AECDH:!ADH:@STRENGTH ssl_prefer_server_ciphers = yes # Dovecot > 2.2.x ssl_dh_parameters_length = 2048 # Dovecot > 2.2.x
Si un jour vous oubliez le mot de passe du compte administrateur, cette procédure permet de le changer :
# On génère le hash correspondant au mot de passe doveadm pw -s MD5-CRYPT -p MOT_DE_PASSE | sed 's/{MD5-CRYPT}//' mysql -u root -p mysql> connect postfix mysql> UPDATE admin SET password = 'HASH' WHERE username = 'admin@domain.tld'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> quit
On redémarre Postfix et Dovecot :
service postfix restart service dovecot restart
Puis on vérifie que les ports 25 (SMTP), 587 (SMTPS) et 993 (IMAPS) sont bien en écoute sur 0.0.0.0. N'oubliez pas de les ouvrir au niveau de votre Firewall :
netstat -ptna [...] tcp 0 0 0.0.0.0:25 0.0.0.0: LISTEN 4995/master tcp 0 0 0.0.0.0:587 0.0.0.0: LISTEN 4995/master tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 5030/dovecot [...]
On peut faire un petit essai via telnet avec la commande suivante depuis le serveur :
telnet localhost 25 # Puis faites lui un petit coucou <3 ehlo localhost
Normalement si tout se passe bien, vous allez obtenir la réponse suivante :
250-hostname.domain.tld 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
Si vous voyez 250-STARTTLS, c'est que le serveur supporte bien l'authentification par STARTTLS.
La configuration du client mail reste relativement simple, il ne faut juste pas se tromper de port :
serveur de reception IMAP : smtp.dams.ovh | le port est 993 chiffrement SSL/TLS serveur d'envoi SMTP : smtp.dams.ovh | le port est 587 chiffrement STARTTLS
On va regarder les logs pour pour voir si il n'y a pas de soucis au niveau de la configuration du serveur mail.
Premier test : connexion via IMAP
Pour réaliser ce test, vous avez juste à ouvrir votre client mail pour que la connexion se fasse. En même temps, exécutez la commande suivante sur votre serveur :
tail -f /var/log/mail.log
Si vous avez les deux lignes suivantes c'est que la connexion IMAP/TLS est OK (ouf 😛)
Aug 16 19:37:11 hostname dovecot: auth-worker(xxx): mysql(127.0.0.1): Connected to database postfix
Aug 16 19:37:11 hostname dovecot: imap-login: Login: user=<damien@dams.ovh>, method=PLAIN, rip=ADRESSE IP
CLIENT, lip=ADRESSE IP SERVEUR, mpid=xxx, TLS, session=<xxxxxxxx>
Deuxième test : envoie par SMTP
Si vous avez les lignes suivantes dans le fichiers mail.log, c'est que la connexion SASL et l'envoie par SMTPS sont OK (ça c'est cool :lol)🙂
Aug 16 19:54:13 hostname postfix/submission/smtpd[xxx]: connect from [VOTRE ADRESSE IP] Aug 16 19:54:14 hostname dovecot: auth-worker(xxx): mysql(127.0.0.1): Connected to database postfix Aug 16 19:54:14 hostname postfix/submission/smtpd[xxx]: client=[VOTRE ADRESSE IP], sasl_method=PLAIN, sasl_username=damien.cel@gmail.com Aug 16 19:54:15 hostname postfix/smtp[xxx]: to=<damien@dams.ovh>, relay=[ADRESSE IP RELAI]:25, status=sent (250 OK)
Troisième test : réception par IMAP
Si vous avez les lignes suivantes dans le fichiers mail.log, c'est que la réception par IMAP et le transfert de l'email par LMTP sont bons aussi.
Aug 16 20:04:58 hostname postfix/smtpd[xxx]: Anonymous TLS connection established from smtp.dams.ovh: TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits) Aug 16 20:05:00 hostname postfix/qmgr[xxx]: from=<damien@dams.ovh>, size=1748, nrcpt=1 (queue active) Aug 16 20:05:01 hostname dovecot: lmtp(xxx, damien.cel@gmail.com): saved mail to INBOX Aug 16 20:05:01 hostname postfix/lmtp[xxx]: to=<damien.cel@gmail.com>, relay=smtp.dams.ovh[private/dovecot-lmtp], status=sent (250 2.0.0 <damien.cel@gmail.com> Saved)
Allez sur ce site : http://www.mail-tester.com/ et envoyez un email à l'adresse indiquée en page d'accueil et vérifiez votre score. Normalement il ne devrait pas être suffisant pour que vous puissiez envoyer sereinement vos emails partout dans le monde. La première fois, je me suis pris 2.6/10
Vous obtiendrez la note maximum, si et seulement si :
DKIM est un standard permettant d'associer de manière forte une entité ou une organisation avec un domaine au sein d'un email. On se déclare donc complètement responsable de la transmission du message sur le réseau. DKIM fonctionne par cryptographie asymétrique, le MTA (Mail Transfer Agent, dans notre cas il s'agit de Postfix) se charge de signer numériquement tous les emails envoyés avec une clé privée contenue sur le serveur. Le destinataire peut alors vérifier l'intégrité du corps ainsi que les en-têtes du message grâce à la clé publique fournie par le domainkey, qui est un champ TXT contenu dans les fichiers de zone de vos DNS.
On commence par installer OpenDKIM :
apt-get install opendkim opendkim-tools
Editez le fichier de configuration opendkim.conf avec le contenu suivant :
# vim /etc/opendkim.conf AutoRestart Yes AutoRestartRate 10/1h UMask 002 Syslog Yes SyslogSuccess Yes LogWhy Yes OversignHeaders From AlwaysAddARHeader Yes Canonicalization relaxed/simple ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable Mode sv PidFile /var/run/opendkim/opendkim.pid SignatureAlgorithm rsa-sha256 UserID opendkim:opendkim Socket local:/var/spool/postfix/opendkim/opendkim.sock
Pour que Postfix puisse communiquer avec OpenDKIM, on va utiliser un socket, il faut créer le répertoire /var/spool/postfix/opendkim
mkdir /var/spool/postfix/opendkim chown opendkim: /var/spool/postfix/opendkim usermod -aG opendkim postfix
Ensuite on doit indiquer à Postfix comment s'interfacer avec OpenDKIM. Pour cela, editer le fichier main.cf et ajouter les lignes suivantes à fin du fichier de configuration :
# vim /etc/postfix/main.cf milter_protocol = 6 milter_default_action = accept smtpd_milters = unix:/opendkim/opendkim.sock non_smtpd_milters = unix:/opendkim/opendkim.sock
Créér le répertoire suivant :
mkdir -p /etc/opendkim/keys
Ajoutez le fichier TrustedHosts avec le contenu suivant :
# vim /etc/opendkim/TrustedHosts 127.0.0.1 localhost ::1 *.dams.ovh
N'oubliez pas de modifier dams.ovh par votre nom de domaine.
Ajoutez le fichier KeyTable avec le contenu suivant. Dans cet exemple, nous utiliserons un sélecteur nommé mail. Vous pouvez le nommer comme vous le souhaitez.
# vim /etc/opendkim/KeyTable mail._domainkey.dams.ovh dams.ovh:mail:/etc/opendkim/keys/dams.ovh/mail.private
Ajoutez le fichier SigningTable avec le contenu suivant :
# vim /etc/opendkim/SigningTable *@dams.ovh mail._domainkey.dams.ovh
Création de la clé publique et privée
Création du répertoire qui contiendra les clés :
cd /etc/opendkim/keys mkdir dams.ovh && cd dams.ovh
Génération des clés de chiffrement :
# Paramètres : -s [sélecteur] -d [nom de domaine] -b [taille de la clé]
opendkim-genkey -s mail -d dams.ovh -b 1024
Certains registrars n'acceptent pas les clés > 1024 bits donc pensez à changer le paramètre au-dessus si besoin.
Modification des permissions de la clé privée :
chown opendkim:opendkim mail.private
Les permissions doivent être les suivantes (chmod 400) :
ls -lX /etc/opendkim/keys/dams.ovh/ -rw------- 1 opendkim opendkim 887 août 16 11:28 mail.private -rw------- 1 root root 305 août 16 11:28 mail.txt
Modification des DNS : Ajout de la clé publique
Copiez le contenu du fichier mail.txt (la clé publique) :
cat mail.txt
Le format de l'enregistrement DKIM est comme ceci :
mail._domainkey IN TXT "v=DKIM1; k=rsa; p=VOTRE CLE PUBLIQUE"
Et pour finir, on redémarre tous les services :
service postfix restart service dovecot restart service opendkim restart
Vous pouvez exécuter les commandes suivantes pour que les services démarrent automatiquement lors du boot :
update-rc.d postfix defaults update-rc.d dovecot defaults update-rc.d opendkim defaults
ou (suivant votre version de Debian)
systemctl enable postfix.service systemctl enable dovecot.service systemctl enable opendkim.service
Attendez quelques minutes la propagation des DNS. Vous pouvez vérifier que le champ domainkey est bien visible en exécutant la commande suivante à partir de votre pc :
host -t TXT mail._domainkey.dams.ovh
Si elle retourne ce message :
Host mail._domainkey.dams.ovh not found: (NXDOMAIN)
C'est que vos DNS ne se sont pas encore propagés sur les serveurs de votre FAI, patientez encore un peu.
Pour tester le bon fonctionnement d'OpenDKIM, utilisez le site que l'on a vu tout à l'heure : http://www.mail-tester.com/
Wikipédia : Sender Policy Framework (SPF) est une norme de vérification du nom de domaine de l'expéditeur d'un courrier électronique, normalisé dans la RFC 7208. L'adoption de cette norme est de nature à réduire le spam.
Ajoutez cette ligne dans le fichier de zone de votre nom de domaine :
@ IN TXT "v=spf1 a mx ip4:ADRESSE IP DE VOTRE SERVEUR ~all"
Vous pouvez maintenant refaire un test sur ce site : http://www.mail-tester.com/
Si tout est bon, vous devriez avoir 10/10 :
DMARC est une spécification technique assez récente (2011), qui est toujours en draft par l'IETF https://datatracker.ietf.org/doc/rfc7489/, les contributeurs initiaux sont un consortium de plusieurs géants d'internet comme AOL, Yahoo, Google, Microsoft, Paypal, Facebook…etc. Cette spécification permet de réduire l'usage abusif des e-mails, tels que le spam, le phishing en ajoutant une couche supplémentaire dans le processus d'authentification des mails.
En fait ce mécanisme utilise DKIM et SPF et permet d'informer les autres fournisseurs de mail des actions à entreprendre lorsqu'ils reçoivent un mail provenant de notre domaine. C'est peut-être pas très clair dit comme ça, mais c'est pas compliqué, prenons un exemple :
Vous envoyez un mail à partir de votre adresse @dams.ovh à un amis qui est chez Gmail. Google vas donc utiliser DMARC et demander à votre serveur ce qu'il doit faire lorsqu'il reçoit un mail appartenant à votre domaine. Votre serveur répond qu'il doit vérifier la validité de DKIM et SPF, si tout est valide le mail est envoyé au destinataire sinon il est soit mis en quarantaine (dossier spam), soit il n'est pas du tout envoyé (blocké au niveau de la couche smtp).
Voici un ptit schéma :
Les règles de DMARC sont stockés dans un enregistrement de type TXT dans le fichier de zone de votre nom de domaine, exemple :
NE PAS METTRE L'ENREGISTREMENT DMARC SI VOUS N'ÊTES PAS CERTAIN DU FONCTIONNEMENT DE SPF ET DKIM. SINON LES FOURNISSEURS DE MAILS QUI RESPECTENT LES IDENTIFICATEURS D'ALIGNEMENT DMARC (GMAIL, MICROSOFT ENTRE AUTRE) VONT BLOQUER VOTRE DOMAINE PAR PRÉCAUTION. SI VOUS NE COMPRENEZ PAS À QUOI ÇA SERT, NE LE METTEZ PAS !
_dmarc IN TXT " v=DMARC1; p=reject; rua=mailto:postmaster@dams.ovh; ruf=mailto:admin@dams.ovh; adkim=s; aspf=s; pct=100; rf=afrf; sp=reject "
Pour plus de clarté, j'ai sauté une ligne après chaque paramètre, mettez tout sur une ligne dans votre fichier de zone. Bon quelques explications s'imposent par rapport aux paramètres non ?
L'implémentation côté serveur est sensiblement similaire à OpenDKIM.
apt-get install opendmarc
Editer le fichier de configuration opendmarc.conf avec le contenu suivant :
# vim /etc/opendmarc.conf AutoRestart Yes AutoRestartRate 10/1h UMask 0002 Syslog true AuthservID "smtp.dams.ovh" TrustedAuthservIDs "smtp.dams.ovh" IgnoreHosts /etc/opendkim/TrustedHosts IgnoreMailFrom "dams.ovh" RejectFailures false UserID opendmarc:opendmarc PidFile /var/run/opendmarc/opendmarc.pid Socket local:/var/spool/postfix/opendmarc/opendmarc.sock
Pour que Postfix puisse communiquer avec Opendmarc, on va utiliser un socket, il faut créer le répertoire /var/spool/postfix/opendmarc
mkdir /var/spool/postfix/opendmarc chown opendmarc: /var/spool/postfix/opendmarc usermod -aG opendmarc postfix
Ensuite dans le fichier /etc/postfix/main.cf, editer cette ligne :
smtpd_milters = unix:/opendkim/opendkim.sock, unix:/opendmarc/opendmarc.sock
Démarrage auto au boot de la VM
systemctl enable opendmarc.service
Puis on redémarre les services :
systemctl restart opendmarc systemctl restart postfix