|
Il y a actuellement 4 visiteurs connectés sur le site !
Traitement anti-spam
Introduction
Voici "une" (parmi d' autres) mise en oeuvre de spamassassin sur une Mandrake conjointement à un serveur de courrier postfix (en l' occurrence 10.0 mais ça ne devrait pas changer sur une autre).
6 logiciels Ãa peut paraître beaucoup mais chacun y a un rôle bien défini (small is beautifull a-t-on coutume de dire)
- fetchmail : relèvera les courriers pop ou imap sur les serveurs pour tous les comptes des utilisateurs de la machine.
- postfix : c'est un MTA (Mail Transfert Agent) son
rôle est de transférer le courrier vers les boîtes locales ou vers l' extérieur.
- procmail : c' est un MDA (Mail Delivery Agent) son rôle est de délivrer le courrier : seulement ? pourrait-on dire ; oui mais il le trie aussi et en plus sait le filtrer de manière évoluée ( avec des expression rationnelles, les fameuses "regexp").
- spamassassin : c'est lui qui va analyser et marquer les spams afin qu'on puisse s'en débarasser ou au moins les trier de manière efficace.
- razor2 : un petit peu d' aide grâce au peer to peer (pas en justice celui-là )
- MUA (Mail User Agent) : il lit et écrit les mails puis les repasse au MTA qui s'occupera de les envoyer. Mutt ou mail sont des MUA typiques. Cependant on traitera ici d'un client de messagerie plus "user friendly" Kmail. Ãtant entendu que ce qu'on fait avec Kmail peut être fait de façon à peu près similaire avec un autre client : il suffit qu'il gère les filtres.
Logiciels
Ãa peut paraître beaucoup mais chacun y a un rôle bien défini (small is beautifull a-t-on coutume de dire)
- fetchmail : relèvera les courriers pop ou imap sur les serveurs pour tous les comptes des utilisateurs de la machine .
- postfix : c'est un MTA (Mail Transfert Agent) son rôle est de transférer le courrier vers les boîtes locales ou vers l' extérieur.
- procmail : c' est un MDA (Mail Delivery Agent) son rôle est de délivrer le courrier : seulement ? pourrait-on dire ; oui mais il le trie aussi et en plus sait le filtrer de manière évoluée ( avec des expression rationnelles, les fameuses "regexp").
- spamassassin : c'est lui qui va analyser et marquer les spams afin qu'on puisse s'en débarasser ou au moins les trier de manière efficace.
- razor2 : un petit peu d' aide grâce au peer to peer (pas en justice celui-là )
- MUA (Mail User Agent) : il lit et écrit les mails puis les repasse au MTA qui s'occupera de les envoyer. Mutt ou mail sont des MUA typiques. Cependant on traitera ici d'un client de messagerie plus "user friendly" Kmail. Ãtant entendu que ce qu'on fait avec Kmail peut être fait de façon à peu près similaire avec un autre client : il suffit qu'il gère les filtres.
Avantages
Chacun ne fait que ce qu'il sait faire mais le fait bien, cette mise en oeuvre permet également de commencer à saisir quelque chose au traitement du courrier électronique : sujet plus complexe qu'il n' y paraît, la meilleure preuve en étant le Spam, que tout le monde réprouve mais qui se répand comme la peste. Or les simples filtres que nous réglons sur nos MUA sont très vite débordés par la variété des ruses employées. Inutile de vous flageller, vous avez affaire à des professionnels tout simplement : en clair ce sont des gros cons mais ils connaissent leur (sale) boulot. Autant leur opposer le talent des développeurs libres, en fait "c'est pas com-pli-qué" (comme disait Michel Chevalier).
Dernière précision : fetchmail est capable passer les mails directement à procmail (grâce à l'option 'mda') puis celui-ci relaie vers spamassassin pour le marquage des spams, mais dans ce cas fetchmail attend procmail pour reprendre la main ; avec postfix ce traitement se fait en arrière-plan et la relève des mails est plus rapide.
Installation
# urpmi postfix fetchmail procmail spamassassin razor
Certains seront déjà là en fonction des choix faits à l'installation de la distribution. Je suis désolé, sous Mandrake c'est tout ;-)
Configuration
Fetchmail
Fetchmail fait appel à un fichier .fecthmailrc ; dans notre cas (relève pour tous) ce fichier se trouvera dans le répertoire /root. Il sera appelé par la commande
# fetchmail
dans une console ou un script. Pour les liaisons permanentes on peut le lancer comme un démon et régler les espaces de relève du courrier. Pour une liaison RTC on peut ajouter cette commande dans un fichier /etc/ppp/ip-up.local qui sera lu à chaque connexion. Voici un exemple de /etc/ppp/ip-up.local
#!/bin/bash
# envoi des messages en attente
postfix flush
# retrait des messages
fetchmail -a
exit 0
On peut y ajouter tout ce qu'on a besoin de lancer lors d'une connexion : utile donc pour le RTC. On peut de même créer un fichier /etc/ppp/ip-down.local qui aura le rôle de terminer les programmes à la déconnexion.
Voici à quoi peut ressembler un fichier .fetchmailrc. avec quelques explications.
# les commentaires débutent par le signe #
set postmaster "toto" #(mettre ici le nom de l'utilisateur qui recevra les messages pour "postmaster")
set bouncemail
set spambounce
set properties ""
#exemple pour une relève avec un protocole pop3
#(la valeur 'timeout' détermine le temps d' attente supérieur de fetchmail)
poll pop.mon_fai.xxx with proto POP3 timeout 30
user 'utilisateur' there with password 'mot-de-passe' is toto here options fetchall stripcr warnings 3600
antispam 571 550 501 554
# mda "/usr/bin/procmail -Y -d %T"
#(cette ligne commentée ici servirait dans le cas contraire
# à passer les mails directement à procmail en évitant postfix)
# utilisateur doit être remplacé par votre nom d'utilisateur
# pop attribué par votre fournisseur d'accès
# (il faut conserver les ' '), même chose pour 'mot-de-passe'
# fetchall signifie qu'il faut tout relever
#(correspond à la commande "fetchmail -a") et effacer
#les messages du serveur,
#pour les détails des options voir les pages de manuel :
#man fetchmail.
#exemple pour une relève avec un protocole imap
#(si votre fai le supporte et que imap est installé)
poll imap.mon_fai.xxx with proto IMAP timeout 30
user 'utilisateur' there with password 'mot_de_passe' is toto here options fetchall stripcr warnings 3600
antispam 571 550 501 554
# mda "/usr/bin/procmail -Y -d %T"
|
Et ainsi de suite pour tous les Fai et comptes... attention fetchmail inscrit les mots de passe en clair donc droits très restreints*
# chmod 600 .fetchmailrc
De toute façon, sans cela il va protester.
Chaque utilisateur peut également posséder un .fetchmailrc avec ses comptes personnels dans son propre répertoire ce qui lui permettra de relever et paramétrer ses propres comptes de courrier. La commande "fetchmail" n' est pas réservée à root à condition qu'un .fetchmailrc existe dans le répertoire utilisateur.
Postfix
Postfix est pré-configuré sous Mandrake : il vous restera selon votre situation de connexion à mettre à jour votre fichier de configuration /etc/postfix/main.cf avec votre hostname (myshostname=xxxxxx), votre origine (myorigin=xxxxxxx), votre inet_interface = xxxxxxxx voire votre relayhost = xxxxxxxxxx pour relayer vos messages sortants. Pour cela et selon votre cas il faut voir la doc de postfix et les nombreuses et très bonnes documentations qu'on trouve sur le web.
Il faut pourtant ajouter l'instruction suivante afin que postfix appelle procmail (rapelez-vous qu'il ne peut appeler spamassasin tout seul) :
mailbox_command = /usr/bin/procmail -a "$EXTENSION"
Voici à quoi peut ressembler un main.cf de chez Mandrake
# These are changed by postfix install script
readme_directory = /usr/share/doc/postfix-2.1.0/README_FILES
sample_directory = /usr/share/doc/postfix-2.1.0/samples
sendmail_path = /usr/sbin/sendmail.postfix
setgid_group = postdrop
command_directory = /usr/sbin
manpage_directory = /usr/share/man
daemon_directory = /usr/lib/postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
mailbox_command = procmail -a "$EXTENSION" #### --> voilà la ligne à ajouter.
# User configurable parameters
myhostname = mon.hôte # --> mettre son nom d' hôte
mynetworks_style = host
delay_warning_time = 4h
unknown_local_recipient_reject_code = 450
smtp-filter_destination_concurrency_limit = 2
lmtp-filter_destination_concurrency_limit = 2
smtpd_sasl_path = /etc/postfix/sasl:/usr/lib/sasl2
# La ligne qui suit utilise les tables canoniques pour la réécriture des from d' enveloppe des messages envoyés,bébert@mabécane.monchezmoi ayant assez peu de chance d 'être connu par les serveurs et donc relayé ;-))
sender_canonical_maps = hash:/etc/postfix/canonical
inet_interfaces = localhost #--> pour une machine locale.
# la ligne qui suit pour la distribution du courrier local
# vers le /var/spool/mail/xxx de chaque utilisateur,
# cette table canonique faisant correspondre adresses de courrier
# et utilisateur local.
recipient_canonical_maps = hash:/etc/postfix/recipient_canonical_maps
myorigin = monfai.fr ### ---> on peut indiquer ici le fai par lequel on se connecte au net.
Ne pas oublier de relancer postfix :
# postfix reload
|
Procmail
Procmail se configure dans un fichier /etc/procmailrc. Dans un premier temps on peut lui demander de générer un fichier de logs pour surveiller ce qui se passe, on pourra le désactiver ensuite quand ça marche. On se contente ensuite de faire appel à spamassassin et de fixer la taille des mails à lui soumettre pour ne pas surcharger inutilement le système.
Voici à quoi peut ressembler un /etc/procmailrc (commenté).
#Run Procmail as user
DROPPRIVS=yes
#location des logs et mode verbeux
LOGFILE=/var/log/procmail.log
VERBOSE=ON
# SpamAssassin
# Cette recette limite le contrôle aux mails inférieurs à 150 ko (1024 x 150) elles est exprimée en octets, facile à modifier donc.
# :0 indique le début d 'une recette, f pour que le programme appelé agisse en tant que filtre et w pour attendre la fin de l'exécution avant la suite.
:0fw
* < 153600
| /usr/bin/spamc -f # exécution de spamc (daemon spamd lancé)
:0e # e = recette suivante à exécuter en cas d'erreur du programme précédent
{
EXITCODE=$? # renvoie du code de sortie
}
# On arrête ici car on n'utilise pas procmail
# pour trier le courrier traité par spamassassin.
# On pourrait ajouter ensuite des recettes de tri
# pour que les mails soient directement classés par procmail
# du genre :
# :0:
# * ^X-Spam-Status: Yes #-->(drapeau ajouté par spamassassin si spam)
# $HOME/.Mail/Spam #-->(répertoire de spam)
## Attention cependant une telle suite aurait eu besoin qu'on
## définisse en début de fichier les différentes variables
## utilisées ansi que le chemin des exécutables
|
Attention que le démon spamd soit lancé, ce qui n'est pas le cas avant un reboot ou le lancement manuel
# /etc/init.d/spamassassin start
ou par le Centre de Contrôle --> système --> services).
Un .procmailrc peut se trouver dans le répertoire d'un utilisateur et prendre le pas sur /etc/procmailrc. Ceci n' est toutefois utile que pour le tri par procmail des courriers de chacun dans son propre répertoire comme en fin d 'exemple commenté. Les précisions, options, syntaxe dans "man procmail", "man procmailrc", la doc (/usr/share/doc) et le web.
Spamassassin
Spamassassin se configure dans /etc/mail/spamassassin/local.cf et en plus il existe un utilitaire sur ce site qui vous fait un local.cf qui va bien : http://www.yrex.com/spam/spamconfig.php
Un tel fichier sur Mandrake (généré sur le site,traduit, et un peu modifié) peut ressembler à ceci :
# This is the right place to customize your installation of SpamAssassin.
#
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
###########################################################################
# 0 indique une condition fausse et 1 vraie
# Nombre de marquages resquis pour être filtré.
required_hits 5.0
# Récriture du sujet des messages suspects
rewrite_subject 1
# Texte à ajouter au sujet si cette option a été choisie
subject_tag *****SPAM*****
# Encapsuler le spam comme pièce jointe
report_safe 1
# Utiliser la version abrégée du rapport
use_terse_report 0
# Activer le protocole de Bayes
use_bayes 1
# Activer l' auto-apprentissage bayésien
auto_learn 1
# Activer ou désactiver les agents du réseau.
skip_rbl_checks 0
use_razor2 1
use_dcc 0
use_pyzor 0
# Langues dans lesquelles les mails ne sont pas considérés comme
# des spam propables en langue étrangère
#mettez les langues dans lesquelles vous recevez des mails ou "all"
ok_languages fr be
# Locales dans lesquelles les mails ne sont pas considérés comme des spam propables
# mettez les locales des langues dans lesquelles vous recevez des mails ou "all"
ok_locales fr be
# Langue pour le programme
lang fr
# configuration automatiques des listes blanches
auto_whitelist_path /var/spool/SpamAssassin/auto-whitelist
auto_whitelist_file_mode 0666
|
Encore une fois tous les détails dans "man spamassassin" et les suivants.
- Razor2
Il suffit de créer les fichiers avec :
# razor-admin -d -create -home=/etc/razor
Si on veut une configuration centrale, ou
$ razor-admin -d -create
dans son répertoire utilisateur
C'est tout. Sauf si on veut devenir un membre actif du réseau : La doc de Razor2 (in English) http://razor.sourceforge.net/docs/
kmail
On va d'abord créer à la racine un nouveau dossier pour y mettre le spam. Donc clic droit sur la racine des dossiers de kmail (ou kontact maintenant) / nouveau dossier. Laisser les options par défaut sauf le format : pour celui-ci choisir mbox (c'est pour Razor2).
Ensuite on va créer un filtre (configuration/configurer les filtres) qu'on mettra en tête de liste. Appelons-le comme on veut Spam par exemple ou Bill si vous préférez. Cocher le choix "doit correspondre à au moins un des critères suivants" puis dans le premier menu déroulant choisir "X-Spam-Flag" et en face de contient choisir ou saisir "yes".
Dans la seconde ligne de menus déroulants choisir "sujet" "contient" "*****SPAM*****". Dans "Actions du filtre" choisir "mettre dans le dossier" et choisir le dossier qu'on vient de créer "Spam". Cocher "aux nouveaux messages" puis "sur filtrage manuel" et "Si ce filtre est applicable, ne pas poursuivre".
Voilà c'est fini, on n'oublie pas de lancer ou relancer tous ces services si ça n' est pas encore fait et à la prochaine levée de courrier le spam devrait être en (très grande) majorité reconnu et nous, débarassés.
Sources de l'article
|