Configurer Exim 4 sur Debian
Exim 4 est transport de courrier (M.T.A.) par défaut de Debian. Il présente de nombreux avantages, bien que sa configuration réputée plus complexe que celle de Postfix puisse rebuter les moins expérimentés. Ce guide présente différentes étapes de la configuration d'Exim 4 pour implémenter les fonctionnalités anti-spam et anti-virus.
Ce guide est testé sur
- Debian 5.0 Lenny
- Debian 6.0 Squeeze
- Debian 7.0 Wheezy
Prérequis
Ce guide nécessite:
- l'antivirus libre ClamAV, comme décrit par Installer l'antivirus ClamAV sur Debian.
Paramètres
La réception et l'envoi des emails par le serveur SMTP nécessite que le HELO soit un nom de domaine qualifié (visible sur Internet). Renseignez le nom de domaine qualifié du serveur:
NEW_FQDN="smtp.domain.com"
Renseignez le nom du certificat SSL à utiliser pour chiffrer l'application avec TLS ou IMAPS (créé via la procédure Créer un certificat SSL / TLS sur Debian) (optionnel, recommandé):
SSL_KEY_NAME="${NEW_FQDN}"
Installation
Installez le serveur:
command apt-get install exim4-daemon-heavy
Séparez la configuration du serveur en plusieurs fichiers:
command sed -i \
-e 's/^\(dc_use_split_config=\).*/\1'true'/' \
'/etc/exim4/update-exim4.conf.conf'
Prenez en compte la modification:
command update-exim4.conf
Configuration du chiffrement
Ajoutez l'utilisateur Debian-exim groupe ssl-cert:
command adduser Debian-exim ssl-cert
Déterminez les chemins du certificat SSL:
SMTP_SSL_KEY="/etc/ssl/private/${SSL_KEY_NAME}.key"
if [ -e "/etc/ssl/certificates/${SSL_KEY_NAME}.crt+chain+root" ]; then
SMTP_SSL_CRT="/etc/ssl/certificates/${SSL_KEY_NAME}.crt+chain+root"
else
SMTP_SSL_CRT="/etc/ssl/certificates/${SSL_KEY_NAME}.crt"
fi
Configurez le chiffrement TLS du serveur SMTP, si possible:
if [ -e "${SMTP_SSL_KEY}" -a -e "${SMTP_SSL_CRT}" ]; then
command echo "
### main/02_exim4-config_tlscert
#################################
# ENABLING TLS
MAIN_TLS_ENABLE = true
# SSL private key
MAIN_TLS_PRIVATEKEY = ${SMTP_SSL_KEY}
# SSL public key
MAIN_TLS_CERTIFICATE = ${SMTP_SSL_CRT}
# Disabling certificate verification to avoid problems with some
# mail clients when using CACert (or self signed) certificates.
# Concerned mail clients : Outlook 2003, Mail for Mac OS X...
MAIN_TLS_VERIFY_CERTIFICATES = /dev/null
" > '/etc/exim4/conf.d/main/02_exim4-config_tlscert'
fi
Rechargez la configuration:
/etc/init.d/exim4 restart
Configuration du EHLO
Le HELO est déterminé par le nom d'hôte du serveur.
Modifiez le nom d'hôte du serveur à l'aide de la procédure Modifier le nom d'un hôte Debian GNU/Linux.
Protection anti-spam
Filtrer les HELO
Refuser les connexion SMTP utilisant des HELO incorrects est une protection anti-spam simple. Cela bloque une grande part des Spam envoyés au serveur.
Téléchargez les règles de filtrage des HELO:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/exim4/exim4_helo_checks.conf' \
--quiet --no-check-certificate --output-document='/tmp/exim4_helo_checks.conf'
Ajoutez les règles de filtrage des HELO à la configuration du serveur:
command sed -i \
-e '/hosts[ \t]*=[ \t]*:/r /tmp/exim4_helo_checks.conf' \
'/etc/exim4/conf.d/acl/30_exim4-config_check_rcpt'
Supprimez le fichier téléchargé:
command rm '/tmp/exim4_helo_checks.conf'
Initialisez la liste des IP et hôtes considérés comme HELO incorrects:
command echo "127.0.0.1
localhost
localhost.localdomain" \
> '/etc/exim4/rejected-helo.conf'
Rechargez la configuration du serveur:
/etc/init.d/exim4 reload
Filtrer avec SpamAssassin
Installez les logiciels nécessaires:
command apt-get install spamassassin sa-exim re2c make gcc libc6-dev
Activez le démon SpamAssassin et la mise à jour quotidienne des filtres:
command sed -i \
-e 's/^ENABLED=.*/ENABLED=1/' \
-e 's/^CRON=.*/CRON=1/' \
'/etc/default/spamassassin'
Mettez à jour les filtres SpamAssassin:
/etc/cron.daily/spamassassin
Démarrez le démon SpamAssassin:
/etc/init.d/spamassassin start
La vérification anti-spam est très consommatrice de ressources. Pour réduire la charge du serveur, désactivez le scan anti-spam pour les e-mails envoyés par des utilisateurs identifiés et par les hôtes pour lesquels le relais est autorisé.
Téléchargez les règles d'ignorance du filtre anti-spam:
command wget 'https://raw.github.com/biapy/howto.biapy.com/master/exim4/exim4_no_spam_scan_acl.conf' \
--quiet --no-check-certificate --output-document='/tmp/exim4_no_spam_scan_acl.conf'
Ajoutez les règles d'ignorance du filtre anti-spam à la configuration du serveur:
command sed -i \
-e '/hosts[ \t]*=[ \t]*:/r /tmp/exim4_no_spam_scan_acl.conf' \
'/etc/exim4/conf.d/acl/30_exim4-config_check_rcpt'
Supprimez le fichier téléchargé:
command rm '/tmp/exim4_no_spam_scan_acl.conf'
Activez SA-Exim et configurez-le pour vérifier tous les e-mails non marqués par le serveur Exim:
command sed -i -e 's/^SAEximRunCond: [01]/SAEximRunCond: ${if !eq{$acl_m0}{do-not-scan}}/' \
-e '/SAEximRejCond:/a\
SAEximRejCond: ${if !eq{$acl_m0}{do-not-reject}}' \
'/etc/exim4/sa-exim.conf'
Rechargez la configuration:
/etc/init.d/exim4 reload
Remarque: Ajustez le seuil de rejet des Spam dans le fichier /etc/exim4/sa-exim.conf en modifiant la valeur:
SApermreject: 12.0
Protection antivirus
Installez le démon ClamAV et les outils associés:
command apt-get install clamav-daemon \
daemon unrar arj debconf-utils unzip unace \
cpio zoo nomarch lzop cabextract pax
Autorisez l'accès aux fichiers du serveur Exim par l'antivirus:
command adduser clamav Debian-exim
Redémarrez le démon ClamAV:
su - -c "/etc/init.d/clamav-daemon restart"
Configurez Exim 4 pour utiliser l'antivirus:
command sed -i \
-e 's|^.*av_scanner[ \t]*=.*$|av_scanner = clamd:/var/run/clamav/clamd.ctl|' \
'/etc/exim4/conf.d/main/02_exim4-config_options'
Configurez le rejet des emails infectés:
echo '
# local-acl.conf
###################"
# This file is included in acl/40_exim4-config_check_data
# using the CHECK_DATA_LOCAL_ACL_FILE macro.
# Deny viruses.
deny
message = Message contains malware or a virus ($malware_name).
log_message = $sender_host_address tried sending $malware_name
demime = *
malware = *
' >> '/etc/exim4/local-acl.conf'
Créez la macro CHECK_DATA_LOCAL_ACL_FILE:
echo "
### main/01_exim4-local_acl_macrodefs
#################################
.ifndef CHECK_DATA_LOCAL_ACL_FILE
CHECK_DATA_LOCAL_ACL_FILE = /etc/exim4/local-acl.conf
.endif
" > '/etc/exim4/conf.d/main/01_exim4-local_acl_macrodefs'
Rechargez la configuration du serveur SMTP:
/etc/init.d/exim4 restart
Le projet eicar (The antivirus or malwhare test file) fournit des fichiers tests générant des faux positifs. La configuration est fonctionnelle si les emails contenant un de ces fichiers sont rejetés.
Pour aller plus loin
Pour adapter Exim 4 à vos besoins, utilisez le script de configuration automatisé fourni par Debian:
command dpkg-reconfigure exim4-config
Attention: choisissez de séparer la configuration en plusieurs fichiers.
Augmenter le nombre de messages envoyés par connexion SMTP
Utilisez cette configuration avec prudence car elle peut entrainer une surcharge de votre serveur.
Si vous voyez fréquemment le message suivant dans vos journaux Exim:
no immediate delivery: more than 10 messages received in one connection
Augmentez le nombre maximum de messages acceptés lors d'une connexion SMTP:
echo "
### main/04_exim4-config_queueoptions
#################################
# Allow up to 100 messages by connexion.
# Avoid the apparition of 'no immediate delivery: more than 10 messages received in one connection' warning.
smtp_accept_queue_per_connection = 100
" > '/etc/exim4/conf.d/main/04_exim4-config_queueoptions'
Rechargez la configuration d'Exim :
/etc/init.d/exim4 reload
Déboguer Exim 4
Si vous rencontrez des problèmes de démarrage du serveur SMTP, il est possible de déboguer le script de lancement d'Exim à l'aide la commande :
EX4DEBUG=1 /etc/init.d/exim4 restart
Pour déboguer le chemin suivi par les emails dans le serveur SMTP, activez le mode de débogage d'Exim:
command sed -i \
-e "s/\(COMMONOPTIONS='.*\)'.*/\1 -d'/" \
'/etc/default/exim4'
Relancez le serveur pour prendre en compte la configuration:
/etc/init.d/exim4 restart
Désactivez le débogage avec:
command sed -i \
-e "s/\(COMMONOPTIONS='.*\) -d'.*/\1'/" \
'/etc/default/exim4'
/etc/init.d/exim4 restart
Références
Ces livres peuvent vous aider:
Remerciements :
- Merci au contributeurs du projet Debian Volatile.
- Merci à Didier Mission pour son article Configuration antivirus et antispam avec Exim4, ClamAV et SpamAssassin.
- Merci à l'auteur de HOWTO: Debian Sarge/Etch: Setting up a Mail Server on Exim4 with Antivirus and Antispam filtering.Merci à l'auteur de HELO restrictions for Exim4.
- Merci à l'auteur de Howto setup a Virtual Mail System with Exim, MySQL, SpamAssassin, ClamAV and Dovecot.
- Merci à Justin Koivisto pour son article Installing and configuring Exim 4 on Debian.
- Merci à Lee Maguire pour son article Quick setup for Exim4 TLS/SMTP-AUTH.
- Merci à Chirik pour son exemple dans le README de SAExim.