Sendmail milter/greylisting Kai Poutrain - JT-SIARS 2005 Milter : objectifs Fournir une interface pour des filtres externes pour traiter les mails Validation d informations Modification de contenu tout au long de la transaction SMTP
Milter : objectifs (2) Sécurité : les filtres ne tournent pas sous root Fiabilité : la défaillance du filtre ne bloque pas le traitement du mail Simplicité Performances Milter : la libmilter xxfi_header callback sendmail libmilter xxfi_body callback xxfi_eom callback Filtre externe
Milter : callbacks SMTP Callback Ouverture de connexion xxfi_connect HELO xxfi_helo MAIL FROM: xxfi_envfrom RCPT TO: xxfi_envrcpt [autres RCPTs] [xxfi_envrcpt ] DATA Header: xxfi_header [autres headers] [xxfi_header] xxfi_eoh Body xxfi_body [suite du body] [xxfi_body]. xxfi_eom QUIT xxfi_close (fermeture de connexion) Valeurs de retour des callbacks SMFIS_CONTINUE : continue le traitement SMFIS_REJECT : rejet de la connexion/message/destinataire SMFIS_DISCARD : «!drop!» silencieux du message SMFIS_ACCEPT : accepte la connexion/message/destinataire sans filtrage supplémentaire SMFIS_TEMPFAIL : rejet de la connexion (code 4xx), du Message ou du destinataire
Milter : quelques filtres diponibles Milter-greylist Sender ID Bitdefender Spfmilter MIMEDEFANG Spamassassin Amavis clamav Support milter dans sendmail Activer le support MILTER dans site.config.m4 : APPENDDEF(`conf_libmilter_ENVDEF', `-DMILTER') APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER') Empêcher l utilisation de filtres qui tournent sous root : APPENDDEF(`conf_libmilter_ENVDEF', `-D_FFR_MILTER_ROOT_UNSAFE ')
Milter-greylist http://hcpnet.free.fr/milter-greylist/ Note : les options "--with-libmilter=dir" et "--with-libpthread=dir" du configure cherchent les bibliotheques dans DIR/lib Il faut utiliser les versions gnu de lex, yacc et m4 : pkg-get install m4-1.4.1 pkg-get install bison-1.35 (attention les versions plus recentes ne fonctionnent pas forcement...) pkg-get install flex Milter-greylist./configure --with-libmilter=/usr/local\ --with-libpthread=/usr\ --prefix=/usr/local/milter-greylist-1.5.6\ --with-user=smmsp make make install Le make install crée le fichier /etc/mail/greylist.conf s'il n'existe pas, sinon il conserve l'ancien
Milter-greylist : configuration de sendmail Dans sendmail.cf (juste avant MACROS LOCALES pour ceux qui utilisent le kit jussieu) : O InputMailFilters=greylist Xgreylist, S=local:/var/milter-greylist/milter-greylist.sock O Milter.macros.connect=j,{if_addr} O Milter.macros.envfrom=i Optionnellement, on peut fixer le niveau de logs du filtre : O Milter.LogLevel=9 Milter-greylist : configuration de sendmail (2) Pour désactiver le filtre pour les utilisateurs qui passent SMTP AUTH: O Milter.macros.envfrom=i, {auth_authen} Pour désactiver le filtre pour les utilisateurs qui utilisent STARTTLS Avec un certificat client : O Milter.macros.helo={verify},{cert_subject}
Milter-greylist : configuration Dans le fichier /etc/mail/greylist.conf ajouter : addr 193.50.130.0/24 addr 147.94.64.0/24 addr 147.94.65.0/24 addr 139.124.5.0/24... et tous les autres sous-reseaux a whitelister domain univ-mrs.fr domain univ-aix.fr domain u-3mrs.fr domain univ-tln.fr domain cnrs.fr domain sncf.fr domain voyages-sncf.com Milter-greylist : configuration (2) Configuration "actif pour quelques membres seulement" : lancer milter-greylist avec l'option -T, et dans greylist.conf ajouter les entrees rcpt pour les utilisateurs actifs : rcpt John.Doe@example.net rcpt webmaster@example.net # on peut utiliser des expr. Regulières limitées : rcpt /postmaster@.*/ Configuration "actif pour tout le monde sauf quelques membres" : lancer le milter-greylist sans l'option -T, et dans greylist.conf ajouter les entrees rcpt pour les utilisateurs a epargner
Milter-greylist : configuration (3) #délai d attente pour les nouveaux t-uples : greylist 10s # How long does auto-whitelisting lasts (set it to 0 # to disable auto-whitelisting). Here, 3 days autowhite 3d # Normally, clients that succeed SMTP AUTH are not # greylisted. Uncomment this if you want to # greylist them regardeless of SMTP AUTH #noauth Milter-greylist : configuration (4) # If milter-greylist was built with SPF support, then # SPF-compliant senders are not greylisted. Uncomment # this to greylist them regardless of SPF compliance #nospf # Uncomment this to enable verbose output # KP070904 pour les tests decommente : verbose # Uncomment if you want milter-greylist to remain # in the foreground (no daemon) #nodetach
Milter-greylist : configuration (5) # Uncomment if you want auto-whitelist to work for # the IP rather than for the (IP, sender, reciever) # tuple. #lazyaw # Uncomment this if you do not want milter-greylist # to tell its client how long they are greylisted. # KP A FAIRE : decommenter la ligne suivante pour la mise en prod #quiet # You can specify a file where milter-greylist will # store its PID #pidfile "/var/run/milter-greylist.pid" Milter-greylist : configuration (6) # The socket used to communicate with Sendmail can # be specified in this file: #KP 070904 decommente : socket "/var/milter-greylist/milter-greylist.sock" # The dumpfile location #KP 070904 decommente : dumpfile "/var/milter-greylist/greylist.db" # How often should we dump to the dumpfile #(0: on each change, -1: never) #KP 070904 decommente : dumpfreq 10m
Milter-greylist : configuration (7) # How long will the greylist database retain tuples #KP 070904 decommente : timeout 15d # The user the milter should run as #KP 070904 decommente : user "smmsp" Milter-greylist : script de démarrage cp rc-solaris.sh /etc/init.d/greylist chmod u+x /etc/init.d/greylist ln -s /etc/init.d/greylist /etc/rc0.d/k37greylist ln -s /etc/init.d/greylist /etc/rc1.d/k37greylist ln -s /etc/init.d/greylist /etc/rc2.d/s87greylist ln -s /etc/init.d/greylist /etc/rcs.d/k37greylist Vérifier la présence de l option -T dans /etc/init.d/greylist suivant le comportement souhaité!!!!
Milter-greylist : modification du fichier de conf Faire obligatoirement : /etc/init.d/sendmail stop /etc/init.d/greylist stop /etc/init.d/greylist start /etc/init.d/sendmail start En-tête des mails Mail non retardé : X-Greylist: Sender IP whitelisted, not delayed by milter-greylist Mail retardé : X-Greylist: Delayed for 00:19:54 by milter-greylist
Résultats 12000 10000 8000 6000 4000 2000 0 29/03/04 30/03/04 31/03/04 1/04/04 2/04/04 3/04/04 4/04/04 5/04/04 6/04/04 7/04/04 8/04/04 Les +/- du greylisting total RBL NoDNS Black Grey Spam Virus + >90% de spams en moins + réduction du trafic réseau (-moins de spams donc moins de mails) + protection contre les virus + réduction de la charge du serveur (moins d analyse de contenu) - délai induit (jusqu à plusieurs heures )
Relay-delay http://projects.puremagic.com/greylisting/downloads. html Ecrit en PERL Nécessite le support des threads dans PEARL MySQL (=> maintenance de la base) Les + de milter-greylist Ecrit en C «!tout en un!» Base intégrée auto-gérée Paramétrage par utilisateur