E-mail / Debian : 2/3

Synoptique - Serveur E-mail Postfix + Postscreen, Rspamd, Clamav : Partie 2 - Mémento 11.2
Postfix + Postscreen, Rspamd et Clamav

Mémento 11.2 - Postscreen / Rspamd

Le filtrage du courrier indésirable fera appel aux outils antispam Postscreen et Rspamd plus récents que SpamAssassin ainsi qu'à l'antivirus ClamAV.

10 - Filtrage du courrier indésirable

Le filtrage exigera de la ressource mémoire, ClamAV en sera le principal consommateur.

Vérifiez la mémoire de base actuellement utilisée :

[srvdmz@srvdmz] free --mega -t
totalutilisélibre
Mem:1541873312
Partition d'échange:7200720
Total22618731032

Constat : ≈ 1Go de libre incluant la partition d'échange.

Augmentez, si possible, la RAM actuelle de 1,5 Go à 4 Go.

Les 2,5 Go d'écart seront utilisés par ClamAV, à défaut celui-ci ne fonctionnera pas bien ou pas du tout et il sera préférable de ne pas traiter la partie antivirus.

Vous revérifierez cette ressource à la fin du mémento.

10.1 - Installation de l'antispam Postscreen

Postscreen, placé en amont du démon smtpd, rejettera entre autres les connexions issues des spambots avant que celles-ci ne viennent polluer le serveur Postfix.

Les spambots sont des robots à l'origine de la majorité des SPAM émis sur Internet.

Pour activer Postscreen, éditez le fichier master.cf :

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

Commentez la ligne suivante (# devant la ligne) :

smtp  inet          n     -     y     -     -     smtpd

et décommentez celles-ci (suppression du #) :

smtp  inet       n     -     y     -      1    postscreen
smtpd pass       -     -     y     -      -    smtpd
dnsblog  unix    -     -     y     -      0    dnsblog
tlsproxy unix    -     -     y     -      0    tlsproxy

10.2 - Postscreen : Configuration

Pour le configurer, éditez le fichier main.cf :

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

et entrez le contenu suivant en fin de fichier :

# Filtrage avec Postscreen
postscreen_access_list = permit_mynetworks, cidr:/etc/postfix/postscreen_access.cidr
postscreen_denylist_action = drop

# Greet delay (anti-bots basiques)
postscreen_greet_wait = 3s
postscreen_greet_banner = Bienvenue, merci de patienter..
postscreen_greet_action = enforce

# DNSBL (Black List DNS)
postscreen_dnsbl_threshold = 2
postscreen_dnsbl_action = enforce
postscreen_dnsbl_sites =
        zen.spamhaus.org*2
        bl.spamcop.net*1

# Allowlist DNS (Réduction des faux positifs)        
postscreen_dnsbl_allowlist_threshold = -1

# Tests comportementaux
postscreen_non_smtp_command_enable = yes
postscreen_non_smtp_command_action = enforce

postscreen_pipelining_enable = yes
postscreen_pipelining_action = enforce

postscreen_bare_newline_enable = yes
postscreen_bare_newline_action = enforce

Le test access_list permettra de filtrer les clients SMTP selon la valeur des IP contenues dans le paramètre mynetworks et le fichier postscreen_access.cidr.

Ce dernier doit être créé et rempli manuellement :

[srvdmz@srvdmz] cd /etc/postfix/
[srvdmz@srvdmz] sudo touch postscreen_access.cidr

Ci-dessous, un exemple de contenu (vide par défaut) :

# Adresses IP autorisées
192.168.2.2	permit

# Adresses IP rejetées
3.137.73.0/24  reject #Plateforme de vente
71.6.158.166	reject
13.58.97.162/32  reject
101.36.106.89	reject
87.236.176.0/24  reject
...

Le test greet permettra de rejeter les clients SMTP qui parleront avant que le serveur ne les y autorise comme l'exige le protocole SMTP.

Le test dnsbl (Black List DNS) permettra de filtrer à l'aide de listes fournies sur Internet les clients SMTP susceptibles de transmettre des SPAMS.

Nota : Postscreen maintient une liste blanche dynamique dans le fichier postscreen_cache.db situé dans /var/lib/postfix.

Le test non_smtp permettra de rejeter les clients qui useront de Cdes non SMPT telles connect, get et post.

Le test pipelining permettra de rejeter les clients ne respectant pas le protocole d'envoi de Cdes SMTP par lot.

Le test bare_newline permettra de rejeter les clients ne respectant pas la syntaxe SMTP de fin de ligne.

Pour terminer, redémarrez Postfix :

[srvdmz@srvdmz] sudo systemctl restart postfix

Vous devriez rapidement constater le travail de Postscreen en éditant les logs de Postfix :

[srvdmz@srvdmz] sudo journalctl -n 100 | grep postfix

Retour :

...
oct. 02 10:59:54 srvdmz postfix/postscreen[11713]: CONNECT from [71.6.232.28]:53354 to [192.168.4.2]:25

oct. 02 10:59:54 srvdmz postfix/postscreen[11713]: PREGREET 27 after 0 from [71.6.232.28]:53354: EHLO zx18.quadmetrics.com\r\n

oct. 02 10:59:54 srvdmz postfix/postscreen[11713]: DISCONNECT [71.6.232.28]:53354
...

...
oct. 02 12:06:22 srvdmz postfix/postscreen[12309]: CONNECT from [101.36.106.89]:33098 to [192.168.4.2]:25

oct. 02 12:06:22 srvdmz postfix/dnsblog[12312]: addr 101.36.106.89 listed by domain zen.spamhaus.org as 127.0.0.2

oct. 02 12:06:22 srvdmz postfix/postscreen[12309]: PREGREET 10 after 0.05 from [101.36.106.89]:33098: EHLO ABC\r\n

oct. 02 12:06:22 srvdmz postfix/postscreen[12309]: DNSBL rank 3 for [101.36.106.89]:33098

oct. 02 12:06:24 srvdmz postfix/postscreen[12309]: DISCONNECT [101.36.106.89]:33098
...

Si IP rejetée dans le fichier postscreen_access.cidr :

...
oct. 05 21:34:36 srvdmz postfix/postscreen[3200]: CONNECT from [101.36.106.89]:46110 to [192.168.4.2]:25

oct. 05 21:34:36 srvdmz postfix/postscreen[3200]: DENYLISTED [101.36.106.89]:46110

oct. 05 21:34:36 srvdmz postfix/postscreen[3200]: DISCONNECT [101.36.106.89]:46110
...

10.3 - Installation de l'antispam Rspamd

Rspamd, plus récent et moderne que SpamAssassin, viendra compléter la lutte antispam.

Debian 12, installez les paquets rspamd et redis-server :

[srvdmz@srvdmz] sudo apt install rspamd redis-server

Fin Debian 12

Debian 13, installez les paquets rspamd et valkey-server :

[srvdmz@srvdmz] sudo apt install rspamd valkey-server

Fin Debian 13

Redis ou Valkey sera utilisé par Rspamd pour le stockage des métadonnées (DKIM, etc...), des statistiques bayésiennes (learned ham/spam), des historiques de scan (history module), pour le rate‑limiting (limitation par IP, domaine, utilisateur) et le greylisting, etc...

Tous les fichiers de configuration ont été créés dans le dossier /etc/rspamd/.

Vérifiez enfin le statut des services installés :

[srvdmz@srvdmz] sudo systemctl status rspamd
[srvdmz@srvdmz] sudo systemctl status redis   # Debian 12
[srvdmz@srvdmz] sudo systemctl status valkey  # Debian 13

Retours attendus :

 rspamd.service - rapid spam filtering system
     Loaded: loaded (/usr/lib/systemd/system/rspamd.service; enabled; preset: enabled)
     Active: active (running) since Sat 2026-03-28 09:58:38 CET; 20min ago
 Invocation: 0cd5abaa9e154a76bca43994ce13e0f4
       Docs: https://rspamd.com/doc/
   Main PID: 2799 (rspamd)
      Tasks: 5 (limit: 4617)
     Memory: 346.7M (peak: 360.6M)
        CPU: 17.936s
     CGroup: /system.slice/rspamd.service
             ├─2799 "rspamd: main process"
             ├─2966 "rspamd: rspamd_proxy process (localhost:11332)"
             ├─2967 "rspamd: controller process (localhost:11334)"
             ├─2968 "rspamd: normal process (localhost:11333)"
             └─2969 "rspamd: hs_helper process"

mars 28 09:58:38 srvdmz systemd[1]: Started rspamd.service - rapid spam filtering system.
mars 28 09:58:38 srvdmz rspamd[2799]: 2026-... 2799(main) <4b7e3c>; main; main: rspamd 3.12.1 ...

 valkey-server.service - Advanced key-value store
     Loaded: loaded (/usr/lib/systemd/system/valkey-server.service; enabled; preset: enabled)
     Active: active (running) since Sat 2026-03-28 09:58:40 CET; 50min ago
 Invocation: a269b4ce1a2f42638186199154a3c8e5
       Docs: https://valkey.io/docs/,
             man:valkey-server(1)
   Main PID: 2950 (valkey-server)
     Status: "Ready to accept connections"
      Tasks: 5 (limit: 4617)
     Memory: 6.1M (peak: 6.6M)
        CPU: 6.371s
     CGroup: /system.slice/valkey-server.service
             └─2950 "/usr/bin/valkey-server 127.0.0.1:6379"

mars 28 09:58:40 srvdmz systemd[1]: Starting valkey-server.service - Advanced key-value store...
mars 28 09:58:40 srvdmz systemd[1]: Started valkey-server.service - Advanced key-value store.

L'intégration du logiciel Rspamd dans Postfix se fera via le protocole Milter.

Pour activer celle-ci, éditez le fichier main.cf de Postfix :

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

et ajoutez la section suivante en fin de fichier :

# Applications Milter (RSPAMD, ...)
smtpd_milters = inet:127.0.0.1:11332
non_smtpd_milters = $smtpd_milters
milter_protocol = 6
milter_default_action = accept
milter_mail_macros = i {mail_addr} {client_addr} {client_name} {auth_authen}

Rechargez enfin la nouvelle configuration de Postfix :

[srvdmz@srvdmz] sudo systemctl reload postfix

et redémarrez Rspamd :

[srvdmz@srvdmz] sudo systemctl restart rspamd

Créez ensuite un MDP pour l'administration de Rspamd :

[srvdmz@srvdmz] sudo rspamadm pw

Exemple de retour :

Enter passphrase: Entrez votre MDP
$2$47knw5msahzcs1noawzdcupfenry5q59$huyz...

Le hachage ainsi généré sera destiné aux composants de Rspamd exigeant une authentification, notamment l’interface Web. Notez malgré tout dans un coin le MDP en clair car vous en aurez aussi besoin par la suite.

Créez maintenant un fichier worker-controller.inc :

[srvdmz@srvdmz] cd /etc/rspamd/local.d
[srvdmz@srvdmz] sudo nano worker-controller.inc

et entrez le contenu suivant :

password = "$2$47knw5msahzcs1noawzdcupfenry5q59$huyz...";
bind_socket = "192.168.4.2:11334";
allow_ip = "192.168.3.0/24"

Ce fichier sert à configurer le worker controller, c’est‑à‑dire le composant qui permet d’administrer Rspamd via son interface web et son API HTTP. C’est un élément central pour la gestion, le monitoring et l’ajustement dynamique des règles.

Le bind_socket autorise l'accès distant et le allow_ip limite cet accès au réseau 192.168.3.0.

Relancez rspamd :

[srvdmz@srvdmz] sudo systemctl restart rspamd

et testez une connexion sur celui-ci :

[srvdmz@srvdmz] rspamc -h 192.168.4.2:11334 -P mdp-en-clair stat

Exemple de retour :

Results for command: stat (0.04 seconds)
Messages scanned: 0
Messages learned: 0
Connections count: 0
Control connections count: 0
Pools allocated: 28
Pools freed: 0
Bytes allocated: 27992312
Memory chunks allocated: 121
Shared chunks allocated: 4
Chunks freed: 0
Oversized chunks: 2
Fuzzy hashes in storage "rspamd.com": 829999100
Fuzzy hashes stored: 829999100
Total learns: 0

10.4 - Rspamd : Auto-apprentissage bayésien

Le filtrage bayésien est une technique de probabilité permettant de mieux traiter le courrier possiblement indésirable.

Activez celui-ci en créant le fichier classifier-bayes.conf :

[srvdmz@srvdmz] cd /etc/rspamd/override.d
[srvdmz@srvdmz] sudo nano classifier-bayes.conf

et en y insérant les lignes suivantes :

autolearn = true;

# Envoi des données statistiques vers le serveur Redis ou Valkey
users_enabled = true;
backend = "redis";

Gardez redis même si c'est valkey qui est utilisé sous Debain 13.

Créez ensuite un fichier redis.conf :

[srvdmz@srvdmz] sudo nano redis.conf

et indiquez la localisation du serveur Redis/Valkey comme suit :

servers = "127.0.0.1:6379";
read_only = false;

Demandez à Rspamd de taguer le courrier indésirable en créant un fichier milter_headers.conf :

[srvdmz@srvdmz] sudo nano milter_headers.conf

et en y insérant l'instruction suivante :

extended_spam_headers = true;

Pour classer automatiquement ce courrier tagué X-Spam: Yes, vous ferez appel au plugin sieve de Dovecot.

Editez, pour cela, le fichier 90-sieve.conf de Dovecot :

[srvdmz@srvdmz] cd /etc/dovecot/conf.d
[srvdmz@srvdmz] sudo nano 90-sieve.conf

Debian 12, ajoutez ceci sous la ligne #sieve_after = :

sieve_after = /etc/dovecot/sieve-after

Fin Debian 12

Debian 13, ajoutez ceci en fin de fichier :

sieve_script after {
  path = /etc/dovecot/sieve-after
  type = after
}

Fin Debian 13

Créez ensuite le dossier sieve-after :

[srvdmz@srvdmz] sudo mkdir /etc/dovecot/sieve-after

et ajoutez dans celui-ci un fichier 10-spam.sieve :

[srvdmz@srvdmz] cd /etc/dovecot/sieve-after
[srvdmz@srvdmz] sudo nano 10-spam.sieve

contenant la règle Sieve suivante :

require ["fileinto","mailbox"];

if header :contains "X-Spam" "Yes" {
fileinto :create "Junk";
stop;
}

L'utilisation de la règle implique de compiler celle-ci :

[srvdmz@srvdmz] sudo sievec 10-spam.sieve

Un fichier binaire 10-spam.svbin a été généré.

Redémarrez maintenant Dovecot et Rspamd :

[srvdmz@srvdmz] sudo systemctl restart dovecot
[srvdmz@srvdmz] sudo systemctl restart rspamd

La syntaxe des fichiers de configuration de Rspamd peut être contrôlée comme suit :

[srvdmz@srvdmz] sudo rspamadm configtest

Retour normal :

Syntax OK

10.5 - Rspamd : Apprentissage selon actions ...

Si un utilisateur déplace un courrier dans le dossier des spams, Rspamd apprendra que c’est un spam et si un utilisateur déplace un courrier du dossier des spams vers un dossier autre que la corbeille, Rspamd apprendra que c'est un ham soit le contraire d'un spam.

Cet apprentissage impose l'usage du plugin imap_sieve, éditez pour cela le fichier 20-imap.conf :

[srvdmz@srvdmz] cd /etc/dovecot/conf.d
[srvdmz@srvdmz] sudo nano 20-imap.conf

Debian 12, modifiez la section protocol imap comme suit :

protocol imap {          # Ligne existante

mail_plugins = $mail_plugins imap_sieve

}                        # Ligne existante

Fin Debian 12

Debian 13, modifiez la section protocol imap comme suit :

protocol imap {          # Ligne existante
  
  mail_plugins {
    imap_sieve = yes
  }

}                        # Ligne existante

Fin Debian 13

Editez ensuite le fichier 90-sieve.conf :

[srvdmz@srvdmz] sudo nano 90-sieve.conf

Debian 12, entrez le contenu suivant à la fin du fichier :

plugin {          # Ligne existante

 # Apprentissage selon actions utilisateurs

 sieve_plugins = sieve_imapsieve sieve_extprograms

 # Si déplacé dans dossier spam > script learn-spam.sieve
 imapsieve_mailbox1_name = Junk
 imapsieve_mailbox1_causes = COPY
 imapsieve_mailbox1_before = file:/etc/dovecot/sieve/learn-spam.sieve

 # Si retiré du dossier spam > script learn-ham.sieve
 imapsieve_mailbox2_name = *
 imapsieve_mailbox2_from = Junk
 imapsieve_mailbox2_causes = COPY
 imapsieve_mailbox2_before = file:/etc/dovecot/sieve/learn-ham.sieve

 # Dossier contenant les fichiers de scripts
 sieve_pipe_bin_dir = /etc/dovecot/sieve

 # Autoriser l'envoi d'e-mails vers un programme externe
 sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.environment

}                 # Ligne existante

Fin Debian 12

Debian 13, entrez le contenu suivant à la fin du fichier :

 # Apprentissage selon actions utilisateurs

 sieve_plugins = sieve_imapsieve sieve_extprograms

 # Si déplacé dans dossier spam > script learn-spam.sieve
 mailbox Junk {
  sieve_script spam {
    type = before
    cause = copy
    path = /etc/dovecot/sieve/learn-spam.sieve
   }
 } 

 # Si retiré du dossier spam > script learn-ham.sieve
 imapsieve_from Junk {
  sieve_script ham {
    type = before
    cause = copy
    path = /etc/dovecot/sieve/learn-ham.sieve
   }
 }

 # Dossier contenant les fichiers de scripts
 sieve_pipe_bin_dir = /etc/dovecot/sieve

 # Autoriser l'envoi d'e-mails vers un programme externe
 sieve_global_extensions {
  vnd.dovecot.pipe = yes
  vnd.dovecot.environment = yes
 }

Fin Debian 13

Créez le dossier sieve dédié aux scripts Sieve/Rspamd :

[srvdmz@srvdmz] sudo mkdir /etc/dovecot/sieve

Générez le 1er script Sieve learn-spam.sieve :

[srvdmz@srvdmz] cd /etc/dovecot/sieve/
[srvdmz@srvdmz] sudo nano learn-spam.sieve

et entrez le contenu suivant proposé dans la documentation Dovecot :

require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];

if environment :matches "imap.user" "*" {
  set "username" "${1}";
}

pipe :copy "rspamd-learn-spam.sh" [ "${username}" ];

Générez enfin le 2ème script Sieve learn-ham.sieve :

[srvdmz@srvdmz] sudo nano learn-ham.sieve

et entrez le contenu suivant proposé par Dovecot :

require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];

if environment :matches "imap.mailbox" "*" {
  set "mailbox" "${1}";
}

if string "${mailbox}" "Trash" {
  stop;
}

if environment :matches "imap.user" "*" {
  set "username" "${1}";
}

pipe :copy "rspamd-learn-ham.sh" [ "${username}" ];

Redémarrez Dovecot avant de continuer :

[srvdmz@srvdmz] sudo systemctl restart dovecot

puis compilez les scripts Sieve et modifiez leurs droits :

[srvdmz@srvdmz] sudo sievec learn-spam.sieve
[srvdmz@srvdmz] sudo sievec learn-ham.sieve

[srvdmz@srvdmz] sudo chmod u=rw,go= /etc/dovecot/sieve/learn-{spam,ham}.{sieve,svbin}

[srvdmz@srvdmz] sudo chown vmail:vmail /etc/dovecot/sieve/learn-{spam,ham}.{sieve,svbin}

Générez le 1er script Rspamd rspamd-learn-spam.sh :

[srvdmz@srvdmz] sudo nano rspamd-learn-spam.sh

Debian 12, entrez le contenu suivant :

#!/bin/sh
exec /usr/bin/rspamc learn_spam

Fin Debian 12

Debian 13, entrez le contenu suivant :

#!/bin/sh
exec /usr/bin/rspamc -h 192.168.4.2:11334 -P mdp-en-clair learn_spam

Fin Debian 13

Générez le 2ème script Rspamd rspamd-learn-ham.sh :

[srvdmz@srvdmz] sudo nano rspamd-learn-ham.sh

Debian 12, entrez le contenu suivant :

#!/bin/sh
exec /usr/bin/rspamc learn_ham

Fin Debian 12

Debian 13, entrez le contenu suivant :

#!/bin/sh
exec /usr/bin/rspamc -h 192.168.4.2:11334 -P mdp-en-clair learn_ham

Fin Debian 13

Modifiez les droits des 2 fichiers et relancez Dovecot :

[srvdmz@srvdmz] sudo chmod u=rwx,go= /etc/dovecot/sieve/rspamd-learn-{spam,ham}.sh

[srvdmz@srvdmz] sudo chown vmail:vmail /etc/dovecot/sieve/rspamd-learn-{spam,ham}.sh

[srvdmz@srvdmz] sudo systemctl restart dovecot

Pour tester la configuration, respectez ces 6 étapes :

1) Affichez le dossier Indésirables sur les Thunderbird.
-> Clic droit sur les comptes ...@loupvirtuel.fr
-> Paramètres -> Paramètres des indésirables
-> Cochez Déplacer les nouv... indésirables vers
-> Sélectionnez Dossier << Indésirables >> sur
-> ...@loupvirtuel.fr

Faites de même pour le compte x.y@zzz.freeddns.org.

2) Modifiez le paramètre mail_debug à yes dans le fichier /etc/dovecot/conf.d/10-logging.conf et relancez Dovecot.

3) Envoyez un mail de la VM srvdmz vers la VM srvlan et déplacez le mail reçu dans le dossier Indésirables.

4) Déplacez ensuite ce mail du dossier Indésirables vers le dossier Courrier entrant de la VM srvlan.

5) Observez enfin le contenu des logs de /var/log/mail.log et /var/log/rspamd/rspamd.log :

Logs de /var/log/journal/ (partie déplacement vers le dossier des indésirables - SPAM 
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: Mailbox Junk: Mailbox opened
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: ... imapsieve: MOVE event
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: ... imapsieve: storage spam: file: Using Sieve script path: /etc/dovecot/sieve/learn-spam.sieve
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: sieve: Loading script 'spam/learn-spam'
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: sieve: Script binary /etc/dovecot/sieve/learn-spam.svbin successfully loaded
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: sieve: Finished running script '/etc/dovecot/sieve/learn-spam.svbin' (status=ok, resource usage: no usage recorded)
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: sieve: action pipe: running program: rspamd-learn-spam.sh
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: ... execute fork:/etc/dovecot/sieve/rspamd-learn-spam.sh: Created (args=srvlan@loupvirtuel.fr)
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: ... execute fork:/etc/dovecot/sieve/rspamd-learn-spam.sh: Pass environment: USER=srvlan@loupvirtuel.fr
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: ... execute fork:/etc/dovecot/sieve/rspamd-learn-spam.sh: Pass environment: HOME=/var/mail/vmail/loupvirtuel.fr/srvlan
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: ... execute fork:/etc/dovecot/sieve/rspamd-learn-spam.sh: Pass environment: HOST=srvdmz.loupvirtuel.fr
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: Mailbox Junk: UID 4: Opened mail because: mail stream
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: ... execute fork:/etc/dovecot/sieve/rspamd-learn-spam.sh: Establishing connection
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: ... execute exec:/etc/dovecot/sieve/rspamd-learn-spam.sh (3750): Disconnected
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: sieve: uid=4: pipe action: piped message to program 'rspamd-learn-spam.sh'
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: sieve: uid=4: left message in mailbox 'Junk'
14:04:12 srvdmz dovecot: imap(srvlan@loup...: Debug: sieve: uid=4: Finished executing result (final, status=ok, keep=yes)

Logs de /var/log/rspamd/ (partie déplacement vers le dossier des indésirables - SPAM 
14:04:12 ... rspamd_controller_check_password: using password as enable_password for a privileged command
14:04:12 ... rspamd_message_parse: loaded message; id: <c89fd999-bb66-4cdc-9843-a27b4b821e68@loupvirtuel.fr>; queue-id: <undef>; size: 913; checksum: <43d3...>
14:04:12 rspamd_mime_part_detect_language: detected part language: fr
14:04:12 bayes_classify: not classified as ham. The ham class needs more training samples. Currently: 1; minimum 200 required
14:04:12 ... rspamd_controller_learn_fin_task: <192.168.4.2> learned message as spam: c89fd999-bb66-4cdc-9843-a27b4b821e68@loupvirtuel.fr

Logs de /var/log/rspamd/ (partie déplacement depuis le dossier des indésirables - HAM
17:18:55 ... rspamd_controller_check_password: using password as enable_password for a privileged command
17:18:55 ... rspamd_message_parse: loaded message; id: <c89fd999-bb66-4cdc-9843-a27b4b821e68@loupvirtuel.fr>; queue-id: <undef>; size: 913; checksum: <43d3...>
17:18:55 ... rspamd_mime_part_detect_language: detected part language: fr
17:18:55 ... bayes_classify: not classified as ham. The ham class needs more training samples. Currently: 1; minimum 200 required
17:18:55 ... rspamd_controller_learn_fin_task: <192.168.4.2> learned message as ham: c89fd999-bb66-4cdc-9843-a27b4b821e68@loupvirtuel.fr

6) Terminez en remettant la valeur du paramètre mail_debug à no et relancez Dovecot.

10.6 - Rspamd : Interface Web

Rspamd est fourni avec une interface Web permettant de contrôler les courriers marqués comme spam, d'avoir des statistiques, etc...

Il est nécessaire, pour accéder à celle-ci, d'éditer l'hôte virtuel loupvirtuel.conf :

[srvdmz@srvdmz:~$] cd /etc/apache2/sites-available
[srvdmz@srvdmz:~$] sudo nano loupvirtuel.conf

et d'ajouter ceci dans la section <VirtualHost *:443> :

ProxyPass "/rspamd" "http://localhost:11334"
ProxyPassReverse "/rspamd" "http://localhost:11334"

Redémarrez le serveur Web Apache :

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

Créez enfin le MDP d'accès exigé par l'interface Web :

[srvdmz@srvdmz:~$] sudo rspamadm pw

Exemple de retour :

Enter passphrase: Entrez votre MDP
$2$z777ywazwfxww636chfnmyifd83wb1p4$8b8c...

Créez maintenant un fichier worker-controller.inc :

[srvdmz@srvdmz:~$] cd /etc/rspamd/local.d
[srvdmz@srvdmz:~$] sudo nano worker-controller.inc

Entrez le hachage du MDP comme suit :

password = "$2$z777ywazwfxww636chfnmyifd83wb1p4$8b8c..."

et relancez rspamd :

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

Pour finir, testez l'URL https://loupvirtuel.fr/rspamd/ :

10.7 - Installation du scanner de virus ClamAV

Par curiosité, contrôlez de nouveau les ressources disponibles qui ont du peu évoluer :

[srvdmz@srvdmz:~$] free --mega -t
[srvdmz@srvdmz:~$] df /dev/sda1 -H

Installez maintenant les paquets ClamAV suivants :

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

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

Le paquet clamav-unofficial-sigs installe une base virale fournie par la société SaneSecurity, base qui vient compléter celles de ClamAV.

Attendez 5 à 10 minutes et vérifiez le statut du service de MAJ des Bdd ClamAV :

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

Les Bdd daily, main et bytecode doivent être up to date.

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/.

Le bon traitement de la base virale clamav-unofficial-sigs peut être vérifié comme suit :

[srvdmz@srvdmz:~$] cd /home/srvdmz
[srvdmz@srvdmz:~$] sudo clamscan --debug 2>&1 /dev/null | grep "sanesecurity"

Retour :

LibClamAV debug: /var/lib/clamav/sanesecurity.ftm loaded

10.8 - ClamAV : Configuration

Les fichiers sont situés dans le dossier /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 24 du paramètre Checks à 3 :

Checks 3

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

Nota : Comme pour root, créez depuis l'interface de PostfixAdmin un alias de l'utilisateur clamav vers postmaster afin que ce dernier puisse recevoir les notifications par e-mail de ClamAV.

10.9 - ClamAV : Liaison avec Rspamd

Afin que Rspamd utilise ClamAV, créez le fichier suivant :

[srvdmz@srvdmz:~$] sudo nano /etc/rspamd/local.d/antivirus.conf

et entrez le contenu ci-dessous :

clamav {
    scan_mime_parts = false;
    symbol = "CLAM_VIRUS";
    type = "clamav";
    action = "reject";
    servers = "/var/run/clamav/clamd.ctl";
}

Pour finir rechargez la configuration de Rspamd :

[srvdmz@srvdmz:~$] sudo systemctl reload rspamd

11 - Tests

11.1 - Test de détection d'un SPAM

Au préalable, créez un fichier temporaire options.inc :

[srvdmz@srvdmz:~$] cd /etc/rspamd/local.d
[srvdmz@srvdmz:~$] sudo nano options.inc

et entrez le contenu suivant :

enable_test_patterns = true;

Ceci permettra d'effectuer le test attendu, voir les explications sur le site rspamd.com.

Redémarrez ensuite Rspamd :

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

et envoyez, depuis le Thunderbird de srvlan, un courrier de postmaster vers clientmail-vm2 contenant ceci :

Début
YJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-\
ANTI-UBE-TEST-EMAIL*C.34X

Ce courrier doit normalement être traité comme spam.
La source de celui-ci sera complété du tag X-Spam: Yes.
Fin

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

Si tout se passe bien, le courrier sera, pour le compte clientmail-vm2, stocké automatiquement dans le dossier des Indésirables de Thunderbird.

Vérifiez sur debian12-vm2 que clientmail-vm2 le reçoit bien notifié du tag X-Spam: Yes :

Sur srvdmz, le courrier a été stocké dans :

[srvdmz@srvdmz:~$] sudo ls -la /var/mail/vmail/loupvirtuel.fr/clientmail-vm2/Maildir/.Junk/cur/

Le groupe date/heure correspond avec celui du mail reçu sur le compte virtuel clientmail-vm2.

Si OK, vous pouvez supprimer le fichier options.inc.

11.2 - Test de détection d'un VIRUS

Au préalable, éditez le fichier antivirus.conf :

[srvdmz@srvdmz:~$] cd /etc/rspamd/local.d
[srvdmz@srvdmz:~$] sudo nano antivirus.conf

et modifiez son contenu comme suit :

clamav {
    scan_mime_parts = false;
    symbol = "CLAM_VIRUS";
    type = "clamav";
    action = "reject";
    servers = "/var/run/clamav/clamd.ctl";

patterns {
    JUST_EICAR = '^Eicar-Test-Signature$';
                }
}

Ceci permettra d'effectuer le test attendu, voir les explications sur le site rspamd.com.

Redémarrez ensuite Rspamd :

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

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.

Ce contenu est téléchargeable depuis le site Eicar (European Institute for Computer Antivirus Research) en utilisant l'URL https://secure.eicar.org/eicar.com.txt.

Résultat, le virus sera détecté lors de la phase d'envoi du mail depuis srvlan et rejeté (paramètre action = "reject"; du fichier antivirus.conf) :

11.3 - Contrôle de la mémoire utilisée

ClamAV est gourmand :

[srvdmz@srvdmz:~$] free --mega -t
totalutilisélibre
Mem:41052456803
Partition d'échange:1022620401
Total512730771205

Constat : ≈ 1Go de libre incluant la partition d'échange.

ClamAV exigera parfois plus que le 2456 Mo affiché ci-dessus d'où le besoin de 4 Go de RAM. A défaut n'utilisez pas le logiciel antivirus.

11.4 - Contrôle des logs

Consultez le journal des logs (Cde journalctl) et le fichier /var/log/rspamd/rspamd.log, le premier permettant notamment d'observer l'efficacité de l'outil Postscreen.

Vous allez vite comprendre que l'ouverture du port 25 sur votre box Internet sera rapidement exploitée par divers scanners et robots spammeurs.

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