Warning: session_write_close(): write failed: Disk quota exceeded (122) in /home/wikivpsz/public_html/doku.php on line 121

Warning: session_write_close(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in /home/wikivpsz/public_html/doku.php on line 121
hebergement-vps:tutoriels:installer-un-serveur-smtp-avec-postfix-sur-debian [Wiki VPSZ]

Outils pour utilisateurs

Outils du site


hebergement-vps:tutoriels:installer-un-serveur-smtp-avec-postfix-sur-debian

Ce tutoriel va vous expliquer comment installer & configurer Postfix sur une machine Debian 7. Puis nous verrons comment empêcher que vos emails soient envoyées en SPAM en mettant en place plusieurs mécanismes d'authentification.

Installer Postfix

  • Installer Postfix
apt-get install postfix
Reading package lists... Done
Building dependency tree... Done
Suggested packages:
  postfix-mysql postfix-pgsql postfix-ldap postfix-pcre libsasl2-modules dovecot-common resolvconf postfix-cdb ufw postfix-doc
The following packages will be REMOVED:
  rmail sendmail sendmail-bin
The following NEW packages will be installed:
  postfix
0 upgraded, 1 newly installed, 3 to remove and 102 not upgraded.
Need to get 1591 kB of archives.
After this operation, 1157 kB of additional disk space will be used.
Do you want to continue [Y/n]?
  • Choisir l'option “Site internet”

  • Définir le nom complet de votre serveur SMTP. Normalement postfix prendra comme valeur par défaut le contenu du fichier /etc/hostname. Dans notre cas le serveur SMTP s'appelera “Postfix” mais il est préférable d'utiliser un FQDN comme smtp.mondomaine.fr.

Votre serveur Postfix est déjà capable d'envoyer des emails cependant ils risquent tous d'arriver dans les spams ou d'être rejetés par le serveur mail de votre destinataire. Référez vous à la section “Eviter les spams” ci après.

Configurer Postfix

Postfix est un logiciel très complet, nous allons aborder rapidement les paramètres les plus importants.

Emplacement des fichiers de configuration

  • Fichier de configuration principal /etc/postfix/main.cf
  • Fichier de configuration des alias /etc/aliases
  • Fichier de configuration des démons & les modes de transports /etc/postfix/master.cf

Options importantes

Ci dessous une liste non exchaustive des options les plus courantes qu'il est possible de modifier dans le fichier main.cf

  • myorigin : Nous vous le disions précédément Postfix va par défaut envoyer des emails avec le FQDN de votre machine spécifié lors de l'installation. Cette option peut être changé en éditant manuellement le fichier /etc/mailname et en dé-commentant la ligne myorigin du fichier main.cf
  • myhostname : Cherchez pas très loin dans 99% des cas c'est le contenu du fichier /etc/mailname.
  • relayhost : Cette option permet d'indiquer à postfix qu'il ne doit pas envoyer les emails au destinataire mais le transmettre à une passerelle SMTP qui se chargera de le délivrer. Nous expliquerons dans un prochain article comment configurer l'authentification d'un serveur postfix avec une passerelle SMTP postfix également.
  • mynetworks : Indiquez votre réseau pour que postfix ai le droit d'envoyer un email. Par défaut postfix le configure correctement vous pouvez supprimer les lignes IPV6 si nécessaire.
  • mydestination : Cette option est très importante et va vous éviter de perdre un temps fou en cherchant pourquoi vous ne recevez pas les emails que vous vous envoyez. mydestination indique les domaines pour lesquels postfix ne doit pas envoyer l'email vers internet mais doit délivrer localement le courrier. Prenons l'exemple que votre serveur postfix doit envoyer un email de test à toto@tata.fr et que votre serveur postfix se nomme également tata.fr. Dans la configuration basique de postfix vous aurez la valeur $myhostname ou directement tata.fr dans l'option mydestination. Résultat le mail sera délivré en local vous le trouverez dans le répertoire /var/mail/toto.

Votre fichier de configuration doit ressembler à quelque chose comme ça

#/etc/postfix/main.cf
 
#myorigin = /etc/mailname
myhostname = smtp.mondomaine.fr
mydestination = localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8
inet_protocols=ipv4 #Forcer l'écoute sur le protocole IPV4 (Utilse si IPV6 est configuré sur le serveur et que vous voulez envoyer vos emails avec le protocole IPV4)

Eviter les spams

Dans la pluspart des tutoriels sur internet vous ne trouverez que la première partie que l'on vient d'expliquer, comment installer Postfix. C'est bien jolie on peut envoyer des mails mais ils sont refusés partout, la suite de cet article va vous expliquer les configurations supplémentaires pour éviter au maximum les spams.

Sachez qu'il n'y a pas de recette miracle. La première des choses est évidente elle consiste à s'assurrer que l'adresse IP qui servira à envoyer les emails n'est pas présente dans une liste noire. Pour cela vous trouverez de nombreux site sur Google “Check IP reputation” (Exemple : http://www.cyren.com/ip-reputation-check.html)

Vous êtes hébergé chez nous et votre IP est présente dans plusieurs listes noire ? Contactez le support technique

  • Reverse DNS : Le reverse DNS est un mécanisme de résolution DNS qui associe une adresse IP à un nom. Il va permettre de prouver que vous êtes bien le propriétaire du domaine qui va envoyer des mails.
  • Enregistrement SPF : L'enregistrement DNS “SPF” est un champ TXT qui inique les adresses IPs d'un domaine ou d'un sous domaines qui sont autorisés à envoyer des emails. Toutes les autres IPs qui tenteront d'envoyer des emails avec votre domaine ne valideront pas le test “SPF”.
  • Open DKIM : Open DKIM fonctionne avec un système de clés et ajoute une signature dans le mail avant de l'expédier. Vous trouverez une définition sur ce site (http://www.definitions-webmarketing.com/Definition-DKIM).
  • DMARC : Nous n'aborderons DMARC dans cet article. Les configurations précédentes sont suffisantes pour que vos emails ne soient pas configurés comme SPAM.

Pour être quasi certain que vos emails seront délivrés sans problèmes vers tous les domaines vous devez au minimum respecter le Reverse DNS, l'enregistrement SPF et la configuration d'Open DKIM.

Reverse DNS

Pour mettre en place le reverse DNS de votre adresse IP ouvrez un ticket de support pour que nous réalisions l'opération. Avant d'envoyer le ticket créez un enregistrement A (Hôte) du domaine vers l'adresse IP de votre VPS.

Enregistrement SPF

Comme nous vous le disions l'enregistrement SPF est un simple champ TXT à ajouter à votre configuration DNS.

Voici quelques exemples pour vous aider à le mettre en place :

  • Autoriser une adresse IP et interdire tout le reste
"v=spf1 ip4:192.168.50.1 -all"
  • Autoriser un nom de domaine et interdire tout le reste
"v=spf1 a:smtp.exemple.fr -all"
  • Autoriser un réseau et interdire tout le reste
"v=spf1 ip4:192.168.100.0/24 -all"

Open DKIM

Installation et Configuration

La configuration d'open DKIM est plus compliqué que le reste si vous n'êtes pas très familié avec linux nous vous conseillons de ne pas tenter la suite du tutoriel. Si vous avez positionner le reverse DNS, que votre IP est “Propre et que le SPF fonctionne alors ça devrait déjà être correct.

  • Installation des paquets nécessaires
apt-get update && apt-get upgrade
apt-get install opendkim opendkim-tools
  • Modification du fichier de configuration principal /etc/opendkim.conf . Vous n'avez rien à modifier dans ce fichier mise à part le “Socket” si vous voulez modifier le port d'écoute d'OpenDKIM (Par défault 12301)

Vous l'éditer avec vim ou nano

#/etc/opendkim.conf
AutoRestart             Yes
AutoRestartRate         10/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:12301@localhost

Autorestart : Redémarre en cas d'échec
AutorestartRate : Définit le nombre de redémarrage maximum par heure. Ici on autorise 10 redémarrage par heure au maximum.
Syslog : Permet d'activer ou non les logs.
InternalHosts : Défini une liste des serveurs internes dont le courrier ne doit pas être vérifié mais signé.
Keytable : Fait la correspondance entre les selectors et l'emplacement des clés
SigningTable : Fait la correspondance entre les domaines et les selectors
PidFile : Emplacement du fichier PID.
SignatureAlgorithm : Algorithme de signature à utiliser lors de la création des certificats.
UserID : Utilisateur et groupe de l'utilisateur qui executera le service OpenDKIM
Socket : OpenDKIM écoutera sur l'adresse IP et le port spécifié. Dans notre cas c'est en localhost sur le port TCP 12301.

  • On modifie le fichier /etc/default/opendkim
#/etc/default/opendkim
SOCKET="inet:12301@localhost"
  • On va modifier la configuration de postfix pour lui dire d'utiliser les “milters”

Certaines des lignes indiquées ci dessous peuvent déjà être présentes dans votre fichier de configuration, vérifiez bien avant de les ajouter

#/etc/postfix/main.cf
milter_protocol = 2
milter_default_action = accept

smtpd_milters = inet:localhost:12301 non_smtpd_milters = inet:localhost:12301</code>

  • On crée les répertoires ou on stockera les clés.
mkdir /etc/opendkim && mkdir /etc/opendkim/keys
  • On modifie le fichier TrustedHosts. Vous pouvez même utiliser des wildcards pour autoriser tout un domaine, dans notre cas on autorise le domaine exemple.com et tous ses sous domaines *.exemple.com. En d'autres termes tous les emails envoyés avec @exemple.com seront autorisés et signés par OpenDKIM.

Ne pas modifier les deux premières lignes il faut que votre serveur soit autorisé dans le fichier TrustedHosts.

#/etc/opendkim/TrustedHosts
127.0.0.1
localhost
*.exemple.com
  • On crée la table qui associe les selectors avec les clés. Dans notre cas nous avons le selector “mail”, lorsqu'un mail en provenance de @exemple.com sera envoyé il utilisera la clé mail.private pour signer le mail. Remplacez seulement mail par un nom commun ou laissez tel quel, et modifiez exemple.com par votre domaine.
#/etc/opendkim/KeyTable
mail._domainkey.exemple.com exemple.com:mail:/etc/opendkim/keys/exemple.com/mail.private
  • On crée la table qui associe les domaines avec les selectors. Dans notre cas les mails envoyés par @exemple.com utiliseront le selector crée à l'étape précédente.
#/etc/opendkim/SigningTable
*@exemple.com mail._domainkey.exemple.com
  • On se rend dans le répertoire qui stocke les clés.
cd /etc/opendkim/keys
  • On crée le répertoire du domaine spécifié dans notre cas c'est exemple.com
mkdir exemple.com
  • On crée les clés avec la commande ci dessous.

-s : Selector
-d : Domaine

opendkim-genkey -s mail -d exemple.com

Vous avez maintenant deux fichiers mail.private et mail.txt.

  • On va juste s'assurer que le propriétaire du fichier mail.private est bien opendkim:opendkim en exécutant la commande ci dessous :
chown opendkim:opendkim mail.private

Création de l'enregistrement DNS

Nous avons maintenant configuré postfix et opendkim pour qu'il puisse signé les emails. Pour que la signature fonctionne nous devons ajouter un champ DNS. Ce champ DNS contiendra la clé publique. Vous devez créer un champ TXT avec le contenu du fichier /etc/opendkim/keys/exemple.com/mail.txt.

Vous devriez obtenir quelque chose de similaire

#cat /etc/opendkim/keys/exemple.com/mail.txt
mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for exemple.com

Vous devez donc créer un enregistrement TXT pour exemple.com contenant “v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB”

Vérifier que tout fonctionne

C'est bien beau on a passé 1 heure à tout configurer mais maintenant comment on fait pour tester ?

On va simplement envoyer un email en ligne de commande et inspecter le “header” du mail.

echo "C'est un test" | mail -s "[VPSZ] Test DKIM" mail@monmailperso.fr

Vous devriez voir dans le header les éléments ci dessous. Dans l'exemple c'est un mail envoyé vers une adresse Gmail.

spf=pass dkim=pass

Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of exemple@exemple.com designates IP.DE.MON.VPS as permitted sender) smtp.mail=exemple@exemple.com;
       dkim=pass header.i=@exemple.com

Vous pouvez aussi envoyer un email en ligne de commande à une adresse mail tester https://www.mail-tester.com/. Vous aurez le résultat sur une page web plus simple à lire.

Bon courage !

hebergement-vps/tutoriels/installer-un-serveur-smtp-avec-postfix-sur-debian.txt · Dernière modification: 2015/03/08 14:01 par mathieu