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