Comment ne plus finir dans les spams

  • GNU/Linux


Bonjour, je vous propose un exemple de configuration basique (mais efficace wink ) pour votre serveur afin que vos emails ne finissent plus dans les spams. Nous allons utiliser postfix et opendkim afin de signer les emails avec une clé DKIM puis nous ajouterons une valeur SPF aux dns. Que du bonheur !!

 

Il faut commencer par installer les outils dont nous aurons besoin:

apt-get update && apt-get install -y postfix opendkim opendkim-tools mailutils

 

On continue avec une configuration simple de postfix pour envoyer des emails. Il faut pour cela éditer le fichier /etc/postfix/main.cf, comme dans cet exemple:

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 2 

# TLS parameters 
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache 
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = tondomaine.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, localhost
relayhost = mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
inet_protocols = all

Attention à bien éditer la variable myhostname !!

 

On relance postfix afin que la configuration soit bien prise en compte:

systemctl restart postfix.service

 

Ne pas oublier d'ouvrir le port 25:

iptables -t filter -A OUTPUT -p tcp --dport 25 -j ACCEPT

 

On test l'envoi d'email dans sa boîte perso pour s'assurer que tout fonctionne:

echo "test" | mail -s "test d'envoi d'email" tonemail@prestataire.com

 

Création des fichiers de base de opendkim:

mkdir -p /etc/opendkim/
mv /etc/opendkim.conf /etc/opendkim/
ln -s /etc/opendkim/opendkim.conf /etc/opendkim.conf
mkdir -p /etc/opendkim/keys
touch /etc/opendkim/KeyTable
touch /etc/opendkim/SigningTable
touch /etc/opendkim/TrustedHosts
cat > /etc/opendkim/TrustedHosts << EOF
127.0.0.1
localhost
EOF

 

Voici maintenant la configuration de opendkim que j'utilise avec le contenu du fichier /etc/opendkim/opendkim.conf:

Syslog yes
SyslogSuccess yes
LogWhy yes
UMask 007
Canonicalization simple
Mode sv
Socket inet:8891@localhost
PidFile /var/run/opendkim/opendkim.pid
X-Header yes
OversignHeaders From
TrustAnchorFile /usr/share/dns/root.key
UserID opendkim
KeyTable refile:/etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
ExternalIgnoreList /etc/opendkim/TrustedHosts
InternalHosts /etc/opendkim/TrustedHosts

 

A présent passons au contenu du fichier /etc/default/opendkim:

USER=opendkim
GROUP=opendkim
PIDFILE=$RUNDIR/$NAME.pid
EXTRAAFTER=
SOCKET="inet:8891:localhost"

 

Ok ça avance bien, on est bientôt au bout !!  On ajoute dans le fichier /etc/postfix/main.cf les variables suivantes pour que le serveur smtp puisse communiquer avec opendkim:

milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = inet:127.0.0.1:8891

 

On recharge postfix et opendkim:

systemctl restart postfix.service
systemctl restart opendkim.service

 

On a à présent une configuration de base fonctionnelle, mais dans l'état actuel des choses, aucun domaine ne sera signé. Pour ajouter des domaines, je me sers d'un script bash /root/add_opendkim_domain dont voici le contenu:

#!/bin/bash

domain="$1"

if [[ -z "$domain" ]]; then
  echo "Usage ./add_opendkim_domain mydomain.com"
  exit 1
fi

mkdir -p "/etc/opendkim/keys/$domain"
cd "/etc/opendkim/keys/$domain"
opendkim-genkey --restrict --domain "$domain"
chown opendkim:opendkim default.private
echo "$domain $domain:default:/etc/opendkim/keys/$domain/default.private" >> /etc/opendkim/KeyTable
echo "*@$domain $domain" >> /etc/opendkim/SigningTable
echo "$domain" >> /etc/opendkim/TrustedHosts
systemctl restart opendkim.service

 

Pour ajouter un domaine avec ce script, faîtes comme ceci:

# le rendre exécutable
chmod 700 /root/add_opendkim_domain
# l'utiliser de cette manière
/root/add_opendkim_domain mon-domaine.com

 

Chaque fois que vous ajoutez un domaine, une clé privée et une clé publique sont générées. Elles se situent sous /etc/opendkim/keys/mon-domaine.com/. Dans ce dossier vous trouverez default.private qui contient la clé privée et default.txt qui contient quant à lui l'entrée DKIM avec la clé publique à ajouter dans votre configuration DNS.

default._domainkey	IN	TXT	( "v=DKIM1; h=sha256; k=rsa; s=email; "
"p=MIIBIjANshdfhekKHHGghGOCAQ8AMIIBCgKCAjdjJuiuTFIOHOx9I4b/vCHHj557UM/3jHJHGJH5455JHJHC7R/mzHJ5555Jolhkkl55566kJ/G+2WXT8JJJGKGVFGI55JHkgiLFGU55656BFEWEERuj4JFukFGH565JHHUIJKHHJUIIHc0gxrxgqK4s/QuhMgkHHHJFZIGZIIGIG3536456HJFGZDFTZFU446fN458RbZtjq"
"cyVH6uaPsXCRBHKGI566KBHJHFRZq7+enNpeTqjn3ZY7jJKGIUGUIGUI54646767HJHATjF+Ps3LKbHKFZLFIFILFGIFFGI0opYWlEZXjUIZIOTZIUTI556766DAQAB" )  ; ----- DKIM key default for mon-domain.com

 

Et pour bien faire les choses, vous pouvez ajouter en plus une entrée SPF avec l'adresse ip de votre serveur.

@ IN TXT "v=spf1 ip4:IP_DU_SERVEUR ~all"

 

Si vous utilisez une clé DKIM et une valeur SPF vos emails devraient avoir moins de chances de finir dans les spams. J'espère que cela vous aidera !!