« Amavis » : différence entre les versions

De NCad Wiki
Aller à la navigation Aller à la recherche
Ligne 65 : Ligne 65 :


{{ Box Remarque | objet=/usr/share/doc/amavisd-new/README.sql.gz et /usr/share/doc/amavisd-new/README.sql-mysql.gz}}
{{ Box Remarque | objet=/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.


  CREATE TABLE users (
  CREATE TABLE users (
   id        int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,  -- unique id
   id        int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,  -- unique id
   priority  integer      NOT NULL DEFAULT '7',  -- sort field, 0 is low prior.
   priority  integer      NOT NULL DEFAULT '7',  -- 0 étant la plus faible priorité.
   policy_id  integer unsigned NOT NULL DEFAULT '1',  -- JOINs with policy.id
   policy_id  integer unsigned NOT NULL DEFAULT '1',  -- N° de la règle policy (id) appliquée
   email      varbinary(255) NOT NULL UNIQUE,
   email      varbinary(255) NOT NULL UNIQUE,
   fullname  varchar(255) DEFAULT NULL,    -- not used by amavisd-new
   fullname  varchar(255) DEFAULT NULL,    -- Non utilisé par amavisd-new
   local      char(1)      -- Y/N  (optional field, see note further down)
   local      char(1)      -- Y/N  (optionnel)
  );
  );


CREATE TABLE wblist (
* 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, ...)''.
  rid        integer unsigned NOT NULL, -- recipient: users.id
  sid        integer unsigned NOT NULL, -- sender: mailaddr.id
  wb        varchar(10)  NOT NULL, -- W or Y / B or N / space=neutral / score
  PRIMARY KEY (rid,sid)
);


  CREATE TABLE policy (
  CREATE TABLE policy (
   id  int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
   id  int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
                                     -- 'id' this is the _only_ required field
                                     -- 'id' this is the _only_ required field
   policy_name      varchar(32),    -- not used by amavisd-new, a comment
   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
Ligne 133 : Ligne 130 :
         -- names mapped through %banned_rules to actual banned_filename tables
         -- 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.


  CREATE TABLE mailaddr (
  CREATE TABLE mailaddr (
   id        int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
   id        int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
   priority  integer      NOT NULL DEFAULT '7',  -- 0 is low priority
   priority  integer      NOT NULL DEFAULT '7',  -- 0 est la plus faible priorité
   email      varbinary(255) NOT NULL UNIQUE
   email      varbinary(255) NOT NULL UNIQUE
  );
  );
* 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)
);
* 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']);
   @lookup_sql_dsn = ( ['DBI:mysql:database=postfix;host=10.0.0.47;port=3306', 'postfix', 'motdepassebasemysqlpourpostfix']);
   @storage_sql_dsn = @lookup_sql_dsn;
   @storage_sql_dsn = @lookup_sql_dsn;

Version du 10 février 2014 à 14:44

Installation

sudo apt-get install amavisd-new

Configuration

Amavis

  • perm :

adduser clamav amavis

  • /etc/amavis/conf.d/15-av_scanners :
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"],
  qr/\bOK$/m, qr/\bFOUND$/m,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
  • /etc/amavis/conf.d/15-content_filter_mode :
@bypass_virus_checks_maps = (
  \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
@bypass_spam_checks_maps = (
  \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
  • /etc/amavis/conf.d/21-ubuntu_defaults :
$final_virus_destiny      = D_BOUNCE; # (defaults to D_BOUNCE)
$final_spam_destiny       = D_PASS;  # (defaults to D_REJECT)
  • /etc/amavis/conf.d/05-node_id  :
$myhostname = "mail.glx";

service amavisd restart

Postfix

  • /etc/postfix/main.cf :

content_filter = scan:127.0.0.1:10024

  • /etc/postfix/master.cf :
scan      unix  -       -       n       -       16      smtp
        -o smtp_data_done_timeout=1200
        -o disable_dns_lookups=yes
127.0.0.1:10025 inet n - y - - smtpd
 -o content_filter=
 -o local_recipient_maps=
 -o relay_recipient_maps=
 -o smtpd_restriction_classes=
 -o smtpd_client_restrictions=
 -o smtpd_helo_restrictions=
 -o smtpd_sender_restrictions=
 -o smtpd_recipient_restrictions=permit_mynetworks,reject
 -o mynetworks=127.0.0.0/8
 -o strict_rfc821_envelopes=yes

service postfix restart

MySQL

/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.
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, ...).
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
  spam_lover           char(1) default NULL,     -- Y/N
  banned_files_lover   char(1) default NULL,     -- Y/N
  bad_header_lover     char(1) default NULL,     -- Y/N

  bypass_virus_checks  char(1) default NULL,     -- Y/N
  bypass_spam_checks   char(1) default NULL,     -- Y/N
  bypass_banned_checks char(1) default NULL,     -- Y/N
  bypass_header_checks char(1) default NULL,     -- Y/N

  spam_modifies_subj   char(1) default NULL,     -- Y/N

  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, -- higher score inserts spam info headers
  spam_tag2_level float default NULL, -- inserts 'declared spam' header fields
  spam_kill_level float default NULL, -- higher score triggers evasive actions
                                      -- e.g. reject/drop, quarantine, ...
                                     -- (subject to final_spam_destiny setting)
  spam_dsn_cutoff_level        float default NULL,
  spam_quarantine_cutoff_level float default NULL,

  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
  warnbannedrecip     char(1)     default NULL, -- Y/N
  warnbadhrecip       char(1)     default NULL, -- Y/N
  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, -- max size in bytes, 0 disable
  banned_rulenames    varchar(64) default NULL  -- comma-separated list of ...
        -- 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.
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
);
  • 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)
);
  • 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;