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