OBSD4* : wiki

Spamd

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 #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 :

* On crée un fichier ``/etc/mail/nospamd`` qui contiendra les expéditeurs légitimes * On dévie tout ce qui devait arriver sur le port smtp pour aller dans spamd * On laisse passer toutes les IP qui étaient dans le premier fichier * On laisse passer les IP enregistrée par spamd dans la liste blanche (en mémoire). spamd et pf partagent ici la même table.

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

Pour l'édition, référez-vous aux rappels sur l'[utilisation de vi #editfile].

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.

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 :

* Si l'IP est sur liste blanche (WHITE) ou grise (GREY) * L'IP concernée * Temps où cette entrée a été vue la première fois * Le moment où l'IP sera passée en liste blanche * Le moment où l'IP sera retirée de la base de données * Le nombre de fois où cette IP a été bloquée * Le nombre de fois où ces IP a été autorisée.

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

Accepter une IP manuellement

Si vous constatez des erreurs en tapant ``spamdb``, vous pouvez autoriser une IP ainsi :

# spamdb -a 12.234.56.67