Installer Exim

De Wiki Amis SH
Aller à la navigation Aller à la recherche



Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack


Installer Exim

Introduction à Exim

# Exim4 est le serveur mail installé par défaut sur Debian.
 Dépôt officiel de Exim sur Github : https://github.com/Exim/exim
 Bug tracker officiel de Exim : https://bugs.exim.org/enter_bug.cgi

Installer et configurer le serveur de mails Exim

Installer Exim

sudo apt install exim4

Configurer automatiquement Exim

sudo dpkg-reconfigure exim4-config
# Problème rencontré lors de mon premier essai :
# Le nom de courrier du système était "visionduweb.fr" ce qui ne me permettait pas d'envoyer des mails distants vers une adresse mail de destination dont le domaine était "visionduweb.fr".
# J'obtiendrais l'erreur suivante dans le mail qui sera renvoyé sur le système : Unrouteable address
# Je devrais reconfigurer Exim une seconde fois pour renseigner la valeur du hostname du VPS à la place de "visionduweb.fr".
# Identifier le hostname avec la commande hostname.
# Type de configuration :
Choisir « internet site » / « Distribution directe par SMTP (site Internet) » pour pouvoir envoyer et recevoir les mails via le protocole SMTP.
# D'après la documentation :
# Le nom de courrier (« mail name ») est le nom de domaine qui sert à compléter les adresses électroniques qui n'en comportent pas.
# Ce nom sera également utilisé par d'autres programmes ; il doit correspondre au domaine unique et complètement qualifié (FQDN).
# Par exemple, si une adresse électronique locale est toto@example.org, la valeur appropriée pour cette option sera « example.org ».
# Ce nom n'apparaîtra pas dans les en-têtes origines (« From ») des courriers sortants si vous activez la réécriture.
# Nom de courrier du système :
Renseigner la valeur du hostname. (Pour un VPS, le nom du VPS : vps178370)
# Veuillez indiquer une liste d'adresses IP, séparées par des points-virgules, où le serveur de courrier SMTP d'Exim sera à l'écoute.
Ne rien modifier. (127.0.0.1 ; ::1_)
Pour les autres destinations, utiliser le même nom que le nom de courrier du système. Renseigner la valeur du hostname.
Ne rien modifier sur la page suivante. (Domaines à relayer.)
Ne rien modifier sur la page suivante. (Machines à relayer.)
Cliquer sur NON à la demande de garder un nombre minimal de requêtes DNS.
Choisir ensuite l'option mbox. (Format « mbox » dans /var/mail)
Choisir de ne pas découper le fichier de configuration de Exim en plusieurs petits fichiers configurables individuellement.
# Les courriers destinés au superutilisateur, à « postmaster » et aux autres comptes système doivent être redirigés vers le compte utilisateur de l'administrateur réel du système.
# Si ce champ est laissé vide, ces courriers seront conservés dans /var/mail/mail, ce qui est déconseillé.
# Les courriers destinés « postmaster » devraient généralement être lus sur le système local, plutôt que redirigés vers un autre système. En conséquence, au moins un des utilisateurs que vous indiquez ne devraient pas rediriger ses courriers vers une autre machine. Le préfixe « real- » peut être utilisé pour imposer la distribution locale.
# Si vous indiquez plusieurs identifiants, veuillez les séparer par des espaces.
# Destinataire des courriers de « root » et « postmaster » :
Ajouter toutes les adresses mails sur lesquelles vous souhaitez recevoir les alertes. L'ajout de root n’est pas obligatoire. (contacter@visionduweb.fr)
# Le rendu de cette configuration assistée :
sudo nano /etc/exim4/update-exim4.conf.conf

Redémarrer Exim

# Redémarrer Exim :
sudo /etc/init.d/exim4 restart

Afficher le status de Exim

# Les informations de status de Exim :
sudo /etc/init.d/exim4 status

Afficher la version de Exim

sudo exim --version
Exim version 4.93 #5 built 18-Apr-2020 09:48:24
Copyright (c) University of Cambridge, 1995 - 2018
(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2018
Berkeley DB: Berkeley DB 5.3.28: (September  9, 2013)
Support for: crypteq iconv() IPv6 GnuTLS move_frozen_messages DANE DKIM DNSSEC Event I18N OCSP PRDR SOCKS TCP_Fast_Open
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmjz dbmnz dnsdb dsearch nis nis0 passwd
Authenticators: cram_md5 plaintext
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore autoreply lmtp pipe smtp
Fixed never_users: 0
Configure owner: 0:0
Size of off_t: 8
Configuration file search path is /etc/exim4/exim4.conf:/var/lib/exim4/config.autogenerated
Configuration file is /var/lib/exim4/config.autogenerated

Vérifier si un service Exim est chargé

lsof -Pni | grep exim4
exim4    xxxxxx Debian-exim    3u  IPv4 yyyyyyy      0t0  TCP 127.0.0.1:25 (LISTEN)
exim4    xxxxxx Debian-exim    4u  IPv6 yyyyyyy      0t0  TCP [::1]:25 (LISTEN)

Tuer tous les services Exim

killall exim4

Le dossier spool de Exim

cd /var/spool/exim4/

Consulter les logs de Exim

# Les mails envoyés depuis le terminal sont journalisés par défaut dans le fichier "/var/log/exim4/mainlog".
# Cela concerne les mails envoyés localement ou à distance, à l'aide du terminal.
# Noter que Exim ne va pas renseigner mail.log !
mainlog correspond à LOG_INFO
rejectlog correspond à LOG_NOTICE
paniclog correspond à LOG_ALERT
# Consulter les logs de Exim :
cat /var/log/exim4/mainlog
Source : https://www.exim.org/exim-html-current/doc/html/spec_html/ch-log_files.html

Désactiver exim4 au démarrage

# Pour des raisons de performances, il peut éventuellement êre intéressant de pouvoir désactiver exim4 au démarrage.
# Vérifier par la suite si exim4 démarre manuellement.
# Désactiver exim4 au démarrage :
sudo /usr/sbin/update-rc.d -f exim4 remove

Désinstaller Exim4

 apt-get remove --purge exim4 exim4-base exim4-config exim4-daemon-light
# Malgré la commande purge, une nouvelle installation ne me demandera plus, lors de la dernière étape, de renseigner le mail (ou les mails) sur lequel je souhaite recevoir les alertes.

Tester l'envoi de mail avec Exim

Utiliser la commande de test d'envoi de mail de Exim

exim -bt <adresse valide>

Envoyer un mail de test en ligne de commande

# Vérifier la bonne réception du mail depuis votre logiciel client mail ou webmail :
mail -s "Hello World !" contacter@visionduweb.fr < /dev/null
# Ce test devrait afficher que le corps du mail est laissé vide :
# Message en anglais :
Null message body; hope that's ok
# Message en français :
mail: Corps du message vide; en espérant que cela soit correct
# Si la commande mail n'est pas reconnue :
-bash: mail : commande introuvable
# Installer mailutils :
sudo apt-get install mailutils
# Recommencer l'envoie du test précédent.
mail -s "Hello World !" contacter@visionduweb.fr < /dev/null
mail: Corps du message vide; en espérant que cela soit correct
# La commande fonctionne mais en vérifiant mon client de messagerie en local, je n'ai pas de nouveau mail.
# Depuis le serveur, je vois une nouvelle information affichée suite à une reconnexion : Vous avez du courrier dans /var/mail/debian
# Je comprend que l'envoie de mail en externe a échouée, mais, l'information a bien été transmise à la messagerie système avec l'erreur "Unrouteable address".
# Le problème provient du nom local visionduweb.fr renseigné dans la configuration de Exim4.
# Il faut relancer la configuration pour donner un autre nom local que visionduweb.fr, en utilisant le hostname du VPS.
# Si la configuration correspond à un serveur internet et que le hostname est renseigné correctement, le test devrait fonctionner et le mail devrait être expédié vers le destinataire.
# Lire mon mail système avec mailx
"/var/mail/debian": 1 message 1 nouveau
>N   1 Mail Delivery Syst mar. mars 19 01:  53/1793  Mail delivery failed: ret
? 
Return-path: <>
Envelope-to: debian@vps178370.vps.ovh.ca
Delivery-date: Tue, 19 Mar 2019 01:06:26 +0100
Received: from Debian-exim by vps178370.vps.ovh.ca with local (Exim 4.92)
	id 1h62Gw-00026v-EO
	for debian@vps178370.vps.ovh.ca; Tue, 19 Mar 2019 01:06:26 +0100
X-Failed-Recipients: contacter@visionduweb.fr
Auto-Submitted: auto-replied
From: Mail Delivery System <Mailer-Daemon@visionduweb.fr>
To: debian@vps178370.vps.ovh.ca
Content-Type: multipart/report; report-type=delivery-status; boundary=1552953986
-eximdsn-2111507310
MIME-Version: 1.0
Subject: Mail delivery failed: returning message to sender
Message-Id: <E1h62Gw-00026v-EO@vps178370.vps.ovh.ca>
Date: Tue, 19 Mar 2019 01:06:26 +0100

--1552953986-eximdsn-2111507310
Content-type: text/plain; charset=us-ascii

This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

  contacter@visionduweb.fr
    Unrouteable address

--1552953986-eximdsn-2111507310
Content-type: message/delivery-status

Reporting-MTA: dns; vps178370.vps.ovh.ca

Action: failed
Final-Recipient: rfc822;contacter@visionduweb.fr
Status: 5.0.0

--1552953986-eximdsn-2111507310
Content-type: message/rfc822

Return-path: <debian@vps178370.vps.ovh.ca>
Received: from debian by vps178370.vps.ovh.ca with local (Exim 4.92)
	(envelope-from <debian@vps178370.vps.ovh.ca>)
	id 1h62Gw-00026t-Da
	for contacter@visionduweb.fr; Tue, 19 Mar 2019 01:06:26 +0100
Subject: Hello World !
To: <contacter@visionduweb.fr>
X-Mailer: mail (GNU Mailutils 3.5)
Message-Id: <E1h62Gw-00026t-Da@vps178370.vps.ovh.ca>
From: Debian <debian@vps178370.vps.ovh.ca>
Date: Tue, 19 Mar 2019 01:06:26 +0100

--1552953986-eximdsn-2111507310--
Quitter le message avec " q puis entrée ".

Vérifier le routage d'une adresse Exim4

# Évidemment, on avait déjà compris que la valeur indiquée dans notre configuration nous provoque une erreur.
sudo exim -bt contacter@visionduweb.fr
R: system_aliases for contacter@visionduweb.fr
contacter@visionduweb.fr is undeliverable: Unrouteable address
# L'utilisateur local quant à lui est bien renseigné.
sudo exim -bt UTILISATEUR-LOCAL
# ou
sudo exim -bt UTILISATEUR-LOCAL@visionduweb.fr
# Retourne les mêmes informations.
R: system_aliases for UTILISATEUR-LOCAL@visionduweb.fr
R: userforward for UTILISATEUR-LOCAL@visionduweb.fr
R: procmail for UTILISATEUR-LOCAL@visionduweb.fr
R: maildrop for UTILISATEUR-LOCAL@visionduweb.fr
R: lowuid_aliases for UTILISATEUR-LOCAL@visionduweb.fr (UID 1000)
R: local_user for UTILISATEUR-LOCAL@visionduweb.fr
UTILISATEUR-LOCAL@visionduweb.fr
 router = local_user, transport = mail_spool

Recommencer la configuration de Exim4

Au lieu de visionduweb.fr en première valeur, tenter la valeur de hostname (vps178370).
Choisir « internet site » pour pouvoir envoyer et recevoir les emails via le protocol SMTP.
Donner un nom au système mail. (vps178370)
Ne rien modifier sur la page suivante. (127.0.0.1 ; ::1_)
Pour les autres destinations, utiliser le même nom que le nom du système email. (vps178370)
Ne rien modifier sur la page suivante. (Domaines à relayer.)
Ne rien modifier sur la page suivante. (Machines à relayer.)
Cliquer sur NON à la demande de garder un nombre minimal de requêtes DNS.
Choisir ensuite l’option mbox. (Format « mbox » dans /var/mail)
Choisir de ne pas découper le fichier de configuration de Exim en plusieurs petits fichiers configurables individuellement.
Ajouter toutes les adresses mails sur lesquelles vous souhaitez recevoir les alertes. L’ajout de root n’est pas obligatoire. (contacter@visionduweb.fr)
# L'adresse est maintenant routable.
sudo exim -bt contacter@visionduweb.fr
R: dnslookup for contacter@visionduweb.fr
contacter@visionduweb.fr
 router = dnslookup, transport = remote_smtp
 host mx1.ovh.net [188.165.47.122] MX=1
 host mx2.ovh.net [87.98.132.45]   MX=5
 host mxb.ovh.net [46.105.45.21]   MX=100
Le test d'envoi depuis le serveur fonctionne cette fois correctement pour mes deux adresses mail !
mail -s "Hello World !" contacter@visionduweb.fr < /dev/null
mail -s "Hello World !" mail@visionduweb.com < /dev/null
Le fichier /etc/mailname contient votre_nom_de_domaine.fr entré lors de la configuration précédente.
C'est la valeur vps178370 qui est renseignée dans mon cas avec un VPS OVH et la seule utilisation de Exim4.

Exim4 est fonctionnel depuis le terminal, configurer Exim4 pour PHP

# Mon script d'alerte administrateur pour relever les erreurs du site avec PHP mail() n'envoie pas le mail distant.
# Remplacer la ligne suivante dans le fichier de configuration php.ini de PHP FPM, pour permettre aux mails PHP de sortir.
sendmail_path = /usr/sbin/sendmail -t -i
# Par la ligne suivante :
sendmail_path = /usr/sbin/sendmail -t -i -F contacter@visionduweb.fr -f contacter@visionduweb.fr
# Il est possible (préférable ?) de modifier le chemin /usr/sbin/sendmail pour celui de Exim4 avec le chemin suivant /usr/sbin/exim4.
# Sans les options complémentaires, Mediawiki arrive bien à envoyer des mails.
sendmail_path = /usr/sbin/exim4 -t -i
# Je dois ajouter les options complémentaires pour permettre aux simples scripts mails en PHP d'être délivrés.
sendmail_path = /usr/sbin/exim4 -t -i -F contacter@visionduweb.fr -f contacter@visionduweb.fr
# Le format du mail de l'émetteur est très technique quand envoyé depuis le terminal " debian@vps178370.vps.ovh.ca ".
# Utiliser le paramètre -r mail pour définir l'expéditeur du mail en ligne de commande.
mail -s "Hello World !" -r contacter@visionduweb.fr mail@visionduweb.com < /dev/null
# Utiliser un script PHP pour alerter l'administrateur en cas de panne.
# Les headers de PHP permettent de modifier l'émetteur du mon mail.
# Les headers permettent également d'améliorer le score de légitimité du mail pour éviter que le mail ne finisse dans les dossiers de spam.
# L'option -a permet de renseigner le header. Je n'ai pas utilisé d'avantage cette possibilité :
mail -a from:contacter@visionduweb.fr mail@visionduweb.com
# Le test de récupération de mot de passe effectué depuis le wiki se retrouve dans les spams de la messagerie hotmail.
--> Voir à améliorer le score de légitimité du mail avec la configuration au niveau d'Exim et / ou de Apache2 avec DKIM et DMark.

En savoir plus sur les flags

# Les drapeaux ont les significations suivantes:
S - Faire les réécritures au temps SMTP. Tous les indicateurs suivants sont définis immédiatement à mesure que les données auxquelles ils s'appliquent arrivent, et qu'ils ne sont pas retardés.
F - Réécrivez l'enveloppe à partir du champ.
f - Réécrivez le champ d'en-tête De:.
r - Réécrivez le champ d’en-tête Répondre à:.
s - Réécrivez le champ d'en-tête Sender-To:.
Lien complémentaire : http://www.exim.org/exim-html-current/doc/html/spec_html/ch-address_rewriting.html

Redémarrer Exim4

sudo service exim4 restart

Définir et rediriger les mails des utilisateurs

Définir l'adresse mail d'un utilisateur du système

# Le fichier /etc/email-addresses contient les adresses mails "publiques" à utiliser pour les comptes utilisateurs du système.
# Il est possible d'associer le compte root à une adresse particulière pour des envois de rapports.
# L'adresse mail d'un utilisateur est configurée dans le fichier email-addresses :
sudo nano /etc/email-addresses
debian:g2pc@visionduweb.com
root:mail@visionduweb.com
# Avant d'avoir défini le mail de l'utilisateur root :
sudo exim -brw root
 sender: root@vps178370
   from: root@vps178370
     to: root@vps178370
     cc: root@vps178370
    bcc: root@vps178370
reply-to: root@vps178370
env-from: root@vps178370
 env-to: root@vps178370
# Après avoir défini le mail de l'utilisateur root :
sudo exim -brw root
 sender: mail@visionduweb.com
   from: mail@visionduweb.com
     to: root@vps178370
     cc: root@vps178370
    bcc: root@vps178370
reply-to: mail@visionduweb.com
env-from: mail@visionduweb.com
 env-to: root@vps178370
# Utiliser maintenant la ré-écriture Exim (rewrite) pour modifier systématiquement tous les mails à destination de ces utilisateurs.
# Dans le cas d'une configuration Exim4 dans un seul fichier, il faut modifier le fichier /etc/exim4/exim4.conf.template vers la ligne 1834 :
# Dans le cas d'une configuration Exim4 séparée, il faut modifier le fichier /etc/exim4/conf.d/rewrite/00_exim4-config_header
# J'utilise ici la configuration dans un seul fichier, car, la configuration dans un fichier séparé n'apporte aucun changement.
######################################################################
#                      REWRITE CONFIGURATION                         #
######################################################################

begin rewrite
debian@* g2pc@visionduweb.com FfrsTtcb
root@* mail@visionduweb.com FfrsTtcb
# Les valeurs FfrsTtcb correspondent à :
E       rewrite all envelope fields
F       rewrite the envelope From field
T       rewrite the envelope To field
b       rewrite the Bcc: header
c       rewrite the Cc: header
f       rewrite the From: header
h       rewrite all headers
r       rewrite the Reply-To: header
s       rewrite the Sender: header
t       rewrite the To: header
# Régénérer le fichier principale :
sudo update-exim4.conf
# Relancer le service exim4 :
sudo service exim4 restart
# Tester avec root :
sudo exim -brw root
 sender: mail@visionduweb.com
   from: mail@visionduweb.com
     to: mail@visionduweb.com
     cc: mail@visionduweb.com
    bcc: mail@visionduweb.com
reply-to: mail@visionduweb.com
env-from: mail@visionduweb.com
 env-to: mail@visionduweb.com
# Tester avec root@localhost :
sudo exim -brw root@localhost
 sender: mail@visionduweb.com
   from: mail@visionduweb.com
     to: mail@visionduweb.com
     cc: mail@visionduweb.com
    bcc: mail@visionduweb.com
reply-to: mail@visionduweb.com
env-from: mail@visionduweb.com
 env-to: mail@visionduweb.com
 Source : https://www.jbnet.fr/systeme/linux/debian-rediriger-les-emails-root-et-autres-utilisateurs-avec-exim4.html
 Source : http://www.exim.org/exim-html-current/doc/html/spec_html/ch-address_rewriting.html

Rediriger les mails de root vers une adresse mail valide à l'aide d'un alias

# Le fichier /etc/aliases contient les redirections de courriers des comptes utilisateurs du système.
# Par défaut tous les mails sont envoyés à l'utilisateur root.
# Ne pas utiliser le fichier ~/.forward !
# Pourquoi ?
# Indiquer un alias pour que tous les mails envoyés à root soient redirigés vers une véritable adresse mail.
sudo nano /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: le_premier_utilisateur_créé, un_autre_utilisateur
# On voit que tous les mails sont envoyés à root et que root est redirigé vers le premier utilisateur qui a été créé suite à l'installation de Debian.
# Remplacer le premier utilisateur par une adresse mail valide.
sudo nano /etc/aliases
# Noter que en cas de configuration séparée, les redirections peuvent également être ajoutées à cet endroit, plutôt que dans le fichier aliases par défaut :
sudo nano /etc/exim4/conf.d/rewrite/00_exim4-config_header
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
# Définir un alias pour root afin de renvoyer les messages vers un mail valide :
root: mail@visionduweb.com
# Faire un test en envoyant un mail à root :
echo -e "corps" | mail -s 'sujet' root
# Le mail doit arriver dans la boite personnelle qui a été configurée.
# Pas de chance, le mail est transmis en local.
# Après avoir défini l'adresse mail de l'utilisateur par défaut debian dans le fichier /etc/email-addresses, le mail pour root qui ne serait pas délivré sera retransmis dans la boîte mail de l'utilisateur debian.
# Après avoir défini l'adresse mail de l' utilisateur root, dans le fichier /etc/email-addresses, le mail pour root est bien transmis dans ma boîte mail.
# Il est nécessaire de vérifier que le mail utilisé pour root soit également bien valide dans le fichier /etc/aliases.
Source complémentaire : https://www.memoinfo.fr/tutoriels-linux/installer-exim-relai-smarthost/
Source complémentaire : https://www.debian-fr.org/t/configurer-exim4-pour-recevoir-les-alertes-dans-sa-bal/29512
Source complémentaire  https://medspx.fr/blog/Debian/exim4_beginner/

Générer un certificat pour Exim

# Par défaut, cette méthode permet de créer une clé privée RSA de 2048 bits d'une validité de 3ans.
cd /etc/exim4
sudo update-exim4.conf
# Affiche :
Warning: No server certificate defined; will use a selfsigned one.
Suggested action: either install a certificate or change tls_advertise_hosts option
# Noter que cette erreur ne s'affiche pas sur deux autres installations de serveur.
# Je ne sais pas pourquoi mon premier VPS a rencontré cette erreur, mais, elle a été corrigée en suivant les étapes ci-dessous.
# Générer un certificat :
sudo bash /usr/share/doc/exim4-base/examples/exim-gencert
[*] Creating a self signed SSL certificate for Exim!
    This may be sufficient to establish encrypted connections but for
    secure identification you need to buy a real certificate!

    Please enter the hostname of your MTA at the Common Name (CN) prompt!

Can't load /root/.rnd into RNG
139960444302464:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:98:Filename=/root/.rnd
Generating a RSA private key
................................+++++
.........+++++
writing new private key to '/etc/exim4/exim.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Code (2 letters) [US]:FR
State or Province Name (full name) []:Alsace
Locality Name (eg, city) []:Colmar
Organization Name (eg, company; recommended) []:Visionduweb
Organizational Unit Name (eg, section) []:
Server name (eg. ssl.domain.tld; required!!!) []:visionduweb.fr
Email Address []:mail@visionduweb.com
[*] Done generating self signed certificates for exim!
    Refer to the documentation and example configuration files
    over at /usr/share/doc/exim4-base/ for an idea on how to enable TLS
    support in your mail transfer agent.
# Le certificat semble avoir été généré, malgré l'erreur suivante :
Can't load /root/.rnd into RNG
139960444302464:error:2406F079:random number generator:RAND_load_file:Cannot open file:../crypto/rand/randfile.c:98:Filename=/root/.rnd
# Malgré tout, l'erreur est toujours affichée :
cd /etc/exim4
sudo update-exim4.conf
Warning: No server certificate defined; will use a selfsigned one.
Suggested action: either install a certificate or change tls_advertise_hosts option
# Au lieu de générer un certificat, vous pouvez simplement copier les certificats que vous avez achetés ou générés précédemment.
# Éditer le fichier de configuration :
sudo nano /etc/exim4/exim4.conf.localmacros
# Ajouter la ligne :
MAIN_TLS_ENABLE = yes
# Il est possible que cette configuration soit déjà activée dans la configuration principale de Exim :
sudo nano /etc/exim4/exim4.conf.template
# Comme pour toute modification de la configuration, exécuter update-exim4.conf puis redémarrer Exim.
cd /etc/exim4
sudo update-exim4.conf
# Les deux erreurs ne sont plus affichées ! Résolu !
# Redémarrer Exim4 pour prendre en compte les modifications :
sudo service exim4 restart
# Redémarrer Exim4 pour prendre en compte les modifications, si systemd est utilisé :
sudo systemctl restart exim4.service
## Depuis la mise en place de cette configuration, j'ai l'impression que mes mails de Fail2ban ne sortent plus.
## Je redémarre également Fail2ban, les mails sont bien délivrés.
## Je ne sais pas si ce redémarrage était réellement nécessaire.
# sudo service fail2ban restart
# Information :
# Pour ne pas rencontrer l'erreur "Can't load /root/.rnd into RNG", éditer le script proposé par Debian pour Exim afin de générer le certificat :
sudo nano /usr/share/doc/exim4-base/examples/exim-gencert
# Commenter la ligne suivante pourrait être suffisant.
RANDFILE = $HOME/.rnd
# Malgré cette erreur rencontrée avec le script de génération de certificat pour Exim, une clé privée RSA de 2048 bits sera bien générée.
# Le fichier /root/.rnd n'a pas besoin d'exister initialement car le fichier /usr/share/doc/exim4-base/examples/exim-gencert va le créer puisqu'il n'existe pas.
# Le fichier /root/.rnd existera effectivement par après :
-rw-------  1 root root  1024 juin   6 18:41 .rnd
# Il faudrait remonter ce manque de clarté au projet Exim, pour que le message d'erreur soit moins ambigu : non, le fichier n'existe pas, mais, oui, il va être créé.
# Le système d'exploitation fournit automatiquement ce fichier de hash en utilisant son propre RNG via /dev/urandom ou via des appels système tels que getentropy() ou CryptGenRandom().
# Le fichier .rnd est un résidu du temps où le système d'exploitation manquait d'un bon CSPRNG, peut-être lorsque le Linux /dev/urandom était considéré comme de mauvaise qualité et que /dev/random produisait des données trop lentement en raison de problématiques d'entropie. Ce n'est plus le cas à ce jour.
# S'appuyer entièrement sur un fichier de hash stocké dans votre homedir serait en fait moins sûr.
# Suite à ce message, j'ouvre une issue à but d'information, sur le bogue tracker de Exim.
# On me répondra que ce n'est pas un problème de Exim mais de Debian, qui fournit le script.
Source : https://bugs.exim.org/show_bug.cgi?id=2591
Source : https://salsa.debian.org/exim-team/exim4/-/blob/master/debian/exim-gencert

Commandes courantes

# Obtenir des statistiques sur l'activité d'Exim :
eximstats /var/log/exim4/mainlog
# Montre ce que Exim est entrain de faire :
exiwhat
# Visualiser les courriers en file d'attente :
mailq
# Relancer le process de la file d'attente :
runq
# Relancer uniquement les mails gelés :
mailq | grep frozen | sed -e 's/.* \(.\{6\}-.\{6\}-.\{2\}\) .*/\1/' | xargs exim4 -M
# xargs: exim4: Aucun fichier ou dossier de ce type
# Forcer la livraison des mails, y compris les mails gelés et vider la file d'attente :
exim -qff
# Dégeler les messages gelés / frozen :
mailq | gawk '/frozen/{print $3}'|xargs exim4 -Mt;runq
mailq | grep "frozen"
# Retenter la livraison d'un message :
exim4 -M 1I8u1e-0001MM-O9
# Supprimer un message de la file d’attente :
exim -Mrm <message-id>
# Supprimer tous les messages de la file d'attente :
exim4 -Mrm `ls /var/spool/exim4/input/ | grep -- -H$ | cut -c 1-16`
# Supprimer les mails gelés de la file d'attente :
mailq | grep frozen | sed -e 's/.* \(.\{6\}-.\{6\}-.\{2\}\) .*/\1/' | xargs exim4 -Mrm
# Afficher le contenu d'un message de la file d'attente :
exim4 -Mvb 1KwvVZ-0001fc-NA
# Le <message-id> est de type 1VEcvi-0001xI-Pz est affiché lors des mailq :
sudo mailq
2h  2.9K 1VEcvi-0001xI-Pz <> *** frozen ***
adresse@email.com
# Affiche par domaine le nombre de messages dans la queue, le volume par domaine de destination concerné, et, pour chacun d'eux, le mail le plus vieux ainsi que le plus récent.
exim -bp | exiqsumm
# Autres commandes : https://howto.landure.fr/gnu-linux/trucs-et-astuces-pour-exim-4
# Autres commandes : http://debian-facile.org/doc:reseau:exim4-pour-les-nulls
# Autres commandes : https://buzut.net/connaitre-commandes-dompter-exim4/

Configurations complémentaires

Localiser les fichiers de configuration complémentaires

# Consulter la configuration de Exim.
sudo nano /etc/exim4/exim4.conf.template
# Éviter de modifier directement le fichier généré par update-exim4.conf.
sudo nano /var/lib/exim4/config.autogenerated

Vérifier le reverse DNS

# Vérifier que vous avez un reverse DNS rattaché à votre hostname et que ce rDNS correspond à l'adresse IP du serveur d'envoi.
Vérifier le reverse DNS sur son serveur Linux.
# Si je comprend bien, il ne faudrait pas chercher à envoyer un mail depuis un serveur, si le mail ne correspond pas à un nom de domaine hébergé sur le serveur.
# Ainsi, mon mail mail@visionduweb.fr hébergé chez sivit ne devrait pas me servir à envoyer des mail depuis mon VPS qui héberge mon .eu .fr .info

DNS Blacklists

https://wiki.debian.org/Exim#DNS_Blacklists

Outil de diagnostique

https://wiki.debian.org/Exim#Install_diagnostic_tools

Décrypter le contenu de la variable X-VR-SPAMCAUSE présent dans le header d'un mail tagué comme SPAM

# Exemple :
X-VR-SPAMCAUSE: "Un hachage de la cause du spam uniquement utilisé par Vade."
# Déchiffrer depuis Tor :
Copier le contenu de la variable sur ce site mis à disposition depuis Tor : http://www.fr3dpyqxb5ygbmji.onion
# Déchiffrer à l'aide de l'API de Vade Secure nécessite un compte utilisateur :
API Vade Secure : https://api.partner.vadesecure.com
# Déchiffrer depuis sa machine, avec un script Python proposé depuis : https://gist.github.com/lkraider/9530798a695586fc1580d0728966f6f0
def decode(msg):
    text = []
    for i in range(0, len(msg), 2):
        text.append(unrot(msg[i: i + 2]))
    return str.join(, text)

def unrot(pair, key=ord('x')):
    offset = 0
    for c in 'cdefgh':
        if c in pair:
            offset = (ord('g') - ord(c)) * 16
            break
    return chr(sum(ord(c) for c in pair) - key - offset)

print(decode('gggruggvucftvghtrhho'))
# Affiche : Vade Retro
Technical details on how Anti-spam filters work : https://help.dreamhost.com/hc/en-us/articles/215686647-Technical-details-on-how-Anti-spam-filters-work

Scanner le spam

https://wiki.debian.org/Exim#Spam_scanning

Configurer le SMTP pour exim4

Tester le hostname.
# Afficher le hostname :
hostname
vps178370
# Afficher le FQDN :
hostname --fqdn
vps178370.vps.ovh.ca
# Le serveur de messagerie ne semble pas écouter sur une adresse publique.
# Il accepte uniquement le courrier entrant à partir de 127.0.0.1 qui est localhost.
# Cela explique pourquoi l’envoi de courrier directement à partir du serveur à l’aide de commandes shell fonctionne.
# Si Exim est bien configuré, il peut envoyer des mails sans service SMTP extérieur, comme un vrai serveur de messagerie.
hostname -i
127.0.1.1
# Attention !
# Ne pas communiquer en claire les informations de connexion avec l'hôte SMTP.
# Installer avant ça le certificat TLS pour Exim.
# Suite à mes tests, sans certificat TLS, les mails peuvent sortir, que les données de connexion SMTP soit renseignée, ou non !
# La configuration SMTP suivante ne semble pas fonctionner pour moi, je ne vois pas l'émetteur du mail réceptionné correspondre aux valeurs du SMTP.
# Déclarer le serveur SMTP.
sudo nano /etc/exim4/passwd.client
# Le renseigner avec la configuration d'un mail OVH, disponible via l'offre d'hébergement gratuite.
ssl0.ovh.net:Utilisateur:Mot_de_passe
# Mettre les bons droits sur le fichier.
sudo chown Debian-exim:root /etc/exim4/passwd.client
sudo chmod 640 /etc/exim4/passwd.client
# Finaliser l'installation.
sudo update-exim4.conf
sudo service exim4 restart ( Ou sudo /etc/init.d/exim4 restart )
# Dans mon cas, il faudrait consulter des tutoriels pour Exim et le SMTP de OVH.
# Les tutoriels suivants pour paramétrer Exim pour le SMTP de Gmail, Mailjet et Yandex ne m'ont pas permis d'avancer sur ma configuration SMTP pour un mail OVH.
 Configurer Exim4 pour utiliser une adresse mail GMail : https://web.archive.org/web/20190911070749/http://www.bernaerts-nicolas.fr/linux/75-debian/278-debian-sendmail-gmail-account
 Setup Exim to Send Email Using Gmail in Debian : https://www.vultr.com/docs/setup-exim-to-send-email-using-gmail-in-debian
 Fast Mail Fast Smarthost - Fast dirty mail hack : Gmail Mailjet Yandex : https://forum.vestacp.com/viewtopic.php?f=12&t=7422
ISP : https://askubuntu.com/questions/167043/how-do-i-configure-exim4-to-send-mail-through-a-password-protected-ssl-smtp-mail

Autoriser les paquets SMTP à sortir du réseau

Créer une règle pour ouvrir le port 25 avec iptables

# Il est inutile d'appliquer cette règle pour ma propre configuration de Exim puisque pour le moment, l'utilisation d'un SMTP externe ne fonctionnant pas.
# De plus, les mails sortent déjà, sans avoir à appliquer une autorisation sur le port 25.
# Ajouter cette règle iptables semble écraser les autres règles.
# Créer le fichier qui va contenir les règles iptables.
sudo nano /etc/iptables.firewall.rules
# Ajouter les lignes suivantes :
*filter
# Autoriser l'accès SMTP.
# Vérifier que la nouvelle règle est prise en compte avec sudo iptables -L
# La ligne suivante doit être affichée : ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
-A INPUT -p tcp --dport 25 -j ACCEPT
COMMIT
# Activer la règle.
sudo iptables-restore < /etc/iptables.firewall.rules

Appliquer le changement sans passer par une règle

# Pour ne pas écraser les autres règles, ajouter ou retirer cette règle en une seule ligne depuis le terminal.
# Ouvrir le port 25
iptables -A INPUT -p tcp -m tcp --dport 7777 -j ACCEPT
# Fermer le port 25
iptables -D INPUT -p tcp -m tcp --dport 7777 -j ACCEPT

Configurer SPF

# SPF par défaut de OVH.
# SPF du domaine visionduweb.fr
visionduweb.fr.	600 	SPF 	"v=spf1 include:mx.ovh.com ~all"
# Vérifier le score du mail utilisé pour envoyer des messages.
# Des propositions sont retournées pour améliorer la configuration.
http://www.mail-tester.com
# Lancer le test en envoyant un mail à mail tester.
mail -s "Hello World !" -r contacter@visionduweb.fr test-11c5p@mail-tester.com < /dev/null

SPF filtering

# SPF filtering :
https://wiki.debian.org/Exim#SPF_filtering

SpamAssassin pense que vous pouvez vous améliorer -4.2

-1.985		PYZOR_CHECK		Similar message reported on Pyzor (http://pyzor.org)
https://pyzor.readthedocs.io/en/latest/
Assurez-vous de tester avec un contenu réel, les Newsletters tests seront toujours détectées par Pyzor
Ajustez votre message ou demandez à être whitelisté (http://public.pyzor.org/whitelist/)
-1.274		RDNS_NONE		Delivered to internal network by a host with no rDNS
Vérifiez que vous avez un rDNS rattaché à votre hostname et que ce rDNS correspond à l'IP du serveur d'envoi
-0.972		SPF_SOFTFAIL		SPF: sender does not match SPF record (softfail)

Vous n'êtes pas autorisé à utiliser l'une de vos adresses e-mail d'envois -4

[SPF] visionduweb.fr n'autorise pas votre serveur 139.99.173.195 à utiliser contacter@visionduweb.fr -3

# Sender Policy Framework (SPF) est un système de validation d'e-mail conçu pour empêcher le spammage en détectant l'usurpation d'adresse e-mail, une vulnérabilité classique, en vérifiant les adresses IP de l'expéditeur.
# Ce que nous avons retenu comme votre enregistrement SPF actuel est :
v=spf1 include:mx.ovh.com ~all
# Cela devrait être changé en :
v=spf1 include:mx.ovh.com ip4:139.99.173.195 ~all
The Name Server handling the domain name visionduweb.fr is ns109.ovh.net.
# Plus d'information à propos de cette erreur :
visionduweb.fr: Sender is not authorized by default to use 'contacter@visionduweb.fr' in 'mfrom' identity, however domain is not currently prepared for false failures (mechanism '~all' matched)
# Détails de la vérification :
dig +short TXT visionduweb.fr :
   "v=spf1 include:mx.ovh.com ~all"
dig +short TXT @ns109.ovh.net. visionduweb.fr :
   "v=spf1 include:mx.ovh.com ~all"
spfquery --scope mfrom --id contacter@visionduweb.fr --ip 139.99.173.195 --helo-id vps178370.vps.ovh.ca :
   softfail
   visionduweb.fr: Sender is not authorized by default to use 'contacter@visionduweb.fr' in 'mfrom' identity, however domain is not currently prepared for false failures (mechanism '~all' matched)
   visionduweb.fr: Sender is not authorized by default to use 'contacter@visionduweb.fr' in 'mfrom' identity, however domain is not currently prepared for false failures (mechanism '~all' matched)
   Received-SPF: softfail (visionduweb.fr: Sender is not authorized by default to use 'contacter@visionduweb.fr' in 'mfrom' identity, however domain is not currently prepared for false failures (mechanism '~all' matched)) receiver=ns303428.ip-94-23-206.eu; identity=mailfrom; envelope-from="contacter@visionduweb.fr"; helo=vps178370.vps.ovh.ca; client-ip=139.99.173.195

[SPF] visionduweb.com n'autorise pas votre serveur 139.99.173.195 à utiliser g2pc@visionduweb.com

Sender Policy Framework (SPF) est un système de validation d'e-mail conçu pour empêcher le spammage en détectant l'usurpation d'adresse e-mail, une vulnérabilité classique, en vérifiant les adresses IP de l'expéditeur.
Vous n'avez pas d'enregistrement SPF, s'il vous plaît ajouter le suivant à votre domaine visionduweb.com :
v=spf1 a mx ip4:139.99.173.195 ~all
The Name Server handling the domain name visionduweb.com is ns2.sivit.org.

Votre message n'est pas signé avec DKIM -1

DomainKeys Identified Mail (DKIM) est une méthode permettant d'associer un nom de domaine à un message e-mail, ce qui permet à une personne, une organisation de revendiquer certaines responsabilités pour le message.

DKIM DMARC

Introduction à SPF DKIM DMARC

Le nombre de messages non sollicités envoyés chaque jour reste relativement élevé, malgré les nombreuses tentatives de création d'outils anti-spam.
SPF (Sender Policy Framework) est une entrée de texte DNS qui affiche une liste de serveurs qui devraient être considérés comme autorisés à envoyer du courrier pour un domaine spécifique.
Les propriétaires / administrateurs sont les seules personnes autorisées à ajouter / modifier cette zone de domaine principal.
DKIM (DomainKeys Identified Mail) doit plutôt être considéré comme une méthode permettant de vérifier que le contenu des messages est digne de confiance, ce qui signifie qu'ils n'ont pas été modifiés depuis le moment où le message a quitté le serveur de messagerie initial. Cette couche supplémentaire de fiabilité est obtenue par la mise en œuvre du processus de signature standard de clé publique / privée. Une fois encore, les propriétaires du domaine ajoutent une entrée DNS avec la clé publique DKIM qui sera utilisée par les destinataires pour vérifier que la signature du message DKIM est correcte, tandis que le côté expéditeur du serveur signera les messages avec la clé privée correspondante.
DMARC (authentification, rapports et conformité des messages basés sur le domaine) habilite SPF et DKIM en énonçant une stratégie claire qui doit être utilisée pour les deux outils.

Implémenter DKIM avec EXIM

Liens complémentaires

  https://www.adampalmer.me/iodigitalsec/2014/07/11/exim-dkim-and-debian-configuration/
https://debian-administration.org/article/718/DKIM-signing_outgoing_mail_with_exim4
https://www.obstance.com/ubuntu/dkim-on-multiple-domains-with-exim4/
https://debian-administration.org/article/721/Validating_SPF_and_DKIM_at_SMTP-time_with_exim

Implémenter DMARC avec EXIM

Liens complémentaires

https://debian-administration.org/article/720/Tying_together_SPF_and_DKIM_with_DMARC

X-Exim-DSN-Information: Due to administrative limits only headers are returned

# Un mail en erreur est retourné avec le message :
X-Exim-DSN-Information: Due to administrative limits only headers are returned
# Le message est peut être trop grand ou mal formé.
# Configurer SPF et DKIM pourrait corriger ce problème.
# Les logs de EXIM informent :
1jGTMg-0003QT-AM ** mail@visionduweb.com R=dnslookup T=remote_smtp: message is too big (transport limit = 1)
Warning: No server certificate defined; will use a selfsigned one.
Suggested action: either install a certificate or change tls_advertise_hosts option
1jGTMg-0003QX-Ka <= <> R=1jGTMg-0003QT-AM U=Debian-exim P=local S=1787
1jGTMg-0003QT-AM Completed
Warning: No server certificate defined; will use a selfsigned one.
Suggested action: either install a certificate or change tls_advertise_hosts option
# Cela signifie qu'une limite de LIGNE maximale de 998 caractères a été atteinte
# Ajouter la ligne suivante dans la configuration :
IGNORE_SMTP_LINE_LENGTH_LIMIT = 1
# Ajouter la ligne à la fin du fichier existant :
sudo bash
/etc/exim4/update-exim4.conf.conf 
# Préférer l'ajout de la ligne dans un nouveau fichier de configuration complémentaire :
sudo bash
nano /etc/exim4/exim4.conf.localmacros
# Redémarrer Exim.
# Le mail arrivera correctement.

Changer le mail utilisé sur les différents services du serveur

Définir une adresse mail qui sera utilisée par le serveur

# Le compte mail utilisé pour les services du serveur :
# Utiliser postmaster@domain.ext n'est pas un bon choix, car, les MTA n'aiment pas cette adresse qui pourrait entraîner une diminution dans la confiance du domaine.
# Définir une adresse mail qui devra être utilisé par tous les services du VPS ou du serveur dédié, pour les alertes de sécurité, les tâches de maintenance ...

Identifier les services configurés avec un mail connu

# Identifier les services configurés avec un mail connu :
sudo -s
grep -r mail@domain.ext ./
# Pour ne pas afficher la ligne mais son numéro :
# sudo grep -rn ./ -e 'mail@domain.ext'
# Pour Exim :
etc/exim4/exim4.conf.template:root@* mail@domain.ext FfrsTtcb
# Pour le serveur :
etc/aliases:root: mail@domain.ext
etc/email-addresses:root:mail@domain.ext
# Pour Logwatch :
etc/cron.daily/00logwatch:/usr/sbin/logwatch --mailto mail@domain.ext --detail high
# Pour Logrotate :
etc/logrotate.conf:mail mail@domain.ext
etc/logrotate.d/iptables:        # echo "Commencement de la rotation Iptables : $(date)" | mail -s "Commencement de la rotation Iptables depuis le serveur." mail@domain.ext
etc/logrotate.d/iptables:        mail mail@domain.ext
etc/logrotate.d/iptables:        # echo "Fin de la rotation Iptables : $(date)" | mail -s "Fin de la rotation Iptables depuis le serveur." mail@domain.ext
# Le mail indiqué dans chaque Les VirtualHosts.
# Le mail indiqué dans Joomla, WordPress, Mediawiki ...
# Le mail indiqué dans Gitea : sudo nano /etc/gitea/app.ini
# Le mail indiqué dans Redmine : Administration / Émetteur des notifications
# Pour PHP :
Le fichier de configuration de php, "php.ini".
Les scripts PHP personnalisés, ceux pour la page erreur 403 ...
# Les autres références au mail :
pubkey.txt
# Les autres services à vérifier ...
Fail2ban est basé sur sendmail lui même basé sur Exim4.
DenyHosts qui utilise "root@localhost", le système de notification ne semble pas encore au point.

Bibliographie

Tutoriels pour Exim

 Installer et configurer exim4 en relai smarthost : https://www.memoinfo.fr/tutoriels-linux/installer-exim-relai-smarthost/
 Consulter le manuel Exim sur le wiki de Debian : https://wiki.debian.org/Exim
 Consulter la FAQ Exim sur le wiki de Debian : https://wiki.debian.org/PkgExim4UserFAQ
 Specification of the Exim MailTransfer Agent (543 pages) : https://www.exim.org/exim-pdf-current/doc/spec.pdf
 Configurer Exim, un serveur de mails sous Debian : https://recordma.wordpress.com/2013/12/23/configurer-exim-un-serveur-de-mails-sous-debian/
 HOW TO SEND E-MAIL THROUGH SHELL USING EXIM4 : http://mewbies.com/how_to_setup_exim_mail_transfer_agent_for_linux_tutorial.htm
 Configuration d'exim4 avec Gmail : http://dev.petitchevalroux.net/linux/configuration-exim4-avec-gmail-linux.19.html
 Welcome to the Ubuntu Server Guide : https://help.ubuntu.com/lts/serverguide/exim4.html.en
 TLS and authentication : https://wiki.debian.org/Exim#Things_you_might_want_to_configure

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Amis SH.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de Amis SH vous permet de poser vos questions.
Consulter le site amis-sh.fr pour installer votre propre serveur web.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Miner de la cryptomonnaie.