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
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=
May 17 17:44:33 centos5 postfix/local[3919]: 59DF92003E: to=
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.