« Amavis MySQL » : différence entre les versions

De NCad Wiki
Aller à la navigation Aller à la recherche
 
(47 versions intermédiaires par le même utilisateur non affichées)
Ligne 5 : Ligne 5 :
== Prérequis ==
== Prérequis ==


Avant de lire les instructions qui vont suivre, il est recommandé de lire la page consacrée à [[Amavis]]. Le module '''MySQL''' pour '''Amavis''' permet d'intégrer les règles de filtrage directement dans une base de données. Qu'elles soient générale ou propre à un utilisateur données, ces règles s'appliquent dès leur enregistrement dans la base.
Il est nécessaire de disposer d'un serveur de mails basé sur '''Postfix''' fonctionnel. Il est également nécessaire d'avoir installé le service [[Amavis]] ainsi que [[ClamAV]] et [[SpamAssassin]]. une base de données de type [[MySQL]] est également requise.


Les fonctions de cette bases seront les suivantes :
{{ Box Information | objet=Amavis peut s'interfacer avec d'autre solutions logicielles mais elle ne seront pas abordées ici. }}
 
'''Amavis''' dispose d'un module qui permet de l'interfacer avec une base de données comme MySQL. On retrouve les fonctions suivantes :
* liste blanche/noire;
* liste blanche/noire;
* priorisation des émetteurs;
* priorisation des émetteurs;
* activation/désactivation des filtres;
* activation/désactivation des filtres;
* archivage des messages en quarantaine;
* archivage des mails en quarantaine;
* archivage des messages traités par '''Amavis'''
* archivage des métadonnées des mails traités par '''Amavis'''.
 
Le serveur de mail '''Postfix''' gère la messagerie pour le domaine '''mail.glx''' et a comme adresse IP '''10.0.0.44'''. Sur ce serveur est configuré le compte mail '''cacheln@mail.glx'''.


{{ Box Attention | objet=Vous devez disposer d'un serveur [[MySQL]] fonctionnel. Dans cet article le serveur '''mysql''' et le serveur '''mail''' sont hébergés sur deux machines différentes. Si ce n'est pas le cas de votre configuration, pensez à changer la valeur du '''hosts'''. }}
Le serveur de base de données '''MySQL''' est hébergé sur une autre machine qui a pour adresse IP '''10.0.0.47'''. La base de données utilisée est '''postfix''' dont l'utilisateur '''postfix''' avec le mot de passe '''motdepassebasemysqlpourpostfix''' détient les permissions nécessaires pour agir sur la base.


== Installation des tables ==
== Installation des tables ==
Ligne 22 : Ligne 26 :
{{ Box Remarque | objet=La documentation complète ainsi que la structure des tables sont décrites dans les fichiers /usr/share/doc/amavisd-new/README.sql.gz et /usr/share/doc/amavisd-new/README.sql-mysql.gz. }}
{{ Box Remarque | objet=La documentation complète ainsi que la structure des tables sont décrites dans les fichiers /usr/share/doc/amavisd-new/README.sql.gz et /usr/share/doc/amavisd-new/README.sql-mysql.gz. }}


* La table '''user''' contient la liste des utilisateurs ayant une boîte mail locale ''(Postfix)''. Elle sera consulter pour vérifier les préférences de l'utilisateur recevant un courriel - si elle existe.
==== Les règles de filtrage ====
 
CREATE TABLE users (
  id        int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,  -- unique id
  priority  integer      NOT NULL DEFAULT '7',  -- 0 étant la plus faible priorité.
  policy_id  integer unsigned NOT NULL DEFAULT '1',  -- N° de la règle policy (id) appliquée
  email      varbinary(255) NOT NULL UNIQUE,
  fullname  varchar(255) DEFAULT NULL,    -- Non utilisé par amavisd-new
  local      char(1)      -- Y/N  (optionnel)
);


* La table '''policy''' contient les règles de filtrage pour le '''spam''' et les '''virus''' ''(score, activation des divers filtres, tag des messages, avertir l'émetteur en cas d’échec, ...)''.
* La table '''policy''' contient les règles de filtrage pour le '''spam''' et les '''virus''' ''(score, activation des divers filtres, tag des messages, avertir l'émetteur en cas d’échec, ...)''.
Ligne 40 : Ligne 35 :
   policy_name      varchar(32),    -- non utilisé par amavisd-new, à titre de commentaire
   policy_name      varchar(32),    -- non utilisé par amavisd-new, à titre de commentaire
   
   
   virus_lover          char(1) default NULL,    -- Y/N
   virus_lover          char(1) default NULL,    -- Y/N / Ignorer l'analyse des virus
   spam_lover          char(1) default NULL,    -- Y/N
   spam_lover          char(1) default NULL,    -- Y/N / Ignorer l'analyse des spams
   banned_files_lover  char(1) default NULL,    -- Y/N
   banned_files_lover  char(1) default NULL,    -- Y/N / Ignorer l'analyse des pièces jointes
   bad_header_lover    char(1) default NULL,    -- Y/N
   bad_header_lover    char(1) default NULL,    -- Y/N / Ignorer l'analyse des en-têtes mails
   
   
   bypass_virus_checks  char(1) default NULL,    -- Y/N
   bypass_virus_checks  char(1) default NULL,    -- Y/N / Désactivation anti-virus
   bypass_spam_checks  char(1) default NULL,    -- Y/N
   bypass_spam_checks  char(1) default NULL,    -- Y/N / Désactivation anti-spam
   bypass_banned_checks char(1) default NULL,    -- Y/N
   bypass_banned_checks char(1) default NULL,    -- Y/N / Désactivation contrôle pièce jointe
   bypass_header_checks char(1) default NULL,    -- Y/N
   bypass_header_checks char(1) default NULL,    -- Y/N / Désactivation contrôle en-tête mail
   
   
   spam_modifies_subj  char(1) default NULL,    -- Y/N
   spam_modifies_subj  char(1) default NULL,    -- Y/N / Modification de l'objet pour les spams
   
   
   virus_quarantine_to      varchar(64) default NULL,
   virus_quarantine_to      varchar(64) default NULL,
Ligne 59 : Ligne 54 :
   other_quarantine_to      varchar(64) default NULL,
   other_quarantine_to      varchar(64) default NULL,
   
   
   spam_tag_level  float default NULL, -- higher score inserts spam info headers
   spam_tag_level  float default NULL, -- Score à partir duquel l'analyse Spam est tagué dans l'en-tête mail
   spam_tag2_level float default NULL, -- inserts 'declared spam' header fields
   spam_tag2_level float default NULL, -- Score à partir duquel le mail est tagué comme Spam
   spam_kill_level float default NULL, -- higher score triggers evasive actions
   spam_kill_level float default NULL, -- Score à partir duquel le mail est supprimé
                                       -- e.g. reject/drop, quarantine, ...
                                       -- C.f. reject/drop, quarantine, ...
                                       -- (subject to final_spam_destiny setting)
                                       -- (fonction du paramètre final_spam_destiny)
   spam_dsn_cutoff_level        float default NULL,
   spam_dsn_cutoff_level        float default NULL, -- Score à partir duquel l'expéditeur n'est pas prévenu
   spam_quarantine_cutoff_level float default NULL,
                                                    -- que son mail est traité comme du spam
   spam_quarantine_cutoff_level float default NULL, -- Score à partir duquel le mail est effacé sans mise en quarantaine
   
   
   addr_extension_virus      varchar(64) default NULL,
   addr_extension_virus      varchar(64) default NULL,
Ligne 72 : Ligne 68 :
   addr_extension_bad_header varchar(64) default NULL,
   addr_extension_bad_header varchar(64) default NULL,
   
   
   warnvirusrecip      char(1)    default NULL, -- Y/N
   warnvirusrecip      char(1)    default NULL, -- Y/N / Avertir le destinataire en cas de mail traité comme virus
   warnbannedrecip    char(1)    default NULL, -- Y/N
   warnbannedrecip    char(1)    default NULL, -- Y/N / Avertir le destinataire en cas de PJ bannie
   warnbadhrecip      char(1)    default NULL, -- Y/N
   warnbadhrecip      char(1)    default NULL, -- Y/N / Avertir le destinataire en cas de mail traité comme mal formé
   newvirus_admin      varchar(64) default NULL,
   newvirus_admin      varchar(64) default NULL,
   virus_admin        varchar(64) default NULL,
   virus_admin        varchar(64) default NULL,
Ligne 82 : Ligne 78 :
   spam_subject_tag    varchar(64) default NULL,
   spam_subject_tag    varchar(64) default NULL,
   spam_subject_tag2  varchar(64) default NULL,
   spam_subject_tag2  varchar(64) default NULL,
   message_size_limit  integer    default NULL, -- max size in bytes, 0 disable
   message_size_limit  integer    default NULL, -- Taille maximale en bytes du mail, 0 pour désactiver
   banned_rulenames    varchar(64) default NULL  -- comma-separated list of ...
   banned_rulenames    varchar(64) default NULL  -- Liste des types de fichiers bannis séparés par une virgule
        -- names mapped through %banned_rules to actual banned_filename tables
);
 
* Nous allons définir quatre profil dans cette table. '''Le premier''' permettra de proposer <font color=green>tous les services de filtrage</font> d'Amavis ''(Tous)'', '''le second''' uniquement <font color=orange>l'analyse Anti-Virus</font> ''(Anti-Virus)'', le troisième se sera uniquement <font color=orange>l'analyse Anti-Spam</font> ''(Anti-Spam)'' et dans '''le dernier''' profil il n'y <font color=red>aura aucunes analyses</font> ''(Rien)''.
 
INSERT INTO `policy` (`id`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES
(NULL, 'Tous', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '*** SPAM *** ', NULL, NULL),
(NULL, 'Anti-Virus', 'N', 'N', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(NULL, 'Anti-Spam', 'N', 'N', 'N', 'N', 'Y', 'N', 'Y', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '*** SPAM *** ', NULL, NULL),
(NULL, 'Rien', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'Y', 'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
 
==== Les utilisateurs ====
 
* La table '''user''' contient la liste des utilisateurs ayant une boîte mail locale ''(Postfix)''. Elle sera consulter pour vérifier les préférences de l'utilisateur recevant un courriel - si elle existe.
 
CREATE TABLE users (
  id        int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,  -- unique id
  priority  integer      NOT NULL DEFAULT '7',  -- 0 étant la plus faible priorité.
  policy_id  integer unsigned NOT NULL DEFAULT '1',  -- N° de la règle policy (id) appliquée
  email      varbinary(255) NOT NULL UNIQUE,
  fullname  varchar(255) DEFAULT NULL,    -- Non utilisé par amavisd-new
  local      char(1)      -- Y/N  (optionnel)
  );
  );


* La table '''mailaddr''' contient les adresses ou domaines pour lesquels on souhaite définir une '''règle de listage''' ''(c.f table '''wblist''')'' ainsi qu'une '''priorité''' de traitement.
* Dans notre exemple, nous disposons sur '''Postfix''' de la boîte mail '''cacheln@mail.glx'''. Nous allons lui créer un enregistrement dans cette table :
 
INSERT INTO `users` (`id`, `priority`, `policy_id`, `email`, `fullname`, `local`) VALUES (NULL, 7, 1, 'cacheln@mail.glx', 'Nicolas Cachelou', NULL);
 
{{ Box Remarque | objet=Nous avons affecté la <font color=grey>policy_id</font> numéro <font color=grey>1</font> pour que la boîte dispose d'une analyse complète de tous les mails qu'elle reçoit. }}
 
==== Les priorités ====
 
* La table '''mailaddr''' contient les adresses ou domaines pour lesquels on souhaite définir une de '''priorité''' de traitement. Elle pourra également être appelée si l'on souhaite appliquer à ces adresses des '''règles de listage''' ''(c.f table '''wblist''')''.


  CREATE TABLE mailaddr (
  CREATE TABLE mailaddr (
Ligne 95 : Ligne 119 :
  );
  );


* La table '''wblist''' permet de blacklister ou whitelister une adresse émetteur définie dans la table '''mailaddr''' et appliqué pour le destinataire locale définit dans la table ''(users)''.
{{ Box Remarque | objet=Le contenu de cette table sera étudié dans la section [[]]}}
 
==== Les listes ====
 
* La table '''wblist''' permet de blacklister ou whitelister une adresse émetteur ''(ou un domaine entier)'' définie dans la table '''mailaddr''' et appliqué pour le destinataire locale définit dans la table ''(users)''.


  CREATE TABLE wblist (
  CREATE TABLE wblist (
Ligne 103 : Ligne 131 :
   PRIMARY KEY (rid,sid)
   PRIMARY KEY (rid,sid)
  );
  );
{{ Box Remarque | objet=Le contenu de cette table sera étudié dans la section [[]]}}


=== Configuration de Amavis ===
=== Configuration de Amavis ===


* Pour activer le module Sql dans Amavis, il faut insérer les deux lignes suivantes dans le fichier '''/etc/amavis/conf.d''':
* Pour activer le module '''Sql''' dans '''Amavis''', il faut insérer la ligne suivante dans le fichier '''/etc/amavis/conf.d/50-user''':


   @lookup_sql_dsn = ( ['DBI:mysql:database=postfix;host=10.0.0.47;port=3306', 'postfix', 'motdepassebasemysqlpourpostfix']);
   @lookup_sql_dsn = ( ['DBI:mysql:database=postfix;host=10.0.0.47;port=3306', 'postfix', 'motdepassebasemysqlpourpostfix']);
  @storage_sql_dsn = @lookup_sql_dsn;
 
* On redémarrer le service '''Amavis''' pour appliquer la configuration :
 
{{ Box Console | objet=service amavis restart}}


=== Validation ===
=== Validation ===
* Pour voir si le module '''Sql''' est activé, il suffit de regarder dans les logs mails '''''(/var/log/mail.log)''''' après l'initialisation de '''Amavis'''. On y remarquera les lignes suivantes :
Feb 11 12:32:07 alice amavis[2802]: SQL base code        <font color=green>loaded</font>
Feb 11 12:32:07 alice amavis[2802]: SQL::Log code        <font color=green>loaded</font>
Feb 11 12:32:07 alice amavis[2802]: SQL::Quarantine      <font color=red>NOT loaded</font>


== Fonctions & Comportements ==
== Fonctions & Comportements ==


=== Listes noirs ===
=== Listes noires ===
 
==== Définition de l'émetteur ====
 
* Nous souhaitons '''blacklister''' le domaine '''ncad.me'''. Tous les messages en provenance de ce nom de domaine seront tagués comme '''spam'''. Tous d'abord, nous allons déclarer le domaine dans la table '''mailaddr''' :
 
INSERT INTO `courriel`.`mailaddr` (
  <font color=red>`id`</font> ,
  <font color=green>`priority`</font> ,
  <font color=darkblue>`email`</font>
)
VALUES (
  <font color=red>NULL</font> , <font color=green>'7'</font>, <font color=darkblue>'@ncad.me'</font>
);
 
==== Définition de la règle ====
 
* Nous insérons donc l'enregistrement ayant pour '''id''' la valeur <font color=red>1</font>, comme '''priority''' nous indiquons <font color=green>7</font> ''(valeur par défaut)'' et comme '''email''' nous renseignons le domaine <font color=darkblue>ncad.me</font>. Maintenant, nous allons associé ce domaine à une '''liste noir''' qui s'appliquera en réception sur la boîte mail de l'utilisateur '''cacheln@mail.glx'''.
 
INSERT INTO `courriel`.`wblist` (
  <font color=orange>`rid`</font> ,
  <font color=red>`sid`</font> ,
  <font color=purple>`wb`</font>
)
VALUES (
  <font color=orange>'1'</font>, <font color=red>'1'</font>, <font color=purple>'B'</font>
);
 
* Dans l'enregistrement ci-dessus, la valeur '''rid''' renferme l''''id''' du compte mail local pour qui s'applique la règle. Il s'agit du compte mail '''<font color=orange>cacheln@mail.glx</font>''' ayant pour '''id''' la valeur '''<font color=orange>1</font>''' qui est déclarée dans la table '''user'''. La seconde valeur '''sid''' concerne l''''id''' du '''domaine''' concerné par la règle et qui est déclaré dans la table '''mailaddr'''. Dans notre cas c'est le domaine '''<font color=red>ncad.me</font>''' ayant pour '''id''' la valeur '''<font color=red>1</font>'''. Enfin le champ '''wb''' renseigne sur la nature de la liste : '''W''' pour '''liste blanche''' et '''<font color=purple>B</font>''' pour '''<font color=purple>liste noire</font>'''.
 
==== Validation ====
 
* On Procède à l'envoi d'un mail depuis l'adresse '''nicolas.cachelou@ncad.me''' et à destination de '''cacheln@mail.glx'''. Voici ce qu'on observe dans '''/var/log/mail.log''' :
 
Feb 11 13:30:08 alice postfix/smtpd[2852]: connect from geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:30:08 alice postfix/smtpd[2852]: 2FAA0462125: client=geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:30:08 alice postfix/cleanup[2855]: 2FAA0462125: message-id=<e003a875ad1f6bf934b72d2148324d5d@ncad.me>
Feb 11 13:30:08 alice postfix/qmgr[2140]: 2FAA0462125: from=<nicolas.cachelou@ncad.me>, size=1568, nrcpt=1 (queue active)
Feb 11 13:30:08 alice postfix/smtpd[2852]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:30:08 alice postfix/smtpd[2847]: 6EA6B4621A8: client=localhost[127.0.0.1]
Feb 11 13:30:08 alice postfix/cleanup[2855]: 6EA6B4621A8: message-id=<e003a875ad1f6bf934b72d2148324d5d@ncad.me>
Feb 11 13:30:08 alice postfix/qmgr[2140]: 6EA6B4621A8: from=<nicolas.cachelou@ncad.me>, size=2244, nrcpt=1 (queue active)
Feb 11 13:30:08 alice postfix/smtpd[2847]: disconnect from localhost[127.0.0.1]
Feb 11 13:30:08 alice amavis[2804]: (02804-02) <font color=orange>Passed SPAM</font>, [10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> ->
  <cacheln@mail.glx>, quarantine: g/spam-gtarVQ0QDt4C.gz, Message-ID: <e003a875ad1f6bf934b72d2148324d5d@ncad.me>, mail_id:
  gtarVQ0QDt4C, <font color=orange>Hits: -</font>, size: 1568, queued_as: 6EA6B4621A8, 284 ms
Feb 11 13:30:08 alice postfix/virtual[2863]: 6EA6B4621A8: to=<cacheln@mail.glx>, relay=virtual, delay=0.09,
  delays=0.04/0.01/0/0.04, dsn=2.0.0, status=sent (delivered to maildir)
Feb 11 13:30:08 alice postfix/qmgr[2140]: 6EA6B4621A8: removed
Feb 11 13:30:08 alice postfix/smtp[2856]: 2FAA0462125: to=<cacheln@mail.glx>, relay=127.0.0.1[127.0.0.1]:10024, delay=0.36,
  delays=0.03/0/0.01/0.32, dsn=2.0.0, status=sent (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as
  6EA6B4621A8)
Feb 11 13:30:08 alice postfix/qmgr[2140]: 2FAA0462125: removed
 
* Le message est bien identifié comme du spam suite au '''blacklistage'''. On remarque qu'aucun score n'apparaît, '''Amavis''' n'a pas consulté '''SpamAssassin''', il a automatiquement tagué le message comme '''spam'''.


=== Listes blanches ===
=== Listes blanches ===


=== Règles de filtrage ===
==== Définition de l'émetteur ====
 
* Nous souhaitons '''whitelister''' le domaine '''ncad.me'''. Tous les messages en provenance de ce nom de domaine seront ignorés par les analyses spam et anti-virus. Tous d'abord, nous allons déclarer le domaine dans la table '''mailaddr''' :


=== Tag des SPAM ===
INSERT INTO `courriel`.`mailaddr` (
  <font color=red>`id`</font> ,
  <font color=green>`priority`</font> ,
  <font color=darkblue>`email`</font>
)
VALUES (
  <font color=red>NULL</font> , <font color=green>'7'</font>, <font color=darkblue>'@ncad.me'</font>
);


=== Notifications en cas de virus ===
==== Définition de la règle ====
 
* Nous insérons donc l'enregistrement ayant pour '''id''' la valeur <font color=red>1</font>, comme '''priority''' nous indiquons <font color=green>7</font> ''(valeur par défaut)'' et comme '''email''' nous renseignons le domaine <font color=darkblue>ncad.me</font>. Maintenant, nous allons associé ce domaine à une '''liste noir''' qui s'appliquera en réception sur la boîte mail de l'utilisateur '''cacheln@mail.glx'''.
 
INSERT INTO `courriel`.`wblist` (
  <font color=orange>`rid`</font> ,
  <font color=red>`sid`</font> ,
  <font color=purple>`wb`</font>
)
VALUES (
  <font color=orange>'1'</font>, <font color=red>'1'</font>, <font color=purple>'B'</font>
);
 
* Dans l'enregistrement ci-dessus, la valeur '''rid''' renferme l''''id''' du compte mail local pour qui s'applique la règle. Il s'agit du compte mail '''<font color=orange>cacheln@mail.glx</font>''' ayant pour '''id''' la valeur '''<font color=orange>1</font>''' qui est déclarée dans la table '''user'''. La seconde valeur '''sid''' concerne l''''id''' du '''domaine''' concerné par la règle et qui est déclaré dans la table '''mailaddr'''. Dans notre cas c'est le domaine '''<font color=red>ncad.me</font>''' ayant pour '''id''' la valeur '''<font color=red>1</font>'''. Enfin le champ '''wb''' renseigne sur la nature de la liste : '''<font color=purple>W</font>''' pour '''<font color=purple>liste blanche</font>''' et '''B''' pour '''liste noire'''.
 
==== Validation ====
 
* Pour tester le comportement de '''Amavis''', on va répéter le test qui a été appliqué [[Amavis#R.C3.A9ception_d.27un_Spam|ICI]]. On va envoyé un mail de '''nicolas.cachelou@ncad.me''' vers '''cacheln@mail.glx''' qui doit normalement être détecté comme '''spam'''. Pour cela, dans le corps du message on insèrera la ligne suivante :
 
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
 
* Vérifions les logs enregistrés dans '''/var/log/mail.log''' :
 
Feb 11 13:52:59 alice postfix/smtpd[2892]: connect from geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:52:59 alice postfix/smtpd[2892]: EF5B7462125: client=geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:53:00 alice postfix/cleanup[2897]: EF5B7462125: message-id=<765d57b3f3561b4a8a7aaaade291cb55@ncad.me>
Feb 11 13:53:00 alice postfix/qmgr[2140]: EF5B7462125: from=<nicolas.cachelou@ncad.me>, size=1696, nrcpt=1 (queue active)
Feb 11 13:53:00 alice postfix/smtpd[2892]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:53:00 alice postfix/smtpd[2901]: connect from localhost[127.0.0.1]
Feb 11 13:53:00 alice postfix/smtpd[2901]: 3DA0746219B: client=localhost[127.0.0.1]
Feb 11 13:53:00 alice postfix/cleanup[2897]: 3DA0746219B: message-id=<765d57b3f3561b4a8a7aaaade291cb55@ncad.me>
Feb 11 13:53:00 alice postfix/qmgr[2140]: 3DA0746219B: from=<nicolas.cachelou@ncad.me>, size=2110, nrcpt=1 (queue active)
Feb 11 13:53:00 alice postfix/smtpd[2901]: disconnect from localhost[127.0.0.1]
Feb 11 13:53:00 alice amavis[2805]: (02805-02) <font color=green>Passed CLEAN</font>, [10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> ->
  <cacheln@mail.glx>, Message-ID: <765d57b3f3561b4a8a7aaaade291cb55@ncad.me>, mail_id: sAO9urled0rX, <font color=red>Hits: -</font>, size: 1696,
  queued_as: 3DA0746219B, 282 ms
Feb 11 13:53:00 alice postfix/virtual[2903]: 3DA0746219B: to=<cacheln@mail.glx>, relay=virtual, delay=0.14,
  delays=0.06/0.03/0/0.06, dsn=2.0.0, status=sent (delivered to maildir)
Feb 11 13:53:00 alice postfix/qmgr[2140]: 3DA0746219B: removed
Feb 11 13:53:00 alice postfix/smtp[2898]: EF5B7462125: to=<cacheln@mail.glx>, relay=127.0.0.1[127.0.0.1]:10024, delay=0.45,
  delays=0.06/0.01/0.01/0.37, dsn=2.0.0, status=sent (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as
  3DA0746219B)
Feb 11 13:53:00 alice postfix/qmgr[2140]: EF5B7462125: removed
 
* Le message n'a pas été scanné, aucun score ''(Hits)'' n'apparaît. Il est déclaré automatiquement comme sain ''(Passed CLEAN)'' alors qu'il aurait du être identifié comme '''spam'''.
 
=== Notifications destinataire ===
 
'''Amavis''' peut fournir une notification lorsqu'un message est déclaré positif aux tests d'analyses. Ce type de comportement est utile lorsque '''Amavis''' est configuré pour ne pas relayer le message jusqu'à la boîte du destinataire. Ainsi, ce dernier est informé qu'un message non sollicité ou dangereux a été supprimé.
 
==== Notification rejet virus ====
 
* On peut informer le destinataire qu'un courriel lui étant destiné a été supprimé car il contenait un virus. Pour cela, on va activer le paramètre '''warnvirusrecip'''. La configuration de la notification intervient au niveau de la table '''policy'''. Nous allons configurer la notification pour les enregistrements nommés '''Tous''' et '''Anti-Virus'''. En effet, dans les autres cas l'analyse anti-virus n'a pas lieu.
 
UPDATE `courriel`.`policy` SET `warnvirusrecip` = 'Y' WHERE `policy`.`id` =1;
UPDATE `courriel`.`policy` SET `warnvirusrecip` = 'Y' WHERE `policy`.`id` =2;
 
* Nous activons le paramètre '''warnvirusrecip''' en lui affectant la valeur '''Y''' au lieu de '''''NULL'''''.
 
==== Notification rejet pièce jointe ====
 
* On peut informer le destinataire qu'un courriel lui étant destiné a été supprimé car il contenait une pièce jointe non autorisée. Pour cela, on va activer le paramètre '''warnbannedrecip'''. La configuration de la notification intervient au niveau de la table '''policy'''. Nous allons configurer la notification pour les enregistrements nommés '''Tous''', '''Anti-Virus''' et '''Anti-Spam'''.
 
UPDATE `courriel`.`policy` SET `warnbannedrecip` = 'Y' WHERE `policy`.`id` =1;
UPDATE `courriel`.`policy` SET `warnbannedrecip` = 'Y' WHERE `policy`.`id` =2;
UPDATE `courriel`.`policy` SET `warnbannedrecip` = 'Y' WHERE `policy`.`id` =3;
 
* Nous activons le paramètre '''warnbannedrecip''' en lui affectant la valeur '''Y''' au lieu de '''''NULL'''''.
 
==== Notification en-têtes invalides ====
 
* On peut informer le destinataire qu'un courriel lui étant destiné a été supprimé car il contenait des en-têtes invalides. Pour cela, on va activer le paramètre '''warnbadhrecip'''. La configuration de la notification intervient au niveau de la table '''policy'''. Nous allons configurer la notification pour les enregistrements nommés '''Tous''', '''Anti-Virus''' et '''Anti-Spam'''.
 
UPDATE `courriel`.`policy` SET `warnbadhrecip` = 'Y' WHERE `policy`.`id` =1;
UPDATE `courriel`.`policy` SET `warnbadhrecip` = 'Y' WHERE `policy`.`id` =2;
UPDATE `courriel`.`policy` SET `warnbadhrecip` = 'Y' WHERE `policy`.`id` =3;
 
* Nous activons le paramètre '''warnbadhrecip''' en lui affectant la valeur '''Y''' au lieu de '''''NULL'''''.
 
=== Enregistrer les métadonnées des mails traités ===
 
'''Amavis''' peut enregistrer les métadonnées sur les mails qu'il traite. Ces métadonnée donnent des indications sur le résultat du traitement des mails ainsi que leur provenance. Ces informations sont réparties dans trois tables.
 
==== Création des tables ====
 
* La table '''maddr''' contient la liste des adresses '''émetteur''' et '''destinataire''' qui ont échangé des messages.
 
CREATE TABLE maddr (
  partition_tag integer  DEFAULT 0,  -- see $sql_partition_tag
  id        bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  email      varbinary(255) NOT NULL,  -- adresse mail complète
  domain    varchar(255)  NOT NULL,  -- domaine de messagerie
                                      -- écrit à l'envers : extension.domaine
  CONSTRAINT part_email UNIQUE (partition_tag,email)
) ENGINE=InnoDB;
 
* La table '''msgrcpt''' contient les '''résultats d'analyse''' de chacun des messages.
 
CREATE TABLE msgrcpt (
  partition_tag integer    DEFAULT 0,    -- see $sql_partition_tag
  mail_id    varbinary(12) NOT NULL,    -- (doublons possibles)
  rseqnum    integer  DEFAULT 0  NOT NULL, -- recip's enumeration within msg
  rid        bigint unsigned NOT NULL,  -- émetteur: maddr.id (dupl. allowed)
  is_local  char(1)  DEFAULT ' ' NOT NULL, -- recip is: Y=local, N=foreign
  content    char(1)  DEFAULT ' ' NOT NULL, -- content type V/B/U/S/Y/M/H/O/T/C
  ds        char(1)      NOT NULL,    -- résultat du traitement: P/R/B/D/T
                                        -- pass/reject/bounce/discard/tempfail
  rs        char(1)      NOT NULL,    -- release status: initilisé à ' '
  bl        char(1)      DEFAULT ' ',  -- émetteur blacklisted par ce destinataire
  wl        char(1)      DEFAULT ' ',  -- émetteur whitelisted par ce destinataire
  bspam_level float,                    -- score analyse spam + per-recip boost
  smtp_resp  varchar(255)  DEFAULT '',  -- réponse SMTP transmise au MTA
  FOREIGN KEY (rid)    REFERENCES maddr(id)    ON DELETE RESTRICT,
  FOREIGN KEY (mail_id) REFERENCES msgs(mail_id) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE INDEX msgrcpt_idx_mail_id  ON msgrcpt (mail_id);
CREATE INDEX msgrcpt_idx_rid      ON msgrcpt (rid);
 
* La table msgs contient des données plus précise sur le message comme sa '''provenance''', l''''objet''', l''''émetteur''' et le '''destinataire''' ainsi que son '''numéro de file''' dans '''Postfix'''.
 
CREATE TABLE msgs (
  partition_tag integer    DEFAULT 0,  -- see $sql_partition_tag
  mail_id    varbinary(12) NOT NULL PRIMARY KEY,  -- ID mail pour Amavis
  secret_id  varbinary(12)  DEFAULT '',  -- authorizes release of mail_id
  am_id      varchar(20)  NOT NULL,    -- ID des logs se rapportant à l'analyse
  time_num  integer unsigned NOT NULL, -- rx_time: basé sur timestamp UNIX
  time_iso  char(16)      NOT NULL,    -- rx_time: basé sur ISO8601 UTC ascii time
  sid        bigint unsigned NOT NULL, -- émetteur: maddr.id
  policy    varchar(255)  DEFAULT '',  -- policy bank path (like macro %p)
  client_addr varchar(255) DEFAULT '',  -- Adresse IP du client SMTP (IPv4 or v6)
  size      integer unsigned NOT NULL, -- Taille du message en bytes
  content    binary(1),                -- Type de contenu: V/B/S/s/M/H/O/C:
    -- virus/banned/spam(kill)/spammy(tag2)/bad-mime/bad-header/oversized/clean
    -- is NULL on partially processed mail
    -- Sensibilité à la casse ('S' != 's') effectuer une recherche sql en binaire/BINARY
  quar_type  binary(1),                -- mise en quarantaine dans: ' '/F/Z/B/Q/M/L
                                        --  none/file/zipfile/bsmtp/sql/
                                        --  /mailbox(smtp)/mailbox(lmtp)
  quar_loc  varbinary(255) DEFAULT '', -- localisation en quarantaine (c.f. file)
  dsn_sent  char(1),                  -- was DSN sent? Y/N/q (q=quenched)
  spam_level float,                    -- SA résultat scan spam (no boosts)
  message_id varchar(255)  DEFAULT '',  -- Message-ID contenu dans le champs d'en-tête du mail
  from_addr  varchar(255)  DEFAULT '',  -- From contenu dans le champs d'en-tête du mail
  subject    varchar(255)  DEFAULT '',  -- Subject contenu dans le champs d'en-tête du mai
  host      varchar(255)  NOT NULL,    -- Nom d'hôte courant de Amavis
  FOREIGN KEY (sid) REFERENCES maddr(id) ON DELETE RESTRICT
) ENGINE=InnoDB;
CREATE INDEX msgs_idx_sid      ON msgs (sid);
CREATE INDEX msgs_idx_mess_id  ON msgs (message_id);
CREATE INDEX msgs_idx_time_num ON msgs (time_num);
 
==== Activation du module ====
 
* Pour pouvoir activer le module, il faut ajouter la ligne suivante dans le fichier '''/etc/amavis/conf.d/50-user''' juste en dessous du paramètre  '''@lookup_sql_dsn''' :
 
  @storage_sql_dsn = @lookup_sql_dsn;
 
* Si les tables sont crées dans une base différentes, alors il faudra redéfinir le paramètre comme tel :
 
  @storage_sql_dsn = ( ['DBI:mysql:database=postfix2;host=10.0.0.47;port=3306', 'postfix2', 'motdepassebasemysqlpourpostfix']);
 
* On redémarrer le service '''Amavis''' pour appliquer la configuration :
 
{{ Box Console | objet=service amavis restart}}
 
=== Enregistrer les mails en quarantaines ===
 
Les mails placés en quarantaine sont par défaut répartis dans le dossier '''/var/lib/amavis/virusmails'''. Cependant, il est possible de les saisir automatiquement dans la base de données et de les consulter pendant leur quarantaine.
 
==== Création des tables ====
 
* Les messages placés en quarantaine lorsqu'ils sont positifs aux tests ''(spam et/ou virus)'' sont sauvegardés dans la table '''quarantine'''.
 
CREATE TABLE quarantine (
  partition_tag integer    DEFAULT 0,    -- see $sql_partition_tag
  mail_id    varbinary(12) NOT NULL,    -- ID du mail
  chunk_ind  integer unsigned NOT NULL,  -- chunk number, starting with 1
  mail_text  blob          NOT NULL,    -- sauvegarde du mail
  PRIMARY KEY (mail_id,chunk_ind),
  FOREIGN KEY (mail_id) REFERENCES msgs(mail_id) ON DELETE CASCADE
) ENGINE=InnoDB;
 
==== Activation du module ====
 
* A la fin du fichier '''/etc/amavis/conf.d/50-user''' il faut ajouter les lignes suivantes :
 
$virus_quarantine_method = 'sql:';
$spam_quarantine_method = 'sql:';
$banned_files_quarantine_method = 'sql:';
$bad_header_quarantine_method = 'sql:';
 
* On redémarrer le service '''Amavis''' pour appliquer la configuration :
 
{{ Box Console | objet=service amavis restart}}


[[Category:Serveur de Messagerie]]
[[Category:Serveur de Messagerie]]
==== Validation ====
* Pour voir si le module '''Sql/Quarantine''' est activé, il suffit de regarder dans les logs mails '''''(/var/log/mail.log)''''' après l'initialisation de '''Amavis'''. On y remarquera les lignes suivantes :
Feb 11 12:32:07 alice amavis[2802]: SQL base code        <font color=darkgreen>loaded</font>
Feb 11 12:32:07 alice amavis[2802]: SQL::Log code        <font color=darkgreen>loaded</font>
Feb 11 12:32:07 alice amavis[2802]: SQL::Quarantine      <font color=lightgreen>loaded</font>
=== Relai SMTP entrant ===
* Si le serveur de messagerie effectue du '''relayage SMTP''' pour un ou plusieurs nom de domaine de messagerie, '''Amavis''' peut analyser les messages de ces domaines en transit sur le serveur. Par défaut, '''Amavis''' n'analyse pas ces messages et dans les logs on peut observer le comportement suivant :
Feb  8 15:05:55 jarode amavis[12753]: (12753-04) <font style='color:red;font-family:cursive'>Passed SPAM {RelayedOpenRelay}</font>,
[10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> -> <postmaster@cachelou.ovh>,
Message-ID: <CA+poKf7-qj4BgEAmFGZv4cqPYnvwa-uKnZtD2_2DBp0L2qGGNw@ncad.me>,
mail_id: acHkm9npRSFG, Hits: 1001.739, size: 2185, queued_as: DDC653AA, 4460 ms
* Dans l'exemple ci-dessus, le domaine relayé par notre serveur de messagerie est '''cachelou.ovh'''. Tous d'abord, il faut déclarer ce domaine dans la table des domaines locaux de '''Amavis'''. Pour cela, il faut renseigner le nom de domaine dans le paramètre '''$local_domains_maps''' comme ceci :
@local_domains_maps = ['mail.glx', 'cachelou.ovh'];
* Pour appliquer ces modifications, il faut redémarrer le démon '''Amavis'''.
{{ Box Console | objet=service amavis restart }}
* Maintenant, il faut ajouter une entrée dans table '''users''' pour activer le filtrage :
INSERT INTO `amavis`.`users` (
  `id` ,
  `priority` ,
  `policy_id` ,
  `email` ,
  `fullname` ,
  `local`
)
VALUES (
  NULL , '7', '1', 'cachelou.ovh', 'Domaine relayé', NULL
);
* Nous effectuons un nouveau test pour valider le fonctionnement du dispositif : on procède à l'envoi d'un mail depuis l'adresse '''nicolas.cachelou@ncad.me''' et à destination de '''postmaster@cachelou.ovh'''. Voici ce qu'on observe dans '''/var/log/mail.log''' :
Feb  8 15:14:50 jarode amavis[11337]: (11337-09) <font style='color:green;font-family:cursive'>Passed SPAM {RelayedTaggedInbound}</font>,
[10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> -> <postmaster@cachelou.ovh>,
Message-ID: <CA+poKf7X+d5s-m8W-7u6ozpGfEASD2RX1cV4WiLcOj1RfC-nwA@ncad.me>,
mail_id: YaJPZgIaf4Ae, Hits: 1001.739, size: 2180, queued_as: C0CEF3AA, 4402 ms

Dernière version du 8 février 2015 à 16:23

.:[ 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
Amavis Logo.gif

Prérequis

Il est nécessaire de disposer d'un serveur de mails basé sur Postfix fonctionnel. Il est également nécessaire d'avoir installé le service Amavis ainsi que ClamAV et SpamAssassin. une base de données de type MySQL est également requise.

Amavis peut s'interfacer avec d'autre solutions logicielles mais elle ne seront pas abordées ici.

Amavis dispose d'un module qui permet de l'interfacer avec une base de données comme MySQL. On retrouve les fonctions suivantes :

  • liste blanche/noire;
  • priorisation des émetteurs;
  • activation/désactivation des filtres;
  • archivage des mails en quarantaine;
  • archivage des métadonnées des mails traités par Amavis.

Le serveur de mail Postfix gère la messagerie pour le domaine mail.glx et a comme adresse IP 10.0.0.44. Sur ce serveur est configuré le compte mail cacheln@mail.glx.

Le serveur de base de données MySQL est hébergé sur une autre machine qui a pour adresse IP 10.0.0.47. La base de données utilisée est postfix dont l'utilisateur postfix avec le mot de passe motdepassebasemysqlpourpostfix détient les permissions nécessaires pour agir sur la base.

Installation des tables

Création des tables

La documentation complète ainsi que la structure des tables sont décrites dans les fichiers /usr/share/doc/amavisd-new/README.sql.gz et /usr/share/doc/amavisd-new/README.sql-mysql.gz.

Les règles de filtrage

  • La table policy contient les règles de filtrage pour le spam et les virus (score, activation des divers filtres, tag des messages, avertir l'émetteur en cas d’échec, ...).
CREATE TABLE policy (
  id  int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
                                    -- 'id' this is the _only_ required field
  policy_name      varchar(32),     -- non utilisé par amavisd-new, à titre de commentaire

  virus_lover          char(1) default NULL,     -- Y/N / Ignorer l'analyse des virus
  spam_lover           char(1) default NULL,     -- Y/N / Ignorer l'analyse des spams
  banned_files_lover   char(1) default NULL,     -- Y/N / Ignorer l'analyse des pièces jointes
  bad_header_lover     char(1) default NULL,     -- Y/N / Ignorer l'analyse des en-têtes mails

  bypass_virus_checks  char(1) default NULL,     -- Y/N / Désactivation anti-virus
  bypass_spam_checks   char(1) default NULL,     -- Y/N / Désactivation anti-spam
  bypass_banned_checks char(1) default NULL,     -- Y/N / Désactivation contrôle pièce jointe
  bypass_header_checks char(1) default NULL,     -- Y/N / Désactivation contrôle en-tête mail

  spam_modifies_subj   char(1) default NULL,     -- Y/N / Modification de l'objet pour les spams

  virus_quarantine_to      varchar(64) default NULL,
  spam_quarantine_to       varchar(64) default NULL,
  banned_quarantine_to     varchar(64) default NULL,
  bad_header_quarantine_to varchar(64) default NULL,
  clean_quarantine_to      varchar(64) default NULL,
  other_quarantine_to      varchar(64) default NULL,

  spam_tag_level  float default NULL, -- Score à partir duquel l'analyse Spam est tagué dans l'en-tête mail
  spam_tag2_level float default NULL, -- Score à partir duquel le mail est tagué comme Spam
  spam_kill_level float default NULL, -- Score à partir duquel le mail est supprimé
                                      -- C.f. reject/drop, quarantine, ...
                                     -- (fonction du paramètre final_spam_destiny)
  spam_dsn_cutoff_level        float default NULL, -- Score à partir duquel l'expéditeur n'est pas prévenu
                                                   -- que son mail est traité comme du spam
  spam_quarantine_cutoff_level float default NULL, -- Score à partir duquel le mail est effacé sans mise en quarantaine

  addr_extension_virus      varchar(64) default NULL,
  addr_extension_spam       varchar(64) default NULL,
  addr_extension_banned     varchar(64) default NULL,
  addr_extension_bad_header varchar(64) default NULL,

  warnvirusrecip      char(1)     default NULL, -- Y/N / Avertir le destinataire en cas de mail traité comme virus
  warnbannedrecip     char(1)     default NULL, -- Y/N / Avertir le destinataire en cas de PJ bannie
  warnbadhrecip       char(1)     default NULL, -- Y/N / Avertir le destinataire en cas de mail traité comme mal formé
  newvirus_admin      varchar(64) default NULL,
  virus_admin         varchar(64) default NULL,
  banned_admin        varchar(64) default NULL,
  bad_header_admin    varchar(64) default NULL,
  spam_admin          varchar(64) default NULL,
  spam_subject_tag    varchar(64) default NULL,
  spam_subject_tag2   varchar(64) default NULL,
  message_size_limit  integer     default NULL, -- Taille maximale en bytes du mail, 0 pour désactiver
  banned_rulenames    varchar(64) default NULL  -- Liste des types de fichiers bannis séparés par une virgule
);
  • Nous allons définir quatre profil dans cette table. Le premier permettra de proposer tous les services de filtrage d'Amavis (Tous), le second uniquement l'analyse Anti-Virus (Anti-Virus), le troisième se sera uniquement l'analyse Anti-Spam (Anti-Spam) et dans le dernier profil il n'y aura aucunes analyses (Rien).
INSERT INTO `policy` (`id`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES
(NULL, 'Tous', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '*** SPAM *** ', NULL, NULL),
(NULL, 'Anti-Virus', 'N', 'N', 'N', 'N', 'N', 'Y', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'Y', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL),
(NULL, 'Anti-Spam', 'N', 'N', 'N', 'N', 'Y', 'N', 'Y', 'N', 'Y', NULL, NULL, NULL, NULL, NULL, NULL, 3, 5, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '*** SPAM *** ', NULL, NULL),
(NULL, 'Rien', 'N', 'N', 'N', 'N', 'Y', 'Y', 'Y', 'Y', 'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

Les utilisateurs

  • La table user contient la liste des utilisateurs ayant une boîte mail locale (Postfix). Elle sera consulter pour vérifier les préférences de l'utilisateur recevant un courriel - si elle existe.
CREATE TABLE users (
  id         int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,  -- unique id
  priority   integer      NOT NULL DEFAULT '7',  -- 0 étant la plus faible priorité.
  policy_id  integer unsigned NOT NULL DEFAULT '1',  -- N° de la règle policy (id) appliquée
  email      varbinary(255) NOT NULL UNIQUE,
  fullname   varchar(255) DEFAULT NULL,    -- Non utilisé par amavisd-new
  local      char(1)      -- Y/N  (optionnel)
);
  • Dans notre exemple, nous disposons sur Postfix de la boîte mail cacheln@mail.glx. Nous allons lui créer un enregistrement dans cette table :
INSERT INTO `users` (`id`, `priority`, `policy_id`, `email`, `fullname`, `local`) VALUES (NULL, 7, 1, 'cacheln@mail.glx', 'Nicolas Cachelou', NULL);
Nous avons affecté la policy_id numéro 1 pour que la boîte dispose d'une analyse complète de tous les mails qu'elle reçoit.

Les priorités

  • La table mailaddr contient les adresses ou domaines pour lesquels on souhaite définir une de priorité de traitement. Elle pourra également être appelée si l'on souhaite appliquer à ces adresses des règles de listage (c.f table wblist).
CREATE TABLE mailaddr (
  id         int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  priority   integer      NOT NULL DEFAULT '7',  -- 0 est la plus faible priorité
  email      varbinary(255) NOT NULL UNIQUE
);
Le contenu de cette table sera étudié dans la section [[]]

Les listes

  • La table wblist permet de blacklister ou whitelister une adresse émetteur (ou un domaine entier) définie dans la table mailaddr et appliqué pour le destinataire locale définit dans la table (users).
CREATE TABLE wblist (
  rid        integer unsigned NOT NULL,  -- destinataire: users.id
  sid        integer unsigned NOT NULL,  -- émetteur: mailaddr.id
  wb         varchar(10)  NOT NULL,  -- W ou Y / B ou N / espace=neutre / score
  PRIMARY KEY (rid,sid)
);
Le contenu de cette table sera étudié dans la section [[]]

Configuration de Amavis

  • Pour activer le module Sql dans Amavis, il faut insérer la ligne suivante dans le fichier /etc/amavis/conf.d/50-user:
 @lookup_sql_dsn = ( ['DBI:mysql:database=postfix;host=10.0.0.47;port=3306', 'postfix', 'motdepassebasemysqlpourpostfix']);
  • On redémarrer le service Amavis pour appliquer la configuration :

service amavis restart

Validation

  • Pour voir si le module Sql est activé, il suffit de regarder dans les logs mails (/var/log/mail.log) après l'initialisation de Amavis. On y remarquera les lignes suivantes :
Feb 11 12:32:07 alice amavis[2802]: SQL base code        loaded
Feb 11 12:32:07 alice amavis[2802]: SQL::Log code        loaded
Feb 11 12:32:07 alice amavis[2802]: SQL::Quarantine      NOT loaded

Fonctions & Comportements

Listes noires

Définition de l'émetteur

  • Nous souhaitons blacklister le domaine ncad.me. Tous les messages en provenance de ce nom de domaine seront tagués comme spam. Tous d'abord, nous allons déclarer le domaine dans la table mailaddr :
INSERT INTO `courriel`.`mailaddr` (
 `id` ,
 `priority` ,
 `email`
)
VALUES (
 NULL , '7', '@ncad.me'
);

Définition de la règle

  • Nous insérons donc l'enregistrement ayant pour id la valeur 1, comme priority nous indiquons 7 (valeur par défaut) et comme email nous renseignons le domaine ncad.me. Maintenant, nous allons associé ce domaine à une liste noir qui s'appliquera en réception sur la boîte mail de l'utilisateur cacheln@mail.glx.
INSERT INTO `courriel`.`wblist` (
 `rid` ,
 `sid` ,
 `wb`
)
VALUES (
 '1', '1', 'B'
);
  • Dans l'enregistrement ci-dessus, la valeur rid renferme l'id du compte mail local pour qui s'applique la règle. Il s'agit du compte mail cacheln@mail.glx ayant pour id la valeur 1 qui est déclarée dans la table user. La seconde valeur sid concerne l'id du domaine concerné par la règle et qui est déclaré dans la table mailaddr. Dans notre cas c'est le domaine ncad.me ayant pour id la valeur 1. Enfin le champ wb renseigne sur la nature de la liste : W pour liste blanche et B pour liste noire.

Validation

  • On Procède à l'envoi d'un mail depuis l'adresse nicolas.cachelou@ncad.me et à destination de cacheln@mail.glx. Voici ce qu'on observe dans /var/log/mail.log :
Feb 11 13:30:08 alice postfix/smtpd[2852]: connect from geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:30:08 alice postfix/smtpd[2852]: 2FAA0462125: client=geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:30:08 alice postfix/cleanup[2855]: 2FAA0462125: message-id=<e003a875ad1f6bf934b72d2148324d5d@ncad.me>
Feb 11 13:30:08 alice postfix/qmgr[2140]: 2FAA0462125: from=<nicolas.cachelou@ncad.me>, size=1568, nrcpt=1 (queue active)
Feb 11 13:30:08 alice postfix/smtpd[2852]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:30:08 alice postfix/smtpd[2847]: 6EA6B4621A8: client=localhost[127.0.0.1]
Feb 11 13:30:08 alice postfix/cleanup[2855]: 6EA6B4621A8: message-id=<e003a875ad1f6bf934b72d2148324d5d@ncad.me>
Feb 11 13:30:08 alice postfix/qmgr[2140]: 6EA6B4621A8: from=<nicolas.cachelou@ncad.me>, size=2244, nrcpt=1 (queue active)
Feb 11 13:30:08 alice postfix/smtpd[2847]: disconnect from localhost[127.0.0.1]
Feb 11 13:30:08 alice amavis[2804]: (02804-02) Passed SPAM, [10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> ->
  <cacheln@mail.glx>, quarantine: g/spam-gtarVQ0QDt4C.gz, Message-ID: <e003a875ad1f6bf934b72d2148324d5d@ncad.me>, mail_id:
  gtarVQ0QDt4C, Hits: -, size: 1568, queued_as: 6EA6B4621A8, 284 ms
Feb 11 13:30:08 alice postfix/virtual[2863]: 6EA6B4621A8: to=<cacheln@mail.glx>, relay=virtual, delay=0.09,
  delays=0.04/0.01/0/0.04, dsn=2.0.0, status=sent (delivered to maildir)
Feb 11 13:30:08 alice postfix/qmgr[2140]: 6EA6B4621A8: removed
Feb 11 13:30:08 alice postfix/smtp[2856]: 2FAA0462125: to=<cacheln@mail.glx>, relay=127.0.0.1[127.0.0.1]:10024, delay=0.36,
  delays=0.03/0/0.01/0.32, dsn=2.0.0, status=sent (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as
  6EA6B4621A8)
Feb 11 13:30:08 alice postfix/qmgr[2140]: 2FAA0462125: removed
  • Le message est bien identifié comme du spam suite au blacklistage. On remarque qu'aucun score n'apparaît, Amavis n'a pas consulté SpamAssassin, il a automatiquement tagué le message comme spam.

Listes blanches

Définition de l'émetteur

  • Nous souhaitons whitelister le domaine ncad.me. Tous les messages en provenance de ce nom de domaine seront ignorés par les analyses spam et anti-virus. Tous d'abord, nous allons déclarer le domaine dans la table mailaddr :
INSERT INTO `courriel`.`mailaddr` (
 `id` ,
 `priority` ,
 `email`
)
VALUES (
 NULL , '7', '@ncad.me'
);

Définition de la règle

  • Nous insérons donc l'enregistrement ayant pour id la valeur 1, comme priority nous indiquons 7 (valeur par défaut) et comme email nous renseignons le domaine ncad.me. Maintenant, nous allons associé ce domaine à une liste noir qui s'appliquera en réception sur la boîte mail de l'utilisateur cacheln@mail.glx.
INSERT INTO `courriel`.`wblist` (
 `rid` ,
 `sid` ,
 `wb`
)
VALUES (
 '1', '1', 'B'
);
  • Dans l'enregistrement ci-dessus, la valeur rid renferme l'id du compte mail local pour qui s'applique la règle. Il s'agit du compte mail cacheln@mail.glx ayant pour id la valeur 1 qui est déclarée dans la table user. La seconde valeur sid concerne l'id du domaine concerné par la règle et qui est déclaré dans la table mailaddr. Dans notre cas c'est le domaine ncad.me ayant pour id la valeur 1. Enfin le champ wb renseigne sur la nature de la liste : W pour liste blanche et B pour liste noire.

Validation

  • Pour tester le comportement de Amavis, on va répéter le test qui a été appliqué ICI. On va envoyé un mail de nicolas.cachelou@ncad.me vers cacheln@mail.glx qui doit normalement être détecté comme spam. Pour cela, dans le corps du message on insèrera la ligne suivante :
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
  • Vérifions les logs enregistrés dans /var/log/mail.log :
Feb 11 13:52:59 alice postfix/smtpd[2892]: connect from geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:52:59 alice postfix/smtpd[2892]: EF5B7462125: client=geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:53:00 alice postfix/cleanup[2897]: EF5B7462125: message-id=<765d57b3f3561b4a8a7aaaade291cb55@ncad.me>
Feb 11 13:53:00 alice postfix/qmgr[2140]: EF5B7462125: from=<nicolas.cachelou@ncad.me>, size=1696, nrcpt=1 (queue active)
Feb 11 13:53:00 alice postfix/smtpd[2892]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
Feb 11 13:53:00 alice postfix/smtpd[2901]: connect from localhost[127.0.0.1]
Feb 11 13:53:00 alice postfix/smtpd[2901]: 3DA0746219B: client=localhost[127.0.0.1]
Feb 11 13:53:00 alice postfix/cleanup[2897]: 3DA0746219B: message-id=<765d57b3f3561b4a8a7aaaade291cb55@ncad.me>
Feb 11 13:53:00 alice postfix/qmgr[2140]: 3DA0746219B: from=<nicolas.cachelou@ncad.me>, size=2110, nrcpt=1 (queue active)
Feb 11 13:53:00 alice postfix/smtpd[2901]: disconnect from localhost[127.0.0.1]
Feb 11 13:53:00 alice amavis[2805]: (02805-02) Passed CLEAN, [10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> ->
  <cacheln@mail.glx>, Message-ID: <765d57b3f3561b4a8a7aaaade291cb55@ncad.me>, mail_id: sAO9urled0rX, Hits: -, size: 1696,
  queued_as: 3DA0746219B, 282 ms
Feb 11 13:53:00 alice postfix/virtual[2903]: 3DA0746219B: to=<cacheln@mail.glx>, relay=virtual, delay=0.14,
  delays=0.06/0.03/0/0.06, dsn=2.0.0, status=sent (delivered to maildir)
Feb 11 13:53:00 alice postfix/qmgr[2140]: 3DA0746219B: removed
Feb 11 13:53:00 alice postfix/smtp[2898]: EF5B7462125: to=<cacheln@mail.glx>, relay=127.0.0.1[127.0.0.1]:10024, delay=0.45,
  delays=0.06/0.01/0.01/0.37, dsn=2.0.0, status=sent (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as
  3DA0746219B)
Feb 11 13:53:00 alice postfix/qmgr[2140]: EF5B7462125: removed
  • Le message n'a pas été scanné, aucun score (Hits) n'apparaît. Il est déclaré automatiquement comme sain (Passed CLEAN) alors qu'il aurait du être identifié comme spam.

Notifications destinataire

Amavis peut fournir une notification lorsqu'un message est déclaré positif aux tests d'analyses. Ce type de comportement est utile lorsque Amavis est configuré pour ne pas relayer le message jusqu'à la boîte du destinataire. Ainsi, ce dernier est informé qu'un message non sollicité ou dangereux a été supprimé.

Notification rejet virus

  • On peut informer le destinataire qu'un courriel lui étant destiné a été supprimé car il contenait un virus. Pour cela, on va activer le paramètre warnvirusrecip. La configuration de la notification intervient au niveau de la table policy. Nous allons configurer la notification pour les enregistrements nommés Tous et Anti-Virus. En effet, dans les autres cas l'analyse anti-virus n'a pas lieu.
UPDATE `courriel`.`policy` SET `warnvirusrecip` = 'Y' WHERE `policy`.`id` =1;
UPDATE `courriel`.`policy` SET `warnvirusrecip` = 'Y' WHERE `policy`.`id` =2;
  • Nous activons le paramètre warnvirusrecip en lui affectant la valeur Y au lieu de NULL.

Notification rejet pièce jointe

  • On peut informer le destinataire qu'un courriel lui étant destiné a été supprimé car il contenait une pièce jointe non autorisée. Pour cela, on va activer le paramètre warnbannedrecip. La configuration de la notification intervient au niveau de la table policy. Nous allons configurer la notification pour les enregistrements nommés Tous, Anti-Virus et Anti-Spam.
UPDATE `courriel`.`policy` SET `warnbannedrecip` = 'Y' WHERE `policy`.`id` =1;
UPDATE `courriel`.`policy` SET `warnbannedrecip` = 'Y' WHERE `policy`.`id` =2;
UPDATE `courriel`.`policy` SET `warnbannedrecip` = 'Y' WHERE `policy`.`id` =3;
  • Nous activons le paramètre warnbannedrecip en lui affectant la valeur Y au lieu de NULL.

Notification en-têtes invalides

  • On peut informer le destinataire qu'un courriel lui étant destiné a été supprimé car il contenait des en-têtes invalides. Pour cela, on va activer le paramètre warnbadhrecip. La configuration de la notification intervient au niveau de la table policy. Nous allons configurer la notification pour les enregistrements nommés Tous, Anti-Virus et Anti-Spam.
UPDATE `courriel`.`policy` SET `warnbadhrecip` = 'Y' WHERE `policy`.`id` =1;
UPDATE `courriel`.`policy` SET `warnbadhrecip` = 'Y' WHERE `policy`.`id` =2;
UPDATE `courriel`.`policy` SET `warnbadhrecip` = 'Y' WHERE `policy`.`id` =3;
  • Nous activons le paramètre warnbadhrecip en lui affectant la valeur Y au lieu de NULL.

Enregistrer les métadonnées des mails traités

Amavis peut enregistrer les métadonnées sur les mails qu'il traite. Ces métadonnée donnent des indications sur le résultat du traitement des mails ainsi que leur provenance. Ces informations sont réparties dans trois tables.

Création des tables

  • La table maddr contient la liste des adresses émetteur et destinataire qui ont échangé des messages.
CREATE TABLE maddr (
  partition_tag integer   DEFAULT 0,   -- see $sql_partition_tag
  id         bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  email      varbinary(255) NOT NULL,  -- adresse mail complète
  domain     varchar(255)   NOT NULL,  -- domaine de messagerie
                                      -- écrit à l'envers : extension.domaine
  CONSTRAINT part_email UNIQUE (partition_tag,email)
) ENGINE=InnoDB;
  • La table msgrcpt contient les résultats d'analyse de chacun des messages.
CREATE TABLE msgrcpt (
  partition_tag integer    DEFAULT 0,    -- see $sql_partition_tag
  mail_id    varbinary(12) NOT NULL,     -- (doublons possibles)
  rseqnum    integer  DEFAULT 0   NOT NULL, -- recip's enumeration within msg
  rid        bigint unsigned NOT NULL,   -- émetteur: maddr.id (dupl. allowed)
  is_local   char(1)  DEFAULT ' ' NOT NULL, -- recip is: Y=local, N=foreign
  content    char(1)  DEFAULT ' ' NOT NULL, -- content type V/B/U/S/Y/M/H/O/T/C
  ds         char(1)       NOT NULL,     -- résultat du traitement: P/R/B/D/T
                                        -- pass/reject/bounce/discard/tempfail
  rs         char(1)       NOT NULL,     -- release status: initilisé à ' '
  bl         char(1)       DEFAULT ' ',  -- émetteur blacklisted par ce destinataire
  wl         char(1)       DEFAULT ' ',  -- émetteur whitelisted par ce destinataire
  bspam_level float,                     -- score analyse spam + per-recip boost
  smtp_resp  varchar(255)  DEFAULT ,   -- réponse SMTP transmise au MTA
  FOREIGN KEY (rid)     REFERENCES maddr(id)     ON DELETE RESTRICT,
  FOREIGN KEY (mail_id) REFERENCES msgs(mail_id) ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE INDEX msgrcpt_idx_mail_id  ON msgrcpt (mail_id);
CREATE INDEX msgrcpt_idx_rid      ON msgrcpt (rid);
  • La table msgs contient des données plus précise sur le message comme sa provenance, l'objet, l'émetteur et le destinataire ainsi que son numéro de file dans Postfix.
CREATE TABLE msgs (
  partition_tag integer    DEFAULT 0,   -- see $sql_partition_tag
  mail_id    varbinary(12) NOT NULL PRIMARY KEY,  -- ID mail pour Amavis
  secret_id  varbinary(12)   DEFAULT ,  -- authorizes release of mail_id
  am_id      varchar(20)   NOT NULL,    -- ID des logs se rapportant à l'analyse
  time_num   integer unsigned NOT NULL, -- rx_time: basé sur timestamp UNIX
  time_iso   char(16)      NOT NULL,    -- rx_time: basé sur ISO8601 UTC ascii time
  sid        bigint unsigned NOT NULL, -- émetteur: maddr.id
  policy     varchar(255)  DEFAULT ,  -- policy bank path (like macro %p)
  client_addr varchar(255) DEFAULT ,  -- Adresse IP du client SMTP (IPv4 or v6)
  size       integer unsigned NOT NULL, -- Taille du message en bytes
  content    binary(1),                 -- Type de contenu: V/B/S/s/M/H/O/C:
    -- virus/banned/spam(kill)/spammy(tag2)/bad-mime/bad-header/oversized/clean
    -- is NULL on partially processed mail
    -- Sensibilité à la casse ('S' != 's') effectuer une recherche sql en binaire/BINARY
  quar_type  binary(1),                 -- mise en quarantaine dans: ' '/F/Z/B/Q/M/L
                                        --  none/file/zipfile/bsmtp/sql/
                                        --  /mailbox(smtp)/mailbox(lmtp)
  quar_loc   varbinary(255) DEFAULT , -- localisation en quarantaine (c.f. file)
  dsn_sent   char(1),                   -- was DSN sent? Y/N/q (q=quenched)
  spam_level float,                     -- SA résultat scan spam (no boosts)
  message_id varchar(255)  DEFAULT ,  -- Message-ID contenu dans le champs d'en-tête du mail
  from_addr  varchar(255)  DEFAULT ,  -- From contenu dans le champs d'en-tête du mail
  subject    varchar(255)  DEFAULT ,  -- Subject contenu dans le champs d'en-tête du mai
  host       varchar(255)  NOT NULL,    -- Nom d'hôte courant de Amavis
  FOREIGN KEY (sid) REFERENCES maddr(id) ON DELETE RESTRICT
) ENGINE=InnoDB;
CREATE INDEX msgs_idx_sid      ON msgs (sid);
CREATE INDEX msgs_idx_mess_id  ON msgs (message_id);
CREATE INDEX msgs_idx_time_num ON msgs (time_num);

Activation du module

  • Pour pouvoir activer le module, il faut ajouter la ligne suivante dans le fichier /etc/amavis/conf.d/50-user juste en dessous du paramètre @lookup_sql_dsn :
 @storage_sql_dsn = @lookup_sql_dsn;
  • Si les tables sont crées dans une base différentes, alors il faudra redéfinir le paramètre comme tel :
 @storage_sql_dsn = ( ['DBI:mysql:database=postfix2;host=10.0.0.47;port=3306', 'postfix2', 'motdepassebasemysqlpourpostfix']);
  • On redémarrer le service Amavis pour appliquer la configuration :

service amavis restart

Enregistrer les mails en quarantaines

Les mails placés en quarantaine sont par défaut répartis dans le dossier /var/lib/amavis/virusmails. Cependant, il est possible de les saisir automatiquement dans la base de données et de les consulter pendant leur quarantaine.

Création des tables

  • Les messages placés en quarantaine lorsqu'ils sont positifs aux tests (spam et/ou virus) sont sauvegardés dans la table quarantine.
CREATE TABLE quarantine (
  partition_tag integer    DEFAULT 0,    -- see $sql_partition_tag
  mail_id    varbinary(12) NOT NULL,     -- ID du mail
  chunk_ind  integer unsigned NOT NULL,  -- chunk number, starting with 1
  mail_text  blob          NOT NULL,     -- sauvegarde du mail
  PRIMARY KEY (mail_id,chunk_ind),
  FOREIGN KEY (mail_id) REFERENCES msgs(mail_id) ON DELETE CASCADE
) ENGINE=InnoDB;

Activation du module

  • A la fin du fichier /etc/amavis/conf.d/50-user il faut ajouter les lignes suivantes :
$virus_quarantine_method = 'sql:';
$spam_quarantine_method = 'sql:';
$banned_files_quarantine_method = 'sql:';
$bad_header_quarantine_method = 'sql:';
  • On redémarrer le service Amavis pour appliquer la configuration :

service amavis restart

Validation

  • Pour voir si le module Sql/Quarantine est activé, il suffit de regarder dans les logs mails (/var/log/mail.log) après l'initialisation de Amavis. On y remarquera les lignes suivantes :
Feb 11 12:32:07 alice amavis[2802]: SQL base code        loaded
Feb 11 12:32:07 alice amavis[2802]: SQL::Log code        loaded
Feb 11 12:32:07 alice amavis[2802]: SQL::Quarantine      loaded

Relai SMTP entrant

  • Si le serveur de messagerie effectue du relayage SMTP pour un ou plusieurs nom de domaine de messagerie, Amavis peut analyser les messages de ces domaines en transit sur le serveur. Par défaut, Amavis n'analyse pas ces messages et dans les logs on peut observer le comportement suivant :
Feb  8 15:05:55 jarode amavis[12753]: (12753-04) Passed SPAM {RelayedOpenRelay},
[10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> -> <postmaster@cachelou.ovh>,
Message-ID: <CA+poKf7-qj4BgEAmFGZv4cqPYnvwa-uKnZtD2_2DBp0L2qGGNw@ncad.me>,
mail_id: acHkm9npRSFG, Hits: 1001.739, size: 2185, queued_as: DDC653AA, 4460 ms
  • Dans l'exemple ci-dessus, le domaine relayé par notre serveur de messagerie est cachelou.ovh. Tous d'abord, il faut déclarer ce domaine dans la table des domaines locaux de Amavis. Pour cela, il faut renseigner le nom de domaine dans le paramètre $local_domains_maps comme ceci :
@local_domains_maps = ['mail.glx', 'cachelou.ovh'];
  • Pour appliquer ces modifications, il faut redémarrer le démon Amavis.

service amavis restart

  • Maintenant, il faut ajouter une entrée dans table users pour activer le filtrage :
INSERT INTO `amavis`.`users` (
 `id` ,
 `priority` ,
 `policy_id` ,
 `email` ,
 `fullname` ,
 `local`
)
VALUES (
 NULL , '7', '1', 'cachelou.ovh', 'Domaine relayé', NULL
);
  • Nous effectuons un nouveau test pour valider le fonctionnement du dispositif : on procède à l'envoi d'un mail depuis l'adresse nicolas.cachelou@ncad.me et à destination de postmaster@cachelou.ovh. Voici ce qu'on observe dans /var/log/mail.log :
Feb  8 15:14:50 jarode amavis[11337]: (11337-09) Passed SPAM {RelayedTaggedInbound},
[10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> -> <postmaster@cachelou.ovh>,
Message-ID: <CA+poKf7X+d5s-m8W-7u6ozpGfEASD2RX1cV4WiLcOj1RfC-nwA@ncad.me>,
mail_id: YaJPZgIaf4Ae, Hits: 1001.739, size: 2180, queued_as: C0CEF3AA, 4402 ms