===== 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~~