---
categories: ['OpenBSD','Réseau','Serveur']
date: 2016-09-03T12:40:46+02:00
description: "Utiliser le serveur d'antispam, Spamd, sous OpenBSD"
draft: false
include_toc: true
show_comments: false
tags: ['OpenBSD','spamd']
title: "Spamd"
translationKey: 'openbsd-spamd'
---
## 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 :
```sh
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` :
```cfg
table 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 to any port smtp
pass in log on egress proto tcp from 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 :
```sh
# 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 :
```cfg
*/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 :
```
```
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 :
```log
WHITE|62.4.1.33|||1462699174|1462699174|1465809574|1|0
GREY|46.105.39.61|2.mo178.mail-out.ovh.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 :
```sh
# 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).
---