Sendmail milter/greylisting Milter : objectifs
Transcription
Sendmail milter/greylisting Milter : objectifs
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 addr addr addr 193.50.130.0/24 147.94.64.0/24 147.94.65.0/24 139.124.5.0/24 ... et tous les autres sous-reseaux a whitelister domain domain domain domain domain domain domain univ-mrs.fr univ-aix.fr u-3mrs.fr univ-tln.fr cnrs.fr sncf.fr 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 rcpt # on rcpt [email protected] [email protected] peut utiliser des expr. Regulières limitées : /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 ln ln ln -s -s -s -s /etc/init.d/greylist /etc/init.d/greylist /etc/init.d/greylist /etc/init.d/greylist /etc/rc0.d/K37greylist /etc/rc1.d/K37greylist /etc/rc2.d/S87greylist /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 /etc/init.d/greylist /etc/init.d/greylist /etc/init.d/sendmail stop stop start 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 total RBL NoDNS Black Grey Spam Virus 8000 6000 4000 2000 29 /0 3 30 /04 /0 3 31 /04 /0 3/ 0 1/ 4 04 /0 2/ 4 04 /0 3/ 4 04 /0 4/ 4 04 /0 5/ 4 04 /0 6/ 4 04 /0 7/ 4 04 /0 8/ 4 04 /0 4 0 Les +/- du greylisting • + >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