Navigation --> NiQoZ WeB  >>  Gentoo  >>  Tutoriels Gentoo
Tutoriel :

Configurer postfix amavisd-new clamav spamassassin sur Gentoo

Gestion des mails et sécurité

jeudi 24 août 2006.

J’ai fait la synthèse de différents tutoriels trouvés sur le net ainsi que mon expérience personelle. C’est le système que j’utilise chez moi, je ne l’est donc pas soumis à une charge importante, il se peut que des problèmes apparaissent dans ces conditions non testées...

Sommaire

Installation des programmespage 1
Configurez Postfixpage 1
Configurez Amavisd-newpage 1
Configurez Clamavpage 1
Configurez Razor de Vipulpage 1
Configurer DCC (Distributed Checksum Clearinghouse)page 1
Configurer Spamassassinpage 1
Créez des exceptionspage 1
Ajouter plus de règlespage 1
Testez et finalisezpage 1
Fichiers exemplespage 1

Installation des programmes

# emerge postfix amavisd-new clamav spamassassin

Configurez Postfix

Nous ne verrons pas en détail la configuration de Postfix car cela serait l’objet d’un tutoriel complet.
Vous devez donc pour continuer, être familiarisés avec ce logiciel.
Voir cette doc.
Il faut que votre système soit capable d’envoyer le courrier local et distant.
Néanmoins vous trouverez à la fin mes fichiers de configuration complets comme exemples.


/etc/postfix/master.cf
smtp-amavis     unix -        -       n     -       2  smtp
 -o smtp_data_done_timeout=1200
 -o smtp_send_xforward_command=yes
# Si vous utilisez lmtp :
#lmtp-amavis unix -     -       n       -       2       lmtp
#   -o lmtp_data_done_timeout=1200
#   -o lmtp_send_xforward_command=yes

127.0.0.1:10025 inet n        -       n     -       -  smtpd
 -o content_filter=
 -o local_recipient_maps=
 -o relay_recipient_maps=
 -o smtpd_restriction_classes=
 -o smtpd_client_restrictions=
 -o smtpd_helo_restrictions=
 -o smtpd_sender_restrictions=
 -o smtpd_recipient_restrictions=permit_mynetworks,reject
 -o mynetworks=127.0.0.0/8
 -o strict_rfc821_envelopes=yes
 -o smtpd_error_sleep_time=0
 -o smtpd_soft_error_limit=1001
 -o smtpd_hard_error_limit=1000

# Si vous voulez utiliser un filtrage par proxy :
#smtp            inet n         -       n      -       8 smtpd
# -o smtpd_proxy_filter=127.0.0.1:10024
# -o smtpd_client_connection_count_limit=4
# Si vous ne voulez pas faire de vérification sur le mail sortant :
#10.0.0.2:smtp   inet n         -       n       -      - smtpd
#-o content_filter=
La première ligne commençant par smtp-amavis indique qu’au maximum deux processus pourront être exécutés en même temps. Vous pouvez modifier cette valeur pour l’adapter à vos besoins. Faites seulement bien attention de reporter cette modification dans la variable $max_servers du fichier amavisd.conf.

/etc/postfix/main.cf
biff = no
empty_address_recipient = MAILER-DAEMON
queue_minfree = 120000000

content_filter = smtp-amavis:[127.0.0.1]:10024

# TRANSPORT MAP
#
# Insert text from sample-transport.cf if you need explicit routing.
transport_maps = hash:/etc/postfix/transport

relay_domains = $transport_maps
Postfix dispose d’un grand nombre d’options que vous pouvez configurer dans main.cf. Pour plus d’explications sur ce fichier, veuillez vous référer à la page de manuel man 5 postconf ou à la doc officielle française (très très utile... !).
Vous trouverez également un petit condensé sur l’utilisation de postconf, dans le tutoriel : Configurer TLS SSL et Cyrus SASL avec Postfix de ce site. smiley

Le format du fichier transport est le même que celui des fichiers de hachage de Postfix. Les messages à destination du domaine inscrit sur la gauche seront envoyés au serveur/destination inscrit sur la droite à la place.
Cela peut être utile pour envoyer tous le courrier local sur la même machine.
Exemple :

/etc/postfix/transport :
unemachine.demondomaine.tld      local
Ainsi le courrier normalement à destination de unemachine sera distribué par le serveur local.

Autre exemple :
/etc/postfix/transport
mondomaine.tld                          smtp:mail.mondomaine.tld
Le courrier est rerouté par SMTP vers mail.mondomaine.tld

Important : Après avoir édité ce fichier, vous devez lancer la commande postmap. Postfix ne lit pas directement ce fichier, il faut donc que vous le convertissiez dans le format convenable.
En faisant : # postmap /etc/postfix/transport Cela créé le fichier /etc/postfix/transport.db.

Configurez Amavisd-new

Éditez les lignes suivantes dans le fichier /etc/amavisd.conf :

/etc/amavisd.conf
#(Insérer les domaines à vérifier :)
$mydomain = 'exemple.com';
#(Écouter uniquement sur l'interface locale :)
$inet_socket_bind = '127.0.0.1';
#(Renvoyer le courrier à Postfix sur le port 10025 :)
$forward_method = 'smtp:127.0.0.1:10025';
$notify_method = $forward_method;
#(Définir le compte avec lequel envoyer les alertes en cas de courrier positif à l'antivirus.)
$virus_admin = "alertevirus@$mondomaine";
#(Toujours ajouter les en-têtes de spam.)
$sa_tag_level_deflt  = -100;
#(Ajouter l'en-tête "X-Spam-Status: Yes" pour le courrier dépassant ce score :)
$sa_tag2_level_deflt = 5;
#(Considère comme SPAM tout courrier dépassant le score précédent.)
$sa_kill_level_deflt = $sa_tag2_level_deflt;
#(Ne pas envoyer de notification de statut à l'envoyeur. Cela
# n'affecte pas la réception du spam par le destinataire. Pour
# faire cela, utiliser le kill_level.)
$sa_dsn_cutoff_level = 10;
# (Ne pas passer le message et le mettre en quarantaine à la place :)
$final_virus_destiny      = D_DISCARD;  # (par défaut : D_DISCARD)
$final_banned_destiny     = D_DISCARD;  # (par défaut : D_BOUNCE)
$final_spam_destiny       = D_DISCARD;  # (par défaut : D_BOUNCE)
Grâce à la ligne $sa_tag2_level_deflt = 5 ;, vous indiquez un score de spam pour Spamassassin qui sera de 5. Cela peut être un peu faible. Comme vous l’aviez peut-être remarqué, la valeur par défaut pour Amavisd-new est de 6.3. Si vous ne souhaitez voir aucun spam dans votre répertoire de courrier, choisissez 5, mais si vous ne voulez pas avoir de faux positifs, gardez la valeur de 6.3 (perso j’utilise 4.9 j’ai quelques faux positifs mais j’utilise le soft-whitelisting, dans l’ensemble cela fonctionne assez bien).

Exemples de SOFT-LISTING :
/etc/amavisd.conf
@score_sender_maps = ({
'.' => [
   {
   # soft-whitelisting, valeurs négatives.
   '.sourceforge.net'      => -3.0,
   '.web-hebergeurs.fr'    => -4.5,
   '.web-hebergeur.com'    => -4.5,
   '.niqozweb.net'         => -5.0,
   'oumachine.domaine.ltd  => -3.0,

   # soft-blacklisting, valeurs positives.
   '.microsoft.com'        =>  5.0,
   'encore.unspammer.net   =>  3.0,
   },
 ],
});
Les scores respectifs se verront ainsi augmentés ou diminués du nombre de points désirés.

Créer un répertoire de quarantaine pour les mails positifs à l’antivirus, dans la mesure où nous ne souhaitons pas les délivrer à nos utilisateurs.
Creez le répertoire de quarantaine pour les mails vérolés :

# mkdir /var/amavis/virusmails
# chown amavis:amavis /var/amavis/virusmails
# chmod 750 /var/amavis/virusmails

Configurez Clamav

Pour la vérification des virus nous utilisons ClamAV , car il propose de bons moyens de détection comparables aux offres commerciales. De plus, il est très rapide et c’est un logiciel libre. Comme nous aimons utiliser les fichiers de journalisation, vous allez configurer clamd pour utiliser syslog et utiliser une journalisation verbeuse. Enfin, clamd ne sera pas lancé en tant que root.

/etc/clamd.conf :
# (Journalisation verbeuse avec syslog :)
LogSyslog
LogVerbose
LogFacility LOG_MAIL
# (Changer la direction du fichier pid :)
PidFile /var/run/amavis/clamd.pid
# (Fichier du socket de clamav :)
LocalSocket /var/amavis/clamd
# (Fermer la connexion quand cette limite est dépassée :)
StreamMaxLength 10M
# (Ne pas exécuter clamd en tant que root :) mais
# avec le même utilisateur que le démon ama
User amavis
# (Vous devez décommenter ces lignes avec les dernières versions :)
ScanMail
ScanArchive

ClamAV est fourni avec le démon freshclam, qui permet de mettre à jour les signatures des nouveaux virus. Nous programmerons une mise à jour de la base des signatures de virus toutes les deux heures.

/etc/freshclam.conf :
# (Journalisation avec syslog :)
LogSyslog
# (Journalisation verbeuse :)
LogVerbose
# (Abandonner explicitement les privilèges root :)
DatabaseOwner clamav
# (Vérifier les mises à jour toutes les deux heures. C'est la
# Recommandation officielle :)
Checks 12
# (Utilisez le miroir le plus proche de vous. Remplacer XY par
# le code correspondant à votre pays :)
DatabaseMirror db.XY.clamav.net
# Importants donnera les bons privilèges à amavis.
AllowSupplementaryGroups

Faites démarrer clamd et freshclam par les scripts d’initialisation en modifiant le fichier /etc/conf.d/clamd.

/etc/conf.d/clamd :
START_CLAMD=yes
FRESHCLAM_OPTS="-d"


Modifiez le fichier amavisd.conf pour indiquer la bonne location du socket.

/etc/amavisd.conf :
# (Décommentez les lignes pour la vérification avec clamav et
# modifiez la location du socket :)
['ClamAV-clamd',
&ask_daemon, ["CONTSCAN {}n", "/var/amavis/clamd.sock"],
 qr/bOK$/, qr/bFOUND$/,
 qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],

Assignez le goupe amavis au groupe clamav : # groupmod -n amavis clamav

Configurez Razor de Vipul

Razor2 est un réseau collaboratif et distribué d’identification de spam. Installez-le grâce à emerge razor et créez les fichiers de configuration nécessaires sous le compte amavis en utilisant su - amavis, puis razor-admin -create

Créer les fichiers de configuration nécessaires :

# emerge razor
# (Définir temporairement un shell pour amavis.)
# usermod -s /bin/bash amavis
# su - amavis
$ razor-admin -create
$ exit
# (Remettre le shell à /bin/false.)
# usermod -s /bin/false amavis

Configurer DCC (Distributed Checksum Clearinghouse)

Tout comme Razor2, DCC est un réseau collaboratif et distribué d’identification de spam. Son fonctionnement repose sur le nombre de personnes qui reçoivent un mail donné, en identifiant chacun d’eux avec une somme de contrôle.

Installez DCC # emerge dcc

Configurer Spamassassin

Amavis utilise directement les bibliothèques Perl de Spamassasin, il n’y a donc pas besoin de lancer le service de spamassassin. Cela génère quelques confusions dans la configuration, vu que Spamassassin utilise le fichier de configuration /etc/mail/spamassassin/local.cf, mais le fichier /etc/amavisd.conf a priorité et remplace certaines de ces configuration.

/etc/mail/spamassassin/local.cf :
# Activer le système bayésien
use_bayes               1

# Activer toutes les vérifications de réseaux
skip_rbl_checks         0

# Le courrier utilisant une localisation parmi celles-ci ne sera
# pas marqué comme pouvant être du spam dans une langue
# étrangère.
ok_locales              en

# Utiliser un répertoire personnalisé pour le bayésien.
bayes_path              /var/amavis/.spamassassin/bayes
Depuis la version 3.1 de Spamassassin, vous pouvez activer DCC et Razor2 en décommentant les lignes correspondantes dans le fichier v310.pre.
/etc/mail/spamassassin/v310.pre :
loadplugin Mail::SpamAssassin::Plugin::DCC
# Pyzor - perform Pyzor message checks.
#
loadplugin Mail::SpamAssassin::Plugin::Pyzor

# Razor2 - perform Razor2 message checks.
#
loadplugin Mail::SpamAssassin::Plugin::Razor2
Vous pouvez chercher de l’inspiration pour votre fichier local.cf en utilisant le générateur de configuration de Spamassassin.

Créez des exceptions

Lorsque les premiers courriers arriveront effectivement sur votre passerelle de courrier, vous découvrirez probablement que la configuration ci-dessus n’est pas parfaite. Par exemple, certains de vos clients souhaiteront probablement recevoir des courriers que les autres ne voudront pas. Vous pouvez facilement mettre en place des listes blanches et noires pour les expéditeurs.

Décommentez la ligne suivante dans le fichier de configuration :

/etc/amavisd.conf
read_hash("/var/amavis/sender_scores_sitewide"),


Dans le fichier sender_scores_sitewide, vous pouvez préciser des adresses complètes ou plus généralement des noms de domaine. Puis, vous leurs attribuez une note positive ou négative, à ajouter au score de spam.
/var/amavis/sender_scores_sitewide :
# (Réduire le score de spam pour tous les courriers de
# cet expéditeur.)
postmaster@exemple.net     -3.0
# (Augmenter le score de spam pour
# tous les courriers des expéditeurs du
# domaine example.net, sauf ses sous-domaines.)
.example.net                1.0
Voir /etc/amavisd.conf pour plus d’exemples.

Mettre ces adresses en dehors de amavisd.conf permet une configuration plus propre et plus sûre.
Vous pouvez également faire la même chose en passant par le fichier de configuration de Spamassassin /etc/mail/spamassassin/local.cf, mais je pense que c’est plus propre de le faire dans sender_scores_sitewide.

Vous pouvez ajouter les lignes suivantes dans votre amavisd.conf pour passer outre les vérifications de spam pour les destinataires postmaster et abuse.

Ne pas filtrer contre le spam pour les courrier de postmaster et abuse :
map { $bypass_spam_checks{lc($_)}=1 } (qw(
       postmaster@
       abuse@
));
Important : Tant qu’on en est à parler de postmaster et abuse, il ne faut jamais supprimer automatiquement de courriers à destination de ces adresses.
Voir la RFC 2142 Mailbox names for common services, roles and functions (Noms des boîtes de courrier pour des services communs, rôles et fonctions). Sinon, votre domaine pourrait finir par être listé dans une des blacklistes qu’on retrouve sur le site rfc-ignorant.org !

Ajouter plus de règles

Si vous souhaitez ajouter quelques-unes des règles proposées par le SpamAssassin Rules Emporium, vous pouvez facilement le faire en en ajoutant ou en les mettant à jour grâce au paquet mail-filter/spamassassin-ruledujour :

Installez ruledujour : # emerge "mail-filter/spamassassin-ruledujour"

/etc/rulesdujour/config :
# (Relancer amavisd-new au lieu de spamd.)
SA_RESTART="/etc/init.d/amavisd restart"

Testez et finalisez

Avant de lancer freshclam vous pouvez vérifier manuellement que le service fonctionne :

# freshclam
ClamAV update process started at Sun May  2 09:13:41 2004
Reading CVD header (main.cvd): OK
Downloading main.cvd [*]
main.cvd updated (version: 22, sigs: 20229, f-level: 1, builder: tkojm)
Reading CVD header (daily.cvd): OK
Downloading daily.cvd [*]
daily.cvd updated (version: 298, sigs: 1141, f-level: 2, builder: diego)
Database updated (21370 signatures) from database.clamav.net (193.1.219.100).
Nous venons de mettre à jour les définitions de virus et nous sommes assurés au passage que freshclam.conf fonctionne correctement.

Testez ensuite freshclam et amavisd en utilisant la CLI (l’interface en ligne de commandes) avec des courriers de test d’amavisd.
Lancez clamd, amavis et rechargez Postfix avec les commandes suivantes :

# /etc/init.d/clamd start
# /etc/init.d/amavisd start
# /etc/init.d/postfix reload
Si tout va bien, postfix devrait écouter sur le port 25 pour la réception de courrier et devrait les réinjecter sur le port 10024. Pour vous en assurer, jetez un coup d’œil dans vos fichiers de journalisation.

Exemple de code 5.3 : Vérifier les fichiers de journalisation : # tail -f /var/log/mail.log Selon votre configuration de journalisation, il se peut que le bon fichier soit /var/log/messages.

  • Maintenant, si vous n’avez aucun message étrange dans le fichier de journalisation, il est temps de faire les tests.

  • Utilisez netcat pour vous connecter manuellement à amavisd sur le port 10024 et à postfix sur le port 10025.

  • Netcat peut être utilisé comme un remplacement amélioré de telnet. Pour l’installer, vous devez faire emerge netcat.

  • Pour une raison inconnue, vous ne pouvez pas injecter manuellement un courrier complet avec netcat dans amavisd. Utilisez telnet à la place.

Vérification manuelle du fonctionnement d’amavisd et de postfix

# nc localhost 10024
220 [127.0.0.1] ESMTP amavisd-new service ready ==> AMAVIS FONCTIONNE :)
# nc localhost 10025
220 exemple.com ESMTP Postfix ==> La réinjection d'amavis fonctionne :)

Si vous souhaitez visualiser l’intégralité des messages de retour avec amavisd-new, lancez amavisd debug-sa avec le compte utilisateur amavis et envoyez un courrier. Pour que cela fonctionne, vous devrez probablement changer le Shell par défaut dans /etc/ passwd.

Ajoutez amavisd et clamd aux scripts à lancer par défaut au démarrage :

# rc-update add clamd default
# rc-update add amavisd default


Fichiers exemples

Postfix
Amavisd-New
Clamav
Spamassassin
Fichier Exemple - 5.1 ko
master.cf
Fichier de configuration Postfix niveau démons...
Fichier Exemple - 111.4 ko
amavisd.conf
Fichier de configuration d’Amavisd-new.
Fichier Exemple - 7.9 ko
clamd.conf
Fichier de configuration de Clamav.
Fichier Exemple - 991 octets
local.cf
Fichier de configuration principal de Spamassassin.
Fichier Exemple - 2.8 ko
main.cf
Fichier de Configuration de Postfix
Fichier Exemple - 193 octets
clamd
Fichier de configuration des paramètres du démon clamd (/etc/conf.d/clamd).
Fichier Exemple - 2.1 ko
v310.pre
Fichier de configuration des plugins de Spamassassin.
Fichier Exemple - 3.1 ko
freshclam.conf
Fichier de configuration des mises à jour automatiques de Clamav.

_



Vos avis sur cet article:

Ce forum est anonyme et sans inscription
  • Configurer postfix amavisd-new clamav spamassassin sur Gentoo
    26 juin 2007 par 86.71.141.204
    super genial c de la ball enfin une solution util
  • Bravo !
    12 juin 2007 par Zelltemplar
    Bravo pour votre article, il m’a beaucoup servit, notamment pour résoudre des problèmes liés à la création de groupes, et quelques petites actuces. Merci pour le travail fourni :)
  • Configurer postfix amavisd-new clamav spamassassin sur Gentoo
    27 février 2007 par Siegfried

    Bonjour,

    très efficace votre article. Je cherchais quelques compléments pour mon serveur sous ubuntu ...

    Cordialement

    Siegfried