Création d'un service mail
Article publié le :
Introduction
Nous allons mettre en œuvre un service mail complet sous Debian 9. Cela peut servir si vous
souhaitez contrôler
l'intégrité de vos données. De plus, cela peut également être utile lorsque vous avez des
formulaires HTML et PHP pour
l'envoi d'e-mails sur votre site internet.
Ici j'utilise un nom de domaine acheté chez OVH et un VPS de chez OVH également. Vous pouvez
noter qu'il est tout à fait
possible d'utiliser un nom de domaine de chez OVH tout en utilisant un VPS d'un autre
fournisseur.
Les besoins techniques :
- Posséder un nom de domaine.
- Avoir accès aux paramètres DNS du domaine.
- Un serveur sous Debian, ici la version 9.
- Une adresse IP fixe venant de votre FAI si vous le faites en local, si vous utilisez un VPS, vous pouvez oublier cette option.
- Et avoir de la patience ...
Les parties :
- Installation des logiciels nécessaires
- Configuration et installation de Postfix et Postfixadmin
- Service d'authentification de la messagerie
- Sécuriser les services
- Configuration de l’IMAP
- Configuration et installation d'une webmail
- Enregistrement DNS
- Conclusion
- Envoi du premier mail en ligne de commande.
- Les sources
Installation des logiciels Nécessaires
Nous allons tout d'abord mettre à jour notre système avant de commencer toutes
manipulations sur ce dernier. Pour cela nous devons entrer la
commande suivante :
apt-get update
Maintenant que nous avons mis à jour notre système nous allons intaller les logiciels
suivants :
- Un logiciel serveur mysql pour la gestion des mails et des domaines.
- Postfix pour le logiciel mail serveur.
- Postfixadmin pour gérer avec une interface graphique les domaines et les adresses mails.
- OpenDkim pour l'authentification du serveur mail auprès des autres services mails.
- Courrier afin de pouvoir utiliser une webmail et un client mail tel Outlook.
- Apache2 afin d'installer une webmail sur ce dernier.
- Rainloop comme webmail. Il existe également un autre service qui se nomme Roundcube.
Dans un premier temps nous allons installer le serveur SQL, Apache2. Pour cela nous allons taper la commande suivante :
apt-get install mysql-server apache2 unzip mailutils
sudo apt-get install php5-curl
Configuration et intallation de Postfix et Postfixadmin
Postfix
Nous allons tout d'abord installer Postfix, pour cela vous devez noterapt-get
install postfix
.
L'installation de ce logiciel est assez simple. Vous devez obtenir par la suite une
fenêtre identique à celle-ci :
Nous allons ici choisir l'option par défaut, autrement dit, l'option "Internet Site". Celle-ci va nous permettre de configurer un tout nouveau serveur de mail. Ensuite, nous devons entrer notre nom de domaine comme illusté. Cela va permettre de définir en premier lieu le nom de domaine qui sera affiché après le @.
Maintenant que nous venons d'installer postfix, nous devons le configurer. Tout d'abord, nous allons devoir modifier le nom du serveur en renomant hostname, pour cela nous allons faire
nano /etc/hostname
. Nous allons également modifier le fichier hosts
en remplaçant les données existante. Pour se faire nous allons faire nano
/etc/hosts
. Une fois fait cela, nous aurons besoin de
de redémarer notre serveur ou VPS. Vous pouvez pour cela utiliser la commande reboot.
Configuration de postfix
Maintenant nous pouvons procéder à la configuration de postfix. Pour cela nous allons devoir ajouter quelques lignes dans le fichier main.cf qui se trouve dans le le répertoire de postfix. Nous allons donc taper :
nano /etc/postfix/main.cf
puis ajouter les lignes suivantes :
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:12345
non_smtpd_milters = inet:localhost:12345
Postfixadmin
Nous allons désormais installer Postfixadmin, ce logiciel va nous permettre de
gérer nos domaines e-mail et les adresses mails.
Pour cela nous allons entrer la commande suivante :
- apt-get install postfixadmin
Par la suite nous devons accepter bien évidemment comme pour les autres installations,
toutes les demandes particulières pour une installation
optimale.
Vous faites oui, puis vous continuez l'installation.
Une fois fais, je vous invite à vous rendre à l'adresse suivante : "Votre adresse IP
par exemple 0.0.0.0/postfixadmin/setup.php"
Vous serez donc amener à changer votre mot de passe setup, et remplacer la ligne $conf=['setup_password']
par le champ rouge qui apparait comme suit, dans le fichier
/etc/postfixadmin/config.inc.php. Vous renseigner après, toujours dans
l'interface web, une adresse mail administrateur et son mot de passe.
Une fois fait, vous devez vous rendre à l'adresse suivante pour gérer vos domaine et
vos adresses mails :
"Votre adresse IP par exemple 0.0.0.0/postfixadmin/login.php". Pour vous
connecter, il suffit de renseigner les champs et les mots de passe que vous venez
de définir sur la page setup.php de postfix.
Service d'authentification de la messagerie
Qu’est-ce que le service SPF, DKIM et DMARC ?
SPF
Cette technique permet d’authentifier l’émetteur d’un message électronique. Pour vérifier le nom de domaine il effectue une requête DNS de type TXT afin de reconnaître la liste des serveurs de messagerie autorisés à émettre des e-mails avec le nom de domaine de l’émetteur.
DKIM
DKIM est une norme d'authentification fiable du nom de domaine de l’expéditeur. Cette
norme est efficace pour lutter contre le spam et l’hameçonnage.
Celle-ci a été développée à l’aide de deux technologies, l’une des deux avait été
développée par Yahoo et l’autre développée par Cisco.
En effet, cette norme fonctionne grâce à une signature cryptographique du message. La
signature permet de vérifier l'authenticité du domaine de
l’expéditeur et garantit donc l’authenticité du message. La vérification de cette
signature se fait grâce à une clef qui se trouve dans la zone DNS
du domaine en question.
Par contre, il faut savoir que le protocole SPF et DKIM ne permet pas d’éviter la
reception des e-mail. C’est donc pour cela que nous avons
activé la vérification des spams.
DMARC
DMARC est un protocole d'authentification de messagerie électronique. Celui-ci s'appuie sur les protocoles SPF et DKIM du serveur mail. Il a pour mission de traiter les authentifications de l’expéditeur, autrement dit, c’est ce protocole qui valide l’envoi des messages. En cas d’échecs d'authentification des destinataires un rapport est envoyé à l’expéditeur pour de l’erreur d'authentification. Il a donc pour but d’améliorer et de surveiller la protection du domaine afin de lutter contre le Phishing.
Installation d'un service d'authentification
Nous allons installer OpenDkim, cet outil nous permettra de réaliser un service
d'authentification. Autrement dit, c'est grâce à ce dernier
que notre serveur sera déclaré comme fiable. En effet, cet outil permettra de mettre en
place une clef public pour DKIM.
Pour cela nous allons tout d'abord installer OpenDkim à l'aide de la commande suivante
:
- apt-get install opendkim opendkim-tools
Nous allns maintenant configurer OpenDkim. Pour ce faire nous allons déplacer le
fichier de configurartion de ce dernier. Pour cela, on créer
un dossier opendkim à la racine. Maintenant nous allons procéder au déplacement
du fichier et faire un lien symbolique entre les deux
fichier. Voici mes commandes :
mkdir /etc/opendkim/
mv /etc/opendkim.conf /etc/opendkim/
ln -s /etc/opendkim/opendkim.conf /etc/opendkim.conf
Il nous faut également dé-commenter la ligne d'écoute du port dans le fichier /etc/default/opendkim. Ces informations ont été établis lors de la configuration de Postfix. Voici une capture d'écran de la configuration :

Il est nécessaire de créer les fichiers TrustedHosts, SigningTable ainsqi que KeyTable, ces fichiers vont nous être utile pour configurer les paramètres d'OpenDkim dans le fichier opendkim.conf. Pour cela nous allons entrer les commandes suivantes :
touch /etc/opendkim/TrustedHosts
touch /etc/opendkim/SigningTable
touch /etc/opendkim/KeyTable
TrustedHosts
Le fichier TrustedHosts permet d’indiquer les hôtes de confiances. Il nous faut donc renseigner notre adresse IP, le nom de domaine, ainsi que localhost. Il nous faudra clôre ce fichier par *.nom_de_domaine, cela permet d'autoriser tous les sous-domaines du FKDN à utiliser cette enregistrement d'OpenDkim. Voici comment faire :nano /etc/opendkim/TrustedHosts
. Les informations à entrer sont les
suivantes, bien évidemment les commentaires
après # ne sont pas à entrer :
127.0.0.1 #adresse IP local.
localhost #nom local.
domaine.com #votre nom de domaine.
*.domaine.com #autorisation de tous les sous-domaines.
SigningTable
Configuration du fichier SigningTable.Ce fichier permet d’indiquer au serveur que toutes les adresses e-mail de celui-ci appartiendront au domaine que nous allons définir comme domaine par défaut. Pour le configurer nous tapons la commande
nano
/etc/opendkim/SigningTable
.
Voici les informations que je renseigne à l'intérieur, bien évidemment les commentaires après # ne sont pas à entrer :
*@domaine.com #on renseigne ici le hostname du serveur après le @.
domaine.com #on renseigne ici le nom de domaine qui servira de domaine pour les adresses e-mail.
KeyTable
Configuration du fichier KeyTable.Ce dernier fichier à configurer, avant de passer à la configuration de opendkim.conf, permet de donner une correspondance entre le selecteur, qui est à configurer dans le fichier opendkim.conf (nous le ferons par la suite) et la clef privé d'OpenDkim.
Nous allons commencer par créer la paire de clefs (clef privée et clef publique).
mkdir /etc/opendkim/keys
mkdir /etc/opendkim/keys/domaine.com
cd /etc/opendkim/keys/domaine.com
opendkim-genkey -s mail -d domaine.com
Nous allons maintenant vérifier si elle a bien été créée en faisant un simpl ls. Puis, nous allons utiliser une commande qui s'appelle chown pour donner tous les droits au logiciel pour le fichier que nous avons précédement créé. Nous allons donc taper la commande suivante :
chown opendkim:opendkim mail.private
Maintenant, il nous faut récupérer la clef DKIM, afin de la renseigner au serveur DNS lors de l'enregistrement. Nous terminerons la configuration de notre service par les enregistrements DNS. Il est donc conseillé de copier la clef dans un lieu sûr en attendant. Pour récupéréer cette clef, nous allons utiliser la commande
cat mail.txt
.
La clef qu'il faut copier se situe là :

Pensez à enlever les guillemets, mais égalements les parenthèses et le p=.
Maintenant que l'on a tout fini cette partie, il nous reste plus qu'à modifier le fichier KeyTable.
Pour ce faire nous allons configurer ce fichier en tapant la commande suivante :
nano
/etc/opendkim/KeyTable
.
Voici les informations que je renseigne à l'intérieur, bien évidemment les commentaires après # ne sont pas à entrer :
*@domaine.com #on renseigne ici le hostname du serveur après le @.
domaine.com #on renseigne ici le nom de domaine qui servira de domaine pour les adresses e-mail.
Opendkim.conf
Maintenant, nous allons passer à la configuration complete d'OpenDkim en éditant le fichier opendkim.com. Pour cela nous allons taper la commande suivante
nano /etc/opendkim/opendkim.conf
.
Voici les éléments à modifier en fonction de votre service mail et votre nom de domaine :
Domain = votre-nom-de-domaine.com #décommenter cette ligne en enlevant le #, et renseigner votre FKDN.
KeyFile = /etc/opendkim/keys/domaine.com/mail.private #Il faut décommenter cette ligne. Celle-ci permet d'ajouter et de renseigner au service votre clef privée.
Selector = mail #Il faut décommenter cette ligne et nous rajoutons comme selecteur "mail".
Mode SV #Cette ligne doit être décommentée en enlevant #. Cette ligne permet d'activer la fonction de signature des e-mails et de la vérification de ces derniers.
Voilà, maintenant que nous venons de faire cela, nous devons renseigner les fichiers que nous avons édité précédements. Pour cela, il faut rajouter à la fin du document, les lignes suivantes :
#Our keytable and SingningTable
KeyTable refile:etc/opendkim/KeyTable
SingningTable refile:/etc/opendkim/SingningTable
#Trusted Hosts
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts
UserID opendkim:opendkim
Socket inet:12345@localhost
Sécuriser le service créé
Dans cette partie nous allons voir comment sécuriser les échanges de mail.
Pour cela nous allons mettre en place le protocole TLS pour sécuriser les échanges,
nous mettrons également un système de vérification
pour éviter de recevoir des spams. Nous allons donc mettre en place des filtres pour la
reception des e-mail.
Protocole TLS
Nous allons donc devoir créer des une paire de clefs pour sécuriser et chiffrer nos
échanges.
Cela va permettre de mettre en place un certificat qui va assurer la protection du
serveur mail.
Commençons ! Nous allons donc créer un répertoire qui contiendra notre paire de clefs,
puis nous
nous dirigerons dans ce dernier. Pour cela nous allons taper les commandes suivantes :
mkdir /etc/postfix/ssl
cd /etc/postfix/ssl
Nous allons désormais générer les clefs qui sont necessaires à notre protection. Pour cela nous allons executer les commandes ci-dessous. A savoir, il est important de renseigner le domaine qui correspond au serveur mail pour qu'il prenne effet. AUtrement dit, vous devez entrer dans le Common Name le domaine ou le sous-domaine à protéger.
Voici les commandes à effectuer :
openssl req -nodes -newkey rsa:2048 -keyout /etc/postfix/ssl/postfix.key -out /etc/postfix/ssl/postfix.csr
openssl x509 -req -in /etc/postfix/ssl/postfix.csr -signkey /etc/postfix/ssl/postfix.key -out /etc/postfix/ssl/postfix.crt -days 999
Maintenant nous allons associer ce que nous venons de faire à postfix. Pour cela nous allons taper la commande suivante :
nano /etc/postfix/main.cf
. Nous allons également rajouter les éléments
suivant à la fin du fichier. Pour cela vous
pouvez effectuer un copier coller et enregistrer le fichier.
# Le protocole TLS
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_security_level = may
smtpd_tls_auth_only = no
smtpd_tls_loglevel = 6
smtpd_tls_received_header = yes
smtpd_tls_auth_only = yes
smtp_tls_note_starttls_offer = yes
tls_random_source = dev:/dev/urandom
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# Le certificat et notre paire de clef
smtpd_enforce_tls = no
smtpd_tls_loglevel = 2
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/postfix/ssl/postfix.key
smtpd_tls_cert_file = /etc/postfix/ssl/postfix.crt
Filtre Anti-Spams
Pour mettre en œuvre un controle des e-mails reçu, nous effectuerons des férifications plus poussé. En effet, avec openDKIM, nous vérifions l'authenticité du serveur, mais le contenu peut tout de même être un contenu dit "Indésirable". Pour cela nous allons installer quelques petits outils.
Voici la commande à utiliser pour installer les logiciels qui seront nécéssaires pour établir un filtre anti-spam.
apt-get install amavisd-new spamassassin clamav clamav-daemon arj zoo nomarch cpio lzop cabextract apt-listchanges libauthen-sasl-perl libdbi-perl libmail-dkim-perl p7zip rpm unrar-free libsnmp-perl libdbd-mysql-perl
Il nous faut configurer la liaison entre postfix et ces outils. Pour cela nous allons ajouter quelques petites lignes dans le fichier /etc/postfix/master.cf.
Voici les lignes à rajouter à la fin du fichier :
smtp-amavis unix - - n - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o smtpd_data_restrictions=reject_unauth_pipelining
-o smtpd_end_of_data_restrictions=
-o smtpd_restriction_classes=
-o mynetworks=127.0.0.0/8
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks
-o local_header_rewrite_clients=
Maintenanons rendons nous dans le fichier /etc/postfix/main.cf, pour ajouter ces deux lignes :
content_filter = smtp-amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
Il faut également décommenter les lignes figurant dans la partie grisée si dessous en enlevant #.
- @bypass_virus_checks_maps = (
\%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
- @bypass_spam_checks_maps = (
\%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Nous allons également configurer une la mise en quarantaine pour ne pas que les SPAMS apparraissent dans la boite de reception. Pour cela nous allons créer un répertoire pour leur réception.
mkdir /var/spool/virusmails
chown amavis:amavis /var/spool/virusmails
Nous devons vérifier les droits de ClamAV et Amavis. Pour cela, nous devons avoir cette ligne
AllowSupplementaryGroups true
, dans notre fichier /etc/clamav/clamd.conf.
Pour ne pas mettre à jour manuellement le service spamassassin, je tape la commande suivante
- sa-update -D
. Cela va permettre à ce dernier de se mettre à jour de
façon automatique.
De plus, il faut avoir
ENABLED=1
et CRON=1
dans le fichier /etc/default/spamassassin.
Il ne reste qu'une petite manipulation à faire avant d'avoir finit cette configuration. Nous allons ajouter un utilisateur à un groupe appelé amavis. Il faut tout simplement taper cette commande
adduser
clamav amavis
.
Voilà, votre serveur mail est désormais sécurisé. Il faut cependant redémarer les services généraux pour que les changements prennent effets. Pour cela il suffit d'éxécuter les commandes suivantes :
service spamassassin start
service amavis restart
service clamav-daemon restart
service postfix restart
Configuration de l’IMAP
Configuration à venir. Ce protocole servira pour l'utilisation de la webmail ainsi que pour les clients mails tels "Outlook, Gmail IMAP (sur portable), ...".
Configuration et installation d'une webmail
Nous allons maintenant installer une webmail, afin de pouvoir lire facilement nos
e-mails via un navigateur internet.
Puisque ce serveur sert uniquement de serveur mail sert uniquement pour les mails, nous
allons nous diriger dans le
répertoire /var/www/html (Si vous l'utiliser pour d'autre service web, vous
devrez créer un virtual host).
Ensuite, nous allons effectuer la commande suivante pour supprimer le seul document
existant : rm index.html
.
Maintenant nous pouvons installer Rainloop, ce logiciel est notre système de web
mail, vous pouvez, si vous le souhaitez
utiliser RoundCube, un autre logiciel servant de webmail également.
Pour cela nous allons taper la commande suivant pour installer notre webmail :
curl -s http://repository.rainloop.net/installer.php | php
Maintenant, nous allons donner les droit nécessaire pour utiliser ce système, nous
allons donc effectuer les opérations suivantes :
chown -R www-data:www-data
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
Nous pouvons désormais nous rendre dans un navigateur pour continuer la configuration de notre webmail. Nous allons donc nous rendre à cette adresse "Votre adresse IP par exemple 0.0.0.0/?admin".
L'utilisateur par défaut est admin et le mot de passe par défaut est 12345. Une fois connecté vous êtes invité à modifier le mot de passe. Vous pouvez le modifier, puis vous devrez vous rendre dans la zone domaine pour renseigner votre domaine imap et SMTP. S'ils sont vert, le tour est joué, vous pouvez vous conecetr à votre espace personnel ai lien suivant : "Votre adresse IP par exemple 0.0.0.0/login".
Voici un exemple de configuration correcte :
Enregistrement dans la zone DNS
Étant client chez OVH la procédure qui va suivre est celle des serveurs DNS OVH, cependant cela fonctionnera du même principe avec les autres fournisseurs DNS. Par contre l’interface graphique peut être totalement différente.
Nous allons tout d’abord ajouter une zone de redirection d’un nom de sous domaine vers
notre serveur, attention, il faut que le nom FQDN du
serveur mail soit identique pour que cela fonctionne comme il le faut. Nous allons
l’ajouter avec un protocole IPv4 et IPv6. Cependant vous pouvez
utiliser que l’IPv4 ou l’IPv6, cela dépend du type d’adresse que vous possédez.
A savoir, l’enregistrement du type A correspond aux IPv4 et un
enregistrement du type AAA correspond au adresse du type IPv6.
Nous allons maintenant ajouter un enregistrement MX, il s’agit d’une partie du DNS (Domain Name System) qui fournit les informations concernant le serveur mail ou les serveurs mails qui utilise votre nom de domaine.
Configuration de l'enregistrement MX
Nous allons laisser le nom du sous domaine vide pour utiliser le nom de domaine principal.On va ajouter une priorité de 10 puisque nous n’utilisons qu’un serveur, la priorité permet de définir quel est le serveur mail principal.
La cible quant à elle permet de cibler le nom de domaine qui cible votre serveur.
Configuration de DKIM
Dans l’enregistrement de DKIM vous devez l’enregistrer de la façon suivante :- Sous domaine : mailkey._domainkey.domaine.com.
- Algorithme hash : vous devez cocher l’algorithme SHA-1, SHA-256.
- Type de clef : il faut cocher la case RSA.
Configuration du SPF
Pour le SPF nous allons créer un enregistrement TXT avec notre domaine pointant vers notre serveur mail, soit en ajoutant un enregistrement SPF si votre service vous le permet en renseignant le champ MX ainsi que les adresse IP du serveur. Voici le format text de l’enregistrement :"v=spf1 a mx ip4:11.22.33.44 ~all"

Configuration de DMARC
Maintenant nous allons passer à l’enregistrement DMARC. Pour cela nous allons ajouter un enregistrement du type text avec comme valeur « v=DMARC1; p=none ». v permet de définir la version de DMARC utilisée et p permet de donner un ordre qu’il faut donner à l’authentification du serveur, ici il n’y aura donc pas de rejet.Conclusion
Nous venons de configurer un serveur e-mail. Celui-ci est désormais fonctionnel. De plus, ce dernier est accessible depuis l’extérieur, avec les réglages que nous avons configurés. Nos réglages ont donc fait en sorte que ce dernier soit considéré comme légitime auprès des autres serveurs mails. Cela signifie donc que les messages envoyés via ce serveur sont bien réceptionnés auprès des autres boites de réceptions. Autrement dit, le message ne va pas se diriger dans les spams du destinataire et va passer tous les contrôles avec réussite. Nous venons également de mettre en œuvre une bonne base de sécurité.
Test du serveur mail en ligne de commande
Vous pouvez désormais envoyer des e-mails à l'aide de l'invité de commande. Ceci est faisable avec mailutils que nous avions installé au tout début. Voici comment procéder (a noter, les # désigne les commentires qui sont là pour vous guider).
mail adresse@destinataire.com #faite entrée par la suite et suivez les instructions et les champs.
# Lorsque vous arrivez à subject, vous entrez le sujet du mail, puis vous faite entrée. Vous pouvez désormais écrire le corps de message.
# Envoi du mail
# Pour envoyer votre mail, vous faite entrée après votre mail puis vous faite un ctrl D.
# Voilà, vous avez envoyé votre premier e-mail à partir de votre serveur mail en ligne de commande.
Mes différents projets
Portfolio



Veille Technologique
La veille technologique permet de se tenir informé des nouvelles technologies mises en place. Ici vous trouverez une veille technologique orientée sur les frameworks Web permettant de réaliser des Single-Pages Applications. Venez donc découvrir les nouvelles technologies mises en place ces dernières années.