Le but est d'installer sur une machine sous Lenny le serveur IMAP Dovecot avec livraison via postfix et vérification antispam par Spamassassin, le tout pour des utilisateurs locaux (pas des utilisateurs virtuels). De plus nous utilisons le SASL fourni avec Dovecot pour authentifier les connexions SMTP.
deb http://www.backports.org/debian lenny-backports main
# apt-get update # apt-get -t lenny-backports install dovecot-imapd
# 1.2.10: /etc/dovecot/dovecot.conf
# OS: Linux 2.6.26-2-686 i686 Debian 5.0.4
listen: *, [::]
login_dir: /var/run/dovecot/login
login_executable: /usr/lib/dovecot/imap-login
mail_location: maildir:~/Maildir
maildir_very_dirty_syncs: yes
mbox_write_locks: fcntl dotlock
lda:
postmaster_address: postmaster@petole.demisel.net
hostname: petole.demisel.net
mail_plugins: sieve
auth default:
passdb:
driver: pam
userdb:
driver: passwd
socket:
type: listen
client:
path: /var/run/dovecot/auth-client
mode: 432
user: postfix
group: postfix
NB : le certificat et la clé à placer dans
/etc/ssl/certs/dovecot.pem et
/etc/ssl/private/dovecot.pem ont été générés en suivant la
méthode de CAcert.
Le gros avantage est qu'ils seront vérifiés automatiquement en
interne après installation du paquet ca-certificates, et en
externe par tous les navigateurs disposant du certificat racine de
CAcert.
# /etc/init.d/dovecot startNB : il est possible que le premier démarrage prenne beaucoup de temps, en raison de la génération des paramètres SSL. Sur ce serveur, cela a mis 15 bonnes minutes. De temps à autres, ces paramètres vont être recalculés.
deb http://volatile.debian.org/debian-volatile lenny/volatile main
# apt-get update # apt-get install spamassassin spamc
# sa-update
ENABLED=1 CRON=1 NICE="--nicelevel 15"
# /etc/init.d/spamassassin start
La livraison finale des courriers va s'effectuer au travers du script /usr/local/bin/dovecot-deliver (téléchargeable ici), dont le principe est de vérifier la présence du répertoire ~/.spamassassin, et si ce dernier existe envoyer le courrier pour traitement au client spamc. Une fois l'éventuel traitement par spamc terminé, le courrier sera envoyé à l'agent de livraison de dovecot, où seront prises en compte les règles de filtrage sieve, si définies par l'utilisateur ; ce point est détaillé à la fin de cette page. Le script est question est le suivant :
#!/bin/sh
# Exit codes
EX_TEMPFAIL=75
EX_UNAVAILABLE=69
# Tools
DELIVER="/usr/lib/dovecot/deliver"
SPAMC="/usr/bin/spamc"
log_and_quit() {
/usr/bin/logger -s -p mail.warning -t deliver "$*"
exit $EX_TEMPFAIL
}
# Simple checks
[ -x $DELIVER ] || log_and_quit "Missing binary: $DELIVER"
#
# If spamassassin client is available, and spamassassin requested
# pipe mail through it
#
if [ -x $SPAMC -a -d $HOME/.spamassassin ] ; then
umask 077
OUTPUT="`mktemp /tmp/mailfilter.XXXXXXXXXX`"
if [ "$?" != 0 ]; then
log_and_quit "Unable to create temporary file."
fi
# Clean up when done or when aborting.
trap "rm -f $OUTPUT" EXIT SIGTERM
# calls spamc
$SPAMC > $OUTPUT
if [ "$?" != 0 ]; then
log_and_quit "Temporary SpamAssassin failure (spamc return $return)"
fi
$DELIVER < $OUTPUT
#
# If spamassassin client is not available, deliver directly
#
else
$DELIVER
fi
exit $?
La configuration de postfix s'effectue simplement via les fichiers /etc/postfix/main.cf et /etc/postfix/master.cf.
Dans /etc/postfix/main.cf, voici l'extrait correspondant à la livraison locale:
# # delivery # alias_maps = hash:/etc/aliases local_recipient_maps = hash:/etc/postfix/local_recipients, $alias_maps mailbox_command = /usr/local/bin/dovecot-deliver mailbox_size_limit = 0 local_destination_recipient_limit = 1
Quelques indications:
niko OK solene OK damien OK valentin OKCeci évite le problème du backscatter, car Postfix refusera directement lors du dialogue SMTP la livraison à des utilisateurs inconnus.
Concernant l'authentification SASL, il faut définir les services nécessaires (smtp standard, smtps et submission) dans /etc/postfix/master.cf :
smtp inet n - n - - smtpd
smtps inet n - n - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
submission inet n - n - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
Toujours pour l'authentification, nous activons le support SSL et les différents réglages nécessaires dans /etc/postfix/main.cf ; on y retouve en particulier l'indication d'utiliser le SASL de dovecot (paramètres smtpd_sasl_type et smtpd_sasl_path), ainsi que l'autorisation des clients authentifiés dans smtpd_recipient_restrictions :
#
# smtpd server
#
# get ready for tls
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
smtpd_tls_security_level = may
smtpd_tls_key_file = /etc/postfix/ssl/petole.demisel.net.key.pem
smtpd_tls_cert_file = /etc/postfix/ssl/petole.demisel.net.crt.pem
smtpd_tls_session_cache_timeout = 3600s
# Enforce the use of helo/ehlo, used in restrictions below
smtpd_helo_required = yes
# auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
smtpd_tls_auth_only = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
broken_sasl_auth_clients = yes
# restrictions at smtp time. order is important
# - accept everything from localnetwork
# - reject mail to unknown recipients (local or relayed)
# - reject badly formatted messages
# - reject unknown sources (dns)
# - reject clients blacklisted by SpamHaus
# - accept the rest
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
reject_non_fqdn_sender
reject_non_fqdn_recipient
reject_invalid_helo_hostname
reject_unlisted_recipient
reject_unlisted_sender
reject_non_fqdn_helo_hostname
check_client_access hash:/etc/postfix/access
reject_rbl_client zen.spamhaus.org
reject_rbl_client bl.spamcop.net
Le plugin sieve intégré à l'outil deliver (si activé dans la configuration globale) permet de ranger automatiquement les courriels entrants dans les boites. Pour ceci, il suffit que l'utilisateur écrive son fichier de règles ~/.dovecot.sieve, dont voici un exemple (téléchargeable ici) fonctionnel pour notre configuration, en particulier pour le filtrage des spams au début :
# -*- mode: sieve -*-
require "fileinto";
#
# Catch Junk mail, stop processing
#
if header :contains "X-Spam-Flag" "YES"
{
fileinto "Junk";
stop;
}
#
# Mailing-lists
# Deliveries are not terminal, to handle crossposts
#
if header :contains "List-Id" "lists.backports.org"
{
fileinto "list.debian-backports";
}
if header :contains "List-Id" "debian-user-french.lists.debian.org"
{
fileinto "list.debian-french";
}
if header :contains "List-Id" [
"debian-announce.lists.debian.org",
"debian-news.lists.debian.org",
"debian-security-announce.lists.debian.org",
"debian-volatile-announce.lists.debian.org",
"debian-user.lists.debian.org"
]
{
fileinto "list.debian";
}
if header :contains "List-Id" "dovecot"
{
fileinto "list.dovecot";
}
if header :contains "List-Id" "info-gnus-english"
{
fileinto "list.gnus";
}
if header :contains "List-Post" "mutt"
{
fileinto "list.mutt";
}
if header :contains "List-Post" "postfix-users@postfix.org"
{
fileinto "list.postfix";
}
if header :contains "List-Id" "spamassassin.apache.org"
{
fileinto "list.spamassassin";
}
Dernière modification : Friday April 23, 2010, Nicolas KOWALSKI
|
|
|
|
|