« Backup Lotus Script | Main| AWSTATS »

SPAM ASSASSIN sous Domino

3,85

Filtrer le SPAM sous Domino avec SpamAssassin
Voici une petite procédure afin d'intégrer SPAMASSASSIN à un serveur Domino...

...
SPAMASSASSIN est un outil anti-spam opensource disponible aussi pour Linux que pour Windows. Il utilise différents mécanismes afin d'identifier et de filtrer des messages considérés comme du SPAM : analyse d'en-têtes et de contenu, filtrage Bayésien, DNS Blacklists, utilisation de bases de filtrage collaboratives... SPAMASSASSIN peut s'installer en tant que serveur et filtrer les messages avant qu'ils ne soient distribués à votre serveur de messagerie. Il est possible de l'installer sur une machine dédiée et, dans ce cas, de l'intégrer à un système de relai SMTP. Je pense que c'est d'ailleurs la meilleure solution.

L'intégration à Domino peut également s'effectuer en intégrant l'appel de SPAMASSASSIN à des agents stockés dans les boites aux lettres des utilisateurs. Dans ce cas, l'analyse des messages est effectuée au moment de la distribution du courrier par le routeur Domino. C'est la solution qui est abordée dans cet article. L'installation est effectuée sur un serveur Domino 7.0.2 sous Windows 2003 serveur.

Télécharger les outils requis
L'intégration de SPAMASSASSIN requiert :

SPAMASSASSIN, la version utilisée est la 3.1.7. Vous pouvez charger SPAMASSASSIN au format zip à l'adresse suivante : http://spamassassin.apache.org/downloads.cgi?update=200610100328" target="_blank">spamassassin.apache.org
Un interpréteur PERL : j'utilise dans cet exemple http://www.activestate.com/Products/ActivePerl/" target="_blank">Active Perl 5.8.8.820
L'outil nMake afin de construire les modules PERL requis pour SPAMASSASSIN : http://download.microsoft.com/download/vc15/patch/1.52/w95/en-us/nmake15.exe" target="_blank">sur le site Microsoft
<li>Et pour finir, j'utilise la base SpamAssassin Integration 0.5.2 sur http://www.openntf.org/projects/pmt.nsf/ProjectLookup/SpamAssassin%20Integration" target="_blank">OpenNTF.org. Login requis (juste une formalité !).

Installation d'Active Perl
C'est peut être la phase la plus simple.
Exécutez le MSI que vous vous avez téléchargé et suivez les instructions. Le package d'installation va même configurer toutes les déclarations de variables pour vous. Active Perl est par défaut installé dans c:\perl.

Installer SPAMASSASSIN
La procédure est un peu plus manuelle.
  1. Décompresser Spam Assassin sur le disque dur du serveur dans, par exemple, c:\spam.
  2. Décompresser l'outil NMAKE dans le même répertoire.
  3. Lancer une fenêtre de commandes DOS, puis naviguer vers le répertoire c:\spam :
    cd c:\spam
  4. Taper la commande :
    perl makefile.pl
  5. Répondre aux question de configuration posées en faisant attention au premier point  (au risque de voir votre installation ne pas aboutir si vous garder la valeur y par défaut) :
    buid spamc.exe = n
    adresse e'mail = adresse devant recevoir les notifications
  6. Les alertes qui apparaissent ensuite concernent les modules complémentaires SPAM ASSASSIN qui ne sont pas installés. L'installation de ces modules peut s'effectuer à l'aide de PPM ou, plus simple, la version Active Perl utilisée dispose d'un PPM graphique (top non !).
  7. Lancer nmake à l'aide de la commande DOS nmake
  8. Puis taper nmake install
  9. Lancer le batch setupdoc.bat (http://domino.stergann.org/web/domsphere.nsf/Downloads/PMOY-6YCRGJ/$File/setupdoc.bat.txt" target="_Blank">téléchargeable depuis la section Downloads, et après en avoir enlevé l'extension .txt). Ce batch a pour objectif de construire l'arborescence des fichiers d'aide de SPAMASSASSIN dans le répertoire c:\perl\html\site\lib\mail\spamassassin
  10. Créer un répertoire c:\usr\share\spamassassin puis copier le ontenu de c:\perl\site\share\spamassassin dans ce répertoire.
    Il s'agit d'un bug lié à WINDOWS, SPAMASSASSIN n'utilise pas l'arborescence prévue en c:\perl\...
  11. Créer un répertoire c:\etc\mail\spamassassin puis copier le contenu de c:\perl\site\etc\mail`spamassassin dans ce répertoire (pour les mêmes raison qu'au point précédent).
  12. Localiser le fichier c:\perl\bin\spamassassin.bat,
    puis ajouter, après la ligne ECHO OFF :
    set res_nameservers=adresseIP d'un serveur DNS
    set lang=fr_FR
  13. Apporter les mêmes modifications au fichier sa_learn.bat

That's all for the moment folks !

Installer SPAMASSASSIN Integration for Domino 0.5.2
Décompresser le fichier SpamAssassin_0.5.2.zip (téléchargé sur OpenNTF) dans le répertoire data de votre serveur (ou dans un sous-répertoire de data).
Ce fichier contient les templates utilisés pour générer les bases nsf SPAMASSASSIN.
  1. Commencer par signer, dans Domino Administrator, les templates que vous venez d'installer avec un Id d'utilisateur ayant le droit d'exécuter des méthodes Non restrictives et de signer des agents a éxécuter pour le compte d'un autre utilisateur. Ces options de sécurité sont définies, dans l'annuaire Domino, sur l'onglet sécurité du(des) document(s) serveur(s).
  2. créer une base Spamassassin à partir du modèle SpamAssassin Setup :

    A picture named M2
  3. Ouvrir la base NSF que vous venez de créer dans Domino Designer , puis modifier pour chaque agent ayant cette option définie, la propriété Exécuter au nom de en remplaçant le nom pré-défini par celui d'un administrateur disposant d'un accès complet aux fonctions d'administration.
    Liste des agents (ATTENTION, ne modifiez que les agents qui ont déjà l'option définie) :

    A picture named M3

    Propriété d'un des agents :

    A picture named M4
     
  4. Vérifier, pour chacun des utilisateurs qui vont utiliser SPAMASSASSIN,  que les préférences de courrier entrant ne soient pas définies à Texte riche. Cette option se configure, dans l'annuaire Domino, pour chaque document personne. L'option de conservaion au format de l'expéditeur est correcte.

    A picture named M5

    Si les messages entrants sont convertis en Texte Riche Notes, SPAMASSASSIN sera incapable d'analyser les messages.
  5. Il ne reste plus qu'à installer SPAMASSASSIN dans les boites aux lettres. Ouvrez la base de configuration (celle que vous avez créée au point 2 de cette section), puis lancer l'outil d'installation depuis le menu Actions\Install

    A picture named M6

    Options :
    Installez dans des bases spécifiques : les templates de courrier,
    Désactivez le lancement de la tache Design.
  6. Puis cliquez sur le bouton Install
  7. L'action va recopier les éléments structurels requis dans les templates sélectionnés : les agents, deux bibliothèques de scripts et un masque de configuration SPAMASSASSIN. La recopie des éléments structurels génère un bug selon les versions de Domino utilisées : les agents perdent le lien avec les bibliothèque de scripts qui sont référencées dans le use.
    Il faut donc, avant de mettre à jour les boites aux lettres, corriger ce point dans les templates de courrier.
  8. Ouvrez, dans Domino Designer, les fichiers ntf dans lesquels vous avez installés les outils SPAMASSASSIN.
  9. ouvrez successivement les deux bibliothèques de scripts SPAMASSASSIN afin de les recompiler :

    A picture named M7

    Ajoutez un retour chariot n'importe où dans le code de chaque bibliothèque

    A picture named M8

    Puis fermez et enregistrez les bibliothèques
  10. Mettez à jour les boites aux lettres des utilisateurs en tapant, sur la console du serveur Domino, la commande :
    LOAD DESIGN -D MAIL
Il ne reste plus qu'à configurer SPAMASSASSIN.

Configurer les options par défaut de SPAMASSASSIN et problèmes rencontrés
Chaque utilisateur peut configurer certaines des options de SPAMASSASSIN : en l'occurence les options relatives aux agents.
Les préférences générales de SPAMASSASSIN sont cependant globales au niveau du serveur Domino.
Après la première exécution d'un des agents SPAMASSASSIN, un fichier de préférences est créé dans le répertoire localsettings\defaultUser de windows.

A picture named M9
Le fichier central de configuration de SpamAssasin se trouve quant à lui dans c:\etc\mail\spamassassin\local.cf

Exemple de configuration :

#  ___________________________________________________________
# SpamAssassin user preferences file.  See 'perldoc Mail::SpamAssassin::Conf'
# for details of what can be tweaked.
###########################################################################

# How many points before a mail is considered spam.
# J'ai mis le score à 1 en phase de tests afin de pouvoir disposer de données considérées comme SPAM
required_score                1
# Les deux variables suivantes ne fonctionnent pas
# mais doivent correspondre à des versions antérieures de SPAMASSASSIN

# rewrite_subject      1
# subject_tag *****possible SPAM*****
# La variable suivante est censée préfixer le sujet des messages (selon l'aide de SPAMASSASSIN
# Je n'ai pas réussi à la faire marcher
# J'ai donc effectué une modification du code dans SPAMASSASSIN Intégration

# Voir plus loin dans ce sujet
rewrite_header subject *****possible SPAM*****
# possibilité de rajouter des champs particuliers au header des messages
# Dans la pratique, la réécriture des messages par SPAMASSASSIN m'a causé des problèmes
add_header all        score score=_SCORE_
version=_VERSION_
report_safe             0
use_bayes               1
use_bayes_rules                1
bayes_auto_learn        1
bayes_ignore_header X-Upstream-Spamfilter
skip_rbl_checks         0
use_razor2              0
use_dcc                 1
use_pyzor               1
ok_languages            fr
ok_locales              fr
# Whitelist and blacklist addresses are now file-glob-style patterns, so
# "friend@somewhere.com", "*@isp.com", or "*.domain.net" will all work.
# whitelist_from        someone@somewhere.com

# Add your own customised scores for some tests below.  The default scores are
# read from the installed spamassassin rules files, but you can override them
# here.  To see the list of tests and their default scores, go to
# http://spamassassin.apache.org/tests.html .
#
#score SYMBOLIC_TEST_NAME n.nn

# Speakers of Asian languages, like Chinese, Japanese and Korean, will almost
# definitely want to uncomment the following lines.  They will switch off some
# rules that detect 8-bit characters, which commonly trigger on mails using CJK
# character sets, or that assume a western-style charset is in use.
#
# score HTML_COMMENT_8BITS        0
# score UPPERCASE_25_50                0
# score UPPERCASE_50_75                0
# score UPPERCASE_75_100        0
# score OBSCURED_EMAIL          0

# Speakers of any language that uses non-English, accented characters may wish
# to uncomment the following lines.   They turn off rules that fire on
# misformatted messages generated by common mail apps in contravention of the
# email RFCs.

# score SUBJ_ILLEGAL_CHARS      0
#  ___________________________________________________________


Les variables ne fonctionnent pas forcément toutes correctement avec ce mode d'intégration dans Domino. Cerytains ADD'Ons non plus : RAZOR par exemple. Un montage de SPAMASSASSIN sur un relai SMTP, Postfix par exemple, ou Domino avec SpamAssassin implémenté en Daemon (spamc-spamd) serait certainement plus efficace.

Pour préfixer les messages :
n'ayant pas réussi à implémenter la variable rewrite_header, j'ai modifié le code de la bibliothèque de scripts SpamAssassin (Windows32)
Localisez, dans l'événement gCheckDocument, le code suivant :

A picture named M10

Puis ajouter les expressions en gras :

        If lngExitCode > 0 Then
                Print "SpamAssassin (" & ndbMail.FilePath & "): spam identified"
                On Error Resume Next
                rndoMail.RemoveFromFolder gstrInboxFolderName
                Err = 0
                On Error Goto Error_Handler
                If rndoOptions.GetItemValue(gstrItemNameAction)(0) = gstrItemValueActionDelete Then
                        ' Put it in the Trash folder
                        On Error Resume Next
                        rndoMail.PutInFolder gstrTrashFolderName, False
                        Err = 0
                        On Error Goto Error_Handler
                Else                        
                        ' Put it in the Junk Mail folder
                        On Error Resume Next
                        rndoMail.PutInFolder gstrJunkMailFolderName, False
                        Err = 0
                        On Error Goto Error_Handler
                End If
                         prefixe="***SPAM Possible*** " & rndoMail.Subject(0)
                      rndoMail.subject=prefixe
                      call rndoMail.save(true,false)
        Else
                Print "SpamAssassin (" & ndbMail.FilePath & "): ham identified"
        End If

Positionnez vous en tout début du code de l'événement, puis ajoutez une déclaration :
            Dim prefixe as string
(L'option Declare a été positionnée dans la bibliothèque)

Fermez puis enregistrez la bibliothèque.

Bug rencontré lors du traitement des messages par SPAMASSASSIN
Un des problèmes les plus embêtants que j'ai rencontrés concerne la dénaturation des messages par l'option d'agent Domino de réécriture SPAMASSASSIN.
L'utilisateur peut activer lui même cette option :

A picture named M11

A picture named M12

Le résultat est en théorie plus qu'intéressant car il permet, entre autres, d'ajouter des champs SPAMASSASSIN au message traité : par exemple les champs supplémentaires configurés dans les préférences de SPAMASSASSIN.

A picture named M13.

Le résultat s'est malheureusement traduit par un agent SPAMASSASSIN qui part en vrille sur le serveur Domino. Pas tout le temps, mais sur certains messages, je n'ai pas encore eu le temps de creuser, mais je pense que c'est lié à la taille des messages. Il y a des variables de configuration SPAMASSASSIN qui semblent permettre de traiter ce problème.
Il serait à mon avis préférable, dans le contexte d'intégration Domino abordé dans l'article courant, de modifier le code LotsuScript de traitement des messages en positionnant la valeur de ReplaceMessage à false au delà d'une certaine taille de mémo.
A creuser donc...

En attendant d'avoir le temps (toujours le même problème) de modifier les scripts, j'ai désactivé, dans Domino Designer, l'accès par l'utilisateur au champ ReplaceMessage du masque SpamAssassin\Options.

Comments

Gravatar Image7 - Je vais difficilement pouvoir t'aider car je ne reproduis pas ton problème.
Quelle plate forme ? Quel OS ?
Quel répertoire ?
Quel contexte ?
...Emoticon

La référence des codes d'erreurs nmake se trouve ici : { Link }

Gravatar Image6 - salut ,

nmake install ne marche pas :

install(1) : fatal error U1034 : syntax error : separator missing stop

merci de ton aide car je suis bloqué

Gravatar Image5 - Le fichier nMake peut être downloadé ici :
{ chez Microsoft }

Le lien est toujours valide

Gravatar Image4 - bonjour

j'ai le problème que la personne précédente j'ai le message d'erreur suivant ""NMAKE : erreur irrécupérable U1064 : ne MAKEFILE introuvable et aucune cible ont été spécifiés".

est ce que par rapport a la proc j'ai omis quelque chose?

merci

Gravatar Image3 - Bonjour,

Je vais être amené à implémenter une telle solution dans mon entreprise. Cela me semble parfaitement adapté à nos besoins.

Néanmoins je n'ai absolument aucune compétence en Perl (et je ne sais même pas si il y a un rapport), et lors de l'exécution de NMake, cela me renvoie le message du type : "NMAKE : erreur irrécupérable U1064 : ne MAKEFILE introuvable et aucune cible ont été spécifiés".

Sauriez-vous ou je pourrais récupérer le fichier MAKEFILE demandé ? Merci d'avance.

PS : Nous tournons sous Win 2003 Serveur.

Gravatar Image2 - Je ne pense pas que de mode d'intégration de l'anti-spam puisse poser de problème au niveau du fonctionnement des protocoles serveur, même chose pour Out of Office qui est planifié.
Le seul problème que j'ai rencontré est lié à la dénaturation des messages en cas de réécriture par SpamAssassin.

Le vrai souci est plutôt côté perfs et charge serveur : le module PERL est vraiment gourmand.
Ce mode de configuration n'est pas vraiment adapté adapté à un gros serveur. Pour un serveur de messagerie de 200 utilisateurs, cela doit pouvoir tenir avec de bonnes ressources CPU. Au dela ...
Il serait plus intéressant d'implémenter SpamAssassin en mode relai SMTP qu'en mode agent, et conserver les fonctions d'apprentissage, très efficaces, sous Notes/Domino.
Ca doit même être faisable sous Windows...

Autre outil libre que je viens de tester : ASSP ({ Link } sous Windows ou Linux.
qui lui fonctionne nativement en mode relai SMTP. Fonctionnement parfait avec Domino, les modules PERL étant chargés en tant que services sont beaucoup moins gourmands en ressources Emoticon

Gravatar Image1 - Woaww
Encore un bel article Pierre. On sent que t'y a passer du temps Emoticon .

SpamAssassin est un produit génialissime qui a en plus l'avantage d'être gratuit. Quand on connais le prix des anti-spam, c'est pas un petit avantage...
Les success stories about SA tournent toutes autour d'une implémentation de SA sur un boitier Linux light en amont de l'infrastructure.

Concernant l'architecture décrite dans cet article, j'ai plusieurs intérogations :

Pour connaitre SA je sais que lors de l'analyse, il demande beaucoup de CPU. J'ai du mal à penser qu'il peut être raisonablement installé sur un serveur Domino surtout si celui-ci est fortement spammé.

L'agent d'analyse à la réception d'un mail ma fait assez peur car si l'agent se bloque la tâche nrouter se bloque et c'est tout le routage qui est bloqué Emoticon .

De plus sachant que l'on ne peut activé qu'un agent de ce type par base, quid de l'agent OOO (out of office) ?

Post A Comment

:-D:-o:-p:-x:-(:-):-\:angry::cool::cry::emb::grin::huh::laugh::lips::rolleyes:;-)