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
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
ainsi que ses logs :
[srvdmz@srvdmz:~$] sudo journalctl -eu 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
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
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
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 SMTP n° 10025 :
[srvdmz@srvdmz:~$] telnet 127.0.0.1 10025
Ctrl droite + AltGr + ] = ^] => prompt telnet > quit
- - 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
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*** :
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
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.
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/.
![Image Pixabay - Sanalinsan Image - Rédacteur satisfait](/wp-content/uploads/2019/02/redacteur_satisfait_bis.png)
Voilà !
Le courrier indésirable est géré.
La partie 3 vous attend pour
traiter le WebMail avec Roundcube ...