Rendez-vous sur Arrakis

Faire ch*#! les spammeurs avec spamd

La plupart des gens qui hébergent leurs mails ont certainement déjà entendu parler de spamassassin pour éviter les courriels gênants. Il marche très bien à vrai dire, pourquoi s'en passer?
Cependant, ce dernier ne fait que filtrer les mails une fois qu'ils sont arrivés sur le serveur. Outre la charge supplémentaire que cela lui impose, ça n'empêche pas les spammeurs de continuer à innonder votre serveur de promos pour du viagra (pourquoi arp a 5 enfants à votre avis? ☺).
Pour éviter une trop forte croissance démographique, et surtout pour emmerder les spammeurs, vous pouvez les ralentir. Il faut pour cela utiliser spamd, présent par défaut dans OpenBSD.
En effet, ce dernier va piéger les spammeurs et leur parler toooout doucement. Imaginez si vous lisiez ce billet avec une lettre affichée par seconde uniquement. :) Et tant qu'à faire, vous pouvez laisser traîner de fausses adresses sur le net pour attirer les spammeurs. Tiens : blackhole@yeuxdelibad.net !

Pour mettre en place spamd, je vous propose ce petit tutoriel un peu à l'arrache, qui sera repris dans le wiki obsd4a.

spamd fait semblant d'être un serveur mail afin de rejeter les spams. Il a été écrit dans l'optique d'être très efficace et ne pas ralentir la machine. Bien sûr, il transmet les mails légitimes au serveur smtp ensuite.

Ce qui est rigolo en plus, c'est qu'il va faire en sorte de ralentir les spammeurs en communiquant tout doucement avec eux et leur faire consommer inutilement leur ressources ☺ .

Enfin, avantage non négligeable, il est présent par défaut dans OpenBSD.

Comment ça marche?

Afin de reconnaître les spam, spamd va mettre en attente ceux qui contactent le serveur. Ils sont mis sur liste grise.

Normalement, un expéditeur légitime réessaie automatiquement de délivrer le message. Lors du 2e essai, ce serveur est mis sur liste blanche.

Les spammeurs ne vont pas réessayer de délivrer le message. Dans ce cas, ils sont mis après un délai assez long sur liste noire. Par la suite, votre serveur n'écoutera même plus les requêtes provenant de ces spammeurs.

Afin d'enregistrer les vilains expéditeurs, il faudra exécuter spamdb régulièrement.

Mise en place

On commence par activer spamd au démarrage, en indiquant les options dont il aura besoin, puis on le lance :

rcctl enable spamd
 rcctl set spamd flags "-v -G 15:4:4242"
 rcctl start spamd

Le premier chiffre correspond au nombre de minutes qu'un expéditeur doit attendre avant de réessayer de nous renvoyer son mail (puisque les spammeurs envoie des salves de mails très rapidement). Le second correspond au temps qu'une entrée reste dans la liste grise, et le dernier le temps pendant lequel une entrée restera sur la liste blanche (en heures).

On va maintenant éditer la configuration de pf, le parefeu et filtre de paquets (packet filter). Il va envoyer à spamd tous le flux destiné au serveur smtp, qui relaiera normalement ensuite si le mail est légitime.

Voici ce qu'il faut donc ajouter dans /etc/pf.conf :

table <nospamd> persist file "/etc/mail/nospamd"
 pass in on egress proto tcp from any to any port smtp \
     divert-to 127.0.0.1 port spamd
 pass in on egress proto tcp from <nospamd> to any port smtp
 pass in log on egress proto tcp from <spamd-white> to any port smtp

Dans l'ordre des lignes :

Voilà pour le parefeu. N'oubliez pas de le recharger :

# pfctl -d && pfctl -ef /etc/pf.conf

Il est nécessaire de régulièrement charger la liste noire des spammeurs dans le parefeu afin que spamd fonctionne bien. Nous allons nous servir d'une tâche cron pour ça. Tapez # crontab -e, puis ajoutez la ligne suivante :

*/10      *       *       *       *       /usr/libexec/spamd-setup

Nous lançons ici spamd-setup toutes les 10 minutes. Ce temps doit être inférieur au temps que doit attendre un expéditeur pour tenter de renvoyer son message définit dans l'appel de spamd. Nous avions mis 15 minutes.

Piéger les spammeurs

Vous pouvez piéger les spammeurs en laissant traîner sur le web une fausse adresse mail. Si spamd voit un message arriver pour cette adresse, alors il sait déjà que c'est un spam : il peut donc le mettre sur liste noire. Vous voilà protégés pour l'avenir.

Afin de glisser cette “adresse-piège” sur le web sans que ça soit visible par les humain, vous pouvez l'insérer ainsi dans une page web de votre site :

<a href="mailto:blackhole@yeuxdelibad.net"></a>

Pour indiquer à spamdb cette adresse piège, il faut ajouter les options suivantes à spamdb (attention au “b” final, ce n'est pas spamd). :

# spamdb -T -a 'blackhole@yeuxdelibad.net'

Bien entendu, cette adresse piège ne doit pas être créée et ne risque pas de servir à quiconque.
Marquer un domaine comme légitime

Voir l'activité de spamd

Pour voir l'activité de spamd, lancez la commande spamdb pour voir apparaître des choses comme ça :

 WHITE|62.4.1.33|||1462699174|1462699174|1465809574|1|0
 GREY|46.105.39.61|2.mo178.mail-out.ovh.net|<contact@arpinux.org>|<thuban@yeuxdelibad.net>|1462696130|1462710530|1462710530|1|0
 

On peut lire dans l'ordre :

Il n'y a pas à dire, les “temps” sont illisibles pour les humains. Utiliser la commande date pour avoir un format lisible :

 $ date -r 1462699174
     Sun May  8 11:19:34 CEST 2016

le 05/09/2016 à 17:49:12, Clochette a dit :

Attention tel que tu le propose tu te coupe de toute ‘newsletters’ légitime ou tout autre envoi de mail réglé sans tentative supplémentaire de remise.
Les serveurs de mail avec ce comportement ne sont pas majoritaire mais existe bel et bien :P

le 05/09/2016 à 18:45:29, thuban a dit :

@Clochette : C'est tout à fait juste. Merci du rappel! :)

le 05/09/2016 à 20:23:31, 22Decembre a dit :

@thuban : Je ne crois pas. Mon experience, c'est que ces listes de diff' ont un comportement correct (elles reviennent toquer à la porte).

le 05/09/2016 à 22:15:50, thuban a dit :

@22Decembre : Les listes de diff ça va (misc@openbsd.org, dev@suckless.org pas de soucis). Par contre, les sites commerciaux c'est possible. Mais un commerce qui a un serveur mail incapable, ça ne m'inspire pas confiance!