E-mail / Debian 10 : 2/3

Mémento 11.2 - Antispam et Antivirus

Amavisd-New assurera la relation entre le MTA Postfix et des outils de filtrage du courrier indésirable tels l'anti-virus ClamAV et l'anti-spam SpamAssassin.

10 - Filtrage du courrier indésirable

10.1 - Ajout de Amavisd-New

Le filtrage du courrier consommera de la ressource mémoire. Pour pouvoir continuer, il vous faut augmenter si possible celle-ci de 384 Mo à au moins 2 Go.

A défaut de mémoire disponible, vous pouvez ajouter une mémoire virtuelle de 3 Go en créant un fichier swap qui viendra compléter la partition swap déjà existante.

Suivez ce lien pour créer un fichier swap.

Une fois la mémoire étendue, installez Amavisd-New :

[srvdmz@srvdmz:~$] sudo apt  install amavisd-new

Une alerte concernant le nom d'hôte pleinement qualifié du serveur (FQDN) apparaîtra et entrainera le non démarrage automatique du service amavis.

Pour corriger cela, éditez le fichier 05-node_id :

[srvdmz@srvdmz:~$] cd /etc/amavis/conf.d
[srvdmz@srvdmz:~$] sudo nano 05-node_id

Puis décommentez et modifiez la ligne commençant par $myhostname comme suit :

$myhostname = "srvdmz.loupvirtuel.fr";

Démarrez ensuite manuellement le service amavis :

[srvdmz@srvdmz:~$] sudo systemctl start amavis

et contrôlez son fonctionnement à l'aide de ces 2 Cdes :

[srvdmz@srvdmz:~$] telnet 127.0.0.1 10024 # quit pour fermer
[srvdmz@srvdmz:~$] sudo lsof -i | grep 10024     # port amavis

Un groupe/utilisateur amavis a été créé sur le système.

Relevez maintenant la liste des décodeurs ou autres déclarés comme non installés :

[srvdmz@srvdmz:~$]  sudo systemctl status amavis

et ajoutez ceux manquants :

[srvdmz@srvdmz:~$] sudo apt install rpm arj cabextract nomarch unrar-free p7zip-full lz4 lzop lrzip altermime

Redémarrez amavis et vérifiez son nouveau statut :

[srvdmz@srvdmz:~$] sudo systemctl restart amavis
[srvdmz@srvdmz:~$] sudo systemctl status amavis
Capture - Amavisd-New : Statut du service amavis
Amavisd-New : Statut du service amavis

Seuls les décodeurs pour les fichiers joints .doc et .zoo ne sont pas fournis par Debian 10 et le traitement de l'extension .F est désactivé par défaut.

Pour consulter les logs, utilisez les Cdes suivantes :

[srvdmz@srvdmz:~$] sudo  cat /var/log/syslog | grep amavis
[srvdmz@srvdmz:~$] sudo cat /var/log/mail.log | grep amavis

10.2 - Ajout du scanner de virus ClamAV

Installez les 2 paquets suivants :

[srvdmz@srvdmz:~$] sudo apt  install clamav clamav-daemon

Un groupe/utilisateur clamav et 2 services ont été créés.

Vérifiez le statut du service de MAJ des Bdd ClamAV :

[srvdmz@srvdmz:~$] sudo systemctl status clamav-freshclam
Capture - ClamAV : Statut du service clamav-freshclam
ClamAV : Statut du service clamav-freshclam

ainsi que ses logs :

[srvdmz@srvdmz:~$] sudo journalctl -eu clamav-freshclam
Capture - ClamAV : Logs du service clamav-freshclam
ClamAV : Logs du service clamav-freshclam

Les Bdd daily, main et bytecode doivent être updated.

Redémarrez le service clamav-freshclam :

[srvdmz@srvdmz:~$] sudo systemctl restart clamav-freshclam
[srvdmz@srvdmz:~$] sudo systemctl status clamav-freshclam

Si Bdd up to date, démarrez le service clamav-daemon :

[srvdmz@srvdmz:~$] sudo systemctl start clamav-daemon
[srvdmz@srvdmz:~$] sudo systemctl status clamav-daemon
Capture - ClamAV : Statut du service clamav-daemon
ClamAV : Statut du service clamav-daemon

Au prochain boot système, le service clamav-daemon démarrera automatiquement.

Le scan d'un dossier peut déjà s'effectuer comme suit :

[srvdmz@srvdmz:~$] sudo clamscan /home/srvdmz
Capture - ClamAV : Scan du dossier /home/srvdmz
ClamAV : Scan du dossier /home/srvdmz

Les logs sont consultables dans /var/log/clamav/.

10.3 - Ajout de l'anti-spam SpamAssassin

Installez le paquet suivant :

[srvdmz@srvdmz:~$] sudo apt  install spamassassin
[srvdmz@srvdmz:~$] sudo systemctl start spamassassin
[srvdmz@srvdmz:~$] sudo systemctl status spamassassin
Capture - SpamAssassin : Statut du service spamassassin
SpamAssassin : Statut du service spamassassin

Si OK, activez spamassassin au boot du système :

[srvdmz@srvdmz:~$] sudo systemctl enable spamassassin

Un groupe/utilisateur debian-spamd a été créé.

Pour consulter les logs, utilisez la Cde :

[srvdmz@srvdmz:~$] sudo cat /var/log/mail.log | grep spamd

10.4 - Réglage de Postfix et Amavisd-New

- - Configuration Postfix - -

Amavis travaille comme un proxy SMTP. Le courrier entrant transféré par Postfix via SMTP est traité et retourné vers celui-ci via une nouvelle connexion SMTP.

Pour transférer le courrier entrant, éditez main.cf :

[srvdmz@srvdmz:~$]  sudo nano /etc/postfix/main.cf

et ajoutez les lignes suivantes à la fin de celui-ci :

# Transfert du courrier entrant vers Amavis pour filtrage
content_filter = smtp-amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings

La 3ème ligne désactive les réécritures d'adresses (alias, etc... ) avant filtrage.

Editez également le fichier master.cf :

[srvdmz@srvdmz:~$] sudo nano /etc/postfix/master.cf

Ajoutez ceci pour la liaison SMTP Postfix vers Amavis :

# Connexion SMTP de Postfix vers Amavis
smtp-amavis unix - - - - 2 smtp
    -o smtp_data_done_timeout=1200  
    -o smtp_send_xforward_command=yes  
    -o disable_dns_lookups=yes  
    -o max_use=20 

et ceci pour la liaison SMTP Amavis vers Postfix :

# Connexion SMTP de Amavis vers Postfix
127.0.0.1:10025 inet n - - - - smtpd  
    -o content_filter=
    -o mynetworks=127.0.0.0/8
    -o local_recipient_maps=  
    -o relay_recipient_maps=  
    -o smtpd_restriction_classes=  
    -o smtpd_delay_reject=no  
    -o smtpd_client_restrictions=permit_mynetworks,reject  
    -o smtpd_helo_restrictions=  
    -o smtpd_sender_restrictions=  
    -o smtpd_recipient_restrictions=permit_mynetworks,reject  
    -o smtpd_data_restrictions=reject_unauth_pipelining  
    -o smtpd_end_of_data_restrictions=  
    -o smtpd_error_sleep_time=0  
    -o smtpd_soft_error_limit=1001  
    -o smtpd_hard_error_limit=1000  
    -o smtpd_client_connection_count_limit=0  
    -o smtpd_client_connection_rate_limit=0  
    -o receive_override_options=no_header_body_checks,\
        no_unknown_recipient_checks  
    -o smtpd_tls_security_level=none

Le caractère \ indique d'écrire le tout sur une seule ligne.

Terminez en plaçant les 4 lignes suivantes sous celle commençant par pickup unix ... :

pickup unix   n    -    -    60    1    pickup   # Ligne existante
# Amavis début   
   -o content_filter=   
   -o receive_override_options=no_header_body_checks   
# Amavis fin

Cela empêchera les messages générés pour signaler du spam d'être classés comme spam.

Nota : Toutes les lignes ci-dessus commençant par -o doivent être indentées de 2 espaces.

Redémarrez le service postfix :

[srvdmz@srvdmz:~$] sudo systemctl restart postfix

et vérifiez qu'il écoute bien sur le port SMTP10025 :

[srvdmz@srvdmz:~$] telnet 127.0.0.1 10025

Ctrl droite + AltGr + ] = ^] => prompt telnetquit

Capture - Postfix : Ecoute sur le port SMTP 10025
Postfix : Ecoute sur le port SMTP 10025

- - Configuration Amavis - -

Pour info, les fichiers de configuration situés dans /etc/amavis/conf.d/ sont lus par ordre alphabétique. Un même paramètre présent dans ces fichiers verra la lecture de sa dernière valeur prise en compte. Le fichier 50-user est le dernier à être lu.

La détection anti-virus et anti-spam pour les courriers n'est pas activée par défaut.

Pour l'activer, éditez le fichier 15-content_filter_mode :

[srvdmz@srvdmz:~$] cd /etc/amavis/conf.d
[srvdmz@srvdmz:~$] sudo nano 15-content_filter_mode

et décommentez les 4 lignes de bypass ci-dessous :

use strict;

# You can ... re-enable SPAM checking through spamassassin
# and to re-enable antivirus checking.

#
# Default antivirus checking mode
# Please note, that anti-virus checking is DISABLED by
# default.
# If ... to enable it, please uncomment the following lines:

 @bypass_virus_checks_maps = (
    \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

#
# Default SPAM checking mode
# Please note, that anti-spam checking is DISABLED by
# default.
# If ... to enable it, please uncomment the following lines:

 @bypass_spam_checks_maps = (
    \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);

Exécutez les Cdes suivantes afin que amavis et clamav puissent partager leurs informations :

[srvdmz@srvdmz:~$] sudo adduser clamav amavis
[srvdmz@srvdmz:~$] sudo adduser amavis clamav

Amavis communiquera avec ClamAV via le socket Unix /var/run/clamav/clamd.ctl.

Réduisez la consommation des ressources système en éditant le fichier 50-user :

[srvdmz@srvdmz:~$]  sudo nano /etc/amavis/conf.d/50-user

et en ajoutant ceci juste avant la ligne Do not modify ... :

$max_servers = 2;

Amavis verra ainsi ses processus enfants limités à 2.

La Cde ci-dessous permet de connaitre les ressources CPU et mémoire consommées :

[srvdmz@srvdmz:~$] ps aux | grep '%MEM\|amavis'

Redémarrez le service amavis et contrôlez son statut :

[srvdmz@srvdmz:~$] sudo systemctl restart amavis
[srvdmz@srvdmz:~$] sudo systemctl status amavis 
Capture - Amavisd-New : Scanners de ClamAV pris en compte
Amavisd-New : Scanners de ClamAV pris en compte

Le scanner utilisé soit le primary travaille en RAM, le secondary plus lent sert de secours.

10.5 - Réglage du scanner de virus ClamAV

Les fichiers sont situés dans /etc/clamav/.

Il est possible de réduire la fréquence de MAJ des Bdd en éditant le fichier freshclam.conf :

[srvdmz@srvdmz:~$] sudo nano /etc/clamav/freshclam.conf

et en modifiant la valeur du paramètre Checks à 3 :

Checks 3

Les MAJ seront effectuées 3 fois par jour au lieu de 24.

Un restart manuel de clamav-daemon provoque ceci :

[srvdmz@srvdmz:~$] sudo systemctl restart clamav-daemon
[srvdmz@srvdmz:~$] sudo systemctl status clamav-daemon

.../mkdir /run/clamav (code=exited, status=1/FAILURE)

Pour corriger cela, éditez le fichier extend.conf :

[srvdmz@srvdmz:~$] cd /etc/systemd/system
[srvdmz@srvdmz:~$] sudo nano clamav-daemon.service.d/extend.conf

et modifiez la ligne contenant mkdir comme suit :

ExecStartPre=-/bin/mkdir -p /run/clamav

Rechargez la config systemd et redémarrez le service :

[srvdmz@srvdmz:~$] sudo systemctl daemon-reload
[srvdmz@srvdmz:~$] sudo systemctl restart clamav-daemon
[srvdmz@srvdmz:~$] sudo systemctl status clamav-daemon

Celui-ci fonctionnera dorénavant correctement.

Si vous avez créé un fichier swap, ajoutez ces lignes dans le fichier extend.conf :

IOSchedulingPriority = 7
CPUSchedulingPolicy = 5
MemoryMax=128M
CPUQuota=10%
Nice = 19
TimeoutStartSec=8mn

Rebootez et observez avec conky le remplissage progressif de celui-ci par clamav (~1,5 Go).

10.6 - Réglage de l'anti-spam SpamAssassin

Les fichiers sont situés dans /etc/spamassassin/ et /etc/default/.

Pour une meilleure détection des spams, installez les 2 plugins pyzor et razor :

[srvdmz@srvdmz:~$]  sudo apt install pyzor razor

Initialisez ensuite razor :

[srvdmz@srvdmz:~$] su root
[root@srvdmz:~#]  su amavis -c 'razor-admin -create'
[root@srvdmz:~#]  su amavis -c 'razor-admin -register'

Retour :

Register successful.  Identity stored in /var/lib/amavis/.razor/identity-ruA4...

Déclarez l'utilisation des 2 plugins en éditant local.cf :

[root@srvdmz:~#]  exit
[srvdmz@srvdmz:~$] sudo nano /etc/spamassassin/local.cf

et en ajoutant les 3 lignes suivantes à la fin du fichier :

# Utilisation pour chaque courrier des plugins Pyzor et Razor
use_pyzor 1
use_razor2 1

Redémarrez le service spamassassin :

[srvdmz@srvdmz:~$]  sudo systemctl restart spamassassin

Pour tester l'usage des plugins, téléchargez ce fichier :

[srvdmz@srvdmz:~$]  cd /home/srvdmz
[srvdmz@srvdmz:~$] wget https://github.com/apache/\
                      spamassassin/blob/trunk/sample-spam.txt

Le caractère \ indique d'écrire le tout sur une seule ligne.

Lancez ensuite la Cde ci-dessous :

[srvdmz@srvdmz:~$] su root
[root@srvdmz:~#]  su debian-spamd -c "spamassassin -D -t \
< sample-spam.txt 2>&1 | egrep 'pyzor|razor'"

Le caractère \ indique d'écrire le tout sur une seule ligne.

et observez ces lignes dans le retour affiché :

Apr..dbg: pyzor: network tests on, attempting Pyzor
Apr..dbg: razor2: razor2 is available, version 2.84
Apr..dbg: config:../var/lib/spamass.../25_pyzor.cf
Apr..dbg: config:../25_pyzor.cf" for included file
Apr..dbg: config: read file..spamass../25_pyzor.cf
Apr..dbg: config:../var/lib/spamass../25_razor2.cf
Apr..dbg: config:../25_razor2.cf" for included file
Apr..dbg: config: read file..spamas../25_razor2.cf
Apr..dbg: razor2: part=0 engine=8 contested=0 con..
Apr..dbg: razor2: results: spam? 0
Apr..dbg: razor2: results: engine 8, highest cf s..
Apr..dbg: razor2: results: engine 4, highest cf s..
Apr..dbg:..executable for pyzor was found at /us..
Apr..dbg: pyzor: pyzor is available: /usr/bin/pyzor
Apr..dbg: pyzor: opening..pyzor check < /tmp/.sp..
Apr..dbg: pyzor: [4736] finished: exit 1
Apr..dbg: pyzor:..res..pyzor.org:24441 (200, 'OK')
Apr..dbg: timing:..check_razor2:..%), check_pyzor:
[root@srvdmz:~#]  exit

Vous allez à présent mettre à jour les règles anti-spam.

Au préalable, vérifiez que gnupg est installé sinon :

[srvdmz@srvdmz:~$]  sudo apt install gnupg

Listez les modules perl requis mais vus manquants :

[srvdmz@srvdmz:~$] spamassassin -D --lint 2>&1 | grep -i failed

et installez ceux concernés :

[srvdmz@srvdmz:~$]  sudo apt install libencode-detect-perl \
libgeo-ip-perl \
libmail-spf-perl \
libnet-cidr-lite-perl \
liblwp-useragent-determined-perl \
libnet-patricia-perl \
libbsd-resource-perl

Le caractère \ indique d'écrire le tout sur une seule ligne.

Pour le module perl digest::SHA1, vérifiez que les paquets suivants sont installés sur srvdmz :

make, gcc et libc6-dev

et installez le module comme ceci :

[srvdmz@srvdmz:~$] sudo cpan install Digest::SHA1

Retour :

Would you ... configure ... automati...? [yes] Enter

L'installation du module doit se terminer normalement.

Mettez enfin à jour les règles anti-spam :

[srvdmz@srvdmz:~$]  sudo sa-update -D

La MAJ est observable dans le dossier suivant :

[srvdmz@srvdmz:~$] cd /var/lib/spamassassin/3.004002
[srvdmz@srvdmz:~$] sudo ls -l updates_spamassassin_org

Le service spamassassin assurera par la suite cette mise à jour automatiquement.

11 - Tests

11.1 - Détection automatique d'un SPAM

Par défaut, les courriers détectés comme SPAM sont mis en quarantaine dans un sous-dossier de /var/lib/amavis/virusmails/ et transmis aux destinataires marqués du tag ***SPAM*** dans le champ Sujet.

Le fichier /etc/amavis/conf.d/20-debian_defaults montre les paramètres suivants :

$sa_spam_subject_tag = '***SPAM***  ';                       # TAG
$final_spam_destiny       = D_PASS;            # SPAM transmis

Envoyez, depuis srvlan, un courrier de postmaster vers clientmail-vm2 contenant ceci :

Début
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-\
ANTI-UBE-TEST-EMAIL*C.34X
Ce courrier doit normalement être traité comme spam.
Le destinataire clientmail-vm2 le recevra déclaré SPAM.
Le sujet du courrier sera complété du tag ***SPAM***.
Fin

Le caractère \ indique d'écrire le tout sur une seule ligne.

Vérifiez sur debian10-vm2 que clientmail-vm2 le reçoit bien notifié du tag ***SPAM*** :

Capture - Thunderbird : Tag ***SPAM*** inclus dans le sujet
Thunderbird : Tag ***SPAM*** inclus dans le sujet

Une ligne amavis ... Passed SPAM ... doit être présente dans le fichier /var/log/mail.log.

[srvdmz@srvdmz:~$] sudo cat /var/log/mail.log | grep amavis
Capture - Amavisd-New : SPAM mis en quarantaine
Amavisd-New : SPAM mis en quarantaine

11.2 - Détection automatique d'un VIRUS

Par défaut, les VIRUS détectés sont mis en quarantaine dans un sous-dossier de /var/lib/amavis/virusmails/ et non transmis aux destinataires.

L'administrateur est en revanche informé de la présence et mise en quarantaine des virus.

Vous allez demander que les destinataires soient aussi informés de cette mise en quarantaine.

Editez pour cela le fichier 50-user :

[srvdmz@srvdmz:~$] sudo nano /etc/amavis/conf.d/50-user

et ajoutez ces 2 lignes juste après $max_servers :

# Destinataires notifiés de l'existence d'un virus
$warnvirusrecip = 1;

Redémarrez ensuite le service amavis :

[srvdmz@srvdmz:~$] sudo systemctl restart amavis

Envoyez à présent, depuis srvlan, un courrier de srvlan vers clientmail-vm1 contenant ceci :

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-\
ANTIVIRUS-TEST-FILE!$H+H*

Le caractère \ indique d'écrire le tout sur une seule ligne.

Vérifiez que postmaster et clientmail-vm1 reçoivent bien une information de détection de virus.

Capture - Thunderbird : Information de virus détecté
Thunderbird : Information de virus détecté

Une ligne montrant amavis ... Blocked INFECTED ... et une autre quarantine: h/virus ... doivent être présentes dans /var/log/mail.log. Le h/virus signifie une mise en quarantaine dans /var/lib/amavis/virusmails/h/.

Capture - Amavisd-New : VIRUS mis en quarantaine
Amavisd-New : VIRUS mis en quarantaine
Image - Rédacteur satisfait


Voilà !
Le courrier indésirable est géré.
La partie 3 vous attend pour
traiter le WebMail avec Roundcube ...

Laisser un commentaire