Si on utilise un serveur SMTP personnel, il arrive souvent que les mails envoyés soient considérés comme des spams. Voici quelques astuces pour éviter cela :

Outil

J'utilise un site qui permet de déterminer ce qui ne fonctionne pas. Ce site propose gratuitement d'effectuer 3 tests par jour : https://www.mail-tester.com

Configuration du DNS

Pour le domaine "toto.ovh" , adresse du serveur SMTP 1.2.3.4, il faut au minimum les lignes suivantes :

DOMAINE                      TTL    TYPE   CIBLE
toto.ovh.                    0      NS     dns101.ovh.net.
toto.ovh.                    0      MX     100 toto.ovh.
toto.ovh.                    0      A      1.2.3.4
toto.ovh.                    600    SPF    "v=spf1 a mx ip:1.2.3.4 ~all"
_dmarc.toto.ovh              0      TXT    "v=DMARC1;p=none"
dkim._domainkey.toto.ovh     0      TXT    "v=DKIM1;k=rsa;p=MIqG....A34B;"
SPF (Sender Policy Framework) indique quels sont les machines du domaine qui sont autorisés à envoyer des mails, ici :
  • Le serveur MX
  • Les machines qui ont un enregistrement A
  • La machine avec l'adresse IPv4 1.2.3.4 (s'il y a un relais, on indique à la place l'adresse du relais)
  • Les autres sont interdites (~all).
DMARC (Domain-based Message Authentication, Reporting and Conformance) permet d'indiquer la conduite à tenir si l'authentification échoue :
  • "p=none" laisse passer les messages
DKIM (DomainKeys Identified Mail) permet l'authentification par clés publique/privée :
  • "k=rsa" type de cryptage
  • "p=MIqG....A34B" clé publique d'opendkim

Configuration de POSTFIX

Eviter d'envoyer trop de mail en même temps

Dans /etc/postfix/main.cf :

default_destination_concurrency_limit = 2
default_destination_rate_delay = 7s
default_extra_recipient_limit = 5 

Postfix se connecte au maximum avec 2 connexions par domaine, avec un délai de 7 secondes entre chaque message du même domaine. Si le message est destiné à plus de 5 destinataires, il sera découpé en plusieurs envois.

Installation et configuration de DKIM pour Postfix

Sur le même serveur que postfix :

  • apt-get install opendkim opendkim-tools
  • Modification du fichier /etc/opendkim.conf :
AutoRestart             yes
AutorestartRate         5/1h
UMask                   002
Syslog                  yes
SyslogSuccess           yes
LogWhy                  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                  inet:17789@localhost
  • Modification du fichier /etc/default/opendkim
SOCKET="inet:17789@localhost"
  • Modification du fichier /etc/postfix/main.cf (ajouter à la fin les lignes suivantes)
########
# DKIM #
########
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:17789
non_smtpd_milters = inet:localhost:17789
  • Créer le dossier /etc/opendkim/keys/toto.ovh
  • Création du fichier /etc/opendkim/TrustedHosts, 178.18.0.20/16 est l'adresse locale du serveur mail (peut être facultatif ?)
127.0.0.1
localhost
172.18.0.50/16  
*.toto.ovh
  • Création du fichier /etc/opendkim/KeyTable
toto.ovh toto.ovh:dkim:/etc/opendkim/keys/toto.ovh/mail.private
  • Création du fichier SigningTable
*@toto.ovh toto.ovh
  • Dans le dossier /etc/opendkim/keys/toto.ovh :
    • opendkim-genkey -s mail -d toto.ovh
    • chown opendkim:opendkim mail.private
  • La clé publique est dans le fichier mail.txt
  • Réglez correctement le DNS
  • Puis relancez les services postfix et opendkim