Mon bon Pocillopora (qui propulse reefs et advancedaquarist) a toujours été une cible privilégiée des spammeurs.
Jusqu’au week-end dernier, les spams étaient combattus pendant le connexion SMTP entrante, à l’aide de MIMEDefang, un très bon milter de Sendmail. À charge de MIMEDefang d’appeler à la volée une clique d’autres logiciels (tout aussi libres que MIMEDefang) :
- Spamassassin (analyse bayésienne, filtrage euristique, tests RBL, analyse des en-têtes et des corps de message)
- Razor (système collaboratif d’identification de spams connus à l’aide d’empruntes numériques)
- Pyzor (cf. razor)
- dcc (cf. pyzor)
- ClamAV (anti-virus libre, qui détecte notamment un grand nombre d’attaques de type phishing)
À partir de cette petite soupe, MIMEDefang calcule une note et rejette le mail avec une erreur 554 si elle est trop élevée. Le record du spam le plus gratiné dans les journaux qui sont encore en ligne sur Pocillopora a une note de 61.553 (les mails qui atteignent 10 sont déjà assez graves):
$ sudo gzip -fdc /var/log/mail.log* | \
grep ",spam," | \
sort -k4 -t "," -n | \
tail -1
Mar 22 11:33:28 pocillopora mimedefang.pl[26796]: MDLOG,k2MBXIYY027790,spam,61.553,60.190.31.22:BAYES_99:DCC_CHECK:DIGEST_MULTIPLE:
DNS_FROM_RFC_WHOIS:FORGED_MUA_OUTLOOK:FORGED_OUTLOOK_HTML:FORGED_YAHOO_RCVD:
FRONTPAGE:HEAD_ILLEGAL_CHARS:HTML_80_90:HTML_CHARSET_FARAWAY:HTML_FONT_BIG:
HTML_IMAGE_ONLY_12:HTML_IMAGE_RATIO_02:HTML_MESSAGE:MIME_BOUND_DD_DIGITS:
MIME_HTML_ONLY:MIME_HTML_ONLY_MULTI:MIME_QP_LONG_LINE:MISSING_MIMEOLE:
MPART_ALT_DIFF:MSGID_SPAM_CAPS:PYZOR_CHECK:RAZOR2_CF_RANGE_51_100:RAZOR2_CHECK:
RCVD_BY_IP:RCVD_DOUBLE_IP_SPAM:RCVD_HELO_IP_MISMATCH:RCVD_ILLEGAL_IP:
RCVD_IN_BL_SPAMCOP_NET:RCVD_IN_DSBL:RCVD_IN_NJABL_PROXY:RCVD_IN_XBL:
RCVD_NUMERIC_HELO:SUBJ_ILLEGAL_CHARS:URIBL_OB_SURBL:URIBL_WS_SURBL,
<npcukrymxxgicd@yahoo.com>,[...]
Coût ? Un fils MIMEDefang prend dans les 30-40 MB. Un peu usine à gaz, mais jusqu’à récemment, cette solution marchait bien.
L’année 2006 a été celle d’un tournant malencontreux, celui où le débit en spams (en rouge dans le graphique qui suit) s’est mis à excéder de manière constante le débit en mails légitimes (en vert). Sachant que la courbe verte contient une majorité écrasante de mails générés par le serveur (typiquement par le système de notification des forums), donc de toute évidence légitimes – au moins du point de vue de Pocillopora.

Résultat, les spams ont commencé à traverser les filtres, et surtout à destination des comptes systèmes (votre serviteur en sait quelque chose). Rien de bien méchant, mais une tendance qu’on veut définitivement arrêter rapidement.
C’est ici qu’intervient milter-greylist. Comme son nom l’indique, c’est un milter de Sendmail qui met en oeuvre des "listes grises". Milter-greylist est programmé par Emmanuel Dreyfus (administrateur de PC, raison suffisante pour jeter un coup d’oeil).
Le concept d’une liste grise est de forcer les serveurs de mail distants douteux à mettre en queue les mails qu’ils voudraient vous envoyer. Un peu comparable à une technique assez répandue contre le démarchage téléphonique. "Rappelez ce soir quand mon mari sera rentré, c’est lui qui s’occupe de ca.".
Mais en plus efficace – pour l’instant.
Si le serveur distant respecte le cadre de SPF, le mail est accepté directement – on milite comme on peut pour SPF, hein.
Après 3 jours d’opérations, voici les statistiques de délai sur Pocillopora :
$ sudo cat /var/log/mail.log /var/log/mail.log.0 | \
awk ‘ (/Greylisting in action, please come back in /) { delayed+=1 }
(/autowhitelisted/) { autowhitelisted+=1 }
(/Greylisting in action, please come back in / &&
!/Greylisting in action, please come back in 00:30:00/) { redelayed+=1 }
END { print "Premiere tentative : \t"delayed"\nTentatives suivantes : \t\
"redelayed"\nFinalement accepte : \t"autowhitelisted }’
Premiere tentative : 4173
Tentatives suivantes : 458
Finalement accepte : 322
Sur les 4173 premières tentatives d’envoi (refusées temporairement via une erreur 451) , 458 ont été suivies d’autres tentatives aussi refusées temporairement (parce que le responsable n’était pas encore rentré), et au final 322 mails ont été acceptés. Enfin, jugés aptes à passer à la moulinette MIMEDefang.
Impact sur le nombre total de spams à examiner ? "Ca se voit sur le graphique", milter-greylist ayant été deployé samedi :

grey_in, c’est le nombre de mails qui se sont fait acceptés après avoir du être retransmis.
grey_delayed, c’est à chaque fois qu’un mail se fait acceuillir par un "repassez plus tard" (chaque mail peut compter plusieurs fois).
mail_in, c’est tous les mails qui sont relayés correctement.
Beaucoup moins de spams ont l’occasion d’affronter MIMEDefang, et le flot de mails légitimes n’a pas l’air de tarir.
Voilà qui s’annonce bien !