%
Puffy image/svg+xml Puffy 2019-06-14 Stéphane HUC OpenBSD Team Inkscape Puffy OpenBSD https://www.openbsd.org/art4.html English "Puffy", it's a symbol of OpenBSD

Spamd

Article publié, le et modifié le
4 minutes de lecture

Cet article contient 806 mots.
Source brute de l'article :
Commit version : 698e16e

Description

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 spamd
régulièrement.

Utilisation

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 du 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.

Éditez votre crontab 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@votre-nom-de-domaine.tld"></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@votre-nom-de-domaine.tld'

Bien entendu, cette adresse piège ne doit pas être créée et ne risque pas de servir à quiconque.

Status

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

Historique

J’ai écrit historiquement cette documentation sur le wiki de la communauté “OpenBSD Pour Tous”, (conjointement avec Xavier Catron).