Amavis MySQL
.:[ Serveur de Messagerie ]:.
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
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. |
Dans notre configuration de Postfix nous disposons de la boîte locale cacheln@mail.glx. Nous disposons aussi d'une boîte externe nicolas.cachelou@ncad.me pour effectuer les divers tests de réception.
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. |
Priorité
- 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 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;