« SpamAssassin » : différence entre les versions

De NCad Wiki
Aller à la navigation Aller à la recherche
m (Cacheln a déplacé la page Spamassassin vers SpamAssassin)
 
(43 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
{{ Box Attention | objet=Suite à la nouvelle version de l'article [[Postfix]], cet article doit être mis à jour. }}
{{Serveur de Messagerie}}
<br />
 
[[Image:Logo_SpamAssassin.png|center]]
 
__TOC__
 
== Prérequis ==
 
* Avant de poursuivre la lecture de cette article, il est nécessaire de disposer d'un serveur [[Postfix]] fonctionnel avec ou sans support MySQL. Un serveur [[MySQL]] opérationnel sera nécessaire pour toute exploitation de SpamAssassin avec une base de données.
 
* Le serveur SMTP '''Postfix''' gère la messagerie pour le domaine fictif '''mail.glx'''. Nous disposons d'un compte mail sur ce serveur qui est '''cacheln@mail.glx'''. Il sera également utile de disposer d'une adresse mail externe. Dans notre cas, l'adresse '''nicolas.cachelou@ncad.me''' sera utilisée.
 
* Le serveur SMTP '''Postfix''' a pour adresse IP '''10.0.0.44'''. La base de données '''MySQL''' est installée sur un autre serveur à l'adresse '''10.0.0.47'''.
 
== Installation ==
== Installation ==


Ligne 18 : Ligne 30 :


  ENABLED=1
  ENABLED=1
=== Séparation des logs ===
* Pour éviter de trop encombrer les logs de '''[[Postfix]]''' dans le fichier '''/var/log/mail.log''', nous allons séparer les logs de '''SpamAssassin'''. Pour cela, on insère les éléments suivant juste avant la ligne '''OPTIONS''' :
SAHOME="/var/log/spamd/"
* Puis on remplace :
OPTIONS="--create-prefs --max-children 5 --helper-home-dir --username spamd"
* Par :
OPTIONS="--create-prefs --max-children 5 --helper-home-dir --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log"


=== Création de l'utilisateur spamd ===
=== Création de l'utilisateur spamd ===


* '''Spamassassin''' s'exécute avec les droits et permissions de l'utilisateur '''spamd'''. Cependant, cette utilisateur n'est pas crée à l'installation du programme. Il va donc falloir le créer :
* '''SpamAssassin''' s'exécute avec les droits et permissions de l'utilisateur '''spamd'''. Cependant, cette utilisateur n'est pas crée à l'installation du programme. Il va donc falloir le créer :


{{ Box Console | objet=sudo groupadd spamd<br />
{{ Box Console | objet=sudo groupadd spamd<br />
Ligne 29 : Ligne 55 :
sudo chown spamd:spamd /var/log/spamd}}
sudo chown spamd:spamd /var/log/spamd}}


=== Configuration de Spamassassin ===
=== Configuration de SpamAssassin ===


* Le configuration de '''Spamassassin''' se trouve dans le fichier '''/etc/spamassassin/local.cf'''. On va y décommenter les lignes suivantes :
* Le configuration de '''SpamAssassin''' se trouve dans le fichier '''/etc/spamassassin/local.cf'''. On va y dé-commenter les lignes suivantes :


  rewrite_header Subject *****SPAM*****
  rewrite_header Subject *****SPAM*****
Ligne 40 : Ligne 66 :
  bayes_ignore_header X-Spam-Status
  bayes_ignore_header X-Spam-Status


* Une fois le fichier de configuration renseigné, on peut démarrer '''Spamassassin''' :
* Une fois le fichier de configuration renseigné, on peut démarrer '''SpamAssassin''' :


{{ Box Console | objet=sudo service spamassassin start }}
{{ Box Console | objet=sudo service spamassassin start }}
Ligne 64 : Ligne 90 :


{{ Box Console | objet=sudo service postfix restart}}
{{ Box Console | objet=sudo service postfix restart}}
=== Mise à jour des bases ===
* Il est nécessaire de mettre à jour régulièrement les bases de '''SpamAssassin'''. La commande suivante permet d'effectuer sa mise à jour :
{{ Box Console | objet=sa-update -D -v}}


=== Validation ===
=== Validation ===


* Pour tester le comportement de '''Spamassassin''', on va s'envoyer un <font color=orange>faux positif</font>; c'est à dire un mail censé être détecté comme spammeur. Pour cela, on s’envoie un mail contenant la chaîne de caractères suivante :
==== Faux positif ====
 
* Pour tester le comportement de '''SpamAssassin''', on va s'envoyer un <font color=orange>faux positif</font>; c'est à dire un mail censé être détecté comme spammeur. Pour cela, on s’envoie un mail contenant la chaîne de caractères suivante :


  XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
  XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X


* '''Spamassassin''' tague l'objet du message avec la chaîne '''*****SPAM*****'''. On remarquera également que '''Spamassassin''' ajoute un texte d'introduction avant le corps du mail pour informer l'utilisateur que le message a été identifié comme '''potentiellement dangereux''' :
* '''SpamAssassin''' tague l'objet du message avec la chaîne '''*****SPAM*****'''. On remarquera également que '''SpamAssassin''' ajoute un texte d'introduction avant le corps du mail pour informer l'utilisateur que le message a été identifié comme '''potentiellement dangereux''' :


  ------------------ Début de Rapport SpamAssassin ---------------------
  ------------------ Début de Rapport SpamAssassin ---------------------
Ligne 110 : Ligne 144 :
  dur, et de l'afficher ensuite avec un éditeur de texte.
  dur, et de l'afficher ensuite avec un éditeur de texte.


* Dans l'en-tête du mail incriminé, le score attribué par '''Spamassassin''' apparaît :
{{ Box Remarque | objet=Pour désactiver cette avertissement, il suffit de mettre à 0 le paramètre report_safe dans le fichier /etc/spamassassin/local.cf. }}
 
* Dans l'en-tête du mail incriminé, le score attribué par '''SpamAssassin''' apparaît :


  X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on alice
  X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on alice
Ligne 118 : Ligne 154 :
  HTML_MESSAGE,MIME_QP_LONG_LINE autolearn=no version=3.3.2
  HTML_MESSAGE,MIME_QP_LONG_LINE autolearn=no version=3.3.2


== Autre conf ==
* On peut également analyser l'acheminement du mail en interne :
 
Feb  6 16:49:03 alice postfix/smtpd[14032]: connect from geocoucou.net.ncad.fr[10.0.0.49]
Feb  6 16:49:03 alice postfix/smtpd[14032]: A29DD461D0C:
  client=geocoucou.net.ncad.fr[10.0.0.49]
Feb  6 16:49:03 alice postfix/cleanup[14038]: A29DD461D0C:
  message-id=<f1be69d848c7d2dbb3ab2dc5bf44d031@ncad.me>
Feb  6 16:49:03 alice postfix/qmgr[13786]: A29DD461D0C: from=<nicolas.cachelou@ncad.me>,
  size=1704, nrcpt=1 (queue active)
Feb  6 16:49:03 alice postfix/smtpd[14032]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
Feb  6 16:49:03 alice spamd[14006]: spamd: connection from localhost [127.0.0.1] at port 37195
Feb  6 16:49:03 alice spamd[14006]: spamd: handle_user unable to find user: 'cacheln@mail.glx'
Feb  6 16:49:03 alice spamd[14006]: spamd: processing message
  <f1be69d848c7d2dbb3ab2dc5bf44d031@ncad.me> for cacheln@mail.glx:5001
<font color=orange>Feb  6 16:49:06 alice spamd[14006]: <font color=red>spamd: identified spam (999.0/5.0) for
  cacheln@mail.glx</font>:5001 in 3.2 seconds, 1658 bytes.
Feb  6 16:49:06 alice spamd[14006]: <font color=red>spamd: result: Y 999 -
  ALL_TRUSTED,GTUBE,HTML_MESSAGE,MIME_QP_LONG_LINE</font>
  scantime=3.2,size=1658,user=cacheln@mail.glx,uid=5001,required_score=5.0,rhost=localhost,
  raddr=127.0.0.1,rport=37195,mid=<f1be69d848c7d2dbb3ab2dc5bf44d031@ncad.me>,autolearn=no</font>
Feb  6 16:49:06 alice postfix/pickup[13785]: F33D9461FB6: uid=5001
  from=<nicolas.cachelou@ncad.me>
Feb  6 16:49:06 alice postfix/cleanup[14038]: F33D9461FB6:
  message-id=<f1be69d848c7d2dbb3ab2dc5bf44d031@ncad.me>
Feb  6 16:49:06 alice postfix/pipe[14039]: A29DD461D0C: to=<cacheln@mail.glx>,
  relay=spamassassin, delay=3.3, delays=0.05/0.01/0/3.3, dsn=2.0.0, status=sent
  (delivered via spamassassin service)
Feb  6 16:49:06 alice postfix/qmgr[13786]: A29DD461D0C: removed
Feb  6 16:49:07 alice postfix/qmgr[13786]: F33D9461FB6: from=<nicolas.cachelou@ncad.me>,
  size=2458, nrcpt=1 (queue active)
Feb  6 16:49:07 alice spamd[14004]: prefork: child states: II
Feb  6 16:49:07 alice postfix/virtual[14045]: F33D9461FB6: to=<cacheln@mail.glx>,
  relay=virtual, delay=0.16, delays=0.08/0.02/0/0.05, dsn=2.0.0, status=sent
  (delivered to maildir)
Feb  6 16:49:07 alice postfix/qmgr[13786]: F33D9461FB6: removed
 
==== Blackliste ====
 
* Nous allons blacklister l'adresse mail externe que nous utilisons pour les tests : '''nicolas.cachelou@ncad.me'''. Pour cela, on va rajouter les deux lignes suivantes dans '''/etc/spamassassin/local.cf''' :
 
score USER_IN_BLACKLIST 10
blacklist_from nicolas.cachelou@ncad.me
 
Ici, nous indiquons que la '''blacklist''' à un score de '''10'''. Ce score est supérieure au '''required_score''' ''(5.0)'' ce qui aura pour conséquence de taguer comme spam les messages blacklistés. Ensuite, dans la seconde ligne nous renseignons l'adresse mail à blacklister.
 
* On recharge la configuration de '''SpamAssassin''' :
 
{{ Box Console | objet=sudo service spamassassin restart }}
 
* Puis on envoi un mail de '''nicolas.cachelou@ncad.me''' vers '''cacheln@mail.glx'''. Observons dans les logs l'acheminement du mail :
 
Feb  6 17:09:39 alice postfix/smtpd[14067]: connect from geocoucou.net.ncad.fr[10.0.0.49]
Feb  6 17:09:39 alice postfix/smtpd[14067]: 35BF3461D14:
  client=geocoucou.net.ncad.fr[10.0.0.49]
Feb  6 17:09:39 alice postfix/cleanup[14073]: 35BF3461D14:
  message-id=<3efd902f135925e20b7e0fe692294c1a@ncad.me>
Feb  6 17:09:39 alice postfix/qmgr[13786]: 35BF3461D14: from=<nicolas.cachelou@ncad.me>,
  size=1642, nrcpt=1 (queue active)
Feb  6 17:09:39 alice postfix/smtpd[14067]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
Thu Feb  6 17:09:39 2014 [14063] info: spamd: connection from localhost [127.0.0.1] at
  port 37207
Thu Feb  6 17:09:39 2014 [14063] info: spamd: handle_user unable to find
  user: 'cacheln@mail.glx'
Thu Feb  6 17:09:39 2014 [14063] info: spamd: processing message
  <3efd902f135925e20b7e0fe692294c1a@ncad.me> for cacheln@mail.glx:5001
<font color=orange>Thu Feb  6 17:09:43 2014 [14063] info: <font color=red>spamd: identified spam (9.0/5.0)</font>
  for cacheln@mail.glx:5001 in 3.8 seconds, 1596 bytes.
Thu Feb  6 17:09:43 2014 [14063] info: <font color=red>spamd: result:
  Y 9 - ALL_TRUSTED,HTML_MESSAGE,MIME_QP_LONG_LINE,USER_IN_BLACKLIST</font>
  scantime=3.8,size=1596,user=cacheln@mail.glx,uid=5001,required_score=5.0,
  rhost=localhost,raddr=127.0.0.1,rport=37207,
  mid=<3efd902f135925e20b7e0fe692294c1a@ncad.me>,autolearn=no</font>
Thu Feb  6 17:09:43 2014 [14061] info: prefork: child states: II
Feb  6 17:09:43 alice postfix/pickup[13785]: 239B7461FBF: uid=5001
  from=<nicolas.cachelou@ncad.me>
Feb  6 17:09:43 alice postfix/pipe[14074]: 35BF3461D14: to=<cacheln@mail.glx>,
  relay=spamassassin, delay=3.9, delays=0.06/0.01/0/3.9, dsn=2.0.0, status=sent
  (delivered via spamassassin service)
Feb  6 17:09:43 alice postfix/qmgr[13786]: 35BF3461D14: removed
Feb  6 17:09:43 alice postfix/cleanup[14073]: 239B7461FBF:
  message-id=<3efd902f135925e20b7e0fe692294c1a@ncad.me>
Feb  6 17:09:43 alice postfix/qmgr[13786]: 239B7461FBF: from=<nicolas.cachelou@ncad.me>,
  size=2366, nrcpt=1 (queue active)
Feb  6 17:09:43 alice postfix/virtual[14079]: 239B7461FBF: to=<cacheln@mail.glx>,
  relay=virtual, delay=0.14, delays=0.06/0.02/0/0.05, dsn=2.0.0, status=sent
  (delivered to maildir)
Feb  6 17:09:43 alice postfix/qmgr[13786]: 239B7461FBF: removed
 
== Utilisation d'une base Sql ==
 
* Il peut être intéressent d'utiliser une base de données '''Sql''' pour stocker les règles de '''SpamAssassin''' propre à chaque utilisateur du domaine de messagerie.


Renseigner le fichier comme tel :
{{ Box Remarque | objet=La documentation qui suit est basée sur l'utilisation d'une base de données [[MySQL]]. Nous considérerons que la base est déjà fonctionnelle. }}


rewrite_header Subject [***** SPAM _SCORE_ *****]
* Pour illustrer cette exemple nous utiliseront une base de données nommée '''courriel''' accessible via l'utilisateur '''courriel''' qui a pour mot de passe '''motdepassebasemysqlpourpostfix'''. Le serveur de bases de données a pour adresse IP '''10.0.0.47'''.
required_score          2.0
 
#to be able to use _SCORE_ we need report_safe set to 0
=== Activation de Sql ===
  #If this option is set to 0, incoming spam is only modified by adding some "X-Spam-" headers and no changes will be made to the body.
 
  report_safe    0
* Par défaut le module n'est pas activé. Il faut pour cela éditer le fichier '''/etc/spamassassin/default''' et y ajouter l'option '''-q''' dans la ligne '''OPTIONS''' :
   
 
  # Enable the Bayes system
  OPTIONS="<font color=red>-q</font> --create-prefs --max-children 5 --helper-home-dir --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log"
use_bayes              1
 
use_bayes_rules        1
* On redémarre '''SpamAssassin''' pour appliquer les modifications :
# Enable Bayes auto-learning
 
bayes_auto_learn        1
{{ Box Console | objet=service spamassassin restart }}
   
 
  # Enable or disable network checks
=== Paramètres des utilisateurs ===
  skip_rbl_checks         0
 
  use_razor2              0
==== Structure de la table ====
use_dcc                0
 
use_pyzor              0
* La structure de la table est simple. Elle est dotée de 3 colonnes dont une pour '''identifier''' le compte mail pour qui s'applique la règle, dans '''preference''' on spécifiera le type de règle et pour '''value''' sa valeur.
 
* Nous créerons donc la table '''userpref''' dans notre base de données '''courriel''' :
 
  CREATE TABLE userpref (
  username varchar(100) NOT NULL default '',
  preference varchar(30) NOT NULL default '',
  value varchar(100) NOT NULL default '',
  prefid int(11) NOT NULL auto_increment,
  PRIMARY KEY (prefid),
  KEY username (username)
  )
 
==== Connexion à la base de données ====
 
* SpamAssassin a besoin de connaître les éléments de connexion à la base de donnée. Nous allons créer le fichier de configuration '''/etc/spamassassin/sql.cf''' et y insérer les données nécessaires à la connexion :
 
  user_scores_dsn                  DBI:mysql:postfix:10.0.0.47:3306
  user_scores_sql_password        motdepassebasemysqlpourpostfix
  user_scores_sql_username         postfix
  user_scores_sql_custom_query    SELECT preference, value FROM _TABLE_ WHERE username = USERNAME_ OR username = '$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC
 
* Nous remarqueront que la ligne '''user_scores_sql_custom_query''' indique à '''SpamAssassin''' la commande '''Sql''' pour récupérer les éléments de configuration dans la table '''userpref'''.
 
{{ Box Information | objet=SpamAssassin charge sa configuration au travers de tous les fichiers portant l’extension .cf contenu dans le dossier /etc/spamassassin/.}}


== Intégration pour Postfix ==
==== Récupération de la variable USERNAME ====


=== Configuration de /etc/postfix/master.cf ===
* Il est nécessaire d'adapter le contenu de la variable '''USERNAME'''. Par défaut, le contenu de cette variable est '''spamd'''. Cependant, si l'on veut appliquer des règles propres à chacun des utilisateurs, il faudra que cette variable prenne leur adresse mail respective.


* En début de fichier, modifier :
* Pour cela, on éditer le fichier '''/etc/postfix/main.cf''' et on remplace la ligne :


  smtp      inet  n      -      -      -       -       smtpd
  spamassassin unix -    n      n      -      -      pipe
      user=spamd argv=/usr/bin/spamc -f -e
      /usr/sbin/sendmail -oi -f ${sender} ${recipient}


* Par :
* Par :


smtp      inet  n      -      -      -       -       smtpd
  spamassassin unix -    n      n      -      -      pipe
        -o content_filter=spamassassin
      user=spamd argv=/usr/bin/spamc -f <font color=red>-u ${recipient}</font> -e
      /usr/sbin/sendmail -oi -f ${sender} ${recipient}
 
* Puis on redémarre '''Postfix''' pour appliquer les changements.
 
{{ Box Console | objet=service postfix restart }}
 
== Analyse de logs ==
 
=== Réception de mail ===
 
==== Utilisateur virtuel ====
 
* Nous sommes dans le cas d'une configuration avec des '''utilisateurs virtuels''' stockés dans une base de données '''MySQL'''. Le message est traité une première fois par '''Postfix''' avant d'être transféré à '''SpamAssassin''' :
 
[[Image:SpamAssassin_Reception_1.png|thumb|750px|center|Réception d'un mail, étape 1]]


* En fin de fichier ajouter :
* Une fois le message traité par '''SpamAssassin''', il est de nouveau remis à '''Postfix''' pour être distribué dans la boîte mail du destinataire :


spamassassin unix -    n      n      -      -      pipe
[[Image:SpamAssassin_Reception_2.png|thumb|750px|center|Réception d'un mail, étape 2]]
        user=spamd argv=/usr/bin/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}


== Finalisation de l'installation ==
* Maintenant, voici les logs relevés dans '''/var/log/mail.log''' :


=== Démarrer / Redémarrer Spamassassin ===
<span style="background-color:darkblue;color:#FFFFFF">1.1</span> Feb  7 19:47:57 alice postfix/<font color=red>smtpd</font>[3011]: connect from geocoucou.net.ncad.fr[10.0.0.49]
<span style="background-color:darkblue;color:#FFFFFF">1.1</span> Feb  7 19:47:57 alice postfix/<font color=red>smtpd</font>[3011]: <font color=purple>2E9734620F9</font>:
  client=geocoucou.net.ncad.fr[10.0.0.49]
<span style="background-color:darkblue;color:#FFFFFF">1.2</span> Feb  7 19:47:57 alice postfix/<font color=red>cleanup</font>[3017]: <font color=purple>2E9734620F9</font>:
  message-id=<747172f0292345ebef5250aa8d0e0cb3@ncad.me>
<span style="background-color:darkblue;color:#FFFFFF">1.5</span> Feb  7 19:47:57 alice postfix/<font color=red>qmgr</font>[2706]: <font color=purple>2E9734620F9</font>: from=<nicolas.cachelou@ncad.me>,
  size=1568, nrcpt=1 (queue active)
<span style="background-color:darkorange;color:#FFFFFF">1.7</span> Feb  7 19:47:57 alice spamd[3008]: <font color=red>spamd</font>: connection from localhost [127.0.0.1]
  at port 33079
<span style="background-color:darkorange;color:#FFFFFF">1.7</span> Feb  7 19:47:57 alice spamd[3008]: <font color=red>spamd</font>: handle_user unable to find
  user: 'cacheln@mail.glx'
<span style="background-color:darkorange;color:#FFFFFF">1.7</span> Feb  7 19:47:57 alice spamd[3008]: <font color=red>spamd</font>: processing message
  <747172f0292345ebef5250aa8d0e0cb3@ncad.me> for cacheln@mail.glx:5001
<span style="background-color:darkorange;color:#FFFFFF">1.7</span> Feb  7 19:48:01 alice spamd[3008]: <font color=red>spamd</font>: identified spam (9.0/5.0) for
  cacheln@mail.glx:5001
  in 4.1 seconds, 1522 bytes.
<span style="background-color:darkorange;color:#FFFFFF">1.7</span> Feb  7 19:48:01 alice spamd[3008]: <font color=red>spamd</font>: result: Y 9 -
  ALL_TRUSTED,HTML_MESSAGE,MIME_QP_LONG_LINE,USER_IN_BLACKLIST scantime=4.1,size=1522,
  user=cacheln@mail.glx,uid=5001,required_score=5.0,rhost=localhost,raddr=127.0.0.1,
  rport=33079,mid=<747172f0292345ebef5250aa8d0e0cb3@ncad.me>,autolearn=no
<span style="background-color:darkblue;color:#FFFFFF">2.1</span> Feb  7 19:48:01 alice postfix/<font color=red>pickup</font>[2705]: <font color=pink>60C0B4620FC</font>: uid=5001
  from=<nicolas.cachelou@ncad.me>
<span style="background-color:darkblue;color:#FFFFFF">1.6</span> Feb  7 19:48:01 alice postfix/<font color=red>pipe</font>[3018]: <font color=purple>2E9734620F9</font>: to=<cacheln@mail.glx>,
  relay=spamassassin, delay=4.2, delays=0.06/0.01/0/4.2, dsn=2.0.0, status=sent
  (delivered via spamassassin service)
<span style="background-color:darkblue;color:#FFFFFF">2.2</span> Feb  7 19:48:01 alice postfix/<font color=red>cleanup</font>[3017]: <font color=pink>60C0B4620FC</font>:
  message-id=<747172f0292345ebef5250aa8d0e0cb3@ncad.me>
<span style="background-color:darkblue;color:#FFFFFF">2.5</span> Feb  7 19:48:01 alice postfix/<font color=red>qmgr</font>[2706]: <font color=pink>60C0B4620FC</font>: from=<nicolas.cachelou@ncad.me>,
  size=2276, nrcpt=1 (queue active)
<span style="background-color:darkblue;color:#FFFFFF">2.6</span> Feb  7 19:48:01 alice postfix/<font color=red>virtual</font>[3026]: <font color=pink>60C0B4620FC</font>: to=<cacheln@mail.glx>,
  relay=virtual, delay=0.16, delays=0.09/0.03/0/0.04, dsn=2.0.0, status=sent
  (delivered to maildir)


{{ Box_Console | objet=/etc/init.d/spamassassin stop<br />/etc/init.d/spamassassin start}}
== Liens ==


=== Redémarrer Postfix ===
* '''Site officiel du projet :''' http://spamassassin.apache.org/
* '''SpamAssassin par Ubuntu-fr.org :''' http://doc.ubuntu-fr.org/postfix_mysql_tls_sasl#spamassassin
* '''SpamAssassin avec Sql :''' http://wiki.apache.org/spamassassin/UsingSQL
* '''Documentation Sql :''' http://svn.apache.org/repos/asf/spamassassin/branches/3.3/sql/README


{{ Box_Console | objet=/etc/init.d/postfix restart}}
[[Category:Serveur de Messagerie]]

Dernière version du 10 février 2014 à 17:14

.:[ Serveur de Messagerie ]:.

Installation >> Postfix avec MySQL

Filtrage anti-spam : Anti-Spam SpamAssassin | Anti-Virus Clamav


Filtrage anti-virus : Plateforme de filtrage Amavis >> Amavis avec MySQL


Plus de fonctions : Ajouter un Disclaimer | Signature DKIM | Mailman | Maildrop


Clients de messagerie : Configurer Thundirbird | Configurer Roundcube


Pour aller plus loin : Commandes messagerie | DNSBL | MX Backup
Logo SpamAssassin.png

Prérequis

  • Avant de poursuivre la lecture de cette article, il est nécessaire de disposer d'un serveur Postfix fonctionnel avec ou sans support MySQL. Un serveur MySQL opérationnel sera nécessaire pour toute exploitation de SpamAssassin avec une base de données.
  • Le serveur SMTP Postfix gère la messagerie pour le domaine fictif mail.glx. Nous disposons d'un compte mail sur ce serveur qui est cacheln@mail.glx. Il sera également utile de disposer d'une adresse mail externe. Dans notre cas, l'adresse nicolas.cachelou@ncad.me sera utilisée.
  • Le serveur SMTP Postfix a pour adresse IP 10.0.0.44. La base de données MySQL est installée sur un autre serveur à l'adresse 10.0.0.47.

Installation

  • Il est nécessaire d'installer spamassassin mais aussi les paquets razor et pizor pour la détection des messages considérés comme SPAM :

sudo apt-get install spamassassin pyzor razor

Configuration de base

Activation du programme

  • Par défaut, le module est désactivé. Pour être lancé il faut remplacer dans le fichier /etc/default/spamassassin :
ENABLED=0
  • Par :
ENABLED=1

Séparation des logs

  • Pour éviter de trop encombrer les logs de Postfix dans le fichier /var/log/mail.log, nous allons séparer les logs de SpamAssassin. Pour cela, on insère les éléments suivant juste avant la ligne OPTIONS :
SAHOME="/var/log/spamd/"
  • Puis on remplace :
OPTIONS="--create-prefs --max-children 5 --helper-home-dir --username spamd"
  • Par :
OPTIONS="--create-prefs --max-children 5 --helper-home-dir --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log"

Création de l'utilisateur spamd

  • SpamAssassin s'exécute avec les droits et permissions de l'utilisateur spamd. Cependant, cette utilisateur n'est pas crée à l'installation du programme. Il va donc falloir le créer :

sudo groupadd spamd
sudo useradd -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd
sudo chown spamd:spamd /var/lib/spamassassin
sudo mkdir /var/log/spamd
sudo chown spamd:spamd /var/log/spamd

Configuration de SpamAssassin

  • Le configuration de SpamAssassin se trouve dans le fichier /etc/spamassassin/local.cf. On va y dé-commenter les lignes suivantes :
rewrite_header Subject *****SPAM*****
report_safe 1
required_score 5.0
use_bayes 1
bayes_auto_learn 1
bayes_ignore_header X-Spam-Status
  • Une fois le fichier de configuration renseigné, on peut démarrer SpamAssassin :

sudo service spamassassin start

Configuration de Postfix

  • Éditer le fichier de configuration /etc/postfix/master.cf et remplacer :
smtp      inet  n       -       -       -       -       smtpd
  • Par :
smtp      inet  n       -       -       -       -       smtpd
       -o content_filter=spamassassin
  • En fin de fichier ajouter :
spamassassin unix -     n       n       -       -       pipe
       user=spamd argv=/usr/bin/spamc -f -e
       /usr/sbin/sendmail -oi -f ${sender} ${recipient}
  • Redémarrer le service Postfix pour appliquer les changements :

sudo service postfix restart

Mise à jour des bases

  • Il est nécessaire de mettre à jour régulièrement les bases de SpamAssassin. La commande suivante permet d'effectuer sa mise à jour :

sa-update -D -v

Validation

Faux positif

  • Pour tester le comportement de SpamAssassin, on va s'envoyer un faux positif; c'est à dire un mail censé être détecté comme spammeur. Pour cela, on s’envoie un mail contenant la chaîne de caractères suivante :
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
  • SpamAssassin tague l'objet du message avec la chaîne *****SPAM*****. On remarquera également que SpamAssassin ajoute un texte d'introduction avant le corps du mail pour informer l'utilisateur que le message a été identifié comme potentiellement dangereux :
------------------ Début de Rapport SpamAssassin ---------------------
Ce message est probablement du SPAM (message non sollicité envoyé en
masse, publicité, escroquerie...).

Cette notice a été ajoutée par le système d'analyse "SpamAssassin" sur
votre serveur de courrier "alice", pour vous
aider à identifier ce type de messages.

Le système SpamAssassin ajoute un en-tête "X-Spam-Flag: YES" aux
messages qu'il considère comme étant probablement du Spam.
Vous pouvez si vous le souhaitez utiliser cette caractéristique
pour régler un filtre dans votre logiciel de lecture de courrier,
afin de détruire ou de classer à part ce type de message.

Si ce robot a classifié incorrectement un message qui vous était
destiné, ou pour toute question, veuillez contacter l'administrateur
du système par e-mail à the administrator of that system .

Voir http://spamassassin.apache.org/tag/ pour plus de détails (en anglais).

Détails de l'analyse du message:   (999.0 points, 5.0 requis)
-1.0 ALL_TRUSTED            Passed through trusted hosts only via SMTP
1000 GTUBE                  BODY: Test générique de courrier non sollicté en masse
 0.0 HTML_MESSAGE           BODY: HTML inclus dans le message
 0.0 MIME_QP_LONG_LINE      RAW: Ligne quoted-printable de plus de 76
                           caractères

-------------------- Fin de Rapport SpamAssassin ---------------------

Le message original n'étant pas au format text brut, il est peut-être
dangereux de l'ouvrir avec votre logiciel e-mail ; en particulier il
pourrait contenir un virus, ou confirmer à l'expéditeur que votre
adresse e-mail est active, et peut recevoir du spam. Si vous voulez
lire ce message, et n'êtes pas certain de la sécurité de votre logiciel
e-mail, il est plus prudent d'enregistrer ce message sur votre disque
dur, et de l'afficher ensuite avec un éditeur de texte.
Pour désactiver cette avertissement, il suffit de mettre à 0 le paramètre report_safe dans le fichier /etc/spamassassin/local.cf.
  • Dans l'en-tête du mail incriminé, le score attribué par SpamAssassin apparaît :
X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on alice
X-Spam-Flag: YES
X-Spam-Level: **************************************************
X-Spam-Status: Yes, score=999.0 required=5.0 tests=ALL_TRUSTED,GTUBE,
	HTML_MESSAGE,MIME_QP_LONG_LINE autolearn=no version=3.3.2
  • On peut également analyser l'acheminement du mail en interne :
Feb  6 16:49:03 alice postfix/smtpd[14032]: connect from geocoucou.net.ncad.fr[10.0.0.49]
Feb  6 16:49:03 alice postfix/smtpd[14032]: A29DD461D0C:
 client=geocoucou.net.ncad.fr[10.0.0.49]
Feb  6 16:49:03 alice postfix/cleanup[14038]: A29DD461D0C:
 message-id=<f1be69d848c7d2dbb3ab2dc5bf44d031@ncad.me>
Feb  6 16:49:03 alice postfix/qmgr[13786]: A29DD461D0C: from=<nicolas.cachelou@ncad.me>,
 size=1704, nrcpt=1 (queue active)
Feb  6 16:49:03 alice postfix/smtpd[14032]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
Feb  6 16:49:03 alice spamd[14006]: spamd: connection from localhost [127.0.0.1] at port 37195
Feb  6 16:49:03 alice spamd[14006]: spamd: handle_user unable to find user: 'cacheln@mail.glx'
Feb  6 16:49:03 alice spamd[14006]: spamd: processing message
 <f1be69d848c7d2dbb3ab2dc5bf44d031@ncad.me> for cacheln@mail.glx:5001
Feb  6 16:49:06 alice spamd[14006]: spamd: identified spam (999.0/5.0) for
 cacheln@mail.glx:5001 in 3.2 seconds, 1658 bytes.
Feb  6 16:49:06 alice spamd[14006]: spamd: result: Y 999 - 
 ALL_TRUSTED,GTUBE,HTML_MESSAGE,MIME_QP_LONG_LINE 
 scantime=3.2,size=1658,user=cacheln@mail.glx,uid=5001,required_score=5.0,rhost=localhost,
 raddr=127.0.0.1,rport=37195,mid=<f1be69d848c7d2dbb3ab2dc5bf44d031@ncad.me>,autolearn=no
Feb  6 16:49:06 alice postfix/pickup[13785]: F33D9461FB6: uid=5001
 from=<nicolas.cachelou@ncad.me>
Feb  6 16:49:06 alice postfix/cleanup[14038]: F33D9461FB6:
 message-id=<f1be69d848c7d2dbb3ab2dc5bf44d031@ncad.me>
Feb  6 16:49:06 alice postfix/pipe[14039]: A29DD461D0C: to=<cacheln@mail.glx>,
 relay=spamassassin, delay=3.3, delays=0.05/0.01/0/3.3, dsn=2.0.0, status=sent
 (delivered via spamassassin service)
Feb  6 16:49:06 alice postfix/qmgr[13786]: A29DD461D0C: removed
Feb  6 16:49:07 alice postfix/qmgr[13786]: F33D9461FB6: from=<nicolas.cachelou@ncad.me>,
 size=2458, nrcpt=1 (queue active)
Feb  6 16:49:07 alice spamd[14004]: prefork: child states: II
Feb  6 16:49:07 alice postfix/virtual[14045]: F33D9461FB6: to=<cacheln@mail.glx>,
 relay=virtual, delay=0.16, delays=0.08/0.02/0/0.05, dsn=2.0.0, status=sent
 (delivered to maildir)
Feb  6 16:49:07 alice postfix/qmgr[13786]: F33D9461FB6: removed

Blackliste

  • Nous allons blacklister l'adresse mail externe que nous utilisons pour les tests : nicolas.cachelou@ncad.me. Pour cela, on va rajouter les deux lignes suivantes dans /etc/spamassassin/local.cf :
score USER_IN_BLACKLIST 10
blacklist_from nicolas.cachelou@ncad.me

Ici, nous indiquons que la blacklist à un score de 10. Ce score est supérieure au required_score (5.0) ce qui aura pour conséquence de taguer comme spam les messages blacklistés. Ensuite, dans la seconde ligne nous renseignons l'adresse mail à blacklister.

  • On recharge la configuration de SpamAssassin :

sudo service spamassassin restart

  • Puis on envoi un mail de nicolas.cachelou@ncad.me vers cacheln@mail.glx. Observons dans les logs l'acheminement du mail :
Feb  6 17:09:39 alice postfix/smtpd[14067]: connect from geocoucou.net.ncad.fr[10.0.0.49]
Feb  6 17:09:39 alice postfix/smtpd[14067]: 35BF3461D14:
 client=geocoucou.net.ncad.fr[10.0.0.49]
Feb  6 17:09:39 alice postfix/cleanup[14073]: 35BF3461D14:
 message-id=<3efd902f135925e20b7e0fe692294c1a@ncad.me>
Feb  6 17:09:39 alice postfix/qmgr[13786]: 35BF3461D14: from=<nicolas.cachelou@ncad.me>,
 size=1642, nrcpt=1 (queue active)
Feb  6 17:09:39 alice postfix/smtpd[14067]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
Thu Feb  6 17:09:39 2014 [14063] info: spamd: connection from localhost [127.0.0.1] at
 port 37207
Thu Feb  6 17:09:39 2014 [14063] info: spamd: handle_user unable to find
 user: 'cacheln@mail.glx'
Thu Feb  6 17:09:39 2014 [14063] info: spamd: processing message
 <3efd902f135925e20b7e0fe692294c1a@ncad.me> for cacheln@mail.glx:5001
Thu Feb  6 17:09:43 2014 [14063] info: spamd: identified spam (9.0/5.0)
 for cacheln@mail.glx:5001 in 3.8 seconds, 1596 bytes.
Thu Feb  6 17:09:43 2014 [14063] info: spamd: result:
 Y 9 - ALL_TRUSTED,HTML_MESSAGE,MIME_QP_LONG_LINE,USER_IN_BLACKLIST
 scantime=3.8,size=1596,user=cacheln@mail.glx,uid=5001,required_score=5.0,
 rhost=localhost,raddr=127.0.0.1,rport=37207,
 mid=<3efd902f135925e20b7e0fe692294c1a@ncad.me>,autolearn=no
Thu Feb  6 17:09:43 2014 [14061] info: prefork: child states: II
Feb  6 17:09:43 alice postfix/pickup[13785]: 239B7461FBF: uid=5001
 from=<nicolas.cachelou@ncad.me>
Feb  6 17:09:43 alice postfix/pipe[14074]: 35BF3461D14: to=<cacheln@mail.glx>,
 relay=spamassassin, delay=3.9, delays=0.06/0.01/0/3.9, dsn=2.0.0, status=sent
 (delivered via spamassassin service)
Feb  6 17:09:43 alice postfix/qmgr[13786]: 35BF3461D14: removed
Feb  6 17:09:43 alice postfix/cleanup[14073]: 239B7461FBF:
 message-id=<3efd902f135925e20b7e0fe692294c1a@ncad.me>
Feb  6 17:09:43 alice postfix/qmgr[13786]: 239B7461FBF: from=<nicolas.cachelou@ncad.me>,
 size=2366, nrcpt=1 (queue active)
Feb  6 17:09:43 alice postfix/virtual[14079]: 239B7461FBF: to=<cacheln@mail.glx>,
 relay=virtual, delay=0.14, delays=0.06/0.02/0/0.05, dsn=2.0.0, status=sent
 (delivered to maildir)
Feb  6 17:09:43 alice postfix/qmgr[13786]: 239B7461FBF: removed

Utilisation d'une base Sql

  • Il peut être intéressent d'utiliser une base de données Sql pour stocker les règles de SpamAssassin propre à chaque utilisateur du domaine de messagerie.
La documentation qui suit est basée sur l'utilisation d'une base de données MySQL. Nous considérerons que la base est déjà fonctionnelle.
  • Pour illustrer cette exemple nous utiliseront une base de données nommée courriel accessible via l'utilisateur courriel qui a pour mot de passe motdepassebasemysqlpourpostfix. Le serveur de bases de données a pour adresse IP 10.0.0.47.

Activation de Sql

  • Par défaut le module n'est pas activé. Il faut pour cela éditer le fichier /etc/spamassassin/default et y ajouter l'option -q dans la ligne OPTIONS :
OPTIONS="-q --create-prefs --max-children 5 --helper-home-dir --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log"
  • On redémarre SpamAssassin pour appliquer les modifications :

service spamassassin restart

Paramètres des utilisateurs

Structure de la table

  • La structure de la table est simple. Elle est dotée de 3 colonnes dont une pour identifier le compte mail pour qui s'applique la règle, dans preference on spécifiera le type de règle et pour value sa valeur.
  • Nous créerons donc la table userpref dans notre base de données courriel :
CREATE TABLE userpref (
  username varchar(100) NOT NULL default ,
  preference varchar(30) NOT NULL default ,
  value varchar(100) NOT NULL default ,
  prefid int(11) NOT NULL auto_increment,
  PRIMARY KEY  (prefid),
  KEY username (username)
)

Connexion à la base de données

  • SpamAssassin a besoin de connaître les éléments de connexion à la base de donnée. Nous allons créer le fichier de configuration /etc/spamassassin/sql.cf et y insérer les données nécessaires à la connexion :
user_scores_dsn                  DBI:mysql:postfix:10.0.0.47:3306
user_scores_sql_password         motdepassebasemysqlpourpostfix
user_scores_sql_username         postfix
user_scores_sql_custom_query     SELECT preference, value FROM _TABLE_ WHERE username = USERNAME_ OR username = '$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC
  • Nous remarqueront que la ligne user_scores_sql_custom_query indique à SpamAssassin la commande Sql pour récupérer les éléments de configuration dans la table userpref.

SpamAssassin charge sa configuration au travers de tous les fichiers portant l’extension .cf contenu dans le dossier /etc/spamassassin/.

Récupération de la variable USERNAME

  • Il est nécessaire d'adapter le contenu de la variable USERNAME. Par défaut, le contenu de cette variable est spamd. Cependant, si l'on veut appliquer des règles propres à chacun des utilisateurs, il faudra que cette variable prenne leur adresse mail respective.
  • Pour cela, on éditer le fichier /etc/postfix/main.cf et on remplace la ligne :
spamassassin unix -     n       n       -       -       pipe
      user=spamd argv=/usr/bin/spamc -f -e
      /usr/sbin/sendmail -oi -f ${sender} ${recipient}
  • Par :
 spamassassin unix -     n       n       -       -       pipe
      user=spamd argv=/usr/bin/spamc -f -u ${recipient} -e
      /usr/sbin/sendmail -oi -f ${sender} ${recipient}
  • Puis on redémarre Postfix pour appliquer les changements.

service postfix restart

Analyse de logs

Réception de mail

Utilisateur virtuel

  • Nous sommes dans le cas d'une configuration avec des utilisateurs virtuels stockés dans une base de données MySQL. Le message est traité une première fois par Postfix avant d'être transféré à SpamAssassin :
Réception d'un mail, étape 1
  • Une fois le message traité par SpamAssassin, il est de nouveau remis à Postfix pour être distribué dans la boîte mail du destinataire :
Réception d'un mail, étape 2
  • Maintenant, voici les logs relevés dans /var/log/mail.log :
1.1 Feb  7 19:47:57 alice postfix/smtpd[3011]: connect from geocoucou.net.ncad.fr[10.0.0.49]
1.1 Feb  7 19:47:57 alice postfix/smtpd[3011]: 2E9734620F9:
 client=geocoucou.net.ncad.fr[10.0.0.49]
1.2 Feb  7 19:47:57 alice postfix/cleanup[3017]: 2E9734620F9:
 message-id=<747172f0292345ebef5250aa8d0e0cb3@ncad.me>
1.5 Feb  7 19:47:57 alice postfix/qmgr[2706]: 2E9734620F9: from=<nicolas.cachelou@ncad.me>,
 size=1568, nrcpt=1 (queue active)
1.7 Feb  7 19:47:57 alice spamd[3008]: spamd: connection from localhost [127.0.0.1]
 at port 33079
1.7 Feb  7 19:47:57 alice spamd[3008]: spamd: handle_user unable to find
 user: 'cacheln@mail.glx'
1.7 Feb  7 19:47:57 alice spamd[3008]: spamd: processing message
 <747172f0292345ebef5250aa8d0e0cb3@ncad.me> for cacheln@mail.glx:5001
1.7 Feb  7 19:48:01 alice spamd[3008]: spamd: identified spam (9.0/5.0) for
 cacheln@mail.glx:5001
 in 4.1 seconds, 1522 bytes.
1.7 Feb  7 19:48:01 alice spamd[3008]: spamd: result: Y 9 -
 ALL_TRUSTED,HTML_MESSAGE,MIME_QP_LONG_LINE,USER_IN_BLACKLIST scantime=4.1,size=1522,
 user=cacheln@mail.glx,uid=5001,required_score=5.0,rhost=localhost,raddr=127.0.0.1,
 rport=33079,mid=<747172f0292345ebef5250aa8d0e0cb3@ncad.me>,autolearn=no
2.1 Feb  7 19:48:01 alice postfix/pickup[2705]: 60C0B4620FC: uid=5001
 from=<nicolas.cachelou@ncad.me>
1.6 Feb  7 19:48:01 alice postfix/pipe[3018]: 2E9734620F9: to=<cacheln@mail.glx>,
 relay=spamassassin, delay=4.2, delays=0.06/0.01/0/4.2, dsn=2.0.0, status=sent
 (delivered via spamassassin service)
2.2 Feb  7 19:48:01 alice postfix/cleanup[3017]: 60C0B4620FC:
 message-id=<747172f0292345ebef5250aa8d0e0cb3@ncad.me>
2.5 Feb  7 19:48:01 alice postfix/qmgr[2706]: 60C0B4620FC: from=<nicolas.cachelou@ncad.me>,
 size=2276, nrcpt=1 (queue active)
2.6 Feb  7 19:48:01 alice postfix/virtual[3026]: 60C0B4620FC: to=<cacheln@mail.glx>,
 relay=virtual, delay=0.16, delays=0.09/0.03/0/0.04, dsn=2.0.0, status=sent
 (delivered to maildir)

Liens