Greylist pour un petit serveur SMTP

Les spams peuvent finir par écrouler un serveur SMTP pour un petit domaine voire même un serveur local. Je me suis largement inspiré du script smtpwrap pour faire un système de liste grise (greylist) pour un serveur SMTP lancé par inetd (donc ne tournant pas en démon). Cela donne un paquet (smtpwrap) qui une fois installé gère une liste grise. Concrètement, le programme se compose de 3 utilitaires et un fichier de configuration /etc/smtpwrap

/etc/smtpwrap est de la formewait_time 360 local 192.168.0.2 local 192.168.1.0
wait_time est le temps d’attente en secondes
local 192.168.0.2 indique que le réseau 192.168.0.0/24 est local.

smtpwrap se met comme intermédiare dans /etc/inetd.conf (il faut que exim ou postfix ou autre soit lancé par inetd donc ce qui signifie un petit serveur)). Lorsqu’un gus veut envoyer un courrier, il reçoit une erreur
421 Temporary failure (192.168.1.251 please wait 360 seconds)
puis si il se reconnecte, le temps diminue:
421 Temporary failure (192.168.1.251 please wait 124 seconds)

au bout de 360s soit 6 minutes, il a accès au serveur. Cela ne pose pas de pbms aux serveurs normaux mais les spammeurs n’ont pas la patience d’attendre en général.

Le programme met des logs dans /var/log/syslog Nov 5 15:07:51 cerbere smtpwrap[8298]: fatal error: Transport endpoint is not connected Nov 5 15:09:12 cerbere smtpwrap[9089]: fatal error: Transport endpoint is not connected Nov 5 15:09:20 cerbere smtpwrap[9091]: ip=<70.103.162.31> net=<70.103.162> now=<1162735760> allow=<1162735478> Nov 5 15:09:20 cerbere smtpwrap[9091]: 70.103.162.31 connection accepted after 0:4:42 hours Nov 5 15:09:28 cerbere smtpwrap[9168]: ip=<201.3.12.72> net=<201.3.12> now=<1162735768> allow=<> Nov 5 15:09:28 cerbere smtpwrap[9168]: 201.3.12.72 connection deferred for 360 seconds Nov 5 15:09:31 cerbere smtpwrap[9201]: ip=<201.3.12.72> net=<201.3.12> now=<1162735771> allow=<1162736128> Nov 5 15:09:31 cerbere smtpwrap[9201]: 201.3.12.72 connection deferred for 357 seconds Nov 5 15:09:34 cerbere smtpwrap[9254]: ip=<201.3.12.72> net=<201.3.12> now=<1162735774> allow=<1162736128> Nov 5 15:09:34 cerbere smtpwrap[9254]: 201.3.12.72 connection deferred for 354 seconds smtpwrap-list permet de voir la base de données.

Entrée 61.34.147 datant de 10:34 heures soit 0 jours
Entrée 84.120.243 datant de 15:16 heures soit 0 jours
Entrée 72.67.21 datant de 20:45 heures soit 0 jours
Entrée 72.235.43 datant de 10:35 heures soit 0 jours
Entrée 85.152.188 datant de 13:14 heures soit 0 jours
Entrée 201.217.94 datant de 16:17 heures soit 0 jours
Entrée 62.163.249 datant de 20:51 heures soit 0 jours
Entrée 71.31.11 datant de 18:27 heures soit 0 jours

smtpwrap-clean vire les entrées n’ayant pas servi depuis plus de 35 jours.

Sans être associé à des listes RBL (je suis hostile aux principes des RBL, en différant d’une heure un nouveau serveur SMTP on laisse le temps aux RBLs de réagir ce qui complète le dispositif mais je n’aime pas), cela a divisé le nombre de spams par 4 et ils sont tous filtrés par la suite par spamassassin. L’avantage indénbiable est de libérer de façon très notable la charge du serveur.

Voilà: paquet smtpwrap
dépendances: perl et libgdbm
C’est un script perl donc le paquet est pour n’importe quelle architecture/distribution.
deb boisson.homeip.net/sarge/ ./
deb boisson.homeip.net/woody/ ./
deb boisson.homeip.net/amd64/ sarge ./
deb boisson.homeip.net/amd64/ etch ./
deb boisson.homeip.net/ubuntu/ dapper ./
deb boisson.homeip.net/ubuntu/ edgy ./

ou bien http://boisson.homeip.net/sarge/sarge/smtpwrap_1.0_all.deb

Un petit bilan quand même au bout de 3 mois:

Avant: 400 spams par jour
Juste après: 100 spams par jour
Moyenne actuelle (3 mois après): 45 spams par jour

(tous filtrés par spamassassin). Je ne m’explique pas trop cette diminution, le nombre de spams était constant bloqués à 400 depuis 3-4 ans…

Les spammeurs s’echangent peut être des blacklist de serveur qu’il ne faut pas perdre de temps à flooder ?
Une liste “n’y envoyez rien c’est une perte de temps”…

Tiens je vais l’installer à la maison ton script.
Merci de l’avoir remonté j’en avais besoin.

le graylisting permet de bloquer les spams provenants de virus. Donc si le spam diminue, c’est tout simplement que le nombre de virus diminue…

A+

Oui et non, le nombre de spams sur un autre serveur sans liste grise n’a pas diminué, il y a un biais parce que ce sont de petits serveurs mais c’est quand même assez net.