Son propre serveur de courrier avec PostFix

Postfix est un serveur libre de messagerie électronique développé à l'origine comme une alternative, plus simple et plus sécurisée, à sendmail. Aujourd'hui c'est une énorme usine à gaz qui demanderait quelques bonnes vies de chat pour être correctement maîtrisée. L'objectif de ce tutoriel est de voir comment nous pouvons utiliser cet outil de manière très fortement allégée dans le seul but de gagner en indépendance vis à vis d'un fournisseur, mais aussi en puissance et en souplesse.

La cible

L'architecture cible n'est pas totalement triviale mais se veut la plus sûre possible. L'idée est de disposer d'une machine distante chargée de recevoir le courrier à travers un service SMTP (postfix) et de le traiter avec outil anti-SPAM (spamassassin). Ensuite, le courrier est ré-acheminer vers la machine correspondant au domaine correspondant à l'adresse cible. Étant entendu que les domaines pris en charge sont exclusivement les nôtres et/ou éventuellement ceux de quelques ami(e)s.

L'avantage de cette architecture est qu'elle permet de rentabiliser une machine louée par exemple pour un hébergement WEB (ex. dédibox) tout en préservant la sécurité du réseau local car seule cette machine distante est autorisée à parler avec notre machine locale.

Cela dit, toute complète qu'elle soit, cette architecture reste très simplement dégradable pour ne fonctionner qu'avec un seul serveur local. A vous de sécuriser proprement son accè, par exemple en la plaçant dans une DMZ.

DNS et enregistrement MX

Pour recevoir du courrier l'idéal est de disposer d'une IP fixe, ce qui est automatique avec une dédibox ou une freebox, et en option gratuite pour Orange en mode Pro. Il existe cependant des solutions IP variables en passant par des services comme DynDNS.org.

Pour pouvoir utiliser notre IP, il nous faut aussi acheter un nom de domaine. Il s'agit là d'une formalité qui ne coûte pas le service qu'il rend (12€ chez Gandi pour un .fr ou un .net). Et une fois ce domaine en poche, il ne nous reste plus qu'à configurer ses zones de sorte à ce que notre nouveau nom pointe sur notre IP.

Chez Gandi cela se fait très facilement avec un peu de courage et de gougueulage en passant par l'interface "gestion des Zones", en mode Avancé ou Expert. La version la plus simple que nous devons obtenir pour le routage du courrier doit ressembler à cela :

mon_server 300 IN A 11.22.33.44
smtp.mon_domaine.net 300 IN CNAME mon_server
@ 300 IN MX 10 smtp.mon_domaine.net.

Sans rentrer dans les arcanes de la syntaxe DNS, tout ceci indique que la machine mon_serveur pointe sur l'adresse IP 11.22.33.44 de sorte à ce qu'un ping mon_server.mon_domaine.net réponde positivement. C'est ce que l'on appelle une enregistrement A (principal).

Ensuite vient un enregistrement CNAME qui n'est autre q'un alias sur un enregistrement A. Ce n'est pas strictement nécessaire mais c'est plus propre ainsi, notre serveur SMTP sera donc accessible par smtp.mon_domaine.net.

Enfin vient un enregistrement MX qui définit le nom qualifié de la machine qui est censée prendre en charge le courrier entrant (n'oubliez pas le . final). Notez le chiffre 10 qui définit la priorité de cet enregistrement. L'idée est que si vous avez des amis qui ont eux aussi un domaine et un serveur courriel, vous pouvez ajouter d'autres enregistrement MX pointant chez eux. Ainsi si le MX de plus forte priorité ne répond pas, le courrier est envoyé à celui qui une priorité inférieur. Ainsi il est possible de renforcer mutuellement plusieurs serveurs pour être certain de ne rien perdre.

Pour chacun des enregistrements 300 indique un délai en secondes que les serveurs utilisent comme base de temps pour les mises à jour. Ici, la mise à jour est faite, en cas de changement des données DNS, toutes les 5 minutes.

Une fois que vos modifications sont correctement propagées sur le net (comptez 24 heures pour la première fois), la mécanique fonctionne de la manière suivante. Lorsqu'un utilisateur du Net veut vous envoyer un courriel, il le fait à l'adresse gaston@mon_domaine.net. Son client de courriel va généralement le poster au serveur de courriel de son fournisseur d'accès. On parle ici de serveur SMTP (Simple Mail Transport Protocol). Le SMTP du FAI va regarder le domaine du destinataire et regarder dans sa définition de zone (celle que nous venons de propager) s'il trouve un enregistrement MX. Lorsqu'il en trouve un il remonte (je simplifie ;-)) à l'enregistrement CNAME pour finalement récupérer son IP par son enregistrement A.

Là, il va se connecter sur cette IP, la vôtre, sur le port 25 qui correspond à SMTP. Maintenant il faut que quelqu'un lui réponde sinon c'est la cata, courriel perdu, amis fâchés, tout ça, tout ça. Passons donc à l'installation chez nous de ce fameux serveur SMTP, M. Postfix.

L'organisation de postfix

Postfix est donc un serveur de messagerie qui a la particularité de se composer d'une série de sous-démons travaillant de concert pour former une véritable chaîne de traitement du courrier entrant. Dans le graphique ci-contre, en vert sont les entrées de courrier, en orange les démons traitant les messages, en chocolat les différentes files de stockages, et en prune les sorties.

Les messages peuvent ainsi être distribués soit localement en les insérant dans la file maildrop ou à distance en passant par le service SMTP. Dans les deux cas, les messages finissent par être pris en charge par le démon cleanup qui les stocke dans la file incoming. Ensuite le démon qmrg ventile les messages vers du stockage local, un autre serveur SMTP ou vers le démon lmtp communiquant via le protocole LMTP (Light Mail Transport Protocol) très bien adapté au transport local du courrier, par exemple vers le serveur dovcot (imap).

Installation de postfix

Ici rien de sorcier, tout est dans le même paquet sur la grande majorité des distributions, sur une debian cela donnerait donc

aptitude install postfix
installation de postfix

Le résultat sera une installation quasi vierge que nous allons pouvoir paramétrer proprement.

Paramétrage de postfix

L'installation de postfix ne pose aucun problème, c'est plus sa configuration qui rend chauve prématurément. Pour rentrer directement dans le vif de sujet, allons jeté un oeil à ce que devra être la configuration principale du serveur, le fichier /etc/postfix/main.cf. Ce qui suit est une configuration qui fonctionne sur trois serveurs dont j'ai la charge et ce sans problème depuis des années.

L'identité du serveur

Pour éviter de trop donner d'informations au monde extérieur sur ce qui tourne sur notre machine, nous donnons ici de charmants petits noms d'oiseaux au serveur :

smtpd_banner = $myhostname Tagazok !
mail_name = PiouPiou
mail_version = 6.6.6
limitation de l'identification au strict minimum

Paramétrage du réseau

Ici nous allons spécifier la manière dont postfix "écoute" le réseau. Cela consiste basiquement à le connecter à toutes les IP de la machine (c'est un serveur ouvert sur l'extérieur) et à se concentrer sur IPV4.

inet_interfaces = all
inet_protocols = ipv4
Paramétrage de l'écoute

Gestion du domaine

Nous avons là le paramétrage du domaine à gérer par postfix. Assez simple nous concernant.

# le nom qualifié du serveur
myhostname = mon_serveur.mon_domaine.net      

# le domaine principal géré par le serveur
mydomain = mon_domaine.net                    

# Lorsqu'un mail part d'ici, c'est ce domaine qui est inscrit dedans.
myorigin = mon_domaine.net                    

# On indique ici que le courrier n'est pas à re-expédier ailleurs, mais stocker localement
mydestination = mon_domaine.net                
définition du domaine

Maintenant il nous faut définir nos "réseaux de confiances", c'est à dire les plages d'adresses IP pour lesquels postfix vous autorisera par exemple l'envoi de courriels vers d'autres serveurs. On y ajoute donc notre réseau local car c'est de là que sera expédié le courrier (plus la peine d'utiliser le SMTP de votre FAI). L'ajout du localhost nous permettra d'installer par exemple un WebMail comme SquirrelMail ou Roundcube sur la même machine que postfix.

mynetworks = 127.0.0.0/8,192.168.154.0/28      
réseaux de confiance

Ensuite nous indiquons les domaines que postfix a le droit de relayer. Attention à ce paramétrage car il ne faudrait pas que votre serveur devienne ce que l'on appelle un "relais ouvert" permettant aux spammeurs d'accomplir leur méfaits. Vous allez y mettre bien sur votre domaine (mydestination), mais vous pouvez aussi ajouter les domaines "amis" que nous prenons en charge que ce soient ceux correspondant à nos enregistrements MX de backup ou simplement des domaines que vous hébergez chez vous.

relay_domains = $mydestination domaine_ami.net  
définition des domaines relayables

Lorsque vous avez terminé votre configuration, vérifiez systématiquement que votre serveur n'est pas une porte ouverte aux spams avec des outils en ligne comme celui-ci.

Normalement lorsque l'on utilise notre postfix pour envoyer un mail, il va chercher directement à contacter le serveur SMTP du destinataire. Si vous ajoutez le paramètre suivant, le courrier sera plutôt envoyé à un serveur intermédiaire. Cette option est pratique par exemple si vous n'avez pas de reverse-dns (genre chez orange...) et que vos destinataires prennent votre serveur pour une source de SPAM

relayhost = smtp.free.fr
définition d'un serveur SMTP de relais

Avant poste du filtrage des SPAM

Notre ennemi juré, c'est le SPAM. Le but est donc maintenant d'ajouter au serveur SMTP un ensemble de règles lui permettant de qualifier le courrier entrant. Le principe est que c'est très mais alors très rapide en comparaison de SpamAssassin car directement intégré au moteur SMTP de postfix. Si le test ne passe pas, le vilain est jeté sans somation.

smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination
        check_recipient_access hash:/etc/postfix/spam,
        permit
Qualification des courriels entrant

Alors j'ai mis ici les règles les plus "safe" en ajoutant un "plus" particulièrement intéressant, la référence à un fichier /etc/postfix/spam pouvant contenir des motifs d'adresse cible à rejeter. Cela va nous permettre d'éliminer des adresses non utilisées mais très polluées, typiquement des adresses que vous avez "grillées" et qui sont pourries de SPAM.

Pour initier cette liste, commencez par la créer (avec nano, vi, etc.) et y ajouter une adresse suivie d'une action REJECT. Le principe sera que dés que le serveur SMTP verra arriver cette adresse cible (dans le champ TO), il arrêtera tout traitement concernant ce courriel. Brutal mais efficace.

vielle_adresse@mon_domaine.net      REJECT
exemple de fichier /etc/postfix/spam

En l'état cette liste n'est pas utilisable par postfix. Elle doit préalablement être "compilée" en une base de donnée. Pour cela, utilisez la commande postmap

root#postmap spam
root#ls spam*
spam spam.db
Compilation d'une table postfix

Comme vous le voyez, la commande à généré un fichier spam.db, la version indexée de la liste d'origine. A chaque fois que vous modifiez une table, vous devrez lancer cette commande dessus.

Gestion des alias

Les alias sont une étape optionnelle si vous ne gérez qu'un domaine et que vous n'avez au final qu'un compte mail cible par adresse source. En réalité ce cas n'est jamais vérifié car nous avons tous besoin au minimum de rediriger une série d'adresses sur un même compte (ex. root@mon_domain.com vers mon adresse standard). Les alias permettent donc de jouer le rôle de redirecteur d'une adresse, d'un groupe d'adresse ou même d'un domaine complet vers une autre adresse.

Pour mettre ceci en oeuvre, nous ajoutons allons ajouter une autre liste (comme pour les spams) qui va nous permettre cette mise en relation :

virtual_alias_maps = hash:/etc/postfix/aliases
Définition des aliases

Reste maintenant à nourrir ce fichier :

# tous les courriers pour le domaine mon_domaine.net et mon_second_domaine.net va en priorité à gaston
@mon_domaine.net             gaston
@mon_second_domaine.net     gaston

# le courrier de robert lui revient
robert@mon_domaine.net       robert
exemple de fichier /etc/postfix/aliases

Comme pour la liste des spams, nous devons compiler cette liste après modification à l'aide de la commande postmap.

root#postmap aliases
root#ls aliases
aliases aliases.db
Compilation d'une table postfix

Limitations de taille

Pour terminer, vous pouvez aussi modifier les limites de tailles imposées à un message et une boîte aux lettres (en octets). Cette opération nous permet de recevoir de très gros fichiers sans encombres, ce qui est un autre avantage à posséder son propre serveur :

message_size_limit = 104857600
mailbox_size_limit = 104857600
limitation de la taille des messages et des boîtes aux lettres

Placer l'une de ses valeurs à 0 pour ne pas avoir de limitation du tout.

Gestion des erreurs

Le soft bounce est à manier avec beaucoup de précaution. D'une certaine manière, il assure que vos courriels ne seront jamais rejetés mais stocké en queue si par exemple votre espace disque est totalement consommé ou que SpamAssassin est parti en vrille. En contrepartie, il va ré-émettre comme un sauvage les courriels à "faux numéro", ce qui a le don d'exaspérer les serveurs d'en face avec le risque de vous faire marquer comme spammeur. Personnellement je le laisse à no et le passe à yes lorsque je fais des opérations de maintenance pour ne pas perdre de courrier.

soft_bounce=no
définition du 'soft bounce'

Lorsque soft bounce est à no, nous avons donc le risque de perdre du courrier si un élément est défaillant dans la chaîne de traitement des messages (spamassassin en carafe, disque plein, etc). Pour contrer cela, l'astuce est de changer le code d'erreur généré pour un destinataire invalide de 550 (ce qui veut dire "mail rejeté") à 450 (ce qui veut dire "essayez un peu plus tard"). Du coup le serveur d'en face va (de mémoire) retenter l'envoi toutes les 10 minutes pendant 4 heures, avant de déclarer que votre courrier est vraiment mort.

unknown_local_recipient_reject_code = 450
stratégie de récupération d'erreurs

Test de l'installation

Maintenant que nous avons paramétré notre serveur, il nous reste à vérifier que cela fonctionne. La première chose à faire sera évidement de le (re)démarrer

root#/etc/init.d/postfix restart
Stopping Postfix Mail Transport Agent: postfix.
Starting Postfix Mail Transport Agent: postfix.
Redémarrage de postfix

Vous pouvez aussi utiliser la commande /etc/init.d/postfix reload si postfix est déjà lancé, c'est un peu moins bourrin.

Ensuite pour tester, le plus simple dans un premier temps est d'utiliser l'antique client telnet que nous allons connecter au port 25 (SMTP) de notre serveur :

root#telnet smtp.mon_domaine.net 25
Trying 11.22.33.44...
Connected to smtp.mon_domaine.net (11.22.33.44).
Escape character is '^]'.
220 mon_serveur.mon_domaine.net Tagazok !!
>ehlo son_domaine.net
250-smtp.mon_domaine.net
250-PIPELINING
250-SIZE 1004857600
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
>mail from: robert@son_domaine.net
250 2.1.0 Ok
>rcpt to: gaston@mon_domaine.net
250 2.1.5 Ok
>data
354 End data with <CR><LF>.<CR><LF>
>Robert parle à gaston !!
>
>.
250 2.0.0 Ok: queued as D421D908DA0
>quit
221 2.0.0 Bye
Connection closed by foreign host.
root#
Session de test de notre serveur Telnet

Si tout c'est bien passé, gaston devrait ainsi recevoir un courriel de robert. Cette approche peut aussi être utilisée pour tester les barrières anti-spam. Toujours est-il que cela fonctionne, nous pouvons donc passer à la suite, le stockage du courrier.

Redirection du courrier

A ce stade, notre serveur postfix est capable de prendre en charge le courrier entrant, c'est déjà une bonne chose. Côté stockage, si rien n'est fait, le courrier de gaston est posé, à l'ancienne, dans le dossier /var/mail/gaston.

Si votre serveur postfix est sur votre réseau local, vous pouvez changer cela pour utiliser plutôt un stockage via un serveur IMAP comme cyrus ou dovecot (un tutoriel pour cyrus est dispo iciici, et pour dovecot par ).

Mais si votre serveur postfix est sur une machine distante (ex. une dédibox), il va falloir trouver un moyen pour que votre courriers soient ré-acheminés sur votre serveur local. C'est aussi le cas si vous êtes serveur secondaire pour un ami.

Pour y arriver, une solution assez simple est d'installer un second serveur postfix sur votre réseau local. Ce serveur postfix sera configuré pour ne prendre en charge que le courrier de votre domaine ce qui au fond reprend à peu prés (au delta du paramétrage des domaines amis) la configuration que nous venons de voir.

Ensuite, la seule chose à faire est d'indiquer au postfix distant comment ré-acheminer le courriels de votre domaine. Pour cela nous allons rajouter une nouvelle table transport

transport_maps = hash:/etc/postfix/transport
Définition de la table de transport

Nous pouvons maintenant créer et alimenter cette table :

mon_domaine.net           smtp:[11.22.33.44]
domaine_ami.net           smtp:[mail.domain_ami.org]
Exemple de fichier /etc/postfix/transport

Comme toujours, pensez à recompiler la table avec la commande postmap après modification.

Comme vous le voyez, c'est aussi là que nous traitons le ré-acheminement du courrier du domaine ami que nous avons déclaré plus haut par relay_domains.

Une fois nos deux postfix paramétrés, le courriel arrive sur le premier (le serveur distant), est accepté (à cause de relay_domains), puis redirigé sur le serveur local grâce à la table transport. Là vous pouvez un routage final vers votre serveur IMAP, et c'est terminé.

A ce stade tout est presque prêt sauf un léger détail, postfix va rejeter tous ces courriels non-locaux parce qu'ils sont... non locaux... Pour éviter ce gag, il faut demander à notre ami de ne plus vérifier que le destinataire dispose d'un compte en local pour traiter son courriel :

local_recipient_maps =
Déclaration d'une table de destinataires vide

Installation de SpamAssassin

Le filtrage des sales courriels par les règles du moteur SMTP que nous avons vu plus haut est vital mais très loin d'être suffisant. Pour ne pas se faire inonder d'offres plus alléchantes les unes que les autres pour augmenter significativement la taille de votre pénis (ou celui de votre entourage intime), il est indispensable de mettre en oeuvre un système plus évolué, le fameux SpamAssassin.

S'agissant d'un processus qui consomme un peu de CPU, il est préférable, si vous avez une configuration à deux serveurs postfix, de le poser sur la machine la plus véloce. Pour se faire, il faut commencer par installer les paquets spamassassin, spamc et pyzor. Ce dernier est un système collaboratif et ouvert de détection de spam qui va nous permettre d'augmenter l'efficacité de spamassassin.

aptitude install spamassassin spamc pyzor
installation de spam assassin

le paquet spamassassin contient à la fois le moteur de traitement de spam et un démon, spamd, qui va permettre de charger en mémoire plusieurs instance du moteur prêtes à l'emploi. spamc est quant à lui le client de ce démon.

Paramétrage de spamd/spamassasin

Spamassassin a ses fichiers de paramétrages placés en /etc/spamassasin. Ce dossier contient entre autre /etc/spamassasin/local.cf que vous pouvez modifier comme suit :

dns_available                   yes

# Activation du systeme Bayes
use_bayes                       1
bayes_auto_learn                1
bayes_learn_to_journal          1
bayes_journal_max_size          0
bayes_path                      /var/spool/spamassassin/bayes

# Activation de l'auto whitelist
use_auto_whitelist              1
auto_whitelist_path             /var/spool/spamassassin/auto-whitelist
auto_whitelist_file_mode        0666

# Activation de DCC
use_dcc                         1
dcc_timeout                     8
dcc_home                        /var/spool/spamassassin/dcc

# Activation de Pyzor
use_pyzor                       1

# Activatin de Razor
use_razor2                      1
razor_timeout                   8

# Optimisation des scores
score DCC_CHECK 4.500
score SPF_FAIL 10.000
score SPF_HELO_FAIL 10.000
score RAZOR2_CHECK 2.500
score RAZOR2_CF_RANGE_51_100 3.500
score BAYES_99 5.300
score BAYES_95 4.500
score BAYES_80 3.500
score BAYES_60 2.500
score BAYES_50 2.000

# Langages
ok_languages                    en fr vi
ok_locales                      en

#required_hits                          5

#add_header all Report _REPORT_
header Subject          /SPAM/
report_safe                     1
configuration spamassassin

Pas grand chose à signaler sur cette configuration assez simple à comprendre. Pour les différentes stratégies de filtrage (bayes, pyzor, razor2, etc.) demandez à M. Google qui expliquera cela beaucoup mieux que moi.

La version 3 de spamassassin fonctionne par plugins. Il y en a deux qui nous intéresse d'activer par rapport à notre configuration : dcc et textcat. Le premier va utiliser une base de données de spam, le second permet de deviner le langage d'un spam. Pour cela nous devons éditer le fichier /etc/mail/spamassassin/v310.pre pour décommenter les deux lignes suivante :

loadplugin Mail::SpamAssassin::Plugin::DCC

(...)
loadplugin Mail::SpamAssassin::Plugin::TextCat    
paramétrage des greffons spamassassin

Nous allons maintenant créer un utilisateur spamassassin qui va avoir comme dossier home /var/spool/spamassassin. Ce dossier contiendra tout le paramétrage et les mise à jours de spamassassin :

root#mkdir /var/spool/spamassassin
root#useradd -d /var/spool/spamassassin -s /bin/false spamassassin
root#chown spamassassin:spamassassin /var/spool/spamassassin -Rc
création de l'utilisateur spamassassin

Maintenant que spamassassin est paramétré, il nous reste à vérifier que son démon, spamd, fonctionne. Sous Debian, le paramétrage du lancement de spamd est contrôlé par le fichier /etc/default/spamassassin.

ENABLED=1
OPTIONS="--create-prefs --max-children 5 --helper-home-dir -u spamassassin -g spamassassin"
PIDFILE="/var/run/spamd.pid"
CRON=1
paramétrage de spamd

Avec ce paramétrage nous avons activé le serveur spamd (ENABLED=1) et la mise à jour automatique de spamassassin (CRON=1). Enfin vous pouvez en plus rajouter -D dans les options pour obtenir de très nombreuses traces de deboggage.

Il suffit maintenant de lancer spamd et de vérifier dans les logs que tout s'est bien passé:

root#/etc/init.d/spamassassin restart
Restarting SpamAssassin Mail Filter Daemon: spamd.
root#tail -f /var/log/syslog
...

Si aucune erreur n'apparaît dans les logs, le démon spamassassin est en route. Reste maintenant à paramétrer postfix.

Paramétrage de postfix

Nous allons indiquer à postfix d'insérer un script de notre cru dans la chaîne de traitement des courriers, juste après la réception par le moteur SMTP. Pour cela, modifier le fichier /etc/postfix/master.cf comme suit :

smtp inet n - n - - smtpd   -o content_filter=spamassassin:
insertion du filtrage de SPAM sur le module SMTP de postfix

et rajouter à la fin du fichier :

spamassassin unix - n n - - pipe flags=Rq user=spamassassin argv=/etc/postfix/spamassassin.sh -f ${sender} -- ${recipient}
insertion du filtrage de SPAM sur le module SMTP de postfix

Tout est en place, il faut maintenant fabriquer le script de filtrage dont le but est de recevoir le courrier entrant (postfix), de le traiter avec spamassassin via spamc/spamd, puis de le ré-expédier sur la chaîne suivante. Le script est à placer (par exemple) dans le fichier /etc/postfix/spamassassin.sh :

#!/bin/bash

IP="$1" ; shift
FROM="$1"; shift
TO="$1"

logger -t spamd "$FILE Client:$IP From:$FROM To:$TO CC:$@"
/usr/bin/spamc -u $TO | /usr/sbin/sendmail -i -f $FROM "$@"
exit $?
script de filtrage des spams - /etc/postfix/spamassassin.sh

Ceci fait, il faut juste rendre ce script exécutable et opérer un petit redemarrage de postfix et c'est fini. Vous pouvez auditer les logs par un tail -f /var/log/syslog pour vérifier que tout ce passe correctement. Et si tout marche, il ne reste plus qu'à attendre 10 secondes qu'un pourriel se présente :)

Quelques astuces

Remise en queue des messages

L'objectif de cette commande est de permettre aux messages d'être à nouveau interprétés par postfix pour être replacés dans les bonnes queues. Elle est notamment très utile lorsque l'on a des erreurs de configuration qui une fois corrigées laissent des messages en attente (ex. désinstallation d'amavis et message d'erreur warning: connect to transport smtp-amavis: No such file or directory) :

root#postsuper -r ALL
postsuper: Requeued: 5 messages
remise en queue des messages

Liste des messages en queue

Lorsque Postfix n'arrive à rien faire d'un message, il le met en file d'attente. Les commande suivantes permette d'avoir l'état de ces files :

# ces deux commandes sont équivalentes
root#postqueue -f
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
1DEC5908D05 3716 Mon Jan 19 14:33:50 tcpv@mon_domaine.com
(mail forwarding loop for tartignole@mon_domaine.com)
 
root#mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
1DEC5908D05 3716 Mon Jan 19 14:33:50 tcpv@mon_domaine.com
(mail forwarding loop for tartignole@mon_domaine.com)
Affichage des messages en non-traités

Suppression d'un message en queue

La commande précédente donne la liste des messages en attente dans la queue de postfix (généralement des spams :/). Chaque message dispose d'un ID qui permet de le détruire spécifiquement :

root#postqueue -d ID_MESSAGE
destruction d'un message unique

S'il s'agit de détruire tous les messages en queue (attention !!) vous pouvez utilisez la commande suivante :

root#postqueue -d ALL
postsuper: Deleted: 5 messages
destruction de tous les messages en queue

Profil de répartition des messages dans les queues

Pour voir de plus prés l'utilisation d'une queue :

root#qshape deferred
T 5 10 20 40 80 160 320 640 1280 1280+
TOTAL 7 0 0 0 0 0 0 0 1 0 6
chez.com 6 0 0 0 0 0 0 0 0 0 6
tiscali.fr 1 0 0 0 0 0 0 0 1 0 0
Profile des queues

Erreur de droit sur les fichiers

Si vous avez dans vos logs l'erreur suivante warning: mail_queue_enter: create file maildrop/163133.6208: Permission denied, une solution possible est de lancer les commandes suivantes :

root#postfix set-permissions
root#postfix reload
correction des droits postfix

Conclusion

Voilà, fin du petit tour de l'horizon postfix et associés. Qui a dit que la liberté n'avait pas de prix ? ;-)

Commentaires

Sylvain, le 23 janvier, 2009 - 08:57

Belle approche de Postfix, merci !

Dab, le 24 janvier, 2009 - 01:30

Tu me coupe l'herbe sous le pied :) http://www.catapulse.org/articles/view/92 (version non complète, catapulse fait des siennes :( )
Merci pour les astuces

Ulhume, le 26 janvier, 2009 - 13:02

Ah effectivement comme disent nos amis "new age", ça c'est de la synchronicité :-)

J'ai lié ton billet pour la partie dovecot, faudrait que je tente cela à l'occasion. Sinon question, à quoi te sert de passer par MySQL, j'ai pas bien compris. J'ai plusieurs utilisateurs qui n'ont pas de compte locaux et ça marche bien.

Dab, le 27 janvier, 2009 - 00:06

Disons que ça te permet de créer des domaines, utilisateurs et alias virtuels comme tu le fais me semble-t-il bien que je n'ai pas vu ou et comment tu configure ces utilisateurs ? Dans le fichier /etc/postfix/virtual ? mais dans ce cas il te faut bien la présence des utilisateurs gaston et robert sur le système non ?
Sinon il y a l'interface web postfixadmin qui te permet de gérer lesdits utilisateurs.

Ulhume, le 27 janvier, 2009 - 01:15

Hum, c'est toi qui a raison, je viens de re-regarder mon tuto cyrus et effectivement je double. Bon, ceci dit c'est pas la mort, c'est juste une ligne dans le fichier passwd/shadow.

Max, le 24 janvier, 2009 - 16:57

Merci pour cet article exactement ce que je cherchais

lolovroom, le 26 janvier, 2009 - 10:29

Salut,

Exactement les infos qu'il me manquait pour bien mettre tout ça en place. Merci.
Par contre, j'aurai voulu avoir un exemplaire papier et le lien pdf me genere un pdf avec une belle page 403.

Laurent

Ulhume, le 26 janvier, 2009 - 13:02

C'est bon pour le PDF maintenant, j'ai tué le gremlins :)

Ner0lph, le 26 janvier, 2009 - 15:27

Ça, c'est un billet intéressant ! À lire à tête reposée (vu la longueur). :-)

Hors-sujet : avec quel logiciel as-tu fais tes beaux schémas ?

Ulhume, le 26 janvier, 2009 - 15:45

Avec OpenOffice, tout simplement :)

David, le 27 janvier, 2009 - 17:45

Gérer la réception des emails est assez faisable, par contre en envoyer dans de bonnes conditions est autre chose.

Gérer les soucis avec les tonnes de blacklist peut être pénible, et pas mal de systèmes anti-spam (ceux que vous ignorez et qui influent sur le courrier que vous envoyez) ont des drôles de présemptions : une IP dynamique et c'est vraiment vraiment mal barré, une IP fixe d'une connexion ADSL et c'est quand même souvent la galère (d'où l'intérêt d'une IP d'un dédié en RPS/dédibox/kimsufi ou d'un virtuel, quand on est capable de se faire désinscrire des blacklist des fois que l'IP aurait été ré-attribuée suite au départ d'un spammeur). D'ailleurs utiliser le smtp free en sortie n'est pas la solution universelle...

Sinon pour être tranquille, il faut aussi gérer le SPF (oui cette m***e), non pas pour filtrer les messages que vous recevez mais pour donner des résultats positifs à ceux qui vous reçoivent...

Bref à la fin on se rend facilement compte que paramétrer son système d'email à soi, ça prend du temps (voire de l'argent), temps qu'il est dur de rentabiliser pour un particulier (quand c'est un serveur de mail d'une entreprise qui gère les courriers de dizaines/centaines/milliers d'employés, c'est autre chose).

Ulhume, le 27 janvier, 2009 - 19:04

La config que je donne ici tournait depuis 3 ans sur mon serveur perso, en local, via ADSL Orange et relais SMTP orange. A l'époque s'était uniquement pour moi et ma famille et je n'ai pas le souvenir d'un si pénible travail, surtout mis en balance avec le fait de ne plus devoir être dépendant d'un fournisseur pour notre courrier. Aujourd'hui, tout le monde est tellement habitué à ce que je crée des adresses à la demande que je me ferais sûrement décapité si je revenais en arrière.

Enfin, fepuis deux ans il fonctionne sur dedibox et RDNS, encaisse des centaines de spams par jours (heure ? ;-), prend en charge 5 domaines dont 3 professionnels et une 20aine de comptes et je n'ai pour l'heure jamais perdu de courrier dans un sens ou dans l'autre. Quant à la maintenance, disons que je me suis bien pris la tête au début, un peu encore au boût d'un an pour le coup du soft bounce et du filtrage SMTP, et depuis, plus rien. Juste un vidage de la queue de temps à autre. Et en 3 ans je n'ai eu qu'un problème de black-listage à cause justement de ce maudit soft bounce.

Tout ça pour dire qu'avec le pré-requis IP fixe avec RDNS ou un relai vers le smtp du fournisseur rend ce type de solution accessible à n'importe qui d'un peu bricoleur.

Pour la gestion du SPF c'est dans le pipe, j'amenderais le tuto si j'arrive à le faire tourner de manière satisfaisante.

Bref, je ne dis pas que je suis pas d'accord avec toi, je te trouve juste un brin alarmiste :)

David, le 28 janvier, 2009 - 22:35

Euh, qui dit relais SMTP dit garder une certaine dépendance. On peut certes changer quand l'on veut de relais SMTP parmi ceux disponible, mais en pratique soit faut prendre celui du FAI (généralement gratuit), soit il faut commencer à sortir le porte-monnaie (les relais smtp gratuits pour tous étant rarement un bon moyen d'être sur de passer tous les filtres de tous les destinataires).

Ulhume, le 29 janvier, 2009 - 02:56

Tout a fait d'accord sur ce point, mais comme tu l'a si justement exposé, c'est une dépendance à mettre en balance avec le service rendu de la gestion des blacklist & co déléguée à ton FAI.

La dépendance est surtout liée à la disponibilité du serveur relais qui peut tomber. Elle pourrait aussi l'être à la sécurité un peu compromise par cet intermédiaire si de toute façon le courrier ne circulait pas sur réseau du dit FAI.

Du coup ne reste que la disponibilité, et en contrepartie tu jouis :
* de la capacité de créer les comptes que tu veux,
* de créer des adresses de type "catch all"
* de gérer le spam à ta convenance, typiquement moi j'ai besoin de rajouter le vietnamien au langues autorisées par SpamAssassin,
* de gérer des whitelists par utilisateurs
* de stocker ton courrier sur ton serveur sans risque de regards indiscrets,
* de disposer du webmail qui te plais le plus,
* de router de manière directe les courriels entre domaines amis qui eux n'utilisent pas le SMTP du FAI.

Bref, cette solution du relais me paraît pas mal tout de même pour obtenir le maximum d'effets avec un minimum d'efforts.

Geek87, le 13 février, 2009 - 21:24

Salut,

Au risque de me répéter c'est encore un très bon article ! Et pour ne pas perdre les bonnes habitudes, une petite correction à faire : pour visualiser les messages dans la queue il faut utiliser postqueue -p, postqueue -f sert à forcer le vidage de la queue. Et sinon comme filtre antispam il y a aussi bogofilter qui est écrit en C et sera peut être plus rapide que Spamassassin qui est écrit en Perl (je dis peut être des conneries ! A vérifier !) mais qui est peut être moins puissant (d'après leur présentation dans les paquets Debian et sur Wikipédia, mais là aussi je dis peut être des conneries ne les ayant testés ni l'un ni l'autre !).

Et pour finir un des gros avantages de disposer de son serveur est de pouvoir faire des mailing (avec le consentement des destinataires bien sûr) car même le serveur d'un mutualisé "90 Plan" chez OVH limite l'envoi à 100 messages par heure, ce qui est parfois insuffisant.

A+

scurt, le 20 octobre, 2009 - 20:02

Bonjour, super article ! Mais j'ai une petite question (problème...:p) concernant le serveur de mail postfix. J'imagine que vous avez tous (ou une partie) entendu parlé des "graylist" dont le principe est que lors de l'envoi du mail au serveur SMTP distant, celui-ci enregistre un triplé d'information et demande de renvoyer le mail à une heure donnée (sinon il est retourné en Undelivred message). Le problème c'est que je ne sais pas comment (quel configuration) il faut mettre au serveur postfix pour que celui-ci renvoie automatiquement le mail à l'heure donnée.
Résultat sur certain serveur qui utilise la méthode de graylist pour filtrer les SPAMs je ne peux plus communiquer avec les utilisateurs...
Sur certain forum il parle de modifier les variables suivantes (présente dans la première partie de l'article)

# différents délais qui marchent bien comme cela...
queue_run_delay = 60s
maximal_backoff_time = 60s
minimal_backoff_time = 50s
delay_warning_time = 4

mais je ne sais pas quelle configuration va permettre de ré-envoyer le message à une heure précise.
En tout cas cet article est super (et le site aussi ! je ne connaissait pas mais je le trouve très utile et précis au niveau des configurations) ;)
Merci d'avance !

Ulhume, le 21 octobre, 2009 - 02:40

Alors là je ne sais pas du tout. J'ai entendu parler de ces listes grises mais pour l'instant je n'ai pas l'impression d'avoir été touché. Merci en tout cas pour la piste mais de mon côté je ne peux pas beaucoup aider malheureusement.

Guyou, le 14 novembre, 2009 - 23:02

Et quid d'exim ?

Perso, j'installe mon réseau domestique et je cherche donc quel serveur mail installer. La fonction : serveur SMTP pour mon réseau LOCAL et relay vers le smtp de mon FAI. Je partais sur un exim, mais la lecture de cet article me fait douter. Comment décider ?

alexdaums, le 1 avril, 2010 - 12:34

Bon article comme d'habitude, mais si vous avez 5 minutes passez lire cet article:
http://www.starbridge.org/spip/spip.php?article12
@+

Dup, le 1 avril, 2010 - 14:38

Très bon article même si pour le moment je n'ai fait que le survoler le contenu me paraît correct.

@scurt : postfix ne gère pas les greylist par défaut il faut installer un logiciel externe comme postgrey par exemple. Et effectivement le principe est de dire pour tout mail reçu, je ne peux pas le traiter pour le moment réessayer plus tard. La plupart des systèmes de spam ne renverront pas le dit mail et sera donc supprimé. Par contre un serveur de messagerie qui répond au norme renverra le message après un temps donné (selon configuration du serveur émettant le message)
Après inutile de m'en demander plus je dois toujours appliquer ce principe de greylist à mon serveur mais pas encore fait, possible application dans les prochains jours maintenant que ma mémoire est rafraichie.

Dup, le 1 avril, 2010 - 15:05

Tiens un billet sur postgrey qui est paru sur le planet :
http://www.system-linux.eu/index.php?post/2010/03/31/postgrey-liste-pour...

erdnaxeli, le 11 avril, 2010 - 11:35

Très sympa ce billet. Tout fonctionne niquel pour postfix. Pour spamassasin j'ai plus de mal (en fait il ne marche pas du tout) mais je pense que ça vient du fait que je suis sous archlinux (et que la config à l'air un peu différente).

daguette, le 20 juillet, 2010 - 17:23

Bonjour Super article dommage que je ne l'ai pas lu/touvé quand j'ai fais mon installation ...

Mais je posais une petite question si a l'inverse de ta politique anti spam ( auquel j'adhère) je souhaite recevoir sur une boite a spam les couriels dont les adresse de destination du domaine sont inexistante tout en renvoyant le code du destinataire invalide (550).

en gros dans smtpd_recipient_restrictions je veux que reject_unauth_destination renvoie 550 et une copie du message a erreur_dans_l_adresse@mondomaine.tld

Après peux être que ce n'est pas possible .

davlefou, le 24 août, 2010 - 19:56

J'ai une problématique. Je viens d'installer mon serveur mail en utilisant postfix, courier-imap(et ses cousins) et procmail. Je pense à basculer sur un forme plus moderne, j'hésite entre cyrus et dovecot, pourriez vous me conseiller?

Dup, le 25 août, 2010 - 11:37

Pesonnellement je pencherais pour dovecot, il me semble que sa robustesse n'est plus à prouver (tout comme cyrus) mais dovecot semble plus simple à configurer, réclame moins de dépendance et gère d'office l'ensemble des protocoles imap/pop3/sieve.

Attends peut être d'autre avis de personne ayant testé les deux, en tout cas je ne suis pas déçu personnellement par dovecot.

Poster un nouveau commentaire

Si vous avez détecté une erreur, coquille ou bêtises du même ordre, merci de plutôt passer par le formulaire de contact
Pour vous abonner au flux des commentaires sur cet article, clickez ici.
Pour répondre à quelqu'un, utilisez plutôt le lien répondre qui se trouve en haut (ou en bas) à gauche de son commentaire.
Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. Si vous avez un compte gravatar, l'utilisez pour afficher votre avatar.
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div> <p> <br>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Every instance of custom tags in the input text will be replaced with a specific tool shortcut.

Plus d'informations sur les options de formatage

Êtes-vous humain ?
Cette question est là pour déterminer si vous êtes humain ou pas...