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...
# emerge postfix amavisd-new clamav spamassassin
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= |
| /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 |
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 |
| /etc/postfix/transport |
| mondomaine.tld smtp: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.
É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) |
| /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, }, ], }); |
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 :
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
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 :
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
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 |
| /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 |
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"), |
| /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 |
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@ )); |
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" |
Avant de lancer freshclam vous pouvez vérifier manuellement que le service fonctionne :
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 :
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.
Vérification manuelle du fonctionnement d’amavisd et de postfix
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 :
_
Bonjour,
très efficace votre article. Je cherchais quelques compléments pour mon serveur sous ubuntu ...
Cordialement
Siegfried