Amavis : Différence entre versions

De Wiki NCad
Aller à : navigation, rechercher
(Amavis)
(Activation du programme)
 
(71 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 +
{{Serveur de Messagerie}}
 +
 +
[[Image:Amavis_Logo.gif|center]]
 +
 +
== Architecture ==
 +
 +
[[Image:Amavis_Architecture.png|thumb|center|750px|Architecture Amavis avec Postfix]]
 +
 +
* Le serveur SMTP '''Amavis''' est exploité par '''Postfix''' pour lui soumettre les courriels à analyser. Une fois analysés par '''Amavis''', les courriers sont ré-injecté dans '''Postfix''' avec le résultat de l'analyse.
 +
 +
== Prérequis ==
 +
 +
Il est nécessaire de disposer d'un serveur de mails basé sur [[Postfix]] fonctionnel.
 +
 +
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 '''Amavis''' sera installé sur la même machine où est hébergé '''Postfix'''.
 +
 
== Installation ==
 
== Installation ==
  
{{ Box Console | objet=sudo apt-get install amavisd-new}}
+
* Nous installation l'anti-virus '''[[ClamAV]]''' :
 +
 
 +
{{ Box Console | objet=sudo apt-get install clamsmtp clamav-daemon clamav clamav-freshclam clamav-base }}
 +
 
 +
* Nous installation l'anti-spam '''[[SpamAssassin]]''' :
 +
 
 +
{{ Box Console | objet=sudo apt-get install spamassassin pyzor razor}}
 +
 
 +
* Nous installation le service '''Amavis''' :
 +
 
 +
{{ Box Console | objet=sudo apt-get install amavisd-new }}
  
 
== Configuration ==
 
== Configuration ==
 +
 +
=== SpamAssassin ===
 +
 +
==== Activation du programme ====
 +
 +
* Par défaut, le module est <font color=red>désactivé</font>. Pour être lancé il faut remplacer dans le fichier '''/etc/default/spamassassin''' :
 +
 +
ENABLED=0
 +
 +
* Par :
 +
 +
ENABLED=1
 +
 +
* Il est également possible d'activer le module via la commande :
 +
 +
{{ Box_Console | objet=update-rc.d spamassassin enable }}
 +
 +
==== Séparation des logs ====
 +
 +
* Pour éviter de trop encombrer les logs de '''[[Postfix]]''' dans le fichier '''/var/log/mail.log''', nous allons séparer les logs de '''SpamAssassin'''. Pour cela, on insère les éléments suivant juste avant la ligne '''OPTIONS''' :
 +
 +
SAHOME="/var/log/spamd/"
 +
 +
* Puis on remplace :
 +
 +
OPTIONS="--create-prefs --max-children 5 --helper-home-dir"
 +
 +
* Par :
 +
 +
OPTIONS="--create-prefs --max-children 5 --helper-home-dir --username spamd -H ${SAHOME} -s ${SAHOME}spamd.log"
 +
 +
==== Création de l'utilisateur spamd ====
 +
 +
* '''SpamAssassin''' s'exécute avec les droits et permissions de l'utilisateur '''spamd'''. Cependant, cette utilisateur n'est pas crée à l'installation du programme. Il va donc falloir le créer :
 +
 +
{{ Box Console | objet=sudo groupadd spamd<br />
 +
sudo useradd -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd<br />
 +
sudo chown spamd:spamd /var/lib/spamassassin<br />
 +
sudo mkdir /var/log/spamd<br />
 +
sudo chown spamd:spamd /var/log/spamd}}
 +
 +
==== Configuration de SpamAssassin ====
 +
 +
* Le configuration de '''SpamAssassin''' se trouve dans le fichier '''/etc/spamassassin/local.cf'''. On va y dé-commenter les lignes suivantes :
 +
 +
rewrite_header Subject *****SPAM*****
 +
report_safe 1
 +
required_score 5.0
 +
use_bayes 1
 +
bayes_auto_learn 1
 +
bayes_ignore_header X-Spam-Status
 +
 +
* Une fois le fichier de configuration renseigné, on peut démarrer '''SpamAssassin''' :
 +
 +
{{ Box Console | objet=sudo service spamassassin start }}
 +
 +
=== ClamAV ===
 +
 +
* On procède à la mise à jour des signatures de '''ClamAV''' :
 +
 +
{{ Box Console | objet=sudo freshclam}}
 +
 +
* Lancement de '''ClamAV''' :
 +
 +
{{ Box Console | objet=sudo service clamav-daemon restart}}
 +
 +
=== Altermime ===
 +
 +
* Le module optionnel [[Altermime]] peut fonctionner avec '''Amavis'''. Pour utiliser Amavis avec Altermime, suivre l'installation [[Altermime#Configuration_pour_Amavis|ICI]].
  
 
=== Amavis ===
 
=== Amavis ===
 +
 +
Les lignes de configuration personnalisées seront définis dans le fichier '''/etc/amavis/conf.d/50-user''' sauf cas contraire précisé. les lignes de configuration décrites dans ce fichier '''outrepassent''' celles éventuellement présentes dans les autres fichiers de configuration.
 +
 +
{{ Box Remarque | objet=De cette manière, il se plus facile de réviser la configuration de Amavis ou de la restaurer en cas de mise à jour ou de récupération. }}
 +
 +
==== Permissions d'Amavis sur ClamAV ====
  
 
* Pour que '''Amavis''' puisse avoir accès aux dossiers et fichiers de '''ClamAV''', on ajoute l'utilisateur '''amavis''' au groupe '''clamav''' :
 
* Pour que '''Amavis''' puisse avoir accès aux dossiers et fichiers de '''ClamAV''', on ajoute l'utilisateur '''amavis''' au groupe '''clamav''' :
  
{{ Box Console | objet=adduser clamav amavis }}
+
{{ Box Console | objet=sudo adduser clamav amavis }}
 +
 
 +
==== Détection de l'anti-Virus ====
  
 
* On vérifie que l'anti-virus '''/etc/amavis/conf.d/15-av_scanners''' a bien été détecté par '''Amavis'''. Si c'est bien le cas, les lignes suivantes sont décommentées :
 
* On vérifie que l'anti-virus '''/etc/amavis/conf.d/15-av_scanners''' a bien été détecté par '''Amavis'''. Si c'est bien le cas, les lignes suivantes sont décommentées :
Ligne 18 : Ligne 121 :
 
   qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
 
   qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],
  
* Pour que Amavis consulte Clamav et SpamAssassin pour le traitement des mails, il faut décommenter les lignes suivantes dans '''/etc/amavis/conf.d/15-content_filter_mode''' :
+
==== Activation de l'analyse ====
  
 +
* Pour que '''Amavis''' consulte [[ClamAV]] et [[SpamAssassin]] on ajoute les lignes suivantes dans le fichier '''/etc/amavis/conf.d/50-user''' :
 +
 +
# Activation de l'analyse anti-virus
 +
#########################################
 
  @bypass_virus_checks_maps = (
 
  @bypass_virus_checks_maps = (
 
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
 
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
 
+
 +
# Activation de l'analyse anti-spam
 +
#########################################
 
  @bypass_spam_checks_maps = (
 
  @bypass_spam_checks_maps = (
 
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
 
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
  
* Sous Ubuntu, pour que les mails détectés comme '''spam''' et '''virus''' ne soient pas supprimés, il faudra remplacer dans le fichier '''/etc/amavis/conf.d/21-ubuntu_defaults''' les lignes :
+
<div style="width:100%;background-color:#dddddd;margin-top:15px; margin-bottom:15px">
 +
<div style="width:100%;background-color:#CCCCCC;font-family:cursive;font-size:16px;height:25px;text-align:center">Amavis sur un serveur séparé de Postfix</div>
  
$final_virus_destiny      = D_DISCARD; # (defaults to D_BOUNCE)
+
<div style="width:99%;padding:5px;">
$final_spam_destiny      = D_DISCARD; # (defaults to D_REJECT)
+
  
* Par :
+
* Il faut autoriser '''Postfix''' à communiquer avec le serveur '''Amavis''' via la règle '''inet_acl'''. Il faut aussi spécifié à '''Amavis''' avec quel serveur il doit communiquer pour le traitement des spams / virus - règles '''$notify_method''' et '''$forward_method'''.
  
  $final_virus_destiny      = D_BOUNCE; # (defaults to D_BOUNCE)
+
  $inet_socket_bind = undef;
  $final_spam_destiny      = D_PASS# (defaults to D_REJECT)
+
@inet_acl = qw( 127.0.0.1 [::1] 10.0.0.0/8 );
 +
  $notify_method = 'smtp:10.0.0.49:10025';
 +
  $forward_method = 'smtp:10.0.0.49:10025';
  
* Dans le fichier '''/etc/amavis/conf.d/05-node_id''' on va définir le '''hostname''' du serveur :
+
* Dans le cas ci-dessus, le serveur '''Postfix''' a pour adresse 10.0.0.49 et '''Amavis''' 10.0.0.44.
 +
 
 +
</div>
 +
</div>
 +
 
 +
==== Scénarios de filtrage ====
 +
 
 +
* Toujours dans le même fichier et à la suite, on définit le scénario en cas de détection de messages inappropriés :
 +
 
 +
# Scénario de distribution des messages :
 +
# BOUNCE = Suppression mais envoi de l'échec de remise à l'émetteur
 +
#          sauf pour les virus ou si le spam score > $sa_dsn_cutoff_level
 +
# REJECT =  Suppression mais envoi d'une notification de rejet à l'émetteur
 +
# DISCARD = Suppression sans échec de remise à l'émetteur
 +
# PASS = Accepté
 +
#########################################
 +
# Mail contenant un virus
 +
$final_virus_destiny      = D_BOUNCE;
 +
$virus_quarantine_to      = $QUARANTINEDIR; # Mise en quarantaine dans /var/lib/amavis/virusmails
 +
                                            # sinon, pour désactiver undef.
 +
# Mail contenant une PJ interdite
 +
$final_banned_destiny    = D_DISCARD;
 +
$banned_quarantine_to    = undef;
 +
 +
# Mail détecté comme SPAM
 +
$final_spam_destiny      = D_PASS;
 +
$spam_quarantine_to      = undef;
 +
 +
# Mail avec en-têtes mals formées
 +
$final_bad_header_destiny = D_PASS;    #
 +
$bad_header_quarantine_to = undef;
 +
 
 +
==== Définition du hostname ====
 +
 
 +
* Si le '''hostname''' détecté par '''Amavis''' n'est pas un nom de domaine pleinement qualifié ''(FQDN)'', le service ne démarrera pas. On va donc définir le '''hostname''' du serveur :
  
 
  $myhostname = "mail.glx";
 
  $myhostname = "mail.glx";
 +
 +
==== Analyse du spam ====
 +
 +
* Le service '''SpamAssassin''' attribue des scores aux messages qu'il scanne avant de les retourner à '''Amavis'''. En fonction des scores attribués '''Amavis''' influe sur l'acheminement du mail. Il est possible de régler les seuils de déclenchement de ses actions :
 +
 +
# Réglage du seuil de détection du Spam
 +
$sa_tag_level_deflt = 3.0;  # Score à partir duquel les en-têtes X-Spam-Status,
 +
                            # X-Spam-Score et X-Spam-Level sont ajoutées
 +
$sa_tag2_level_deflt = 5.0; # Seuil à partir duquel le contenu de $sa_spam_subject_tag
 +
                            # est ajouté dans l'objet du mail
 +
$sa_kill_level_deflt = 5.0; # Déclenche la mise en quarantaine ainsi que l'action définit dans
 +
                            # la variable $final_spam_destiny
 +
$sa_spam_subject_tag = '*** SPAM *** ';
 +
 +
==== Application de la configuration ====
  
 
* Pour appliquer la configuration, on redémarre '''Amavis''' :
 
* Pour appliquer la configuration, on redémarre '''Amavis''' :
  
 
{{ Box Console | objet=service amavis restart}}
 
{{ Box Console | objet=service amavis restart}}
 +
 +
==== Conclusion ====
 +
 +
* Finalement, le fichier '''/etc/amavis/conf.d/50-user''' ressemble à ceci :
 +
 +
# Activation de l'analyse anti-virus
 +
#########################################
 +
@bypass_virus_checks_maps = (
 +
  \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
 +
 +
# Activation de l'analyse anti-spam
 +
#########################################
 +
@bypass_spam_checks_maps = (
 +
  \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
 +
 +
# Scénario de distribution des messages :
 +
# BOUNCE = Suppression mais envoi de l'échec de remise à l'émetteur
 +
#          sauf pour les virus ou si le spam score > $sa_dsn_cutoff_level
 +
# REJECT =  Suppression mais envoi d'une notification de rejet à l'émetteur
 +
# DISCARD = Suppression sans échec de remise à l'émetteur
 +
# PASS = Accepté
 +
#########################################
 +
# Mail contenant un virus
 +
$final_virus_destiny      = D_BOUNCE;
 +
$virus_quarantine_to      = $QUARANTINEDIR; # Mise en quarantaine dans /var/lib/amavis/virusmails
 +
                                            # sinon, pour désactiver undef.
 +
# Mail contenant une PJ interdite
 +
$final_banned_destiny    = D_DISCARD;
 +
$banned_quarantine_to    = undef;
 +
 +
# Mail détecté comme SPAM
 +
$final_spam_destiny      = D_PASS;
 +
$spam_quarantine_to      = undef;
 +
 +
# Mail avec en-têtes mals formées
 +
$final_bad_header_destiny = D_PASS;    #
 +
$bad_header_quarantine_to = undef;
 +
 +
# Réglage du seuil de détection du Spam
 +
$sa_tag_level_deflt = 3.0;  # Score à partir duquel les en-têtes X-Spam-Status,
 +
                            # X-Spam-Score et X-Spam-Level sont ajoutées
 +
$sa_tag2_level_deflt = 5.0; # Seuil à partir duquel le contenu de $sa_spam_subject_tag
 +
                            # est ajouté dans l'objet du mail
 +
$sa_kill_level_deflt = 5.0; # Déclenche la mise en quarantaine ainsi que l'action définit dans
 +
                            # la variable $final_spam_destiny
 +
$sa_spam_subject_tag = '*** SPAM *** ';
 +
 +
# Nom d'hôte de la machine
 +
$myhostname = "mail.glx";
  
 
=== Postfix ===
 
=== Postfix ===
Ligne 69 : Ligne 278 :
 
   -o mynetworks=127.0.0.0/8
 
   -o mynetworks=127.0.0.0/8
 
   -o strict_rfc821_envelopes=yes
 
   -o strict_rfc821_envelopes=yes
 +
 +
<div style="width:100%;background-color:#dddddd;margin-top:15px; margin-bottom:15px">
 +
<div style="width:100%;background-color:#CCCCCC;font-family:cursive;font-size:16px;height:25px;text-align:center">Amavis sur un serveur séparé de Postfix</div>
 +
 +
<div style="width:99%;padding:5px;">
 +
 +
* Dans le cas d'un serveur '''Postfix''' séparé du serveur '''Amavis''', il faudra adapter le contenu du paramètre '''content_filter''' en spécifiant l'IP du serveur '''Amavis''' :
 +
 +
content_filter = scan:10.0.0.44:10024
 +
 +
* Mais aussi les paramètre du port d'écoute '''10025''' pour la récupération des mails traités par '''Amavis''' qui ne se fait plus sur l'interface locale :
 +
 +
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,10.0.0.44/32
 +
  -o strict_rfc821_envelopes=yes
 +
 +
{{ Box Attention | objet=Le filtre <font color=grey>mynetworks</font> est important puisqu'il n'autorise uniquement <font color=grey>Amavis</font> à communiquer avec <font color=grey>Postfix</font> sur l'interface <font color=grey>10025</font>. Le cas échéant, tout le monde peut soumettre des requêtes <font color=grey>SMTP</font> au serveur et l'utiliser comme <font color=grey>open relay</font>.}}
 +
 +
* On redémarre '''Postfix''' et on vérifie que ce dernier écoute bien sur le port '''10025''' depuis le serveur '''Amavis''' :
 +
 +
{{ Box Console | objet=telnet 10.0.0.49 10025<br />
 +
Trying 10.0.0.49...<br />
 +
Connected to 10.0.0.49.<br />
 +
Escape character is '^]'.<br />
 +
<font color=green>220 geocoucou.net.ncad.fr ESMTP Postfix</font> }}
 +
 +
* À ce stade, on peut également vérifier - depuis le serveur '''Postfix''' - que '''Amavis''' écoute bien sur l'interface '''10024''' :
 +
 +
{{ Box Console | objet=telnet 10.0.0.44 10024<br />
 +
Trying 10.0.0.44...<br />
 +
Connected to 10.0.0.44.<br />
 +
Escape character is '^]'.<br />
 +
<font color=green>220 [::ffff:10.0.0.44] ESMTP amavisd-new service ready</font> }}
 +
 +
</div>
 +
</div>
  
 
* On redémarre '''Postfix''' pour appliquer les modifications :
 
* On redémarre '''Postfix''' pour appliquer les modifications :
Ligne 74 : Ligne 327 :
 
{{ Box Console | objet=service postfix restart}}
 
{{ Box Console | objet=service postfix restart}}
  
== Utilisation d'une base Sql ==
+
=== Validation ===
  
=== Installation des tables ===
+
==== Réception d'un message sain ====
  
==== Création des tables ====
+
* Pour effectue ce test, nous envoyons un message de la boîte mail '''nicolas.cachelou@ncad.me''' vers la boîte locale '''cacheln@mail.glx'''. Observons les logs dans '''/var/log/mail.log'''. Le courriel va transité par '''Postfix''' jusqu'à être placé en '''file d'attente''' ''(qmgr)'' tandis qu'un duplicata sera soumit pour analyse à '''Amavis'''.
  
{{ 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. }}
+
[[Image:Amavis_Reception_1.png|thumb|center|750px]]
  
* 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.
+
<span style="background-color:darkblue;color:#FFFFFF">1</span> Feb 10 17:19:19 alice postfix/<font color=red>smtpd</font>[16906]: connect from geocoucou.net.ncad.fr[10.0.0.49]
 +
<span style="background-color:darkblue;color:#FFFFFF">1</span> Feb 10 17:19:19 alice postfix/<font color=red>smtpd</font>[16906]: <font color=purple>8F856461BF9</font>:
 +
  client=geocoucou.net.ncad.fr[10.0.0.49]
 +
<span style="background-color:darkblue;color:#FFFFFF">2</span> Feb 10 17:19:19 alice postfix/cleanup[16911]: <font color=purple>8F856461BF9</font>: message-id=
 +
  <938e217153bc4d3d17b51efba0b6c485@ncad.me>
 +
<span style="background-color:darkblue;color:#FFFFFF">3</span> Feb 10 17:19:19 alice postfix/<font color=red>qmgr</font>[15289]: <font color=purple>8F856461BF9</font>: from=<nicolas.cachelou@ncad.me>,
 +
  size=1608, nrcpt=1 (queue active)
 +
Feb 10 17:19:19 alice postfix/<font color=red>smtpd</font>[16906]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
  
CREATE TABLE users (
+
* Une fois le courriel analysé, il va être de nouveau envoyé à '''Postfix''' avec la mention <font color=green>Passed CLEAN</font>. Le message va aussi contenir le '''numéro du premier message''' dans la file. Ce dernier va pouvoir être '''supprimé''' tandis que le message analysé va être '''délivré''' dans la '''boîte mail du destinataire'''.
  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, ...)''.
+
[[Image:Amavis_Reception_2.png|thumb|center|750px]]
  
  CREATE TABLE policy (
+
  <span style="background-color:darkblue;color:#FFFFFF">2</span> Feb 10 17:19:52 alice postfix/<font color=red>smtpd</font>[16935]: connect from localhost[127.0.0.1]
   id  int unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
+
<span style="background-color:darkblue;color:#FFFFFF">2</span> Feb 10 17:19:52 alice postfix/<font color=red>smtpd</font>[16935]: <font color="darkpink">5B8EF461C21</font>: client=localhost[127.0.0.1]
                                    -- 'id' this is the _only_ required field
+
<span style="background-color:darkblue;color:#FFFFFF">3</span> Feb 10 17:19:52 alice postfix/<font color=red>cleanup</font>[16911]: <font color="darkpink">5B8EF461C21</font>:
   policy_name      varchar(32),     -- non utilisé par amavisd-new, à titre de commentaire
+
   message-id=<938e217153bc4d3d17b51efba0b6c485@ncad.me>
 +
  <span style="background-color:darkblue;color:#FFFFFF">4</span> Feb 10 17:19:52 alice postfix/<font color=red>qmgr</font>[15289]: <font color="darkpink">5B8EF461C21</font>: from=<nicolas.cachelou@ncad.me>,
 +
  size=2022, nrcpt=1 (queue active)
 +
<span style="background-color:darkorange;color:#FFFFFF">1</span> Feb 10 17:19:52 alice <font color=red>amavis</font>[16881]: (16881-01) <font color=green>Passed CLEAN</font>, [10.0.0.49] [109.190.9.125]
 +
  <nicolas.cachelou@ncad.me> -> <cacheln@mail.glx>, Message-ID:
 +
  <938e217153bc4d3d17b51efba0b6c485@ncad.me>, mail_id: hON7zClIHyZE, Hits: -0.998, size: 1608,
 +
  queued_as: <font color="darkpink">5B8EF461C21</font>, 32796 ms
 +
<span style="background-color:darkred;color:#FFFFFF">6</span> Feb 10 17:19:52 alice postfix/<font color=red>smtp</font>[16912]: <font color=purple>8F856461BF9</font></font>: to=<cacheln@mail.glx>,
 +
  relay=127.0.0.1[127.0.0.1]:10024, delay=33, delays=0.05/0.01/0.02/33, dsn=2.0.0, status=sent
 +
  (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as <font color="darkpink">5B8EF461C21</font>)
 +
<span style="background-color:darkred;color:#FFFFFF">6</span> Feb 10 17:19:52 alice postfix/<font color=red>qmgr</font>[15289]: <font color=purple>8F856461BF9</font>: removed
 +
<span style="background-color:darkgreen;color:#FFFFFF">5</span> Feb 10 17:19:52 alice postfix/<font color=red>virtual</font>[16937]: <font color="darkpink">5B8EF461C21</font>: to=<cacheln@mail.glx>,
 +
  relay=virtual, delay=0.11, delays=0.04/0.02/0/0.05, dsn=2.0.0, status=sent <font color=green>(delivered to
 +
  maildir)</font>
 +
<span style="background-color:darkgreen;color:#FFFFFF">5</span> Feb 10 17:19:52 alice postfix/qmgr[15289]: <font color="darkpink">5B8EF461C21</font>: removed
 +
 
 +
==== Réception d'un Spam ====
 +
 
 +
* Pour tester le comportement de '''SpamAssassin''', on va s'envoyer un <font color=orange>faux positif</font>; c'est à dire un courriel censé être détecté comme spammeur. Pour cela, on s’envoie un courriel contenant la chaîne de caractères suivante :
 +
 
 +
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
 +
 
 +
* Le courriel va transité par '''Postfix''' jusqu'à être placé en '''file d'attente''' ''(qmgr)'' tandis qu'un duplicata sera soumit pour analyse à '''Amavis'''.
 +
 
 +
[[Image:Amavis_Reception_Spam_1.png|thumb|center|750px]]
 +
 
 +
<span style="background-color:darkblue;color:#FFFFFF">1</span> Feb 10 21:15:42 alice postfix/<font color=red>smtpd</font>[17186]: connect from geocoucou.net.ncad.fr[10.0.0.49]
 +
<span style="background-color:darkblue;color:#FFFFFF">1</span> Feb 10 21:15:42 alice postfix/<font color=red>smtpd</font>[17186]: <font color=pink>124A5461C16</font>:
 +
  client=geocoucou.net.ncad.fr[10.0.0.49]
 +
<span style="background-color:darkblue;color:#FFFFFF">2</span> Feb 10 21:15:42 alice postfix/<font color=red>cleanup</font>[17191]: <font color=pink>124A5461C16</font>: message-id=
 +
  <07979d34eb1c3b64d76c303f6e82b714@ncad.me>
 +
<span style="background-color:darkblue;color:#FFFFFF">3</span> Feb 10 21:15:42 alice postfix/<font color=red>qmgr</font>[15289]: <font color=pink>124A5461C16</font>: from=<nicolas.cachelou@ncad.me>,
 +
  size=1854, nrcpt=1 (queue active)
 +
Feb 10 21:15:42 alice postfix/smtpd[17186]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
 +
 
 +
* Une fois le courriel analysé, il va être de nouveau envoyé à '''Postfix''' avec la mention <font color=orange>Passed SPAM</font>. Le message va aussi contenir le '''numéro du premier message''' dans la file. Ce dernier va pouvoir être '''supprimé''' tandis que le message analysé va être '''délivré''' dans la '''boîte mail du destinataire'''.
 +
 
 +
[[Image:Amavis_Reception_Spam_2.png|thumb|center|750px]]
 +
 
 +
<span style="background-color:darkblue;color:#FFFFFF">2</span> Feb 10 21:15:45 alice postfix/<font color=red>smtpd</font>[17198]: connect from localhost[127.0.0.1]
 +
<span style="background-color:darkblue;color:#FFFFFF">2</span> Feb 10 21:15:45 alice postfix/<font color=red>smtpd</font>[17198]: <font color=purple>A2561461C48</font>: client=localhost[127.0.0.1]
 +
<span style="background-color:darkblue;color:#FFFFFF">3</span> Feb 10 21:15:45 alice postfix/<font color=red>cleanup</font>[17191]: <font color=purple>A2561461C48</font>:
 +
   message-id=<07979d34eb1c3b64d76c303f6e82b714@ncad.me>
 +
<span style="background-color:darkblue;color:#FFFFFF">4</span> Feb 10 21:15:45 alice postfix/<font color=red>qmgr</font>[15289]: <font color=purple>A2561461C48</font>: from=<nicolas.cachelou@ncad.me>,
 +
  size=2587, nrcpt=1 (queue active)
 +
<span style="background-color:darkorange;color:#FFFFFF">1</span> Feb 10 21:15:45 alice <font color=red>amavis</font>[17121]: (17121-01) <font color=orange>Passed SPAM</font>, [10.0.0.49] [109.190.9.125]
 +
  <nicolas.cachelou@ncad.me> -> <cacheln@mail.glx>, <font color=orange>quarantine: 8/spam-8JozlTsx79Lv.gz</font>,
 +
  Message-ID: <07979d34eb1c3b64d76c303f6e82b714@ncad.me>, mail_id: 8JozlTsx79Lv, Hits: 999.002,
 +
  size: 1854, queued_as: <font color=purple>A2561461C48</font>, 3587 ms
 +
<span style="background-color:darkred;color:#FFFFFF">6</span> Feb 10 21:15:45 alice postfix/<font color=red>smtp</font>[17192]: <font color=pink>124A5461C16</font>: to=<cacheln@mail.glx>,
 +
  relay=127.0.0.1[127.0.0.1]:10024, delay=3.7, delays=0.05/0.01/0.01/3.6, dsn=2.0.0,
 +
  status=sent (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as <font color=purple>A2561461C48</font>)
 +
<span style="background-color:darkred;color:#FFFFFF">6</span> Feb 10 21:15:45 alice postfix/<font color=red>qmgr</font>[15289]: <font color=pink>124A5461C16</font>: removed
 +
<span style="background-color:darkgreen;color:#FFFFFF">5</span> Feb 10 21:15:45 alice postfix/<font color=red>virtual</font>[17200]: <font color=purple>A2561461C48</font>: to=<cacheln@mail.glx>,
 +
  relay=virtual, delay=0.13, delays=0.04/0.03/0/0.06, dsn=2.0.0, status=sent <font color=green>(delivered to
 +
  maildir)</font>
 +
<span style="background-color:darkgreen;color:#FFFFFF">5</span> Feb 10 21:15:45 alice postfix/<font color=red>qmgr</font>[15289]: <font color=purple>A2561461C48</font>: removed
 +
 
 +
{{ Box Remarque | objet=Une copie du mail a été placée en quarantaine dans le répertoire /var/lib/amavis/virusmail/8/. }}
 +
 
 +
==== Réception d'un virus ====
 +
 
 +
* Pour vérifier le comportement de '''Amavis''' on va envoyer un courriel contenant la signature d'un virus qui déclenche un faux-positif. Pour cela, avec notre courriel on y attachera un fichier texte en pièce jointe. Dans ce fichier texte nous renseigneront la ligne suivante :
 +
 
 +
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
 +
 
 +
* Nous effectuons le test de réception toujours sur la boîte '''cacheln@mail.glx'''. Observons maintenant les logs relevés dans '''/var/log/mail.log'''. Le message transite jusqu'au gestionnaire de file '''qmgr''' où il y stationnera. Une copie du message est transmise au serveur '''amavis''' pour être analysée.
 +
 
 +
[[Image:Amavis_Reception_Virus_1.png|thumb|center|750px]]
 +
 
 +
<span style="background-color:darkblue;color:#FFFFFF">1</span> Feb 10 20:18:31 alice postfix/<font color=red>smtpd</font>[17029]: connect from geocoucou.net.ncad.fr[10.0.0.49]
 +
<span style="background-color:darkblue;color:#FFFFFF">1</span> Feb 10 20:18:31 alice postfix/<font color=red>smtpd</font>[17029]: C0970461C16: client=geocoucou.net.ncad.fr[10.0.0.49]
 +
<span style="background-color:darkblue;color:#FFFFFF">2</span> Feb 10 20:18:31 alice postfix/<font color=red>cleanup</font>[17034]: C0970461C16: message-id=
 +
  <9093941fa27ce9148dda2acebf0f21bd@ncad.me>
 +
<span style="background-color:darkblue;color:#FFFFFF">3</span> Feb 10 20:18:31 alice postfix/<font color=red>qmgr</font>[15289]: C0970461C16: from=<nicolas.cachelou@ncad.me>,
 +
  size=1990, nrcpt=1 (queue active)
 +
Feb 10 20:18:31 alice postfix/<font color=red>smtpd</font>[17029]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
 +
<span style="background-color:darkorange;color:#FFFFFF">4</span> Feb 10 20:18:32 alice <font color=red>amavis</font>[16882]: (16882-01) <font color=red>Blocked INFECTED (Eicar-Test-Signature)</font>,
 +
  [10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> -> <cacheln@mail.glx>,
 +
  <font color=purple>quarantine: I/virus-Ibga6nwCOMoV</font>, Message-ID: <9093941fa27ce9148dda2acebf0f21bd@ncad.me>,
 +
  mail_id: Ibga6nwCOMoV, Hits: -, size: 1990, 186 ms
 +
 
 +
* '''Amavis''' identifie un '''virus''' dans le courriel qu'il va taguer comme tel ''(INFECTED: Eicar-Test-Signature)'' et le placer en quarantaine dans le fichier '''/var/lib/amavis/<font color="purple">I/virus-Ibga6nwCOMoV</font>'''. De ce fait, '''Postfix''' va supprimer le message en file d'attente avec le '''code dns=2.7.0''' ''(pas de remise d'échec pour l'émetteur)'' ainsi que le message scanné qui lui a été remis en début de file.
 +
 
 +
[[Image:Amavis_Reception_Virus_2.png|thumb|center|750px]]
 +
 
 +
Feb 10 20:18:32 alice amavis[16882]: (16882-01) Blocked INFECTED (Eicar-Test-Signature),
 +
  [10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> -> <cacheln@mail.glx>,
 +
  quarantine: I/virus-Ibga6nwCOMoV, Message-ID: <9093941fa27ce9148dda2acebf0f21bd@ncad.me>,
 +
  mail_id: Ibga6nwCOMoV, Hits: -, size: 1990, 186 ms
 +
Feb 10 20:18:32 alice postfix/smtp[17035]: C0970461C16: to=<cacheln@mail.glx>,
 +
  relay=127.0.0.1[127.0.0.1]:10024, delay=0.26, delays=0.06/0.01/0.01/0.18, dsn=2.7.0,
 +
  status=sent (250 2.7.0 Ok, discarded, id=16882-01 - INFECTED: Eicar-Test-Signature)
 +
Feb 10 20:18:32 alice postfix/qmgr[15289]: C0970461C16: removed
 +
 
 +
== Fonctions & Comportements ==
 +
 
 +
=== Listage ===
 +
 
 +
* '''Amavis''' intègre un '''système de listage''' des adresses émetteur sous forme de '''tableau'''. Ce système fonctionne par l'affectation de '''points''' si la condition est remplie. Si la condition est remplis et qu'elle est associée à un crédit de points on place en '''liste noire''' cette condition. Si au contraire, la condition est remplis mais qu'elle est associée à un débit de points on place en '''liste blanche''' cette condition.
 +
 
 +
* La condition définie plus haut peut être soit une adresse mail, un nom de domaine voir une regexp. Voici la configuration par défaut de Amavis :
 +
 
 +
@score_sender_maps = ({
 +
  '.' => [
 +
    new_RE(
 +
      [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i        => 6.0],
 +
      [qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'i=> 6.0],
 +
      [qr'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 6.0],
 +
      [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i  => 6.0],
 +
      [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i  => 6.0],
 +
      [qr'^(your_friend|greatoffers)@'i                                => 6.0],
 +
      [qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i                    => 6.0],
 +
    ),
 +
  ],
 +
});
 +
 
 +
* C'est dans le tableau '''@score_sender_maps''' que sont définis les listes. Nous allons copier cette configuration dans le fichier '''/etc/amavis/conf.d/50-user''' afin de pouvoir la personnaliser.
 +
 
 +
==== Listes noires ====
 +
 
 +
* Pour mettre en '''liste noire''' un émetteur, il va falloir augmenter le score attribué à tous ses mails pour le considérer comme indésirable. En fonction du score globale, l'acheminement pourra en être altéré en fonction du [[Amavis#Sc.C3.A9narios_de_filtrage|Scénario de filtrage]] et de l'[[Amavis#Analyse_du_spam|Analyse du spam]]. Dans notre cas, un score supérieure à 5 considère le message comme indésirable.
 +
 
 +
* Nous allons définir en liste noire l'émetteur '''nicolas.cachelou@ncad.me'''. Cette règle s'appliquera aux messages à destination de la boîte '''cacheln@mail.glx''' uniquement. Pour cela, nous allons adapter le tableau '''@score_sender_maps''' comme ceci :
 +
 
 +
@score_sender_maps = ({
 
   
 
   
   virus_lover          char(1) default NULL,     -- Y/N
+
<font color=red>'cacheln@mail.glx' => [{'nicolas.cachelou@ncad.me' => 6}],</font>
  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
+
    new_RE(
 +
      [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i        => 6.0],
 +
      [qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'i=> 6.0],
 +
      [qr'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 6.0],
 +
      [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i   => 6.0],
 +
      [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i  => 6.0],
 +
      [qr'^(your_friend|greatoffers)@'i                                => 6.0],
 +
      [qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i                    => 6.0],
 +
    ),
 +
  ],
 +
});
 +
 
 +
* On redémarre '''Amavis''' pour appliquer les paramètres.
 +
 
 +
{{ Box Console | objet=service amavis restart}}
 +
 
 +
==== Listes blanches ====
 +
 
 +
* Pour mettre en '''liste blanche''' un émetteur, il va falloir diminuer le score attribué à tous ses mails pour le considérer comme '''propre''' même si il est considéré comme '''indésirable''' par '''SpamAssassin'''. Le score maximum pouvant être atteint par un message considéré comme du spam est d'environ '''999'''.
 +
 
 +
* Nous allons définir en liste blanche l'émetteur '''nicolas.cachelou@ncad.me'''. Cette règle s'appliquera aux messages à destination de la boîte '''cacheln@mail.glx''' uniquement. Pour cela, nous allons adapter le tableau '''@score_sender_maps''' comme ceci :
 +
 
 +
@score_sender_maps = ({
 +
 +
<font color=green>'cacheln@mail.glx' => [{'nicolas.cachelou@ncad.me' => -999}],</font>
 +
 +
   '.' => [
 +
    new_RE(
 +
      [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i        => 6.0],
 +
      [qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'i=> 6.0],
 +
      [qr'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 6.0],
 +
      [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i  => 6.0],
 +
      [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i  => 6.0],
 +
      [qr'^(your_friend|greatoffers)@'i                                => 6.0],
 +
      [qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i                    => 6.0],
 +
    ),
 +
  ],
 +
});
 +
 
 +
* On redémarre '''Amavis''' pour appliquer les paramètres.
 +
 
 +
=== 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'''. On édite le fichier '''/etc/amavis/conf.d/50-user''' et on y insère la ligne suivante :
 +
 
 +
$warnvirusrecip = 1;
 +
 
 +
* On redémarre '''Amavis''' pour appliquer les paramètres.
 +
 
 +
{{ Box Console | objet=service amavis restart}}
 +
 
 +
* Voici un exemple type de message remis au destinataire lorsqu'un mail contient un virus :
 +
 
 +
VIRUS ALERT
 
   
 
   
  bypass_virus_checks char(1) default NULL,    -- Y/N
+
  Our content checker found
  bypass_spam_checks  char(1) default NULL,    -- Y/N
+
    virus: Eicar-Test-Signature
  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
+
in an email to you from:
 +
   nicolas.cachelou@ncad.me
 
   
 
   
  virus_quarantine_to      varchar(64) default NULL,
+
Content type: Virus
  spam_quarantine_to      varchar(64) default NULL,
+
Our internal reference code for your message is 02732-01/0azzGAoaMogj
  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
+
  First upstream SMTP client IP address: [10.0.0.49]
  spam_tag2_level float default NULL, -- inserts 'declared spam' header fields
+
According to a 'Received:' trace, the message originated at: [109.190.9.125],
   spam_kill_level float default NULL, -- higher score triggers evasive actions
+
   webmail.ncad.me ro-010.net.ncad.fr [109.190.9.125]
                                      -- 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,
+
Return-Path: <nicolas.cachelou@ncad.me>
  addr_extension_spam      varchar(64) default NULL,
+
From: nicolas.cachelou@ncad.me
  addr_extension_banned    varchar(64) default NULL,
+
Message-ID: <d76a8884ccca63795164198923bd602d@ncad.me>
  addr_extension_bad_header varchar(64) default NULL,
+
User-Agent: Roundcube Webmail/RCMAIL_VERSION
 +
Subject: Fwd: test virus
 +
The message has been quarantined as: 0azzGAoaMogj
 
   
 
   
  warnvirusrecip      char(1)    default NULL, -- Y/N
+
  Please contact your system administrator for details.
  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.
+
=== Notification rejet pièce jointe ===
  
CREATE TABLE mailaddr (
+
* On peut informer le destinataire qu'un courriel lui étant destiné a été supprimé car il contenait une pièce jointe bannie. Pour cela, on va activer le paramètre '''$warnbannedrecip'''. On édite le fichier '''/etc/amavis/conf.d/50-user''' et on y insère la ligne suivante :
  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)''.
+
$warnbannedrecip = 1;
  
CREATE TABLE wblist (
+
* On redémarre '''Amavis''' pour appliquer les paramètres.
  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)
+
);
+
  
==== Configuration de Amavis ====
+
{{ Box Console | objet=service amavis restart}}
  
* Pour activer le module Sql dans Amavis, il faut insérer les deux lignes suivantes dans le fichier '''/etc/amavis/conf.d''':
+
* Voici un exemple type de message remis au destinataire lorsqu'un mail contient une pièce jointe interdite :
  
  @lookup_sql_dsn = ( ['DBI:mysql:database=postfix;host=10.0.0.47;port=3306', 'postfix', 'motdepassebasemysqlpourpostfix']);
+
BANNED CONTENTS ALERT
  @storage_sql_dsn = @lookup_sql_dsn;
+
 +
Our content checker found
 +
    banned name: text/plain,.txt,test.exe
 +
 +
in an email to you from:
 +
  nicolas.cachelou@ncad.me
 +
 +
Content type: Banned
 +
Our internal reference code for your message is 03572-01/vTYqW8A49XZN
 +
 +
First upstream SMTP client IP address: [10.0.0.49]
 +
According to a 'Received:' trace, the message originated at: [109.190.9.125],
 +
  webmail.ncad.me ro-010.net.ncad.fr [109.190.9.125]
 +
 +
Return-Path: <nicolas.cachelou@ncad.me>
 +
From: nicolas.cachelou@ncad.me
 +
Message-ID: <094c4f0a8ef29924ed05abd60d9aa73c@ncad.me>
 +
User-Agent: Roundcube Webmail/RCMAIL_VERSION
 +
Subject: Application
 +
The message has been quarantined as: vTYqW8A49XZN
 +
 +
Please contact your system administrator for details.
  
=== Fonctions & Comportements ===
+
=== Notification en-têtes invalides ===
  
==== Blacklistage ====
+
* On peut informer le destinataire qu'un courriel lui étant destiné a été supprimé car les en-têtes n'étaient pas valides. Pour cela, on va activer le paramètre '''$warnbadhrecip'''. On édite le fichier '''/etc/amavis/conf.d/50-user''' et on y insère la ligne suivante :
 +
 
 +
$warnbadhrecip = 1;
 +
 
 +
* On redémarre '''Amavis''' pour appliquer les paramètres.
 +
 
 +
{{ Box Console | objet=service amavis restart}}
 +
 
 +
== Annexes ==
 +
 
 +
=== Fichier /etc/amavis/conf.d/50-user ===
 +
 
 +
# Activation de l'analyse anti-virus
 +
#########################################
 +
@bypass_virus_checks_maps = (
 +
  \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);
 +
 +
# Activation de l'analyse anti-spam
 +
#########################################
 +
@bypass_spam_checks_maps = (
 +
  \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
 +
 +
# Scénario de distribution des messages :
 +
# BOUNCE = Suppression mais envoi de l'échec de remise à l'émetteur
 +
#          sauf pour les virus ou si le spam score > $sa_dsn_cutoff_level
 +
# REJECT =  Suppression mais envoi d'une notification de rejet à l'émetteur
 +
# DISCARD = Suppression sans échec de remise à l'émetteur
 +
# PASS = Accepté
 +
#########################################
 +
# Mail contenant un virus
 +
$final_virus_destiny      = D_BOUNCE;
 +
$virus_quarantine_to      = $QUARANTINEDIR; # Mise en quarantaine dans /var/lib/amavis/virusmails
 +
                                            # sinon, pour désactiver undef.
 +
$warnvirusrecip          = 1;              # Notification de rejet virus
 +
 +
# Mail contenant une PJ interdite
 +
$final_banned_destiny    = D_DISCARD;
 +
$banned_quarantine_to    = undef;          # Pas de quarantaine
 +
$warnbannedrecip          = 1;              # Notification rejet PJ
 +
 +
# Mail détecté comme SPAM
 +
$final_spam_destiny      = D_PASS;
 +
$spam_quarantine_to      = undef;          # Pas de quarantaine
 +
 +
# Mail avec en-têtes mals formées
 +
$final_bad_header_destiny = D_PASS;
 +
$bad_header_quarantine_to = undef;          # Pas de quarantaine
 +
$warnbadhrecip            = 0;              # Notification rejet en-têtes
 +
 +
# Réglage du seuil de détection du Spam
 +
$sa_tag_level_deflt = 3.0;  # Score à partir duquel les en-têtes X-Spam-Status,
 +
                            # X-Spam-Score et X-Spam-Level sont ajoutées
 +
$sa_tag2_level_deflt = 5.0; # Seuil à partir duquel le contenu de $sa_spam_subject_tag
 +
                            # est ajouté dans l'objet du mail
 +
$sa_kill_level_deflt = 5.0; # Déclenche la mise en quarantaine ainsi que l'action définit dans
 +
                            # la variable $final_spam_destiny
 +
$sa_spam_subject_tag = '*** SPAM *** ';
 +
 +
# Nom d'hôte de la machine
 +
$myhostname = "mail.glx";
 +
 +
# Listes blanches / noires
 +
#########################################
 +
@score_sender_maps = ({
 +
  #'user@domain.tld' => [{'adresse@blacklister.tld' => 6}],
 +
  #'user@domain.tld' => [{'adresse@whitelister.tld' => -999}],
 +
  '.' => [
 +
    new_RE(
 +
      [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i        => 6.0],
 +
      [qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'i=> 6.0],
 +
      [qr'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 6.0],
 +
      [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i  => 6.0],
 +
      [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i  => 6.0],
 +
      [qr'^(your_friend|greatoffers)@'i                                => 6.0],
 +
      [qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i                    => 6.0],
 +
    ),
 +
  ],
 +
});
  
 
== Liens ==
 
== Liens ==
  
 
* '''Informations règles Amavis :''' http://www.grafactory.net/blog/post/2009/09/28/Documentation-des-diff%C3%A9rentes-r%C3%A8gles-d-Amavisd-new
 
* '''Informations règles Amavis :''' http://www.grafactory.net/blog/post/2009/09/28/Documentation-des-diff%C3%A9rentes-r%C3%A8gles-d-Amavisd-new
 +
* http://www200.pair.com/mecham/spam/amavisd-settings.html
 +
 +
[[Category:Serveur de Messagerie]]

Version actuelle en date du 23 octobre 2022 à 13:56

.:[ Serveur de Messagerie ]:.

Installation >> Postfix avec MySQL

Anti-Spam SpamAssassin | Anti-Virus Clamav


Plateforme de filtrage Amavis >> Amavis avec MySQL


Ajouter un Disclaimer


Configurer Thundirbird | Configurer Roundcube


Commandes messagerie | DNSBL | MX Backup
Amavis Logo.gif

Architecture

Architecture Amavis avec Postfix
  • Le serveur SMTP Amavis est exploité par Postfix pour lui soumettre les courriels à analyser. Une fois analysés par Amavis, les courriers sont ré-injecté dans Postfix avec le résultat de l'analyse.

Prérequis

Il est nécessaire de disposer d'un serveur de mails basé sur Postfix fonctionnel.

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 Amavis sera installé sur la même machine où est hébergé Postfix.

Installation

  • Nous installation l'anti-virus ClamAV :
ICON Terminal.png

sudo apt-get install clamsmtp clamav-daemon clamav clamav-freshclam clamav-base

ICON Terminal.png

sudo apt-get install spamassassin pyzor razor

  • Nous installation le service Amavis :
ICON Terminal.png

sudo apt-get install amavisd-new

Configuration

SpamAssassin

Activation du programme

  • Par défaut, le module est désactivé. Pour être lancé il faut remplacer dans le fichier /etc/default/spamassassin :
ENABLED=0
  • Par :
ENABLED=1
  • Il est également possible d'activer le module via la commande :
ICON Terminal.png

update-rc.d spamassassin enable

Séparation des logs

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

Création de l'utilisateur spamd

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

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

Configuration de SpamAssassin

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

sudo service spamassassin start

ClamAV

  • On procède à la mise à jour des signatures de ClamAV :
ICON Terminal.png

sudo freshclam

  • Lancement de ClamAV :
ICON Terminal.png

sudo service clamav-daemon restart

Altermime

  • Le module optionnel Altermime peut fonctionner avec Amavis. Pour utiliser Amavis avec Altermime, suivre l'installation ICI.

Amavis

Les lignes de configuration personnalisées seront définis dans le fichier /etc/amavis/conf.d/50-user sauf cas contraire précisé. les lignes de configuration décrites dans ce fichier outrepassent celles éventuellement présentes dans les autres fichiers de configuration.

ICON Light.png
De cette manière, il se plus facile de réviser la configuration de Amavis ou de la restaurer en cas de mise à jour ou de récupération.

Permissions d'Amavis sur ClamAV

  • Pour que Amavis puisse avoir accès aux dossiers et fichiers de ClamAV, on ajoute l'utilisateur amavis au groupe clamav :
ICON Terminal.png

sudo adduser clamav amavis

Détection de l'anti-Virus

  • On vérifie que l'anti-virus /etc/amavis/conf.d/15-av_scanners a bien été détecté par Amavis. Si c'est bien le cas, les lignes suivantes sont décommentées :
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"],
  qr/\bOK$/m, qr/\bFOUND$/m,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

Activation de l'analyse

  • Pour que Amavis consulte ClamAV et SpamAssassin on ajoute les lignes suivantes dans le fichier /etc/amavis/conf.d/50-user :
# Activation de l'analyse anti-virus
#########################################
@bypass_virus_checks_maps = (
  \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

# Activation de l'analyse anti-spam
#########################################
@bypass_spam_checks_maps = (
  \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Amavis sur un serveur séparé de Postfix
  • Il faut autoriser Postfix à communiquer avec le serveur Amavis via la règle inet_acl. Il faut aussi spécifié à Amavis avec quel serveur il doit communiquer pour le traitement des spams / virus - règles $notify_method et $forward_method.
$inet_socket_bind = undef;
@inet_acl = qw( 127.0.0.1 [::1] 10.0.0.0/8 );
$notify_method = 'smtp:10.0.0.49:10025';
$forward_method = 'smtp:10.0.0.49:10025';
  • Dans le cas ci-dessus, le serveur Postfix a pour adresse 10.0.0.49 et Amavis 10.0.0.44.

Scénarios de filtrage

  • Toujours dans le même fichier et à la suite, on définit le scénario en cas de détection de messages inappropriés :
# Scénario de distribution des messages :
# BOUNCE = Suppression mais envoi de l'échec de remise à l'émetteur
#          sauf pour les virus ou si le spam score > $sa_dsn_cutoff_level
# REJECT =  Suppression mais envoi d'une notification de rejet à l'émetteur
# DISCARD = Suppression sans échec de remise à l'émetteur
# PASS = Accepté
#########################################
# Mail contenant un virus
$final_virus_destiny      = D_BOUNCE;
$virus_quarantine_to      = $QUARANTINEDIR; # Mise en quarantaine dans /var/lib/amavis/virusmails
                                            # sinon, pour désactiver undef.
# Mail contenant une PJ interdite
$final_banned_destiny     = D_DISCARD;
$banned_quarantine_to     = undef; 

# Mail détecté comme SPAM
$final_spam_destiny       = D_PASS;
$spam_quarantine_to       = undef;

# Mail avec en-têtes mals formées
$final_bad_header_destiny = D_PASS;    #
$bad_header_quarantine_to = undef;

Définition du hostname

  • Si le hostname détecté par Amavis n'est pas un nom de domaine pleinement qualifié (FQDN), le service ne démarrera pas. On va donc définir le hostname du serveur :
$myhostname = "mail.glx";

Analyse du spam

  • Le service SpamAssassin attribue des scores aux messages qu'il scanne avant de les retourner à Amavis. En fonction des scores attribués Amavis influe sur l'acheminement du mail. Il est possible de régler les seuils de déclenchement de ses actions :
# Réglage du seuil de détection du Spam
$sa_tag_level_deflt = 3.0;  # Score à partir duquel les en-têtes X-Spam-Status,
                            # X-Spam-Score et X-Spam-Level sont ajoutées
$sa_tag2_level_deflt = 5.0; # Seuil à partir duquel le contenu de $sa_spam_subject_tag
                            # est ajouté dans l'objet du mail
$sa_kill_level_deflt = 5.0; # Déclenche la mise en quarantaine ainsi que l'action définit dans
                            # la variable $final_spam_destiny
$sa_spam_subject_tag = '*** SPAM *** ';

Application de la configuration

  • Pour appliquer la configuration, on redémarre Amavis :
ICON Terminal.png

service amavis restart

Conclusion

  • Finalement, le fichier /etc/amavis/conf.d/50-user ressemble à ceci :
# Activation de l'analyse anti-virus
#########################################
@bypass_virus_checks_maps = (
  \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

# Activation de l'analyse anti-spam
#########################################
@bypass_spam_checks_maps = (
  \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

# Scénario de distribution des messages :
# BOUNCE = Suppression mais envoi de l'échec de remise à l'émetteur
#          sauf pour les virus ou si le spam score > $sa_dsn_cutoff_level
# REJECT =  Suppression mais envoi d'une notification de rejet à l'émetteur
# DISCARD = Suppression sans échec de remise à l'émetteur
# PASS = Accepté
#########################################
# Mail contenant un virus
$final_virus_destiny      = D_BOUNCE;
$virus_quarantine_to      = $QUARANTINEDIR; # Mise en quarantaine dans /var/lib/amavis/virusmails
                                            # sinon, pour désactiver undef.
# Mail contenant une PJ interdite
$final_banned_destiny     = D_DISCARD;
$banned_quarantine_to     = undef; 

# Mail détecté comme SPAM
$final_spam_destiny       = D_PASS;
$spam_quarantine_to       = undef;

# Mail avec en-têtes mals formées
$final_bad_header_destiny = D_PASS;    #
$bad_header_quarantine_to = undef;

# Réglage du seuil de détection du Spam
$sa_tag_level_deflt = 3.0;  # Score à partir duquel les en-têtes X-Spam-Status,
                            # X-Spam-Score et X-Spam-Level sont ajoutées
$sa_tag2_level_deflt = 5.0; # Seuil à partir duquel le contenu de $sa_spam_subject_tag
                            # est ajouté dans l'objet du mail
$sa_kill_level_deflt = 5.0; # Déclenche la mise en quarantaine ainsi que l'action définit dans
                            # la variable $final_spam_destiny
$sa_spam_subject_tag = '*** SPAM *** ';

# Nom d'hôte de la machine
$myhostname = "mail.glx";

Postfix

  • Dans le fichier /etc/postfix/main.cf on insérera la ligne suivante qui permettra de transférer les mails reçus par Postfix à Amavis pour traitement :
content_filter = scan:127.0.0.1:10024
  • A la fin du fichier /etc/postfix/master.cf, on insère les éléments suivants :
scan      unix  -       -       n       -       16      smtp
        -o smtp_data_done_timeout=1200
        -o disable_dns_lookups=yes
  • Ainsi que ce bloc qui permettra de récupérer les mails traités par Amavis :
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
Amavis sur un serveur séparé de Postfix
  • Dans le cas d'un serveur Postfix séparé du serveur Amavis, il faudra adapter le contenu du paramètre content_filter en spécifiant l'IP du serveur Amavis :
content_filter = scan:10.0.0.44:10024
  • Mais aussi les paramètre du port d'écoute 10025 pour la récupération des mails traités par Amavis qui ne se fait plus sur l'interface locale :
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,10.0.0.44/32
 -o strict_rfc821_envelopes=yes
ICON boxWarning.png

Le filtre mynetworks est important puisqu'il n'autorise uniquement Amavis à communiquer avec Postfix sur l'interface 10025. Le cas échéant, tout le monde peut soumettre des requêtes SMTP au serveur et l'utiliser comme open relay.

  • On redémarre Postfix et on vérifie que ce dernier écoute bien sur le port 10025 depuis le serveur Amavis :
ICON Terminal.png

telnet 10.0.0.49 10025
Trying 10.0.0.49...
Connected to 10.0.0.49.
Escape character is '^]'.
220 geocoucou.net.ncad.fr ESMTP Postfix

  • À ce stade, on peut également vérifier - depuis le serveur Postfix - que Amavis écoute bien sur l'interface 10024 :
ICON Terminal.png

telnet 10.0.0.44 10024
Trying 10.0.0.44...
Connected to 10.0.0.44.
Escape character is '^]'.
220 [::ffff:10.0.0.44] ESMTP amavisd-new service ready

  • On redémarre Postfix pour appliquer les modifications :
ICON Terminal.png

service postfix restart

Validation

Réception d'un message sain

  • Pour effectue ce test, nous envoyons un message de la boîte mail nicolas.cachelou@ncad.me vers la boîte locale cacheln@mail.glx. Observons les logs dans /var/log/mail.log. Le courriel va transité par Postfix jusqu'à être placé en file d'attente (qmgr) tandis qu'un duplicata sera soumit pour analyse à Amavis.
Amavis Reception 1.png
1 Feb 10 17:19:19 alice postfix/smtpd[16906]: connect from geocoucou.net.ncad.fr[10.0.0.49]
1 Feb 10 17:19:19 alice postfix/smtpd[16906]: 8F856461BF9:
  client=geocoucou.net.ncad.fr[10.0.0.49]
2 Feb 10 17:19:19 alice postfix/cleanup[16911]: 8F856461BF9: message-id=
  <938e217153bc4d3d17b51efba0b6c485@ncad.me>
3 Feb 10 17:19:19 alice postfix/qmgr[15289]: 8F856461BF9: from=<nicolas.cachelou@ncad.me>,
  size=1608, nrcpt=1 (queue active)
Feb 10 17:19:19 alice postfix/smtpd[16906]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
  • Une fois le courriel analysé, il va être de nouveau envoyé à Postfix avec la mention Passed CLEAN. Le message va aussi contenir le numéro du premier message dans la file. Ce dernier va pouvoir être supprimé tandis que le message analysé va être délivré dans la boîte mail du destinataire.
Amavis Reception 2.png
2 Feb 10 17:19:52 alice postfix/smtpd[16935]: connect from localhost[127.0.0.1]
2 Feb 10 17:19:52 alice postfix/smtpd[16935]: 5B8EF461C21: client=localhost[127.0.0.1]
3 Feb 10 17:19:52 alice postfix/cleanup[16911]: 5B8EF461C21:
  message-id=<938e217153bc4d3d17b51efba0b6c485@ncad.me>
4 Feb 10 17:19:52 alice postfix/qmgr[15289]: 5B8EF461C21: from=<nicolas.cachelou@ncad.me>,
  size=2022, nrcpt=1 (queue active)
1 Feb 10 17:19:52 alice amavis[16881]: (16881-01) Passed CLEAN, [10.0.0.49] [109.190.9.125]
  <nicolas.cachelou@ncad.me> -> <cacheln@mail.glx>, Message-ID:
  <938e217153bc4d3d17b51efba0b6c485@ncad.me>, mail_id: hON7zClIHyZE, Hits: -0.998, size: 1608,
  queued_as: 5B8EF461C21, 32796 ms
6 Feb 10 17:19:52 alice postfix/smtp[16912]: 8F856461BF9</font>: to=<cacheln@mail.glx>,
  relay=127.0.0.1[127.0.0.1]:10024, delay=33, delays=0.05/0.01/0.02/33, dsn=2.0.0, status=sent
  (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 5B8EF461C21)
6 Feb 10 17:19:52 alice postfix/qmgr[15289]: 8F856461BF9: removed
5 Feb 10 17:19:52 alice postfix/virtual[16937]: 5B8EF461C21: to=<cacheln@mail.glx>,
  relay=virtual, delay=0.11, delays=0.04/0.02/0/0.05, dsn=2.0.0, status=sent (delivered to
  maildir)
5 Feb 10 17:19:52 alice postfix/qmgr[15289]: 5B8EF461C21: removed

Réception d'un Spam

  • Pour tester le comportement de SpamAssassin, on va s'envoyer un faux positif; c'est à dire un courriel censé être détecté comme spammeur. Pour cela, on s’envoie un courriel contenant la chaîne de caractères suivante :
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
  • Le courriel va transité par Postfix jusqu'à être placé en file d'attente (qmgr) tandis qu'un duplicata sera soumit pour analyse à Amavis.
Amavis Reception Spam 1.png
1 Feb 10 21:15:42 alice postfix/smtpd[17186]: connect from geocoucou.net.ncad.fr[10.0.0.49]
1 Feb 10 21:15:42 alice postfix/smtpd[17186]: 124A5461C16:
  client=geocoucou.net.ncad.fr[10.0.0.49]
2 Feb 10 21:15:42 alice postfix/cleanup[17191]: 124A5461C16: message-id=
  <07979d34eb1c3b64d76c303f6e82b714@ncad.me>
3 Feb 10 21:15:42 alice postfix/qmgr[15289]: 124A5461C16: from=<nicolas.cachelou@ncad.me>,
  size=1854, nrcpt=1 (queue active)
Feb 10 21:15:42 alice postfix/smtpd[17186]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
  • Une fois le courriel analysé, il va être de nouveau envoyé à Postfix avec la mention Passed SPAM. Le message va aussi contenir le numéro du premier message dans la file. Ce dernier va pouvoir être supprimé tandis que le message analysé va être délivré dans la boîte mail du destinataire.
Amavis Reception Spam 2.png
2 Feb 10 21:15:45 alice postfix/smtpd[17198]: connect from localhost[127.0.0.1]
2 Feb 10 21:15:45 alice postfix/smtpd[17198]: A2561461C48: client=localhost[127.0.0.1]
3 Feb 10 21:15:45 alice postfix/cleanup[17191]: A2561461C48:
  message-id=<07979d34eb1c3b64d76c303f6e82b714@ncad.me>
4 Feb 10 21:15:45 alice postfix/qmgr[15289]: A2561461C48: from=<nicolas.cachelou@ncad.me>,
  size=2587, nrcpt=1 (queue active)
1 Feb 10 21:15:45 alice amavis[17121]: (17121-01) Passed SPAM, [10.0.0.49] [109.190.9.125]
  <nicolas.cachelou@ncad.me> -> <cacheln@mail.glx>, quarantine: 8/spam-8JozlTsx79Lv.gz,
  Message-ID: <07979d34eb1c3b64d76c303f6e82b714@ncad.me>, mail_id: 8JozlTsx79Lv, Hits: 999.002,
  size: 1854, queued_as: A2561461C48, 3587 ms
6 Feb 10 21:15:45 alice postfix/smtp[17192]: 124A5461C16: to=<cacheln@mail.glx>,
  relay=127.0.0.1[127.0.0.1]:10024, delay=3.7, delays=0.05/0.01/0.01/3.6, dsn=2.0.0,
  status=sent (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as A2561461C48)
6 Feb 10 21:15:45 alice postfix/qmgr[15289]: 124A5461C16: removed
5 Feb 10 21:15:45 alice postfix/virtual[17200]: A2561461C48: to=<cacheln@mail.glx>,
  relay=virtual, delay=0.13, delays=0.04/0.03/0/0.06, dsn=2.0.0, status=sent (delivered to
  maildir)
5 Feb 10 21:15:45 alice postfix/qmgr[15289]: A2561461C48: removed
ICON Light.png
Une copie du mail a été placée en quarantaine dans le répertoire /var/lib/amavis/virusmail/8/.

Réception d'un virus

  • Pour vérifier le comportement de Amavis on va envoyer un courriel contenant la signature d'un virus qui déclenche un faux-positif. Pour cela, avec notre courriel on y attachera un fichier texte en pièce jointe. Dans ce fichier texte nous renseigneront la ligne suivante :
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
  • Nous effectuons le test de réception toujours sur la boîte cacheln@mail.glx. Observons maintenant les logs relevés dans /var/log/mail.log. Le message transite jusqu'au gestionnaire de file qmgr où il y stationnera. Une copie du message est transmise au serveur amavis pour être analysée.
Amavis Reception Virus 1.png
1 Feb 10 20:18:31 alice postfix/smtpd[17029]: connect from geocoucou.net.ncad.fr[10.0.0.49]
1 Feb 10 20:18:31 alice postfix/smtpd[17029]: C0970461C16: client=geocoucou.net.ncad.fr[10.0.0.49]
2 Feb 10 20:18:31 alice postfix/cleanup[17034]: C0970461C16: message-id=
  <9093941fa27ce9148dda2acebf0f21bd@ncad.me>
3 Feb 10 20:18:31 alice postfix/qmgr[15289]: C0970461C16: from=<nicolas.cachelou@ncad.me>,
  size=1990, nrcpt=1 (queue active)
Feb 10 20:18:31 alice postfix/smtpd[17029]: disconnect from geocoucou.net.ncad.fr[10.0.0.49]
4 Feb 10 20:18:32 alice amavis[16882]: (16882-01) Blocked INFECTED (Eicar-Test-Signature),
  [10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> -> <cacheln@mail.glx>,
  quarantine: I/virus-Ibga6nwCOMoV, Message-ID: <9093941fa27ce9148dda2acebf0f21bd@ncad.me>,
  mail_id: Ibga6nwCOMoV, Hits: -, size: 1990, 186 ms
  • Amavis identifie un virus dans le courriel qu'il va taguer comme tel (INFECTED: Eicar-Test-Signature) et le placer en quarantaine dans le fichier /var/lib/amavis/I/virus-Ibga6nwCOMoV. De ce fait, Postfix va supprimer le message en file d'attente avec le code dns=2.7.0 (pas de remise d'échec pour l'émetteur) ainsi que le message scanné qui lui a été remis en début de file.
Amavis Reception Virus 2.png
Feb 10 20:18:32 alice amavis[16882]: (16882-01) Blocked INFECTED (Eicar-Test-Signature),
  [10.0.0.49] [109.190.9.125] <nicolas.cachelou@ncad.me> -> <cacheln@mail.glx>,
  quarantine: I/virus-Ibga6nwCOMoV, Message-ID: <9093941fa27ce9148dda2acebf0f21bd@ncad.me>,
  mail_id: Ibga6nwCOMoV, Hits: -, size: 1990, 186 ms
Feb 10 20:18:32 alice postfix/smtp[17035]: C0970461C16: to=<cacheln@mail.glx>,
  relay=127.0.0.1[127.0.0.1]:10024, delay=0.26, delays=0.06/0.01/0.01/0.18, dsn=2.7.0,
  status=sent (250 2.7.0 Ok, discarded, id=16882-01 - INFECTED: Eicar-Test-Signature)
Feb 10 20:18:32 alice postfix/qmgr[15289]: C0970461C16: removed

Fonctions & Comportements

Listage

  • Amavis intègre un système de listage des adresses émetteur sous forme de tableau. Ce système fonctionne par l'affectation de points si la condition est remplie. Si la condition est remplis et qu'elle est associée à un crédit de points on place en liste noire cette condition. Si au contraire, la condition est remplis mais qu'elle est associée à un débit de points on place en liste blanche cette condition.
  • La condition définie plus haut peut être soit une adresse mail, un nom de domaine voir une regexp. Voici la configuration par défaut de Amavis :
@score_sender_maps = ({
  '.' => [
    new_RE(
     [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i         => 6.0],
     [qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'i=> 6.0],
     [qr'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 6.0],
     [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i   => 6.0],
     [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i  => 6.0],
     [qr'^(your_friend|greatoffers)@'i                                => 6.0],
     [qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i                    => 6.0],
    ),
  ],
});
  • C'est dans le tableau @score_sender_maps que sont définis les listes. Nous allons copier cette configuration dans le fichier /etc/amavis/conf.d/50-user afin de pouvoir la personnaliser.

Listes noires

  • Pour mettre en liste noire un émetteur, il va falloir augmenter le score attribué à tous ses mails pour le considérer comme indésirable. En fonction du score globale, l'acheminement pourra en être altéré en fonction du Scénario de filtrage et de l'Analyse du spam. Dans notre cas, un score supérieure à 5 considère le message comme indésirable.
  • Nous allons définir en liste noire l'émetteur nicolas.cachelou@ncad.me. Cette règle s'appliquera aux messages à destination de la boîte cacheln@mail.glx uniquement. Pour cela, nous allons adapter le tableau @score_sender_maps comme ceci :
@score_sender_maps = ({

'cacheln@mail.glx' => [{'nicolas.cachelou@ncad.me' => 6}],

  '.' => [
    new_RE(
     [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i         => 6.0],
     [qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'i=> 6.0],
     [qr'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 6.0],
     [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i   => 6.0],
     [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i  => 6.0],
     [qr'^(your_friend|greatoffers)@'i                                => 6.0],
     [qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i                    => 6.0],
    ),
  ],
});
  • On redémarre Amavis pour appliquer les paramètres.
ICON Terminal.png

service amavis restart

Listes blanches

  • Pour mettre en liste blanche un émetteur, il va falloir diminuer le score attribué à tous ses mails pour le considérer comme propre même si il est considéré comme indésirable par SpamAssassin. Le score maximum pouvant être atteint par un message considéré comme du spam est d'environ 999.
  • Nous allons définir en liste blanche l'émetteur nicolas.cachelou@ncad.me. Cette règle s'appliquera aux messages à destination de la boîte cacheln@mail.glx uniquement. Pour cela, nous allons adapter le tableau @score_sender_maps comme ceci :
@score_sender_maps = ({

'cacheln@mail.glx' => [{'nicolas.cachelou@ncad.me' => -999}],

  '.' => [
    new_RE(
     [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i         => 6.0],
     [qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'i=> 6.0],
     [qr'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 6.0],
     [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i   => 6.0],
     [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i  => 6.0],
     [qr'^(your_friend|greatoffers)@'i                                => 6.0],
     [qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i                    => 6.0],
    ),
  ],
});
  • On redémarre Amavis pour appliquer les paramètres.

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. On édite le fichier /etc/amavis/conf.d/50-user et on y insère la ligne suivante :
$warnvirusrecip = 1;
  • On redémarre Amavis pour appliquer les paramètres.
ICON Terminal.png

service amavis restart

  • Voici un exemple type de message remis au destinataire lorsqu'un mail contient un virus :
VIRUS ALERT

Our content checker found
    virus: Eicar-Test-Signature

in an email to you from:
  nicolas.cachelou@ncad.me

Content type: Virus
Our internal reference code for your message is 02732-01/0azzGAoaMogj

First upstream SMTP client IP address: [10.0.0.49] 
According to a 'Received:' trace, the message originated at: [109.190.9.125],
  webmail.ncad.me ro-010.net.ncad.fr [109.190.9.125]

Return-Path: <nicolas.cachelou@ncad.me>
From: nicolas.cachelou@ncad.me
Message-ID: <d76a8884ccca63795164198923bd602d@ncad.me>
User-Agent: Roundcube Webmail/RCMAIL_VERSION
Subject: Fwd: test virus
The message has been quarantined as: 0azzGAoaMogj

Please contact your system administrator for details.

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 bannie. Pour cela, on va activer le paramètre $warnbannedrecip. On édite le fichier /etc/amavis/conf.d/50-user et on y insère la ligne suivante :
$warnbannedrecip = 1;
  • On redémarre Amavis pour appliquer les paramètres.
ICON Terminal.png

service amavis restart

  • Voici un exemple type de message remis au destinataire lorsqu'un mail contient une pièce jointe interdite :
BANNED CONTENTS ALERT

Our content checker found
    banned name: text/plain,.txt,test.exe

in an email to you from:
  nicolas.cachelou@ncad.me

Content type: Banned
Our internal reference code for your message is 03572-01/vTYqW8A49XZN

First upstream SMTP client IP address: [10.0.0.49] 
According to a 'Received:' trace, the message originated at: [109.190.9.125],
  webmail.ncad.me ro-010.net.ncad.fr [109.190.9.125]

Return-Path: <nicolas.cachelou@ncad.me>
From: nicolas.cachelou@ncad.me
Message-ID: <094c4f0a8ef29924ed05abd60d9aa73c@ncad.me>
User-Agent: Roundcube Webmail/RCMAIL_VERSION
Subject: Application
The message has been quarantined as: vTYqW8A49XZN

Please contact your system administrator for details.

Notification en-têtes invalides

  • On peut informer le destinataire qu'un courriel lui étant destiné a été supprimé car les en-têtes n'étaient pas valides. Pour cela, on va activer le paramètre $warnbadhrecip. On édite le fichier /etc/amavis/conf.d/50-user et on y insère la ligne suivante :
$warnbadhrecip = 1;
  • On redémarre Amavis pour appliquer les paramètres.
ICON Terminal.png

service amavis restart

Annexes

Fichier /etc/amavis/conf.d/50-user

# Activation de l'analyse anti-virus
#########################################
@bypass_virus_checks_maps = (
  \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

# Activation de l'analyse anti-spam
#########################################
@bypass_spam_checks_maps = (
  \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

# Scénario de distribution des messages :
# BOUNCE = Suppression mais envoi de l'échec de remise à l'émetteur
#          sauf pour les virus ou si le spam score > $sa_dsn_cutoff_level
# REJECT =  Suppression mais envoi d'une notification de rejet à l'émetteur
# DISCARD = Suppression sans échec de remise à l'émetteur
# PASS = Accepté
#########################################
# Mail contenant un virus
$final_virus_destiny      = D_BOUNCE;
$virus_quarantine_to      = $QUARANTINEDIR; # Mise en quarantaine dans /var/lib/amavis/virusmails
                                            # sinon, pour désactiver undef.
$warnvirusrecip           = 1;              # Notification de rejet virus

# Mail contenant une PJ interdite
$final_banned_destiny     = D_DISCARD;
$banned_quarantine_to     = undef;          # Pas de quarantaine
$warnbannedrecip          = 1;              # Notification rejet PJ

# Mail détecté comme SPAM
$final_spam_destiny       = D_PASS;
$spam_quarantine_to       = undef;          # Pas de quarantaine

# Mail avec en-têtes mals formées
$final_bad_header_destiny = D_PASS;
$bad_header_quarantine_to = undef;          # Pas de quarantaine
$warnbadhrecip            = 0;              # Notification rejet en-têtes

# Réglage du seuil de détection du Spam
$sa_tag_level_deflt = 3.0;  # Score à partir duquel les en-têtes X-Spam-Status,
                            # X-Spam-Score et X-Spam-Level sont ajoutées
$sa_tag2_level_deflt = 5.0; # Seuil à partir duquel le contenu de $sa_spam_subject_tag
                            # est ajouté dans l'objet du mail
$sa_kill_level_deflt = 5.0; # Déclenche la mise en quarantaine ainsi que l'action définit dans
                            # la variable $final_spam_destiny
$sa_spam_subject_tag = '*** SPAM *** ';

# Nom d'hôte de la machine
$myhostname = "mail.glx";

# Listes blanches / noires
#########################################
@score_sender_maps = ({
  #'user@domain.tld' => [{'adresse@blacklister.tld' => 6}],
  #'user@domain.tld' => [{'adresse@whitelister.tld' => -999}],
  '.' => [
    new_RE(
     [qr'^(bulkmail|offers|cheapbenefits|earnmoney|foryou)@'i         => 6.0],
     [qr'^(greatcasino|investments|lose_weight_today|market\.alert)@'i=> 6.0],
     [qr'^(money2you|MyGreenCard|new\.tld\.registry|opt-out|opt-in)@'i=> 6.0],
     [qr'^(optin|saveonlsmoking2002k|specialoffer|specialoffers)@'i   => 6.0],
     [qr'^(stockalert|stopsnoring|wantsome|workathome|yesitsfree)@'i  => 6.0],
     [qr'^(your_friend|greatoffers)@'i                                => 6.0],
     [qr'^(inkjetplanet|marketopt|MakeMoney)\d*@'i                    => 6.0],
    ),
  ],
});

Liens