« Amavis MySQL » : différence entre les versions

De NCad Wiki
Aller à la navigation Aller à la recherche
Ligne 22 : Ligne 22 :
{{ 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 31 :
   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 50 :
   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 64 :
   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 74 :
   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
  );
  );


* 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.
* 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 mailaddr (
  CREATE TABLE users (
   id        int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
   id        int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY, -- unique id
   priority  integer      NOT NULL DEFAULT '7',  -- 0 est la plus faible priorité
   priority  integer      NOT NULL DEFAULT '7',  -- 0 étant la plus faible priorité.
   email      varbinary(255) NOT NULL UNIQUE
  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);
{{ 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. }}


* 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)''.
* 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)''.
Ligne 102 : Ligne 112 :
   wb        varchar(10)  NOT NULL,  -- W ou Y / B ou N / espace=neutre / score
   wb        varchar(10)  NOT NULL,  -- W ou Y / B ou N / espace=neutre / score
   PRIMARY KEY (rid,sid)
   PRIMARY KEY (rid,sid)
);
* 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.
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
  );
  );



Version du 11 février 2014 à 12:00

.:[ 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

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.

Les fonctions de cette bases seront les suivantes :

  • liste blanche/noire;
  • priorisation des émetteurs;
  • activation/désactivation des filtres;
  • archivage des messages en quarantaine;
  • archivage des messages traités par Amavis

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.

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.
  • 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).
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)
);
  • 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.
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
);

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:
 @lookup_sql_dsn = ( ['DBI:mysql:database=postfix;host=10.0.0.47;port=3306', 'postfix', 'motdepassebasemysqlpourpostfix']);
 @storage_sql_dsn = @lookup_sql_dsn;

Validation

Fonctions & Comportements

Listes noirs

Listes blanches

Règles de filtrage

Tag des SPAM

Notifications en cas de virus