===== Objectifs ===== Dans cet exemple, les objectifs sont les suivants : * Multidomaines entrant * Utilisateur unique((l'utilisateur asyd@domaine.tld est le même que l'utilisateur asyd@autredomaine.tld)) * Utilisation de Cyrus pour le délivrement du courrier * Protection anti spam via dspam * Transfert entre les différents éléments via LMTP((via des sockets Unix)) ==== Vue d'ensemble ==== {{docs:system:postfix:cyrus_dspam.jpg}} ===== Discussion ===== - Postfix recoit le message - Il délivre le message à dspam (via la directive mailbox_transport) en LMTP via une socket de type unix - Dspam ouvre une connexion (toujours en LMTP/socket unix) avec Cyrus pour lui demander s'il peut effectivement délivrer le courrier en traitement (typiquement s'il l'utilisateur existe) - Dspam envoie le mail à clamav - Dspam traite le message - Dspam délivre le courrier à Cyrus - Cyrus stocke finalement le message dans son backend ===== Configuration ===== ====Postfix==== //main.cf// # local_recipient_maps = virtual_alias_maps = hash:/etc/postfix/virtual # Delivery to DSPAM mailbox_transport = lmtp:unix:/var/run/dspam/dspam.sock # Transport map (used for dspam-spam and dspam-ham delivery) transport_maps = hash:/etc/postfix/transport ===mailbox_transport=== C'est la directive qui détermine comment postfix traitera les courriers pour les utilisateurs locaux. Dans ce cas, il délivrera le message en utilisant le protocole LMTP via une socket de type unix. ===transport_maps=== FIXME ===virtual_alias_maps=== La virtual_alias_maps me permet de définir des alias du genre : bruno@asyd.net asyd@asyd.net bbonfils@asyd.net asyd@asyd.net asyd@solaris-fr.org asyd@asyd.net En effet, dspam (du moins la version que j'utilise) le nom complet (user@domain.tld) comme identifiant. Si une seule même personne (en l'occurence moi dans l'exemple !) possède plusieurs adresses pour une même boîte, il y aura autant d'utilisateurs dspam, ce qui n'est pas voulou. De plus, dans le cas d'utilise multidomaine de cyrus, le même problème se poserait. C'est pourquoi les alias se font au niveau du MTA. ===A propos de local_recipients_maps=== Postfix utilise cette map pour savoir dès le début d'une connexion SMTP (au RCTP TO: pour être exact) si l'utilisateur existe réllement. Dans le cas d'utilisateur virtuels vous avez deux solutions : * ne pas définir de recipient_map, la partie LMTP de dspam semblant bien écrite, il ne traitera pas un message s'il ne peut pas le délivrer au MDA final (ici cyrus) * définir votre propre map * map SQL * map LDAP * fichier Chaque solution à ses avantages/inconvénients, à vous d'estimer quelle solution utiliser. ====Dspam==== DeliveryHost /var/imap/socket/lmtp DeliveryPort 24 DeliveryProto LMTP DeliveryIdent localhost EnablePlusedDetail on OnFail error Trust root Trust mail Trust mailnull Trust smmsp Trust daemon Trust webservd Trust asyd Trust dspam Debug * DebugOpt process spam fp TrainingMode teft TestConditionalTraining on Feature chained Feature whitelist Algorithm graham burton PValue graham Preference "spamAction=quarantine" Preference "signatureLocation=headers" # 'message' or 'headers' Preference "showFactors=on" Preference "spamAction=tag" Preference "spamSubject=SPAM" AllowOverride trainingMode AllowOverride spamAction spamSubject AllowOverride statisticalSedation AllowOverride enableBNR AllowOverride enableWhitelist AllowOverride signatureLocation AllowOverride showFactors AllowOverride optIn optOut AllowOverride whitelistThreshold HashRecMax 100000 HashAutoExtend on HashMaxExtents 0 HashExtentSize 50000 HashMaxSeek 100 HashConnectionCache 10 Notifications off PurgeSignatures 14 # Stale signatures PurgeNeutral 90 # Tokens with neutralish probabilities PurgeUnused 90 # Unused tokens PurgeHapaxes 30 # Tokens with less than 5 hits (hapaxes) PurgeHits1S 15 # Tokens with only 1 spam hit PurgeHits1I 15 # Tokens with only 1 innocent hit LocalMX 127.0.0.1 SystemLog on UserLog on Opt out ClamAVPort 3310 ClamAVHost 127.0.0.1 ClamAVResponse accept ServerQueueSize 32 ServerPID /var/run/dspam/dspam.pid ServerMode standard ServerParameters "--deliver=innocent -d %u" ServerIdent "lei.asyd.net" ServerDomainSocketPath "/var/run/dspam/dspam.sock" ClientHost /var/run/dspam/dspam.sock ====Cyrus==== //imapd.conf// configdirectory: /var/imap partition-default: /var/spool/imap sieveusehomedir: true hashimapspool: false admins: cyrus sasl_pwcheck_method: saslauthd tls_cert_file: /etc/ssl/certs/asyd.pem tls_key_file: /etc/ssl/private/mail.key tls_cacert_file: /etc/ssl/certs/cacert.pem //master.conf// START { recover cmd="ctl_cyrusdb -r" } # UNIX sockets start with a slash and are put into /var/imap/socket SERVICES { # add or remove based on preferences imap cmd="imapd" listen="127.0.0.1:imap" prefork=0 pop3s cmd="pop3d -s" listen="pop3s" prefork=0 lmtpunix cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0 } EVENTS { # this is required checkpoint cmd="ctl_cyrusdb -c" period=30 # this is only necessary if using duplicate delivery suppression, # Sieve or NNTP delprune cmd="cyr_expire -E 3" at=0400 # this is only necessary if caching TLS sessions tlsprune cmd="tls_prune" at=0400 } ~~DISCUSSION~~