Greylisting avec Postfix et Postgrey sur CentOS

Qu’est-ce que le greylisting ?

Le greylisting est une méthode antispam assez pertinante.

Les robots de spam, sont des programmes expédiant des millions de messages sans se préoccuper des réponses des serveurs de mail des destinataires.

En effet, cela leur demanderait beaucoup de puissance machine et des temps de traitement bien trop importants pour le but à atteindre.

Ce qui veut dire que si le serveur destinataire n’est pas capable de traiter ce message ( même temporairement ), il n’est pas réexpédié.

Si ce même message était envoyé par un vrai serveur smtp, ce dernier le remettrait dans sa file d’attente pour le réexpédier plus tard.

Mise en place sur CentOS

L’installation de base de centos installe sendmail comme serveur smtp.

Le composant postgrey que je veux utiliser nécessitte postfix, il faudra donc changer la configuration du système.

Avant de faire cela, je dois ajouter le dépot de DAG Wieers, afin de disposer des paquets postgrey qui ne sont pas « standards ».


rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm

Adaptez cette commande à votre système d’exploitation comme indiqué sur le site de DAG WIEERS

Installation des programmes


yum -y install postgrey postfix system-switch-mail

Modification et activation du serveur de mail

Utilisez la commande system-switch-mail, et sélectionnez « Postfix », validez votre choix.

Votre MTA est maintenant Postfix.

Je ne détaille pas la configuration de postfix, mais il doit suffire de changer les paramètres suivants dans le fichier /etc/postfix/main.cf pour que votre serveur recoive les emails pour un domaine « mondomaine.fr ».


inet_interfaces = all
mydomain = mondomaine.fr
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

Postfix est activé par défaut, mais postgrey ne l’est pas.

Utilisez la commande chkconfig postgrey on pour le déclarer comme service automatiquement lancé lors du démarrage.

Configuration de Postgrey

La configuration se fait via le script de démarrage /etc/init.d/postgrey, car tous les paramètres sont passés à la commande par ce biais.

J’ai modifié ce script pour l’adapter à mes choix, et notamment pour faire tourner postgrey sur un port local et pas en socket unix.

Je ne sais pas si c’est un meilleur choix, mais toutes les docs que je trouvais utilisaient ce système.

J’ai aussi adapté les délais par défaut ( trop longs à mon goût, 300 secondes ) et le texte expliquant le blocage au serveur distant.

Voici la partie que j’ai modifié, le script complet est fourni en pièce attachée.

Pensez à adapter la variable HOSTNAME à votre convenance.


HOST="localhost"
PORT="10023"
DELAY="60"
HOSTNAME="MonJoliServeur.monfai.fr"
TEXT="Greylisted for $DELAY seconds, see http://isg.ee.ethz.ch/tools/postgrey/help/$HOSTNAME.html"

OPTIONS="--inet=$HOST:$PORT -d --delay=$DELAY --greylist-text=\"$TEXT\" --hostname=$HOSTNAME"

#
# Config par defaut
#
# SOCKET=$DBPATH/socket
# OPTIONS="--unix=$SOCKET"
#

Démarrage de postgrey


service postgrey start

Il ne reste qu’à modifier le fichier /etc/postfix/main.cf de postfix afin d’utiliser ce service de contrôle greylisting gràce au paramètre check_policy_service.


smtpd_recipient_restrictions =
reject_unknown_sender_domain
reject_unknown_recipient_domain
permit_mynetworks
reject_invalid_hostname
reject_non_fqdn_recipient
reject_non_fqdn_sender
reject_unauth_destination
check_policy_service inet:127.0.0.1:10023
permit

Remarque : Ce bloc de restrictions n’existe pas par défaut, il faut l’ajouter à la fin du fichier main.cf.

Rechargez Postfix afin de prendre en compte les modifications que nous venons de lui apporter avec la commande service postfix restart.

A partir de maintenant vos messages seront retardés d’une minute minimum ( suivant le délai indiqué dans le script de démarrage de postgrey ), mais les robots de spams ne vous ennuiront plus.
Sachez qu’une fois qu’une adresse éméttrice a été greylistée une fois, elle sera acceptée les fois suivantes directement. Ceci permet de gagner du temps pour des contacts par emails réguliers.

Exemple de fichier /var/log/maillog détaillant le principe de greylisting


May 17 17:41:56 centos5 postfix/smtpd[3867]: connect from centos5.castres-wireless.org[127.0.0.1]
May 17 17:42:24 centos5 postfix/smtpd[3867]: NOQUEUE: reject: RCPT from centos5.castres-wireless.org[127.0.0.1]: 450 4.7.1 : Recipient address rejected: Greylisted, see http://isg.ee.ethz.ch/tools/postgrey/help/localhost.html; from= to= proto=ESMTP helo=
May 17 17:42:33 centos5 postfix/smtpd[3867]: disconnect from centos5.castres-wireless.org[127.0.0.1]
May 17 17:44:15 centos5 postfix/smtpd[3915]: connect from centos5.castres-wireless.org[127.0.0.1]
May 17 17:44:28 centos5 : client=centos5.castres-wireless.org, from=l.rayssiguier@caplaser.fr, to=root@localhost
May 17 17:44:29 centos5 postfix/smtpd[3915]: 59DF92003E: client=centos5.castres-wireless.org[127.0.0.1]
May 17 17:44:33 centos5 postfix/cleanup[3918]: 59DF92003E: message-id=<20070517154429.59DF92003E@centos5.castres-wireless.org>
May 17 17:44:33 centos5 postfix/qmgr[3792]: 59DF92003E: from=, size=499, nrcpt=1 (queue active)
May 17 17:44:33 centos5 postfix/local[3919]: 59DF92003E: to=, orig_to=, relay=local, delay=7.9, delays=7.9/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
May 17 17:44:33 centos5 postfix/qmgr[3792]: 59DF92003E: removed
May 17 17:44:36 centos5 postfix/smtpd[3915]: disconnect from centos5.castres-wireless.org[127.0.0.1]
May 17 17:50:38 centos5 postgrey[3863]: 2007/05/17-17:50:38 Server closing!

On remarque que le message de test a été retardé de 124 secondes (
postgrey[3863]: delayed 124 seconds ).

Ce temps n’est pas une constante, car cela dépends aussi des délai de re-émission du serveur smtp distant.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.