SMRazor comme filtre anti-spam dans Sendmail
Le filtre SMRazor appelle Vipul's Razor et ajoute un en-tête X-SMRazor: SPAM
si razor-check
déclare que le message est un spam. Évidemment, tout cela n'est possible que si Sendmail dispose de la bibliothèque Milter… Pour vérifier :
$ sendmail -bt -d0.4 </dev/null|grep MILTER Compiled with: FOO MILTER BAR
On trouve SMRazor là.
Plutôt que de marquer les messages, le patch (sur la version 0.2.1) suivant les bloque.
--- smrazor.c.orig 2007-08-26 23:06:02.000000000 +0200 +++ smrazor.c 2007-08-28 23:17:24.000000000 +0200 @@ -17,13 +17,13 @@ #include #include -#include "libmilter/mfapi.h" +#include -#ifndef true +/* #ifndef true typedef int bool; # define false 0 # define true 1 -#endif /* ! true */ +#endif * ! true */ #ifdef DEBUG #define DPRINTF(x) dprintf##x @@ -31,10 +31,10 @@ #define DPRINTF(x) #endif /* DEBUG */ -#define PERL_BIN_PATH "/usr/bin/perl" -#define RAZOR_CHECK_PATH "/usr/local/bin/razor-check" -#define DEFAULT_PID_FILE_NAME "/var/run/smrazor.pid" -#define ERROR_FILE_NAME "/tmp/smrazor.err" +#define PERL_BIN_PATH "/usr/pkg/bin/perl" +#define RAZOR_CHECK_PATH "/usr/pkg/bin/razor-check" +#define DEFAULT_PID_FILE_NAME "/var/spool/milter/smrazor.pid" +#define ERROR_FILE_NAME "/var/spool/milter/smrazor.log" #define ERR_TIME_FORMAT "[%m/%d/%Y %H:%M:%S] " #define RAZOR_CHECK_TIMEOUT 30 @@ -431,9 +431,11 @@ } else { - smfi_addheader(ctx, "X-SMRazor", "SPAM"); + smfi_setreply(ctx, "554", "5.7.1", + "Mail refused, see http://www.example.com/mail-filter.html"); + rstat = SMFIS_REJECT; DPRINTF(("Rejected: %p\n", ctx)); - log_file = fopen("/tmp/razored.log", "a"); + log_file = fopen(ERROR_FILE_NAME, "a"); if (log_file != NULL) { fprintf(log_file, "%s\t%s\n",
Installation
Installer Razor2. Ne pas oublier de permettre tcp/2703
en sortie sur la machine.
Ajouter la ligne kivabien dans /etc/mail/sendmail.cf
:
XSMRazor, S=unix:/var/spool/milter/smrazor.sock
et ajouter SMRazor
à la liste des filtres (variable InputMailFilters
dans /etc/mail/sendmail.cf
) :
O InputMailFilters=milter-regex,SMRazor
Lancer le filtre :
$ sudo -u smmsp smrazor -p unix:/var/spool/milter/smrazor.sock
Enfin relancer Sendmail. Attention au fichier socket (emplacement et droits).
Résultats observés
Après greylisting : un message sur trois est encore un spam en période normale, deux sur trois sinon.