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 .

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", 

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

Après greylisting : un message sur trois est encore un spam en période normale, deux sur trois sinon.

  • user/pc/sysadmin/sendmail-smrazor.txt
  • Dernière modification : 2011/07/22 18:32
  • de pc