[ Présentation
de la configuration | filtrage basique
avec procmail | filtrage
anti-virus SpamAssassin , présentation ,
techniques et outils de filtrage ( filtrage heuristique, filtrage
bayésien , DKIM, SPF ), installation ( SpamAssassin
, razor,
DCC, pyzor ) , configuration
( SpamAssassin , interfaçage
avec sendmail , lancement
automatique ) , fonctionnement
( prise en compte des spams , points divers ) | Mettre
en place un anti virus ( Présentation
et installation , configuration
, premiers tests , lancement
automatique , interfaçage
avec sendmail ) ]
Dernière modification 11 août 2024
Lutte anti spam et anti virus
Configuration Internet
( ce document est disponible au format pdf dans la rubrique téléchargement)
Présentation de la
configuration
Depuis quelque temps, plus d'un email sur
deux que je reçois est un spam ou contient un virus, la lutte anti spam et
anti virus est donc devenue une nécessité car il devient vraiment pénible
d'avoir sa boîte aux lettres polluée de "pourriels" en tout genre. La
lutte est d'autant plus nécessaire si vous avez des utilisateurs sous
windows qui sont des cibles privilégiées pour les virus.
Dans cette page sont présentées les outils
des plus simples (et moins efficaces) aux plus sophistiqués (et plus
efficaces mais moins faciles à mettre en place). On commencera par
l'outil le plus simple:
- procmail permet de filtrer avec des règles statiques des
emails qui ont été déjà délivrés par le serveur de mail local (MTA)
Les outils les plus sophistiqués sont
- SpamAssassin pour la lutte anti spam qui utilisent pour une
meilleure efficacité trois autres outils du même genre à savoir Razor,
Pyzor et DCC
- clam anti virus pour la lutte anti virus.
Ces deux derniers outils s'interfacent
totalement avec
sendmail ce qui
permet un filtrage à la source des emails sur votre réseau local
sans que l'utilisateur final n'ait à configurer quoi que ce soit.
Un schéma vaut mieux qu'un bon discours,
voici comment ces outils s'intercalent dans le processus d'envoi et de
réception des mails :
Pour la réception des mails et
l'installation des serveurs
POP,
IMAP et du webmail on
consultera
cette page et cette
autre
page pour le MTA
sendmail.
En mettant en place tous ces outils je
peux vous garantir que vous aurez un excellent taux de rejet de
"pourriels".
Filtrage basique avec procmail
procmail est une commande simple
qui permet de faire beaucoup de choses. Il est très simple de définir des
filtres. L'exemple ci-dessous permet de supprimer les mails
contenant dans le sujet I Love You
:0
* ^Subject:.*ILOVEYOU
/dev/null
Il suffit d'adapter cette règle en fonction du sujet (ou du from). Cette
autre règle très utile permet de sauvegarder dans un fichier virus
tous les mails arrivant avec les extensions qui y sont citées.
:0 H
*^Content-type: (multipart/mixed)
{
:0 B
*^Content-Disposition:
(attachment|inline)
*filename=".*\.(ocx|vbs|wsf|shs|exe|com|bat|chm|pif|vbe|hta|scr)"
{
:0
virus
}
}
Le fichier virus pourra être ouvert en tant que boîte aux lettres avec un
logiciel comme kmail. Le filtre suivant
:0
^Subject:.*[^ -~][^ -~][^ -~][^ -~]
/dev/null
supprime tous les mails dont le sujet
commence par 4 caractères consécutifs non ASCII (cas particulier des mails
écrits en asiatiques). Procmail est quand méme assez limité
puisqu'il ne permet que de filtrer sur des règles précises (mot clef).
Filtrer les spams avec
SpamAssassin
SpamAssassin est un logiciel
anti spam, il repose entre autres sur l'analyse heuristique et bayésienne
des emails et utilise d'autres des techniques et outils anti spam comme pyzor, razor
et DCC qui sont présentés
ci-après
Le filtrage heuristique
C'est une technique qui permet d'identifier du spam en fonction de certaines
caractéristiques communes (ponctuation, html, lien vers une image, ....)
Le filtrage bayésien
le filtrage bayésien repose sur le principe
qu'un événement peut se produire en fonction des mêmes événements survenus
précédemment. En clair pour le mail, si on rencontre certains mots ou
phrases plus souvent dans du mail classé spam que dans du mail classé
normal on peut penser que la prochaine fois qu'on rencontrera ces mêmes
mots et phrases il y a de bonnes chances que ce soit dans un mail de spam.
Pour cela une base de données de mots et
phrases est créée et enrichie au fur et à mesure de la réception et
de l'envoi de mails qui soient valides ou considérés comme spam. Chaque
mot ou sentence reçoit une valeur calculée en fonction de la probabilité
qu'il soit relié à du spam, elle dépend du nombre de fois que le
terme apparaît dans du spam par rapport au nombre de fois que le même
terme est rencontré dans du courrier valide. Par conséquent certains mots
pourront avoir une forte probabilité d'être rattaché à du spam pour
certains utilisateurs et pour d'autres pas, exemple concret une entreprise
travaillant dans le domaine médical le terme "drug" aura une faible
probabilité d'être rattaché à du spam car il est très souvent
employé dans les mails valides, pour d'autres personnes ce terme sera
systématiquement rattaché à du spams. Par conséquent le filtre
bayésien a la particularité et l'avantage de s'adapter à
l'utilisateur, il réduit le risque des faux positifs (courrier valide
considéré comme spam). Par ailleurs le filtre n'est pas statique, la base
de donnée est en constante évolution et donc le filtre sera de plus en
plus performant de jour en jour et s'adaptera en fonction des utilisateurs
de votre réseau et des techniques nouvelles utilisées par les spammeurs.
Exemple concret du dernier point,
jusqu'à présent les spammeurs envoyaient des mails avec des mots du
style "sex, free, viagra, ...", il était assez simple de mettre en place
un filtre basé sur des mots clef pour supprimer les mails en question, les
spammeurs ont donc modifié légèrement la sémantique de mots "s-e-x, f r e
e" ou bien encore "v$i$a$g$r$a", avec un simple filtrage par mots clé, il
est quasi impossible d'établir une règle efficace pour filtrer ces mails.
Le filtre bayésien aura aucun problème pour lui attribuer une valeur de
probabilité de spam élevée.
Autre avantage du filtre bayésien et non des
moindres, il s'adapte à toutes les langues.
En clair pour qu'un spammeur puisse tromper
un filtre bayésien il doit connaître l'utilisateur qu'il veut toucher et
éviter d'utiliser les mots que l'utilisateur en question utilise le
moins...
[Retour haut de la page ]
Le
DKIM
est une norme d'authentification qui garantit la fiabilité du nom de
domaine de l'expéditeur d'un mail. Elle fonctionne sur la base d'une
signature contenue dans le corps du mail. Exemple avec une signature
DKIM
d'un mail envoyé par
leboncoin
DKIM-Signature: v=1; a=rsa-sha256;
c=relaxed/relaxed; d=news.leboncoin.fr;
s=leboncoin; t=1723375141;
bh=HAcQhfWcguB9ox41T/Matzz+tV45lns6A9KqbTYQ/78=;
h=From:Subject:Date:To:MIME-Version:Message-ID:
List-Unsubscribe-Post:List-Unsubscribe:Content-Type;
b=pCqi9SNfg44gmKtLWTsgRQjnNm6oeWbiNzvFG0YhKoh/FvnnZwfBGl6hOCWxjUj4L
67ejz/r3S1wHEeD5Z0VrQMPlEqPlc8b/yFZv4jX+7pUrWIeLUcZ1jDQABfRY3Kjgh1
i/fvJHmYdjjGqoaXsu24hOsCWiR/35oYsRVpQDKF8nCAj05bRNB0VKyXzyZnf4gBKt
lWGbiT4gNviIsBwloFY9Z6HZcZRbGfG+LnAbUYOEOyDSFOQMcc0AbMHRLH7z8gk10u
PLdWf8JTakjCQVbQP0EmQekZwcprdeU3tukyisKGVrsuYeNtSFqUSibxJIT6PzIjia
w/XAbguDMdq2A==
Pour vérifier l'authenticité du mail et
de la signature, le système va la corréler en récupérant la clé publique
de l'identifiant de domaine (on parle de SDID pour Signing
Domain IDentifier).
SPF
est une technique d'authentification de
l'émetteur pour éviter l'usurpation de domaine, on vérifie si le nom
de domaine est habilité à pouvoir envoyer un mail et on vérifie si son
adresse IP est bien la bonne.
[Retour haut de la page ]
Installation de razor
Razor
repose sur le principe d'un serveur central qui identifie les spams en
leur attribuant une signature digitale. Chaque utilisateur de razor
attribue une signature digitale à chaque email reçu et la compare
avec celles du serveur central, permettant ainsi le classement de l'email.
Pour identifier les spammeurs, le serveur central diffuse largement
des emails valides pour recevoir un max de spams (uniquement du spam, pas
de mails valides pour éviter les faux positifs), plus il en reçoit
meilleur est razor !
Maintenant on va récupérer razor
qui va compléter SpamAssassin dans
la recherche de spam sur cet URL https://sourceforge.net/projects/razor/files/razor-agents/.
On décompresse l'archive en tapant
tar xvfz razor-agents-2.85.tar.gz
Cela donne le répertoire razor-agents-2.85,
avant d'aller plus loin il faudra installer en tant que root les modules de
perl suivants
perl -MCPAN -e shell
Puis au prompt
install Digest::SHA1
install Digest::HMAC_MD5
Dans le répertoire razor-agents-2.85
on tape maintenant
perl Makefile.PL
Puis on édite le fichier Makefile pour mettre le bon chemin
d'installation
INSTALL_BASE = /usr/local
et on tape make puis en tant que
root
make install
Voilà la trace de razor2
en tapant journalctl avec le mode
debug de SpamAssassin
août 10 17:47:18 ultra.kervao.fr
spamd[169810]: razor2: child process 171842 finished, reading results
août 10 17:47:18 ultra.kervao.fr spamd[169810]: razor2: part=0 engine=8
contested=0 confidence=0
août 10 17:47:18 ultra.kervao.fr spamd[169810]: razor2: part=1 engine=8
contested=0 confidence=0
août 10 17:47:18 ultra.kervao.fr spamd[169810]: razor2: results: spam? 0
(...)
août 10 17:47:21 ultra.kervao.fr
spamd[169810]: timing: total 2261 ms - read_scoreonly_config: 15 (0.7%),
signal_user_changed: 3.4 (0.2%), parse: 17 (0.8%),
extract_message_metadata: 68 (3.0%), tests_pri_-10000: 67 (3.0%),
get_uri_detail_list: 65 (2.9%), tests_pri_-2000: 10 (0.4%),
tests_pri_-1000: 2.9 (0.1%), tests_pri_-2000: 10 (0.4%),
tests_pri_-1000: 2.9 (0.1%), tests_pri_-950: 1.56 (0.1%),
tests_pri_-900: 1.60 (0.1%), tests_pri_-100: 241 (10.6%), check_spf: 20
(0.9%), poll_dns_idle: 15 (0.7%), check_dkim_signature: 19 (0.8%),
check_pyzor: 5 (0.2%), check_razor2: 1439 (63.7%), tests_pri_-90: 2.8
(0.1%), tests_pri_0: 326 (14.4%), tests_pri_500: 2.6 (0.1%),
rewrite_mail: 1.86 (0.1%), copy_config: 27 (1.2%)
en cas de réponse positive pour un spam
août 11 12:21:53 ultra.kervao.fr spamd[422090]: razor2: child process
422176 finished, reading results
août 11 12:21:53 ultra.kervao.fr spamd[422090]: razor2: part=0 engine=8
contested=0 confidence=100
août 11 12:21:53 ultra.kervao.fr spamd[422090]: razor2: results: spam? 1
août 11 12:21:53 ultra.kervao.fr spamd[422090]: razor2: results: engine
8, highest cf score: 100
J'en déduis que razor2 marche
correctement, en revanche si on a cette erreur
sept. 29 17:10:14 ultra.kervao.fr spamd[657127]: razor2: razor2 check
failed: Connection reset by peer razor2: razor2 had unknown error during
check at /usr/local/share/perl5/5.36/Mail/SpamAssassin/Plugin/Razor2.pm
line 230, <GEN60> line 1. at
/usr/local/share/perl5/5.36/Mail/SpamAssassin/Plugin/Razor2.pm line 350.
on va créer le répertoire suivant
mkdir /etc/mail/spamassassin/razor
puis on tapera la commande suivante
razor-admin -home=/etc/mail/spamassassin/razor -register
voilà le résultat
Register successful. Identity stored in
/etc/mail/spamassassin/razor/identity-ruX-WiLff-
on tape ensuite
razor-admin -home=/etc/mail/spamassassin/razor -create
razor-admin -home=/etc/mail/spamassassin/razor -discover
sous le répertoire /etc/mail/spamassassin/razor on retrouvera ces
fichiers
lrwxrwxrwx 1 root root 19 sept. 29 17:19 identity ->
identity-ruX-WiLff-
-rw------- 1 root root 90 sept. 29 17:19 identity-ruX-WiLff-
-rw-r--r-- 1 root root 706 sept. 29 17:20 razor-agent.conf
-rw-r--r-- 1 root root 1018 sept. 29 17:20 razor-agent.log
-rw-r--r-- 1 root root 785 sept. 29 17:19
server.n002.cloudmark.com.conf
-rw-r--r-- 1 root root 57 sept. 29 17:20
servers.catalogue.lst
-rw-r--r-- 1 root root 30 sept. 29 17:20
servers.discovery.lst
-rw-r--r-- 1 root root 76 sept. 29 17:20
servers.nomination.lst
Installation de
SpamAssassin
On récupérera SpamAssassin sur le
site www.spamassassin.org/. On
décompresse l'archive en tapant
tar xvfz Mail-SpamAssassin-4.0.1.tar.gz
Cela donne le répertoire Mail-SpamAssassin-4.0.1.
Avant d'aller plus loin j'ai dû installer les packages
urpmi perl-devel
perl-Net-DNS perl-NetAddr-IP perl-Archive-Tar
perl-Mail-SPF perl-IP-Country perl-Net-Ident perl-IO-Socket-INET6
perl-Mail-DKIM perl-DBI perl-Encode-Detect perl-Geo-IP perl-Archive-Zip
perl-Net-Patricia perl-IO-String perl-BSD-Resource re2c
perl-Email-Address-XS perl-Net-LibIDN perl-DBD-SQLite perl-Devel-Cycle
perl-Text-Diff perl-Moo perl-MooX-StrictConstructor perl-Email-MIME
pour pouvoir bénéficier de la géolocalisation des adresses IP on
installera MaxMind
comme expliqué ici et
on tapera ensuite la commande (sans être root)
perl -MCPAN -e shell
et dans le shell
install Net::LibIDN2
install MaxMind::DB::Reader
install MaxMind::DB::Reader::XS
install IP::Country::DB_File
install Mail::DMARC
install Mail::DMARC::PurePerl
cela va créer un certain nombre de répertoire sous ~/perl5 de
votre user qu'il faudra rendre accessible à tous en les copiant sous /usr/lib64/perl5
Maintenant revenons dans le répertoire Mail-SpamAssassin-4.0.1
où l'on tape
perl Makefile.PL PREFIX=/usr/local
SYSCONFDIR=/etc
Voilà le résultat
What email address or URL should be used in the suspected-spam report
text for users who want more information on your filter installation?
(In particular, ISPs should change this to a local Postmaster contact)
default text: [the administrator of that system] olivier
NOTE: settings for "make test" are now controlled using "t/config.dist".
See that file if you wish to customize what tests are run, and how.
checking module dependencies and their versions...
checking binary dependencies and their versions...
dependency check complete...
Warning: prerequisite Perl::Critic::Policy::Perlsecret 0 not found.
Warning: prerequisite
Perl::Critic::Policy::TestingAndDebugging::ProhibitNoStrict 0 not found.
Generating a Unix-style Makefile
Writing Makefile for Mail::SpamAssassin
Writing MYMETA.yml and MYMETA.json
Makefile written by ExtUtils::MakeMaker 7.64
On
édite le fichier Makefile pour mettre les chemins d'installation
qui vont bien
INSTALL_BASE = /usr/local
SYSCONFDIR = /etc
INSTALLCONF = /etc/mail/spamassassin
INSTALLSITECONF = /etc/mail/spamassassin
I_CONFDIR = /etc/mail/spamassassin
on tape ensuite
make
Puis en tant que root
make install
Installation de DCC
DCC
repose également sur un serveur central, chaque mail reçu reçoit une
signature digitale, le serveur comptabilise toutes les signatures, plus le
nombre d'une signature est élevé sur le serveur plus le risque que ce soit
un spam est élevé.
Concrètement, à la réception d'un mail le client DCC
lui attribue une signature digitale (checksum), récupère sur le serveur le
nombre de fois que cette signature apparaît dans le serveur central, si ce
nombre dépasse une certaine valeur configurable (threshold) et que
l'expéditeur du mail en question n'est pas dans la whitelist (configurable
elle aussi), le mail est considéré comme spam et traité comme tel.
On va étoffer encore SpamAssassin
avec DCC qu'on récupérera ici http://www.rhyolite.com/anti-spam/dcc/.
On décompresse l'archive en tapant
tar xvfz dcc.tar.Z
Cela donne le répertoire dcc-2.3.169.
Pensez maintenant à installer le package
sendmail-devel, on revient dans le répertoire de DCC
dans lequel on tape successivement
./configure
make
Puis en tant que root
make install
Maintenant si on tape
cdcc 'info'
On obtient
# 08/10/24 08:43:18 CEST
/var/dcc/map
# Re-resolve names after 09:15:17 Check RTTs after 08:58:17
# 1270.85 ms threshold, 1237.84 ms average 12 total,
11 working servers
IPv6 on version=3
dcc1.dcc-servers.net,- RTT+1000 ms
anon
#
72.18.213.52,-
x.dcc-servers ID 104
# 100% of 32 requests ok 438.56+1000 ms
RTT 300 ms queue wait
#
*137.208.8.63,-
wuwien ID 1290
# 100% of 32 requests ok 138.30+1000 ms
RTT 100 ms queue wait
#
193.30.34.11,-
www.nova53.net ID 1204
# 100% of 32 requests ok 170.85+1000 ms
RTT 70 ms queue wait
dcc2.dcc-servers.net,- RTT+1000 ms
anon
#
194.119.212.6,-
dcc1 ID 1182
# 100% of 32 requests ok 973.70+1000 ms
RTT 100 ms queue wait
#
204.90.71.235,-
MGTINTERNET ID 1170
# 100% of 32 requests ok 195.75+1000 ms
RTT 100 ms queue wait
dcc3.dcc-servers.net,- RTT+1000 ms
anon
#
72.18.213.53,-
x.dcc-servers ID 104
# 100% of 32 requests ok 440.12+1000 ms
RTT 300 ms queue wait
#
208.88.55.138,-
ID 1006
# 100% of 32 requests ok 1075.27+1000 ms
RTT 500 ms queue wait
dcc4.dcc-servers.net,- RTT+1000 ms
anon
#
72.18.213.51,-
x.dcc-servers ID 104
# 100% of 32 requests ok 441.90+1000 ms
RTT 300 ms queue wait
#
212.223.102.90,-
ID 1480
# 88% of 32 requests ok 1540.71+1000 ms
RTT 1200 ms queue wait
dcc5.dcc-servers.net,- RTT+1000 ms
anon
#
157.131.0.46,-
sonic ID 1255
# 100% of 32 requests ok 257.89+1000 ms
RTT 100 ms queue wait
#
193.30.34.14,-
www.nova53.net ID 1207
# 100% of 32 requests ok 232.64+1000 ms
RTT 130 ms queue wait
@,-
RTT-1000 ms 32768 secret114454481y1031
#
127.0.0.1,-
# not answering
################
# 08/10/24 08:43:18 CEST greylist /var/dcc/map
# Re-resolve names after 10:43:17
# 1 total, 0 working servers
# continue not asking greylist server 32 seconds after 1 failures
@,-
Greylist 32768 secret114454481y1031
#
*127.0.0.1,6276
# not answering
Le répertoire par défaut se trouve
sous /var/dcc. les serveurs par
défaut se trouvent dans le fichier
/var/dcc/map, il est automatiquement créé à l'installation
à partir du fichier
dcc-2.3.169/homedir/map.txt. Dans ce dernier répertoire on trouve
également le fichier whitelist,
pour avoir la syntaxe il faut jeter un coup d’œil dans le fichier whitecommon.
En upgradant d'une version précédente j'ai eu droit à l'erreur
suivante
open(/var/dcc/map): Too many open files
open(/tmp/map1MdBL2): Too many open files
?
Je n'ai eu d'autres choix que de supprimer
/var/run/dcc et de refaire un make
install.
Voilà la trace de DCC en tapant
journalctl en mode debug de SpamAssassin
août 11 10:08:08 ultra.kervao.fr
spamd[233885]: util: executable for cdcc was found at
/usr/local/bin/cdcc
août 11 10:08:08 ultra.kervao.fr spamd[233885]: dcc: dcc_pgm_path, found
cdcc in env.path: /usr/local/bin/cdcc
août 11 10:08:08 ultra.kervao.fr spamd[233885]: dcc:
`/usr/local/bin/cdcc -qV homedir libexecdir` reports '2.3.169
homedir=/var/dcc libexecdir=/var/dcc/libexec'
août 11 10:08:08 ultra.kervao.fr spamd[233885]: dcc: use 'dcc_libexec
/var/dcc/libexec' from cdcc
août 11 10:08:08 ultra.kervao.fr spamd[233885]: dcc: use 'dcc_home
/var/dcc' from cdcc
août 11 10:08:08 ultra.kervao.fr spamd[233885]: dcc: dccifd is not
available; no r/w socket at /var/dcc/dccif
(...)
août 11 12:52:05 ultra.kervao.fr
spamd[422090]: timing: total 7617 ms - read_scoreonly_config: 128
(1.7%), signal_user_changed: 2.0 (0.0%), parse: 6 (0.1%),
extract_message_metadata: 49 (0.6%), tests_pri_-10000: 16 (0.2%),
get_uri_detail_list: 29 (0.4%), tests_pri_-2000: 5 (0.1%),
tests_pri_-1000: 2.8 (0.0%), tests_pri_-950: 1.48 (0.0%),
tests_pri_-900: 1.72 (0.0%), tests_pri_-100: 4623 (60.7%), check_spf: 42
(0.6%), poll_dns_idle: 52 (0.7%), check_dkim_signature: 36 (0.5%),
check_dcc: 4312 (56.6%), check_razor2: 1429 (18.8%), check_pyzor: 66
(0.9%), tests_pri_-90: 35 (0.5%), check_bayes: 31 (0.4%), b_tokenize: 14
(0.2%), b_tok_get_all: 7 (0.1%), b_comp_prob: 5 (0.1%), b_tok_touch_all:
0.57 (0.0%), b_finish: 2.4 (0.0%), tests_pri_0: 210 (2.8%),
tests_pri_10: 6 (0.1%), tests_pri_500: 2.8 (0.0%), tests_pri_1000: 91
(1.2%), total_awl: 88 (1.2%), check_awl: 35 (0.5%),update_awl: 0.36
(0.0%), learn: 851 (11.2%), b_learn: 832 (10.9%), b_count_change: 23
(0.3%), rewrite_mail: 3.0 (0.0%), copy_config: 59 (0.8%)
Où on voit bien le check_dcc
Installation de pyzor
Pyzor
repose sur le même principe que razor,
c'est normal puisque le premier est issu du second et réécrit en python.
Cela ne signifie pas qu'il marche exactement de la même manière en
utilisant les mêmes serveurs, il a évolué différemment et les deux se
complétent très bien.
pyzor s'interface également
avec SpamAssassin, on le
trouvera ici https://github.com/SpamExperts/pyzor,
la dernière version est la 1.0.0 qui me générait dans les logs de SpamAssassin
le message suivant
pyzor: internal error, python traceback seen in response: Traceback
(most recent call last):
j'ai dû installer la version en développement, on décompresse l'archive
en tapant
unzip pyzor-master.zip
Cela donne le répertoire pyzor-master
dans lequel on tape
python setup.py build
il faudra sans doute installer préalablement le package
python-setuptools
On passe root puis on tape
python setup.py install
voilà la trace de pyzor en
tapant
journalctl en mode debug de SpamAssassin
août 11 07:33:05 ultra.kervao.fr
spamd[231738]: util: executable for pyzor was found at
/usr/local/bin/pyzor
août 11 07:33:05 ultra.kervao.fr spamd[231738]: pyzor: pyzor is
available: /usr/local/bin/pyzor
août 10 18:17:30 ultra.kervao.fr
spamd[169810]: pyzor: child process 172014 finished, reading results
août 10 18:17:30 ultra.kervao.fr spamd[169810]: pyzor: got response:
public.pyzor.org:24441\t(200, 'OK')\t0\t0
août 10 18:17:30 ultra.kervao.fr spamd[169810]: pyzor: result: COUNT=0/5
WELCOMELIST=0/10/0.0
août 10 18:17:30 ultra.kervao.fr spamd[169810]: check: tagrun - tag
PYZOR is now ready, value: Reported 0 times, welcomelisted 0 times.
(...)
oct. 10 08:16:09 mana.kervao.fr
spamd[1672]: timing: total 6413 ms - read_scoreonly_config: 1.53 (0.0%),
signal_user_changed: 2.2 (0.0%), parse: 1.96 (0.0%),
extract_message_metadata: 55 (0.9%), get_uri_detail_list: 2.5 (0.0%),
tests_pri_-1000: 50 (0.8%), tests_pri_-950: 2.00 (0.0%), tests_pri_-900:
2.1 (0.0%), tests_pri_-400: 19 (0.3%), check_bayes: 16 (0.3%),
b_tokenize: 6 (0.1%), b_tok_get_all: 3.5 (0.1%), b_comp_prob: 3.8
(0.1%), b_tok_touch_all: 0.38 (0.0%), b_finish: 1.53 (0.0%),
tests_pri_0: 6179 (96.4%), check_spf: 17 (0.3%), poll_dns_idle: 0.17
(0.0%), check_dkim_signature: 0.71 (0.0%), check_dkim_adsp: 30 (0.5%),
check_dcc: 4302 (67.1%), check_pyzor: 170 (2.6%), check_razor2: 1599
(24.9%), tests_pri_500: 10 (0.2%), tests_pri_1000: 6 (0.1%), total_awl:
4.1 (0.1%), check_awl: 0.36 (0.0%), update_awl: 0.21 (0.0%), learn: 6
(0.1%), b_learn: 2.6 (0.0%), rewrite_mail: 1.73 (0.0%), get_report: 0.58
(0.0%), copy_config: 39 (0.6%)
Où on voit bien le check_pyzor
Configuration de SpamAssassin
Revenons à SpamAssassin,
les fichiers de configuration se trouvent sous
/etc/mail/spamassassin, on trouve init.pre
qui est d'abord lu, puis les fichiers spécifiques à des versions
(v310.pre, v312.pre,
v320.pre, v330.pre,
v340.pre, v343.pre à v401.pre) à noter que tous
les fichiers sont lus, d'une version à une autre on retrouve que les
nouvelles fonctionnalités implémentées dans les dernières versions, et
enfin le configuration local local.cf.
Voilà le contenu du fichier init.pre
# RelayCountry - add metadata for Bayes learning, marking the countries
# a message was relayed through
#
# Note: This requires the Geo::IP Perl module
#
loadplugin Mail::SpamAssassin::Plugin::RelayCountry
# URIDNSBL - look up URLs found in the message against several DNS
# blocklists.
#
loadplugin Mail::SpamAssassin::Plugin::URIDNSBL
# Hashcash - perform hashcash verification.
#
loadplugin Mail::SpamAssassin::Plugin::Hashcash
# SPF - perform SPF verification.
#
loadplugin Mail::SpamAssassin::Plugin::SPF
Voilà mon fichier de configuration v310.pre
qu'on trouvera sous /etc/mail/spamassassin
# DCC - perform DCC message checks.
#
# DCC is disabled here because it is not open source. See the DCC
# license for more details.
#
loadplugin Mail::SpamAssassin::Plugin::DCC
# Pyzor - perform Pyzor message checks.
#
loadplugin Mail::SpamAssassin::Plugin::Pyzor
# Razor2 - perform Razor2 message checks.
#
loadplugin Mail::SpamAssassin::Plugin::Razor2
# SpamCop - perform SpamCop message reporting
#
loadplugin Mail::SpamAssassin::Plugin::SpamCop
# AntiVirus - some simple anti-virus checks, this is not a replacement
# for an anti-virus filter like Clam AntiVirus
#
loadplugin Mail::SpamAssassin::Plugin::AntiVirus
# AWL - do auto-whitelist checks
#
loadplugin Mail::SpamAssassin::Plugin::AWL
# AutoLearnThreshold - threshold-based discriminator for Bayes
auto-learning
#
loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold
# TextCat - language guesser
# on activera ce plugin pour filtrer les mails écrits en chinois ou
arabe ou autres
loadplugin Mail::SpamAssassin::Plugin::TextCat
# AccessDB - lookup from-addresses in access database
#
#loadplugin Mail::SpamAssassin::Plugin::AccessDB
# WhitelistSubject - Whitelist/Blacklist certain subject regular
expressions
#
loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject
###########################################################################
# experimental plugins
# DomainKeys - perform DomainKeys verification
#
# This plugin has been removed as of v3.3.0. Use the DKIM plugin
instead,
# which supports both Domain Keys and DKIM.
# MIMEHeader - apply regexp rules against MIME headers in the message
#
loadplugin Mail::SpamAssassin::Plugin::MIMEHeader
# ReplaceTags
#
loadplugin Mail::SpamAssassin::Plugin::ReplaceTags
le fichier v312.pre
###############################################
# experimental plugins
# DKIM - perform DKIM verification
#
# Mail::DKIM module required for use,
see INSTALL for more information.
#
# Note that if C<Mail::DKIM>
version 0.20 or later is installed, this
# renders the DomainKeys plugin
redundant.
#
loadplugin
Mail::SpamAssassin::Plugin::DKIM
le fichier
v320.pre
# Check - Provides main check functionality
#
loadplugin Mail::SpamAssassin::Plugin::Check
# HTTPSMismatch - find URI mismatches between href and anchor text
#
loadplugin Mail::SpamAssassin::Plugin::HTTPSMismatch
# URIDetail - test URIs using detailed URI information
#
loadplugin Mail::SpamAssassin::Plugin::URIDetail
# Shortcircuit - stop evaluation early if high-accuracy rules fire
#
loadplugin Mail::SpamAssassin::Plugin::Shortcircuit
# Plugins which used to be EvalTests.pm
# broken out into separate plugins
loadplugin Mail::SpamAssassin::Plugin::Bayes
loadplugin Mail::SpamAssassin::Plugin::BodyEval
loadplugin Mail::SpamAssassin::Plugin::DNSEval
loadplugin Mail::SpamAssassin::Plugin::HTMLEval
loadplugin Mail::SpamAssassin::Plugin::HeaderEval
loadplugin Mail::SpamAssassin::Plugin::MIMEEval
loadplugin Mail::SpamAssassin::Plugin::RelayEval
loadplugin Mail::SpamAssassin::Plugin::URIEval
loadplugin Mail::SpamAssassin::Plugin::WLBLEval
# VBounce - anti-bounce-message rules, see rules/20_vbounce.cf
#
loadplugin Mail::SpamAssassin::Plugin::VBounce
# Rule2XSBody - speedup by compilation of ruleset to native code
#
# loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody
# ASN - Look up the Autonomous System Number of the connecting IP
# and create a header containing ASN data for bayes tokenization.
# See plugin's POD docs for usage info.
#
# loadplugin Mail::SpamAssassin::Plugin::ASN
# ImageInfo - rules to match metadata of image attachments
#
loadplugin Mail::SpamAssassin::Plugin::ImageInfo
le fichier v330.pre
###################################################
# PhishTag - allows sites to rewrite
suspect phish-mail URLs
# (Note: this requires configuration,
see http://umut.topkara.org/PhishTag)
#
#loadplugin
Mail::SpamAssassin::Plugin::PhishTag
# FreeMail - detect email addresses
using free webmail services,
# usable as input for other rules
#
loadplugin
Mail::SpamAssassin::Plugin::FreeMail
le fichier v340.pre
# This is the right place to
customize your installation of SpamAssassin.
#
# See 'perldoc
Mail::SpamAssassin::Conf' for details of what can be
# tweaked.
#
# This file was installed during the
installation of SpamAssassin 3.4.0,
# and contains plugin loading
commands for the new plugins added in that
# release. It will not be
overwritten during future SpamAssassin installs,
# so you can modify it to enable
some disabled-by-default plugins below,
# if you so wish.
#
# There are now multiple files read
to enable plugins in the
# /etc/mail/spamassassin directory;
previously only one, "init.pre" was
# read. Now both "init.pre",
"v310.pre", and any other files ending in
# ".pre" will be read. As
future releases are made, new plugins will be
# added to new files, named
according to the release they're added in.
###########################################################################
# AskDNS - forms a DNS query based
on 'tags' as supplied by other plugins
#
loadplugin
Mail::SpamAssassin::Plugin::AskDNS
le fichier v341.pre
# TxRep - Reputation database that
replaces AWL
# loadplugin
Mail::SpamAssassin::Plugin::TxRep
# URILocalBL - Provides ISP and
Country code based filtering as well as
# quick IP based blocks without a
full RBL implementation - Bug 7060
# loadplugin
Mail::SpamAssassin::Plugin::URILocalBL
# PDFInfo - Use several methods to
detect a PDF file's ham/spam traits
# loadplugin
Mail::SpamAssassin::Plugin::PDFInfo
le fichier v342.pre
# FromNameSpoof - help stop spam that tries to spoof other
domains using
# the from name
loadplugin Mail::SpamAssassin::Plugin::FromNameSpoof
# Phishing - finds uris used in phishing campaigns detected by
# OpenPhish or PhishTank feeds.
loadplugin Mail::SpamAssassin::Plugin::Phishing
le fichier v343.pre n'a aucun aucun loadplugin
activé, contenu de v400pre
# ExtractText - Extract text from documents or images for
matching
#
# Requires manual configuration, see plugin documentation.
#
# loadplugin Mail::SpamAssassin::Plugin::ExtractText
# DecodeShortUrl - Check for shortened URLs
#
# Note that this plugin will send HTTP requests to different URL
shortener
# services. Enabling caching is recommended, see plugin
documentation.
#
# loadplugin Mail::SpamAssassin::Plugin::DecodeShortURLs
# DMARC - Check DMARC compliance
#
# Requires Mail::DMARC module and working SPF and DKIM Plugins.
#
loadplugin Mail::SpamAssassin::Plugin::DMARC
et voilà mon fichier local.cf
allow_user_rules 1
# Add *****SPAM***** to the Subject header of spam e-mails
#
rewrite_header Subject *****SPAM*****
# Save spam messages as a message/rfc822 MIME attachment
instead of
# modifying the original message (0: off, 2: use
text/plain instead)
#
report_safe 1
# rajout de cette option pour bien prendre en compte
# les accents dans le rapport spamassassin
report_charset iso-8859-1
# Set which networks or hosts are considered
'trusted' by your mail
# server (i.e. not spammers)
#
# trusted_networks 212.17.35.
# Set file-locking method (flock is not safe over NFS, but
is faster)
#
# lock_method flock
# Set the threshold at which a message is considered spam
(default: 5.0)
#
required_score 5.0
score USER_IN_WELCOMELIST -100.0
score USER_IN_BLOCKLIST 100.0
use_auto_whitelist 1
#use_txrep 1
# pour filtrer les mails en chinois
# on autorise que ces langues, les autres sont
# considérés comme spam avec un score de 10
ok_languages en fr ca de es it pt
score UNWANTED_LANGUAGE_BODY 10
add_header all Languages _LANGUAGES_
# Use Bayesian classifier (default: 1)
#
use_bayes 1
use_bayes_rules 1
# Bayesian classifier auto-learning (default: 1)
#
bayes_auto_learn 1
#bayes_auto_learn_threshold_nonspam -2.0
bayes_auto_learn_threshold_spam 6.0
header
AWL
eval:check_from_in_auto_whitelist()
describe
AWL From:
address is in the auto white-list
tflags
AWL
userconf noautolearn
priority
AWL 1000
#header
TXREP eval:check_senders_reputation()
#describe TXREP Score
normalizing based on sender's reputation
#tflags
TXREP userconf noautolearn
#priority TXREP 1000
#tflags URIBL_DBL_SPAM autolearn_force
#tflags URIBL_JP_SURBL autolearn_force
#tflags URIBL_BLACK autolearn_force
#tflags INVALID_DATE autolearn_force
# Set headers which may provide inappropriate cues to the
Bayesian
# classifier
#
# bayes_ignore_header X-Bogosity
# bayes_ignore_header X-Spam-Flag
# bayes_ignore_header X-Spam-Status
bayes_path /var/spool/mail/.spamassassin/bayes
bayes_file_mode 0777
# Whether to decode non- UTF-8 and non-ASCII textual parts
and recodeA
#
# them to UTF-8 before the text is given over to rules
processing.
#
# normalize_charset 1
# Some shortcircuiting, if the plugin is enabled
#
ifplugin Mail::SpamAssassin::Plugin::Shortcircuit
#
# default: strongly-whitelisted mails are *really*
whitelisted now, if the
# shortcircuiting plugin is active, causing early exit to
save CPU load.
# Uncomment to turn this on
#
shortcircuit USER_IN_WELCOMELIST
on
# shortcircuit USER_IN_DEF_WHITELIST on
# shortcircuit USER_IN_ALL_SPAM_TO on
# shortcircuit SUBJECT_IN_WHITELIST on
# the opposite; blacklisted mails can also save CPU
#
shortcircuit USER_IN_BLOCKLIST on
# shortcircuit USER_IN_BLACKLIST_TO on
# shortcircuit SUBJECT_IN_BLACKLIST on
# if you have taken the time to correctly specify your
"trusted_networks",
# this is another good way to save CPU
#
# shortcircuit
ALL_TRUSTED
on
# and a well-trained bayes DB can save running rules, too
#
# shortcircuit
BAYES_99
spam
# shortcircuit
BAYES_00
ham
#endif
et pour terminer le fichier v401.pre
avec un plugin que je n'ai pas activé
# loadplugin
Mail::SpamAssassin::Plugin::AuthRes
A noter le chemin
bayes_path on doit mettre
ici le chemin où sera stockée la base de données du filtrage bayésien,
comme c'est l'utilisateur mail qui est propriétaire du process et
que sa homedirectory est fixée à /var/spool/mail, j'ai fixé
la variable pour pointer vers cet endroit. Si vous voulez placer ces
fichiers ailleurs, n'oubliez pas que l'utilisateur mail (ou celui
propriétaire du process) doit avoir les droits en accés et écriture sur le
répertoire en question.
A noter également USER_IN_WELCOMELIST avec
un score à -100 si le mail est dans la whitelist et a contrario à +100
s'il est dans la blacklist.
J'ai eu un soucis quand je récupérais les mails de mes utilisateurs,
l'utilisateur mail ne pouvant créer de fichier dans leur homedirectory
Oct 2 09:58:53 tosh spamd[1676]:
debug: open of AWL file failed: lock: 1676 cannot create tmp lockfile
/home/olivier/.spamassassin/auto-whitelist.lock.tosh.kervao.fr.1676 for
/home/olivier/.spamassassin/auto-whitelist.lock: Permission denied
Pour résoudre cela, le répertoire .spamassassin
de tous mes utilisateurs (à créer éventuellement)
appartient à l'utilisateur mail ou de mettre les droits à 777. Pour
info AWL (autowhitelist) permet de mettre un score aux adresses email que
vous utilisez le plus pour mieux démarquer vos interlocuteurs habituels et
les autres.
La configuration n'est pas simple car elle
est dispersée dans plusieurs fichiers, un moyen simple de voir quels
plugins sont chargés est de taper:
grep -i loadplugin *pre
cela va donner (de manière exhaustive)
init.pre:loadplugin
Mail::SpamAssassin::Plugin::RelayCountry
init.pre:loadplugin Mail::SpamAssassin::Plugin::URIDNSBL
init.pre:loadplugin Mail::SpamAssassin::Plugin::SPF
v310.pre:loadplugin Mail::SpamAssassin::Plugin::DCC
v310.pre:loadplugin Mail::SpamAssassin::Plugin::Pyzor
v310.pre:loadplugin Mail::SpamAssassin::Plugin::Razor2
v310.pre:loadplugin Mail::SpamAssassin::Plugin::SpamCop
v310.pre:loadplugin Mail::SpamAssassin::Plugin::AntiVirus
v310.pre:loadplugin Mail::SpamAssassin::Plugin::AWL
v310.pre:loadplugin Mail::SpamAssassin::Plugin::AutoLearnThreshold
v310.pre:loadplugin Mail::SpamAssassin::Plugin::TextCat
v310.pre:#loadplugin Mail::SpamAssassin::Plugin::AccessDB
v310.pre:loadplugin Mail::SpamAssassin::Plugin::WhiteListSubject
v310.pre:loadplugin Mail::SpamAssassin::Plugin::MIMEHeader
v310.pre:loadplugin Mail::SpamAssassin::Plugin::ReplaceTags
v312.pre:loadplugin Mail::SpamAssassin::Plugin::DKIM
v320.pre:loadplugin Mail::SpamAssassin::Plugin::Check
v320.pre:loadplugin Mail::SpamAssassin::Plugin::HTTPSMismatch
v320.pre:loadplugin Mail::SpamAssassin::Plugin::URIDetail
v320.pre:loadplugin Mail::SpamAssassin::Plugin::Shortcircuit
v320.pre:loadplugin Mail::SpamAssassin::Plugin::Bayes
v320.pre:loadplugin Mail::SpamAssassin::Plugin::BodyEval
v320.pre:loadplugin Mail::SpamAssassin::Plugin::DNSEval
v320.pre:loadplugin Mail::SpamAssassin::Plugin::HTMLEval
v320.pre:loadplugin Mail::SpamAssassin::Plugin::HeaderEval
v320.pre:loadplugin Mail::SpamAssassin::Plugin::MIMEEval
v320.pre:loadplugin Mail::SpamAssassin::Plugin::RelayEval
v320.pre:loadplugin Mail::SpamAssassin::Plugin::URIEval
v320.pre:loadplugin Mail::SpamAssassin::Plugin::WLBLEval
v320.pre:loadplugin Mail::SpamAssassin::Plugin::VBounce
v320.pre:# loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody
v320.pre:# loadplugin Mail::SpamAssassin::Plugin::ASN
v320.pre:loadplugin Mail::SpamAssassin::Plugin::ImageInfo
v330.pre:#loadplugin Mail::SpamAssassin::Plugin::PhishTag
v330.pre:loadplugin Mail::SpamAssassin::Plugin::FreeMail
v340.pre:loadplugin Mail::SpamAssassin::Plugin::AskDNS
v341.pre:# loadplugin Mail::SpamAssassin::Plugin::TxRep
v341.pre:# loadplugin Mail::SpamAssassin::Plugin::URILocalBL
v341.pre:# loadplugin Mail::SpamAssassin::Plugin::PDFInfo
v342.pre:# loadplugin Mail::SpamAssassin::Plugin::HashBL
v342.pre:# loadplugin Mail::SpamAssassin::Plugin::ResourceLimits
v342.pre:loadplugin Mail::SpamAssassin::Plugin::FromNameSpoof
v342.pre:loadplugin Mail::SpamAssassin::Plugin::Phishing
v343.pre:# loadplugin Mail::SpamAssassin::Plugin::OLEVBMacro
v400.pre:# loadplugin Mail::SpamAssassin::Plugin::ExtractText
v400.pre:# loadplugin Mail::SpamAssassin::Plugin::DecodeShortURLs
v400.pre:loadplugin Mail::SpamAssassin::Plugin::DMARC
ceux qui ne sont pas chargés sont
précédés d'un #.
SpamAssassin s'interface
facilement avec sendmail, le filtrage s'opère aussi bien
à la réception qu'à l'envoi d'email de manière totalement
transparente ou presque, car il faut savoir que SpamAssassin est
assez gourmand en ressource et que ça ralentit beaucoup la réception
et l'envoi de mails.
On va récupérer ensuite une
"rustine" pour que
SpamAssassin
puisse s'interfacer avec
sendmail
sur le site
http://savannah.nongnu.org/projects/spamass-milt.
Avant d'aller plus loin, il faudra installer le package
sendmail-devel
si ce n'est pas déjà fait. On décompresse l'archive en tapant
tar xvfz spamass-milter-0.4.0.tar.gz
Cela donne le répertoire
spamass-milter-0.4.0
dans le quel on tape successivement
./configure
make
Puis en tant que root
make install
Tout d'abord on doit lancer le daemon
SpamAssassin
en tant que root
spamd -d -D -u mail -H
/var/spool/mail
-d mode daemon
-D mode debug (optionnel,
utile au tout début)
-u mail l'utilisateur mail
sera propriétaire du process.
-H le répertoire où se trouve
la base de données bayésienne
Toujours en tant que root on lance
spamass-milter en tapant
spamass-milter -u mail -p
/var/run/spamass.sock -f
On modifie à présent le fichier de configuration de
sendmail,
en supposant qu'il soit sous
/usr/share/sendmail-cf/cf
et qu'il s'appelle
config.mc
cd /usr/share/sendmail-cf/cf
On rajoute à la fin les lignes suivantes
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass.sock,
F=, T=C:15m;S:4m;R:4m;E:10m')dnl
define(`confMILTER_MACROS_CONNECT',`t, b, j, _, {daemon_name},
{if_name}, {if_addr}')dnl
define(`confMILTER_MACROS_HELO',`s, {tls_version}, {cipher},
{cipher_bits}, {cert_subject}, {cert_issuer}')dnl
define(`confMILTER_MACROS_ENVFROM',`i, {auth_authen},
{auth_type}')dnl
define(`confMILTER_MACROS_ENVRCPT',`r, v, Z')dnl
on génère un nouveau fichier de configuration de
sendmail en tapant
m4
config.mc > /etc/mail/sendmail.cf
dans ce fichier au niveau de
# Milter options
#O Milter.LogLevel
O Milter.macros.connect=t, b, j, _, {daemon_name}, {if_name},
{if_addr}
O Milter.macros.helo=s, {tls_version}, {cipher}, {cipher_bits},
{cert_subject}, {cert_issuer}
O Milter.macros.envfrom=i, {auth_authen}, {auth_type}
O Milter.macros.envrcpt=r, v, Z
O Milter.macros.eom={msg_id}
#O Milter.macros.eoh
#O Milter.macros.data
on modifie ainsi
# Milter options
#O Milter.LogLevel
O Milter.macros.connect=t, b, j, _, {daemon_name}, {if_name},
{if_addr}
O Milter.macros.helo=s, {tls_version}, {cipher}, {cipher_bits},
{cert_subject}, {cert_issuer}
O Milter.macros.envfrom=i
O Milter.macros.envfrom=i, {auth_authen}, {auth_type}
O Milter.macros.envrcpt=r, v, Z
O Milter.macros.eom={msg_id}
#O Milter.macros.eoh
#O Milter.macros.data
cette modification est utile pour éviter ce genre d'erreur
spamass-milter[2246]: Could not retrieve sendmail macro "i"!.
Please add it to confMILTER_MACROS_ENVFROM for better spamassassin
results
On relance
sendmail
systemctl stop sendmail
systemctl start sendmail
Lancement automatique
Pour
un lancement automatique de
spamd
et
spamass-milter on créera
le fichier
spamassassin.service
qu'on place sous
/usr/lib/systemd/system/ voilà son contenu
[Unit]
Description=Spamassassin daemon
After=syslog.target
network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/spamd
-d -D -u mail -H /var/spool/mail --pidfile
/var/run/spamd.pid
[Install]
WantedBy=multi-user.target
à noter que l'option -D
correspond au mode debug facultatif, maintenant pour que le service
soit lancé à chaque boot de la machine il faudra taper
systemctl enable
spamassassin.service
voillà le résultat
Created symlink from
/etc/systemd/system/multi-user.target.wants/spamassassin.service
to /usr/lib/systemd/system/spamassassin.service.
pour le lancer il suffit maintenant de taper
systemctl start spamassassin.service
A noter que si lors d'un upgrade vous obtenez
l'erreur suivante avec la commande suivante
oct. 04 20:59:54 mana.kervao.fr spamd[1634]: config: no rules were
found! Do you need to run 'sa-update'?
oct. 04 20:59:55 mana.kervao.fr spamd[1516]: child process [1634]
exited or timed out without signaling production of a PID file: exit
25...ne 2989.
il faudra penser à taper d'abord
sa-update voilà ce que donne la commande suivante
systemctl status spamassassin
●
spamassassin.service - Spamassassin daemon
Loaded: loaded
(/usr/lib/systemd/system/spamassassin.service; enabled; preset:
disabled)
Active: active (running) since Sat
2024-08-10 08:26:24 CEST; 5s ago
Process: 96542 ExecStart=/usr/local/bin/spamd -d
-u mail -H /var/spool/mail --pidfile /var/run/spamd.pid
(code=exited, status=0/SUCCESS)
Main PID: 96544 (spamd)
Tasks: 3 (limit: 9239)
Memory: 137.6M
CPU: 2.907s
CGroup: /system.slice/spamassassin.service
├─96544 spamd
├─96548 "spamd child"
└─96549 "spamd child"
août 10 08:26:21 ultra.kervao.fr systemd[1]: Starting
spamassassin.service...
août 10 08:26:21 ultra.kervao.fr spamd[96542]: logger: removing
stderr method
août 10 08:26:24 ultra.kervao.fr spamd[96544]: spamd: server started
on IO::Socket::IP [::1]:783, IO::Socket::IP [127.0.0.1]:783 (running
version 4.0.1)
août 10 08:26:24 ultra.kervao.fr spamd[96544]: spamd: server pid:
96544
août 10 08:26:24 ultra.kervao.fr spamd[96544]: spamd: server
successfully spawned child process, pid 96548
août 10 08:26:24 ultra.kervao.fr systemd[1]: Started
spamassassin.service.
août 10 08:26:24 ultra.kervao.fr spamd[96544]: spamd: server
successfully spawned child process, pid 96549
août 10 08:26:24 ultra.kervao.fr spamd[96544]: prefork: child
states: IS
août 10 08:26:24 ultra.kervao.fr spamd[96544]: prefork: child
states: II
passons maintenant à
spamass-milter
on va créer le fichier
spamass-milter.service
sous
/usr/lib/systemd/system voici
son contenu
[Unit]
Description = Mail filter for
SpamAssassin
Wants = spamassassin.service
After = syslog.target
local-fs.target network.target remote-fs.target nss-lookup.target
spamassassin.service
Before = sendmail.service
[Service]
Type = simple
ExecStart =
/usr/local/sbin/spamass-milter -u mail -p /var/run/spamass.sock
[Install]
WantedBy = multi-user.target
maintenant pour que le service soit lancé à chaque boot de la
machine il faudra taper
systemctl enable
spamass-milter.service
voillà le résultat
Created symlink from
/etc/systemd/system/multi-user.target.wants/spamass-milter.service
to /usr/lib/systemd/system/spamass-milter.service.
pour le lancer il suffit maintenant de taper
systemctl start spamass-milter.service
voilà le résultat de la commande systemctl
status spamass-milter.service
● spamass-milter.service - Mail
filter for SpamAssassin
Loaded: loaded
(/usr/lib/systemd/system/spamass-milter.service; enabled; vendor
preset: disabled)
Active: active (running) since Sat
2021-09-11 14:08:35 CEST; 5h 15min ago
Main PID: 2094 (spamass-milter)
Tasks: 2 (limit: 4677)
Memory: 552.0K
CPU: 126ms
CGroup:
/system.slice/spamass-milter.service
└─2094 /usr/local/sbin/spamass-milter -u mail -p
/var/run/spamass.sock
sept. 11 14:08:35 mana.kervao.fr systemd[1]: Started Mail filter
for SpamAssassin.
sept. 11 14:08:35 mana.kervao.fr spamass-milter[2094]:
spamass-milter 0.4.0 starting
Fonctionnement
Prise en compte des spams
Voilà deux techniques pour prendre en compte les spams
Technique
Procmail
Maintenant j'ai créé un fichier
.procmailrc
sous ma homedirectory qui contient
:0fw: spamassassin.lock
* < 256000
| spamassassin
:0:
* ^X-Spam-Status: Yes
caughtspam
Tous les fichiers ayant une taille
inférieur à 256000 octets passent à la moulinette SpamAssassin, car la plupart des
spams ne dépassent pas cette taille, ceux qui sont considérés comme
spams sont sauvegardés dans le fichier caughtspam.
Maintenant j'ai configuré kmail
pour qu'il puisse lire ce fichier (capture d'écran ci-dessous)
Technique
Thunderbird
Vous ne créez pas ce fichier
.procmailrc par contre dans la configuration de votre
compte dans le paramétrage des indésirables.
Il faut bien prendre soin de cocher la case "
Se
fier aux en-têtes de courrier indésirable placés par
SpamAssassin".
Dans ce cas, les mails classés
spams se retrouveront automatiquement dans le dossier
"indésirables". Dans le cas où un mail est faussement classé
comme spam, vous devez l'exporter au formal eml dans un
répertoire particulier fauxspams,
de la même manière un spam non détecté doit être exporté au
format eml dans un répertoire marqué spams.
Pour
les deux techniques
Pour tous vos utilisateurs il
faudra créer un répertoire
.spamassassin dans chaque homedirectory, ce
répertoire .spamassassin
doit avoir les droits 777 pour que l'utilisateur mail puisse y
avoir accès. Maintenant si un mail venant d'un expéditeur
particulier (les sites de vente par internet par exemple avec
leur email bourré de HTML) est considéré comme spam alors
qu'il ne devrait pas l'être. Rajoutez dans le fichier de
configuration de l'utilisateur
/home/user/.spamassasin/user_prefs
la ligne
whitelist_from *@ldlc.fr
*@rueducommerce.com *@fnac.com
C'est pas des masses pratiques
d'avoir à modifier un fichier pour rajouter des adresses
e-mails, on pourra passer par webmin pour gérer les
listes autorisées ou pas pour que ça soit plus convivial
Les listes seront communes à tous
les utilisateurs et sauvegardées dans le fichier /etc/mail/spamassassin/local.cf.
Attention pour que le fichier global soit pris en compte il
faudra supprimer le fichier user_prefs. Ce n'est pas
l'idéal d'avoir à rajouter ces listes dans le fichier
local.cf, du coup je les ai placés dans un fichier /etc/mail/spamassassin/white-black-list.cf.
Petit bémol les modifications de ce fichier ne sont prises en
compte qu'en relançant SpamAssassin et non pas de
manière dynamique.
Plus d'info sur le fichier de
configuration de SpamAssassin
à cet endroit http://spamassassin.org/doc/Mail_SpamAssassin_Conf.html
En plus de la méthode manuelle, il
existe une méthode automatique de classement dite auto-whitelist
qui se base sur certains algorithmes (voir par là https://cwiki.apache.org/confluence/display/SPAMASSASSIN/AutoWhitelist).
La base de donnée de cette méthode est sauvegardée dans le
fichier auto-whitelist qui se trouve sous .spamassassin
de chaque utilisateur. Pour visualiser ce qu'il y a dedans il
faudra taper
sa-awl
~/.spamassassin/auto-whitelist
cela va donner quelque chose comme
cela (extrait)
12.3 (12.3/1)
-- antoine-poirier@vme-147.com|ip=37.59
15.3 (15.3/1)
-- edm@e8.zonfrontek.com|ip=70.39
28.9 (28.9/1)
-- geykrapulyngalwyan@outlook.com|ip=37.207
16.8 (16.8/1)
-- hicks+1761@bdis.fr|ip=79.247
14.8 (14.8/1)
--
investissement-residence-service-211748@vme-uyt.com|ip=81.93
11.3 (22.6/2)
-- mail6@nouvelle-vision.net|ip=178.33
15.1 (15.1/1)
-- mutuelle_senior@cible-directe.fr|ip=185.52
10.0 (20.0/2)
-- news@unmailundeal.com|ip=212.18
2.0
(6.1/3) -- newsletter@mabellephoto.com|ip=85.158
12.7 (12.7/1)
-- protection@news7.sedem.info|ip=5.135
4.9
(4.9/1) -- abidjahan9@gmail.com|ip=209.85
4.6
(4.6/1) -- automated@e.airbnb.com|ip=199.7
7.2 (28.7/4)
-- bcastuae@gmail.com|ip=110.36
17.9 (17.9/1)
-- contact@efsr26.info|ip=37.59
11.0 (11.0/1)
-- contact@infos-pro.com|ip=8.8
Le premier chiffre est le score
moyen, entre parenthèse le premier correspond au score total des
mails et le deuxième le nombre de mails concernés. Pour
supprimer un mail de la liste on tapera
spamassassin
--remove-addr-from-whitelist=foo@bar
la commande suivante permettra de
supprimer les entrées vues moins de trois fois
sa-awl --clean --min 3 ~/.spamassassin/auto-whitelist
Voilà ce que ça donne en réception d'un
spam (mode non debug) avec un spam
août 10 10:16:03 ultra.kervao.fr
spamd[97375]: spamd: connection from localhost [::1]:57010 to port
783, fd 5
août 10 10:16:03 ultra.kervao.fr spamd[97375]: spamd: processing
message <20240809201546.4FFA3B4A28658309@easywealthmgt.com>
for olivier:8
août 10 10:16:07 ultra.kervao.fr spamd[97375]: async: aborting after
4.654 s, deadline shrunk: AskDNS, A/easywealthmgt.com.fresh.fmb.la,
rules: __FROM_FMBLA_NEWDOM14, __FROM_FMBLA_NEWDOM28,
__FROM_FMBLA_NEWDOM, __FROM_FMBLA_NDBLOCKED
août 10 10:16:07 ultra.kervao.fr spamd[97375]: spamd: identified
spam (17.4/5.0) for olivier:8 in 4.7 seconds, 3679 bytes.
août 10 10:16:07 ultra.kervao.fr spamd[97375]: spamd: result: Y 17 -
ADVANCE_FEE_3_NEW_FRM_MNY,DKIM_ADSP_NXDOMAIN,DMARC_MISSING,FILL_THIS_FORM,FILL_THIS_FORM_LOAN,FILL_THIS_FORM_LONG,HTML_MESSAGE,LOTS_OF_MONEY,MILLION_USD,MIME_HTML_ONLY,MONEY_FORM,MONEY_FRAUD_3,RCVD_IN_BL_SPAMCOP_NET,RCVD_IN_MSPIKE_BL,RCVD_IN_MSPIKE_L5,RCVD_IN_PBL,RCVD_IN_SBL_CSS,RCVD_IN_VALIDITY_RPBL,RCVD_IN_XBL,RDNS_NONE
scantime=4.7,size=3679,user=olivier,uid=8,required_score=5.0,rhost=localhost,raddr=::1,rport=57010,mid=<20240809201546.4FFA3B4A28658309@easywealthmgt.com>,autolearn=no
autolearn_force=no
août 10 10:16:07 ultra.kervao.fr sendmail[101899]: 47A8G0Eu101899:
Milter (spamassassin) add: header: X-Spam-Status: Yes, score=17.4
required=5.0
tests=ADVANCE_FEE_3_NEW_FRM_MNY,\n\tDKIM_ADSP_NXDOMAIN,DMARC_MISSING,FILL_THIS_FORM,FILL_THIS_FORM_LOAN,\n\tFILL_THIS_FORM_LONG,HTML_MESSAGE,LOTS_OF_MONEY,MILLION_USD,\n\tMIME_HTML_ONLY,MONEY_FORM,MONEY_FRAUD_3,RCVD_IN_BL_SPAMCOP_NET,\n\tRCVD_IN_MSPIKE_BL,RCVD_IN_MSPIKE_L5,RCVD_IN_PBL,RCVD_IN_SBL_CSS,\n\tRCVD_IN_VALIDITY_RPBL,RCVD_IN_XBL,RDNS_NONE
autolearn=no\n\tautolearn_force=no version=4.0.1
août 10 10:16:07 ultra.kervao.fr sendmail[101899]:
47A8G0Eu101899[1]: Milter (spamassassin) delete: header
X-Spam-Report: \n\t* 1.2 RCVD_IN_BL_SPAMCOP_NET RBL: Received
via a relay in\n\t*
bl.spamcop.net\n\t* [Blocked - see
<https://www.spamcop.net/bl.shtml?139.99.220.252>]\n\t*
2.7 RCVD_IN_PSBL RBL: Received via a relay in
PSBL\n\t* [139.99.220.252 listed in
psbl.surriel.com]\n\t* 3.6 RCVD_IN_SBL_CSS RBL: Received via a
relay in Spamhaus SBL-CSS\n\t*
[139.99.220.252 listed in zen.spamhaus.org]\n\t* 3.6
RCVD_IN_PBL RBL: Received via a relay in Spamhaus PBL\n\t* 0.7
RCVD_IN_XBL RBL: Received via a relay in Spamhaus XBL\n\t* 0.8
DKIM_ADSP_NXDOMAIN No valid author signature and domain not
in\n\t* DNS\n\t* 0.1
MIME_HTML_ONLY BODY: Message only has text/html MIME
parts\n\t* 0.0 HTML_MESSAGE BODY: HTML included in
message\n\t* 2.5 RCVD_IN_MSPIKE_L5 RBL: Very bad reputation
(-5)\n\t* [139.99.220.252 listed in
bl.mailspike.net]\n\t* 1.3 RCVD_IN_RP_RNBL RBL: Relay in
RNBL,\n\t* ...
août 10 10:16:07 ultra.kervao.fr sendmail[101899]:
47A8G0Eu101899[2]:
https://senderscore.org/blacklistlookup/\n\t*
[139.99.220.252 listed in bl.score.senderscore.com]\n\t* -3.0
RCVD_IN_RP_CERTIFIED RBL: Sender in ReturnPath Certified
-\n\t* Contact
cert-sa@returnpath.net\n\t* [Excessive
Number of Queries |
<https://knowledge.validity.com/hc/en-us/articles/20961730681243>]\n\t*
-2.0 RCVD_IN_RP_SAFE RBL: Sender in ReturnPath Safe -
Contact\n\t*
safe-sa@returnpath.net\n\t* 1.3 RDNS_NONE Delivered to
internal network by a host with no rDNS\n\t* 0.0 LOTS_OF_MONEY
Huge... sums of money\n\t* 0.0 RCVD_IN_MSPIKE_BL Mailspike
blacklisted\n\t* 1.0 HELO_MISC_IP Looking for more Dynamic IP
Relays\n\t* 0.0 FILL_THIS_FORM Fill in a form with personal
information\n\t* 2.0 FILL_THIS_FORM_LONG Fill in a form with
personal information\n\t* 0.0 T_FILL_THIS_FORM_LOAN Answer
loan question(s)\n\t* 1.0 MONEY_FORM Lots of money if you fill
out a form\n\t* 1.0 MONEY_FRAUD_3 Lots of money and several
fraud ...
août 10 10:16:07 ultra.kervao.fr sendmail[101899]:
47A8G0Eu101899[3]: phrases
août 10 10:16:07 ultra.kervao.fr sendmail[101899]: 47A8G0Eu101899:
Milter (spamassassin) add: header: X-Spam-Level: *****************
août 10 10:16:07 ultra.kervao.fr sendmail[101899]: 47A8G0Eu101899:
Milter (spamassassin) change: header X-Spam-Checker-Version:
from SpamAssassin 3.4.4 (2020-01-24)
on\n\tpar1-wbh-prd-eximproxy02.internal.scaleway.com to SpamAssassin
4.0.1 (2024-03-26) on ultra.kervao.fr
août 10 10:16:07 ultra.kervao.fr sendmail[101899]: 47A8G0Eu101899:
Milter (spamassassin) change: header Content-Type: from
text/html;\n\tcharset="iso-8859-1" to multipart/mixed;
boundary="----------=_66B721C7.18CD7D78"
août 10 10:16:07 ultra.kervao.fr sendmail[101899]: 47A8G0Eu101899:
Milter (spamassassin) message: body replaced
août 10 10:16:07 ultra.kervao.fr spamd[97371]: prefork: child
states: II
Et voilà une partie du corps d'un spam après traitement par
SpamAssassin.
From: "Kauf.land
=?UTF-8?B?8J+bkg==?="
<Kundensupport5623800@litcharts.com>
Message-Id: <NngOtqW.56902.970.JDT@litcharts.com>
Date: Sun, 11 Aug 2024 07:45:37 +0200
MIME-Version: 1.0
Subject: *****SPAM***** Sie sich Anfang August-Geschenk🔥
Reply-To: reply_to@litcharts.com
To: olivier.hoarau@funix.org
Content-Type: multipart/mixed;
boundary="----------=_66B889AF.9A4D3319"
Content-Transfer-Encoding: 8bit
X-online-proxy-in:
FLEX_RVVNa01vc1lvVXlReUE4Sw==EOHC2hIK3H6k4v9o4asxECWLUUNEt7LA
X-online-to: olivier.hoarau@funix.org
X-original-for: olivier.hoarau@funix.org
X-Virus-Scanned: clamav-milter 1.2.0 at ultra.kervao.fr
X-Virus-Status: Clean
X-Spam-Flag: YES
X-Spam-Status: Yes, score=23.7 required=5.0
tests=AMAZON_IMG_NOT_RCVD_AMZN,
BAYES_99,BAYES_999,DCC_CHECK,DCC_REPUT_99_100,DIGEST_MULTIPLE,
DMARC_NONE,FONT_INVIS_MSGID,FSL_BULK_SIG,HOSTED_IMG_DIRECT_MX,
HTML_FONT_TINY_NORDNS,HTML_IMAGE_RATIO_08,HTML_MESSAGE,MIME_HTML_ONLY,
RAZOR2_CF_RANGE_51_100,RAZOR2_CHECK,RCVD_IN_BL_SPAMCOP_NET,
RCVD_IN_MSPIKE_BL,RCVD_IN_MSPIKE_ZBI,RCVD_IN_SBL_CSS,RDNS_NONE,
SPF_HELO_NEUTRAL,T_REMOTE_IMAGE,URIBL_DBL_SPAM
shortcircuit=no
autolearn=spam autolearn_force=no version=4.0.1
X-Spam-Level: ***********************
X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on
ultra.kervao.fr
This is a multi-part message in MIME format.
------------=_66B889AF.9A4D3319
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
------------------ Début de Rapport SpamAssassin
---------------------
Ce message est probablement du SPAM (message non sollicité envoyé en
masse, publicité, escroquerie...).
Cette notice a été ajoutée par le système d'analyse "SpamAssassin"
sur
votre serveur de courrier "ultra.kervao.fr", pour vous
aider à identifier ce type de messages.
Le système SpamAssassin ajoute un en-tête "X-Spam-Flag: YES" aux
messages qu'il considère comme étant probablement du Spam.
Vous pouvez si vous le souhaitez utiliser cette caractéristique
pour régler un filtre dans votre logiciel de lecture de courrier,
afin de détruire ou de classer à part ce type de message.
Si ce robot a classifié incorrectement un message qui vous était
destiné, ou pour toute question, veuillez contacter l'administrateur
du système par e-mail à olivier .
Voir https://spamassassin.apache.org/tag/ pour plus de détails (en
anglais).
Détails de l'analyse du message: (23.7 points, 5.0
requis)
1.3 RCVD_IN_BL_SPAMCOP_NET RBL: Relais listé dans
http://spamcop.net/bl.shtml
[Blocked - see
<https://www.spamcop.net/bl.shtml?23.228.85.170>]
3.3 RCVD_IN_SBL_CSS
RBL: Received via a relay in Spamhaus SBL-CSS
[23.228.85.170 listed in zen.spamhaus.org]
2.5
URIBL_DBL_SPAM
Contains a spam URL listed in the Spamhaus DBL
blocklist
[URI: www.addimprovement.bumbleshrimp.com]
0.1 SPF_HELO_NEUTRAL SPF:
HELO does not match SPF record (neutral)
1.1
DCC_CHECK
Message listé par DCC: http://www.www.dcc-servers.net/dcc/
0.0 RCVD_IN_MSPIKE_BL Mailspike
blocklisted
0.0 RCVD_IN_MSPIKE_ZBI No description
available.
0.1
DMARC_NONE
DMARC none policy
3.5
BAYES_99
BODY: L'algorithme Bayésien a évalué la probabilité de spam
entre 99 et 100%
[score: 1.0000]
0.2
BAYES_999
BODY: L'algorithme Bayésien a évalué la probabilité de spam
entre 99.9 et 100%
[score: 1.0000]
0.0 HTML_IMAGE_RATIO_08 BODY: HTML Faible
ratio de texte par rapport aux
images
0.1
MIME_HTML_ONLY BODY:
Le message possède uniquement des parties MIME
text/html
0.0
HTML_MESSAGE
BODY: HTML inclus dans le message
0.8
RDNS_NONE
Delivered to internal network by a host with no rDNS
2.0 HTML_FONT_TINY_NORDNS Font too small to read, no
rDNS
2.2 AMAZON_IMG_NOT_RCVD_AMZN Amazon hosted image but message
not from
Amazon
1.9 FONT_INVIS_MSGID
Invisible text + suspicious message ID
0.0 HOSTED_IMG_DIRECT_MX Image hosted at large
ecomm, CDN or hosting
site, message direct-to-mx
0.0
T_REMOTE_IMAGE
Message contains an external image
1.4 DCC_REPUT_99_100 DCC
reputation between 99 % or higher (spam)
0.9
RAZOR2_CHECK
Message listé par Razor2, voir
http://razor.sourceforge.net
1.9 RAZOR2_CF_RANGE_51_100 Razor2 donne un indice de confiance
entre 51
et 100
[cf: 100]
0.0
FSL_BULK_SIG
Bulk signature with no Unsubscribe
0.3 DIGEST_MULTIPLE
Message hits more than one network digest check
-------------------- Fin de Rapport SpamAssassin
---------------------
Chaque mail reçoit les
informations suivantes en en tête du style (pour un spam)
X-Spam-Status: Yes, score=17.4
required=5.0 tests=ADVANCE_FEE_3_NEW_FRM_MNY,
DKIM_ADSP_NXDOMAIN,DMARC_MISSING,FILL_THIS_FORM,FILL_THIS_FORM_LOAN,
FILL_THIS_FORM_LONG,HTML_MESSAGE,LOTS_OF_MONEY,MILLION_USD,
MIME_HTML_ONLY,MONEY_FORM,MONEY_FRAUD_3,RCVD_IN_BL_SPAMCOP_NET,
RCVD_IN_MSPIKE_BL,RCVD_IN_MSPIKE_L5,RCVD_IN_PBL,RCVD_IN_SBL_CSS,
RCVD_IN_VALIDITY_RPBL,RCVD_IN_XBL,RDNS_NONE
autolearn=no
autolearn_force=no version=4.0.1
X-Spam-Level: *****************
et pour un non spam
X-Spam-Status: No, score=-98.8
required=5.0 tests=DKIM_SIGNED,DKIM_VALID,
DKIM_VALID_AU,DMARC_PASS,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,
RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,RDNS_NONE,SPF_HELO_NONE,
T_REMOTE_IMAGE,USER_IN_WELCOMELIST autolearn=no autolearn_force=no
version=4.0.1
X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on
ultra.kervao.fr
En cas de réception de mail en langue
arabe ou chinois, vous allez voir apparaître dans le rapport spamassassin
en plus cette mention
10 UNWANTED_LANGUAGE_BODY BODY:
Message dans une langue non désirée
(config locale)
et dans le corps du mail on retrouve UNWANTED_LANGUAGE_BODY
X-Spam-Flag: YES
X-Spam-Status: Yes, score=11.7 required=5.0
tests=BAYES_40,DKIM_SIGNED,
DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT,
FREEMAIL_FROM,HTML_MESSAGE,NO_RDNS_DOTCOM_HELO,RCVD_IN_DNSWL_NONE,
RDNS_NONE,SPF_HELO_NONE,UNWANTED_LANGUAGE_BODY shortcircuit=no
autolearn=no
autolearn_force=no version=4.0.1
X-Spam-Level: ***********
Il peut arriver que vous ayez un spam qui
ne soit pas analysé par spamassassin, dans les logs vous allez
avoir le message suivant
févr. 12 02:36:41 ultra.kervao.fr
spamc[3659916]: skipped message, greater than max message size
(512000 bytes)
En fait c'est une petite faille du
système, par défaut spamc ne va pas analyser le mail dès lors
que la taille du fichier dépasse 512ko, les spammeurs profitent de
cela et attachent une image de quelques Mo pour passer au travers. Il
suffit donc d'augmenter la taille en créant le fichier
/etc/mail/spamassassin/spamc.conf qui contiendra
-s 5000000
Si la blacklist a bien été prise en
compte vous devriez voir quelque chose comme cela
Détails de l'analyse du
message: (100.0 points, 5.0 requis)
0.0
SHORTCIRCUIT
Not all rules were run, due to a shortcircuited
rule
100 USER_IN_BLOCKLIST From:
address is in the user's black-list
et voilà ce que ce qu'on retrouve dans le
corps du mail pour un expéditeur qui se trouve dans la whitelist
X-Spam-Status: No, score=-100.0
required=5.0 tests=SHORTCIRCUIT,
USER_IN_WHITELIST,USER_IN_WELCOMELIST shortcircuit=ham
autolearn=disabled
version=4.0.1
L'activation
du
shortcircuit (cour circuit) permet de stopper tous les
tests dès lors que l'expéditeur se trouve dans la blacklist ou dans
la whitelist. A présent vous devez aider
SpamAssassin
à identifier les spams en lui indiquant les mails qui auraient
du être qualifiés de spam et ceux qui n'auraient pas du être
identifiés comme spam. Avec la technique
procmail/
kmail qui me sert à lire
la boîte aux lettres de spam, j'ai créé un dossier
fauxspams
où je déplace les mails qui n'auraient pas du être classés comme
spams.
Maintenant la commande à
taper en tant que root pour qu'il ne prenne plus en compte les mails
comme spams est la suivante
sa-learn --ham --dir /home/olivier/.Mail/fauxspam/cur
Avec la technique
thunderbird qui me sert à lire la boîte aux lettres
des mails normaux, j'ai créé deux répertoires spams
et fauxspams dans lequel je
déplace les mails qui auraient dû être classés comme spam.
Maintenant la commande à taper en tant que root pour qu'il ne
prenne plus en compte les mails comme spams est la suivante
/usr/local/bin/sa-learn --ham --dir /export/home/user/fauxspams
/usr/local/bin/sa-learn --spam --dir /export/home/user/spams
Voilà le résultat
Learned from 3 message(s) (3 message(s) examined).
Pour automatiser tout cela vous
pouvez créer le fichir
/etc/cron.daily/bayes contenant
#!/bin/bash
/usr/local/bin/sa-learn --ham --dir
/export/home/user1/fauxspams
/usr/local/bin/sa-learn --spam --dir /export/home/user1/spams
/usr/local/bin/sa-learn --ham
--dir /export/home/user2/fauxspams
/usr/local/bin/sa-learn --spam --dir /export/home/user2/spams
Et lui donner des droits en exécution
chmod 755 /etc/cron.daily/bayes
Si dans un mail classé comme spam, je
vois dans les entêtes
-2.3
AWL
AWL: From: address is in the auto white-list
c'est qu'il n'a pas été considéré comme
spam au titre de l'auto whitelist, dans ce cas il faudra déplacer le
mail dans le répertoire spams pour apprentissage ou simplement
rajouter l'expéditeur dans la blacklist.
Autres astuces si vous voulez sauvegarder
votre base de données bayes il faudra taper
sa-learn --backup >
base-bayes.txt
puis pour la restaurer
sa-learn --restore base-bayes.txt
Cette sauvegarde peut être évidemment
automatisée. Pour voir ce que la base contient on tapera
sa-learn --dump magic
voilà le résultat
0.000
0
3 0
non-token data: bayes db version
0.000
0
9041 0
non-token data: nspam
0.000
0
12164 0
non-token data: nham
0.000
0
171108 0
non-token data: ntokens
0.000 0
1603119662
0 non-token data: oldest atime
0.000 0
1605952921
0 non-token data: newest atime
0.000 0
1605952891
0 non-token data: last journal sync atime
0.000 0
1605927677
0 non-token data: last expiry atime
0.000
0
2764800
0 non-token data: last expire atime delta
0.000
0
3481 0
non-token data: last expire reduction count
Dans l'exemple ci-dessus, il y a 9041
spams et 12164 non spams et 171108 "tokens" les tokens sont des
éléments qui caractérisent le spam ou a contrario le non spam.
A noter que si vous obtenez cela dans les
logs
févr. 23
11:58:10 mana.kervao.fr spamd[1635]: dns: sendto() to [127.0.0.1]:53
failed: Connection refused, failing over to [::1]:53
févr. 23 11:58:10 mana.kervao.fr spamd[1635]: dns: sendto() to
[::1]:53 failed: Connection refused, failing over to [127.0.0.1]:53
févr. 23 11:58:10 mana.kervao.fr spamd[1635]: dns: bad dns reply:
bgread: recv() failed: Connection refused at
/usr/local/share/perl5/Mail/SpamAssassin/DnsResolver.pm line 742,
<GEN353> line 525.
févr. 23 11:58:10 mana.kervao.fr spamd[1635]: dns: bad dns reply:
bgread: recv() failed: Connection refused at
/usr/local/share/perl5/Mail/SpamAssassin/DnsResolver.pm line 742.
c'est que SpamAssassin s'est
lancé avant que le service DNS soit opérationnel, il suffit de
relancer le service spamd pour supprimer l'erreur.
En activant le mode debug de
spamd
vous pouvez voir également que la localisation des adresses IP est
bien activée
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: GeoIP2:
city database not found from default locations
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: GeoIP2:
country database not found from default locations
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: GeoIP:
versions: Geo::IP 1.51, C library 1.6.12
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: GeoIP:
search found city /usr/share/GeoIP/GeoLiteCity.dat
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: GeoIP:
search found city /usr/share/GeoIP/GeoLiteCityv6.dat
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: GeoIP:
search found country /usr/share/GeoIP/GeoIP.dat
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: GeoIP:
search found country /usr/share/GeoIP/GeoIPv6.dat
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: GeoIP:
loaded city from /usr/share/GeoIP/GeoLiteCity.dat
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: GeoIP:
loaded country from /usr/share/GeoIP/GeoIP.dat
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: database
info: Geo::IP IPv4 city: GEO-533LITE 20180327 Build 1 Copyright
(c) 2018 MaxMind Inc All Rights R>
août 11 10:28:14 ultra.kervao.fr spamd[359354]: geodb: database
info: Geo::IP IPv4 country: GEO-106FREE 20180327 Build 1
Copyright (c) 2018 MaxMind Inc All Right>
ainsi que DKIM
août 11 13:22:07 ultra.kervao.fr
spamd[422090]: dkim: DKIM signature verification result: PASS
août 11 13:22:07 ultra.kervao.fr spamd[422090]: dkim: performing
public ARC key lookup and signature verification
août 11 13:22:07 ultra.kervao.fr spamd[422090]: dkim: ARC
signature verification result: none
août 11 13:22:07 ultra.kervao.fr spamd[422090]: dkim: adsp not
retrieved, author domain signature is valid
août 11 13:22:07 ultra.kervao.fr spamd[422090]: dkim: adsp result:
- (valid a. d. signature), author domain 'news.leboncoin.fr'
août 11 13:22:07 ultra.kervao.fr spamd[422090]: spf:
welcomelist_from_spf: already checked spf and didn't get pass,
skipping welcomelist check
août 11 13:22:07 ultra.kervao.fr spamd[422090]: dkim: VALID
signature by news.leboncoin.fr, author info@news.leboncoin.fr, no
valid matches
août 11 13:22:07 ultra.kervao.fr spamd[422090]: dkim: author
info@news.leboncoin.fr, not in any dkim welcomelist
Mettre
en
place un anti virus
Présentation et
installation
Clam Anti virus (
clamav)
comme son nom l'indique est un anti virus qui est totalement libre, le
site officiel est
http://www.clamav.net/
on y récupérera l'archive qu'on décompresse en tapant
tar xvfz clamav-1.3.1.tar.gz
Cela donne
clamav-1.3.1 avant
d'aller
plus
loin vous pouvez récupérer la trés bonne documentation
disponible à cet endroit
http://wiki.clamav.net/Main/WebHome.
En suivant les instructions on doit d'abord en tant que root créer un
utilisateur
clamav
groupadd
clamav
useradd -g clamav -s /bin/false -c
"Clam Anti Virus" clamav
Ensuite en tant que simple utilisateur dans le répertoire clamav-1.3.1
on doit taper
mkdir build
cd build
cmake
..
il sera peut être nécessaire
d'installer les packages lib64pcre2-devel, cargo, rust,
lib64check-devel, lib64json-c-devel et sendmail-devel
et python3-pytest
voilà le résultat
-- Configuration Options Summary --
Package
Version: ClamAV 1.3.1
libclamav version:
12:2:0
libfreshclam version: 3:1:0
Install
prefix: /usr/local
Install database dir:
/usr/local/share/clamav
Install config dir:
/usr/local/etc
Host
system:
Linux-6.6.43-desktop-1.mga9
Target
system:
Linux-6.6.43-desktop-1.mga9
Compiler:
Build
type: RelWithDebInfo
C
compiler:
/usr/bin/cc
C++
compiler: /usr/bin/c++
Rust
toolchain: /usr/bin/cargo (1.74.0)
CFLAGS:
-O2 -g
CXXFLAGS:
-O2 -g
WARNCFLAGS:
-Wall -Wextra -Wformat-security
Build
Options:
Build
apps: ON
Shared
library: ON
Static
library: OFF
Enable
UnRAR: ON
Examples:
OFF
Tests:
ON
Build man
pages: ON
Build doxygen HTML: OFF
Maintainer
Mode: OFF
Build
Extras:
Build
milter: ON (toggle with
-DENABLE_MILTER=ON/OFF)
Build
clamonacc: ON (toggle with
-DENABLE_CLAMONACC=ON/OFF)
-- Engine Options --
Bytecode
Runtime:
interpreter
-- Test Dependencies --
Unit Test Framework:
libcheck /usr/include
/usr/lib64/libcheck.so
Feature Test Framework:
python3
/usr/bin/python3.10
test command pytest;-v
-- libclamav Dependencies --
Compression support:
bzip2
/usr/include
/usr/lib64/libbz2.so
zlib
/usr/include
/usr/lib64/libz.so
XML
support:
libxml2
/usr/include/libxml2;/usr/include/libxml2
/usr/lib64/libxml2.so
RegEx
support:
libpcre2 /usr/include
/usr/lib64/libpcre2-8.so
Crypto
support:
openssl /usr/include
/usr/lib64/libssl.so;/usr/lib64/libcrypto.so
JSON
support:
json-c
/usr/include/json-c
/usr/lib64/libjson-c.so
Threading support:
pthread
Locale
support:
iconv
/usr/include
/usr/lib64/libc.so
-- libfreshclam Extra Dependencies --
HTTP
support:
curl
/usr/include
/usr/lib64/libcurl.so
-- Application Extra Dependencies --
GUI
support:
ncurses /usr/include
/usr/lib64/libncurses.so;/usr/lib64/libtinfo.so
systemd:
unit directory /usr/lib/systemd/system
systemd ctl support:
libsystemd /usr/include
/usr/lib64/libsystemd.so
Milter
Support:
libmilter /usr/include
/usr/lib64/libmilter.so
-- Warning: libjson-c is known to share symbol names with other JSON
libraries which may result in crashes for applications that use
libclamav. Consider providing a static json-c library that was
compiled with: CFLAGS="-fPIC". Default build settings for json-c
0.15+ should also work. Use the `-DENABLE_JSON_SHARED=OFF` option to
prefer detection of the static library, or use -DJSONC_INCLUDE_DIR
and -DJSONC_LIBRARY to specify the static JSON library.
-- Configuring done (24.8s)
-- Generating done (0.2s)
-- Build files have been written to:
/usr/local/linux/mail/clamav-1.3.1/build
j'ai passé outre l'avertissement car la
compilation se passe mal si je rajoute l'option -DENABLE_JSON_SHARED=OFF
On tape ensuite
make
puis en tant que root
make install
On rajoute si ce n'est déjé fait la ligne
/usr/local/lib (et
/usr/local/lib64 pour une version 64bits) dans le fichier
/etc/ld.so.conf et on tape
ldconfig
Maintenant on crée le répertoire de log de
clamav,
l'utilisateur
clamav doit en
étre propriétaire
mkdir /var/log/clamav
chown clamav:clamav /var/log/clamav
Configuration
On édite le fichier
/usr/local/etc/clamd.conf
voici comment je l'ai configuré
##
## Example config file for the Clam
AV daemon
## Please read the clamd.conf(5)
manual before editing this file.
##
# Comment or remove the line below.
#Example
# Uncomment this option to enable
logging.
# LogFile must be writable for the
user running daemon.
# A full path is required.
# Default: disabled
#LogFile /tmp/clamd.log
LogFile /var/log/clamav/clamd.log
# By default the log file is locked
for writing - the lock protects against
# running clamd multiple times (if
want to run another clamd, please
# copy the configuration file,
change the LogFile variable, and run
# the daemon with --config-file
option).
# This option disables log file
locking.
# Default: no
#LogFileUnlock yes
# Maximum size of the log file.
# Value of 0 disables the limit.
# You may use 'M' or 'm' for
megabytes (1M = 1m = 1048576 bytes)
# and 'K' or 'k' for kilobytes (1K
= 1k = 1024 bytes). To specify the size
# in bytes just don't use
modifiers. If LogFileMaxSize is enabled, log
# rotation (the LogRotate option)
will always be enabled.
# Default: 1M
LogFileMaxSize 2M
# Log time with each message.
# Default: no
#LogTime yes
# Also log clean files. Useful in
debugging but drastically increases the
# log size.
# Default: no
#LogClean yes
# Use system logger (can work
together with LogFile).
# Default: no
#LogSyslog yes
# Specify the type of syslog
messages - please refer to 'man syslog'
# for facility names.
# Default: LOG_LOCAL6
#LogFacility LOG_MAIL
# Enable verbose logging.
# Default: no
#LogVerbose yes
# Enable log rotation. Always
enabled when LogFileMaxSize is enabled.
# Default: no
#LogRotate yes
# Log additional information about
the infected file, such as its
# size and hash, together with the
virus name.
#ExtendedDetectionInfo yes
# This option allows you to save a
process identifier of the listening
# daemon (main thread).
# Default: disabled
PidFile /var/log/clamav/clamd.pid
# Optional path to the global
temporary directory.
# Default: system specific (usually
/tmp or /var/tmp).
TemporaryDirectory /tmp
# Path to the database directory.
# Default: hardcoded (depends on
installation options)
DatabaseDirectory
/usr/local/share/clamav
# Only load the official signatures
published by the ClamAV project.
# Default: no
#OfficialDatabaseOnly no
# The daemon can work in local
mode, network mode or both.
# Due to security reasons we
recommend the local mode.
# Path to a local socket file the
daemon will listen on.
# Default: disabled (must be
specified by a user)
#LocalSocket /tmp/clamd.socket
LocalSocket
/var/log/clamav/clamd.sock
# Sets the group ownership on the
unix socket.
# Default: disabled (the primary
group of the user running clamd)
#LocalSocketGroup virusgroup
# Sets the permissions on the unix
socket to the specified mode.
# Default: disabled (socket is
world accessible)
#LocalSocketMode 660
# Remove stale socket after unclean
shutdown.
# Default: yes
FixStaleSocket yes
# TCP port address.
# Default: no
#TCPSocket 3310
# TCP address.
# By default we bind to INADDR_ANY,
probably not wise.
# Enable the following to provide
some degree of protection
# from the outside world. This
option can be specified multiple
# times if you want to listen on
multiple IPs. IPv6 is now supported.
# Default: no
#TCPAddr 127.0.0.1
# Maximum length the queue of
pending connections may grow to.
# Default: 200
#MaxConnectionQueueLength 30
# Clamd uses FTP-like protocol to
receive data from remote clients.
# If you are using clamav-milter to
balance load between remote clamd daemons
# on firewall servers you may need
to tune the options below.
# Close the connection when the
data size limit is exceeded.
# The value should match your MTA's
limit for a maximum attachment size.
# Default: 25M
#StreamMaxLength 10M
# Limit port range.
# Default: 1024
#StreamMinPort 30000
# Default: 2048
#StreamMaxPort 32000
# Maximum number of threads running
at the same time.
# Default: 10
MaxThreads 20
# Waiting for data from a client
socket will timeout after this time (seconds).
# Default: 120
ReadTimeout 300
# This option specifies the time
(in seconds) after which clamd should
# timeout if a client doesn't
provide any initial command after connecting.
# Default: 5
#CommandReadTimeout 5
# This option specifies how long to
wait (in miliseconds) if the send buffer is full.
# Keep this value low to prevent
clamd hanging
#
# Default: 500
#SendBufTimeout 200
# Maximum number of queued items
(including those being processed by MaxThreads threads)
# It is recommended to have this
value at least twice MaxThreads if possible.
# WARNING: you shouldn't increase
this too much to avoid running out of file descriptors,
# the following condition should
hold:
# MaxThreads*MaxRecursion +
(MaxQueue - MaxThreads) + 6< RLIMIT_NOFILE (usual max is 1024)
#
# Default: 100
#MaxQueue 200
# Waiting for a new job will
timeout after this time (seconds).
# Default: 30
#IdleTimeout 60
# Don't scan files and directories
matching regex
# This directive can be used
multiple times
# Default: scan all
#ExcludePath ^/proc/
#ExcludePath ^/sys/
# Maximum depth directories are
scanned at.
# Default: 15
#MaxDirectoryRecursion 20
# Follow directory symlinks.
# Default: no
#FollowDirectorySymlinks yes
# Follow regular file symlinks.
# Default: no
#FollowFileSymlinks yes
# Scan files and directories on
other filesystems.
# Default: yes
#CrossFilesystems yes
# Perform a database check.
# Default: 600 (10 min)
#SelfCheck 600
# Execute a command when virus is
found. In the command string %v will
# be replaced with the virus name.
# Default: no
#VirusEvent /usr/local/bin/send_sms
123456789 "VIRUS ALERT: %v"
# Run as another user (clamd must
be started by root for this option to work)
# Default: don't drop privileges
User clamav
# Initialize supplementary group
access (clamd must be started by root).
# Default: no
#AllowSupplementaryGroups no
# Stop daemon when libclamav
reports out of memory condition.
#ExitOnOOM yes
# Don't fork into background.
# Default: no
Foreground yes
# Enable debug messages in
libclamav.
# Default: no
# Debug yes
# Do not remove temporary files
(for debug purposes).
# Default: no
#LeaveTemporaryFiles yes
# Permit use of the ALLMATCHSCAN
command. If set to no, clamd will reject
# any ALLMATCHSCAN command as
invalid.
# Default: yes
#AllowAllMatchScan no
# Detect Possibly Unwanted
Applications.
# Default: no
#DetectPUA yes
# Exclude a specific PUA category.
This directive can be used multiple times.
# See
https://github.com/vrtadmin/clamav-faq/blob/master/faq/faq-pua.md
for
# the complete list of PUA
categories.
# Default: Load all categories (if
DetectPUA is activated)
#ExcludePUA NetTool
#ExcludePUA PWTool
# Only include a specific PUA
category. This directive can be used multiple
# times.
# Default: Load all categories (if
DetectPUA is activated)
#IncludePUA Spy
#IncludePUA Scanner
#IncludePUA RAT
# In some cases (eg. complex
malware, exploits in graphic files, and others),
# ClamAV uses special algorithms to
provide accurate detection. This option
# controls the algorithmic
detection.
# Default: yes
AlgorithmicDetection yes
# This option causes memory or
nested map scans to dump the content to disk.
# If you turn on this option, more
data is written to disk and is available
# when the LeaveTemporaryFiles
option is enabled.
#ForceToDisk yes
# This option allows you to disable
the caching feature of the engine. By
# default, the engine will store an
MD5 in a cache of any files that are
# not flagged as virus or that hit
limits checks. Disabling the cache will
# have a negative performance
impact on large scans.
# Default: no
#DisableCache yes
##
## Executable files
##
# PE stands for Portable Executable
- it's an executable file format used
# in all 32 and 64-bit versions of
Windows operating systems. This option allows
# ClamAV to perform a deeper
analysis of executable files and it's also
# required for decompression of
popular executable packers such as UPX, FSG,
# and Petite. If you turn off this
option, the original files will still be
# scanned, but without additional
processing.
# Default: yes
ScanPE yes
# Certain PE files contain an
authenticode signature. By default, we check
# the signature chain in the PE
file against a database of trusted and
# revoked certificates if the file
being scanned is marked as a virus.
# If any certificate in the chain
validates against any trusted root, but
# does not match any revoked
certificate, the file is marked as whitelisted.
# If the file does match a revoked
certificate, the file is marked as virus.
# The following setting completely
turns off authenticode verification.
# Default: no
#DisableCertCheck yes
# Executable and Linking Format is
a standard format for UN*X executables.
# This option allows you to control
the scanning of ELF files.
# If you turn off this option, the
original files will still be scanned, but
# without additional processing.
# Default: yes
ScanELF yes
##
## Documents
##
# This option enables scanning of
OLE2 files, such as Microsoft Office
# documents and .msi files.
# If you turn off this option, the
original files will still be scanned, but
# without additional processing.
# Default: yes
ScanOLE2 yes
# With this option enabled OLE2
files with VBA macros, which were not
# detected by signatures will be
marked as "Heuristics.OLE2.ContainsMacros".
# Default: no
#OLE2BlockMacros no
# This option enables scanning
within PDF files.
# If you turn off this option, the
original files will still be scanned, but
# without decoding and additional
processing.
# Default: yes
ScanPDF yes
# This option enables scanning
within SWF files.
# If you turn off this option, the
original files will still be scanned, but
# without decoding and additional
processing.
# Default: yes
ScanSWF yes
##
## Mail files
##
# Enable internal e-mail scanner.
# If you turn off this option, the
original files will still be scanned, but
# without parsing individual
messages/attachments.
# Default: yes
ScanMail yes
# Scan RFC1341 messages split over
many emails.
# You will need to periodically
clean up $TemporaryDirectory/clamav-partial directory.
# WARNING: This option may open
your system to a DoS attack.
#
Never use it on loaded servers.
# Default: no
ScanPartialMessages yes
# With this option enabled ClamAV
will try to detect phishing attempts by using
# signatures.
# Default: yes
PhishingSignatures yes
# Scan URLs found in mails for
phishing attempts using heuristics.
# Default: yes
PhishingScanURLs yes
# Always block SSL mismatches in
URLs, even if the URL isn't in the database.
# This can lead to false positives.
#
# Default: no
#PhishingAlwaysBlockSSLMismatch no
# Always block cloaked URLs, even
if URL isn't in database.
# This can lead to false positives.
#
# Default: no
#PhishingAlwaysBlockCloak no
# Detect partition intersections in
raw disk images using heuristics.
# Default: no
#PartitionIntersection no
# Allow heuristic match to take
precedence.
# When enabled, if a heuristic scan
(such as phishingScan) detects
# a possible virus/phish it will
stop scan immediately. Recommended, saves CPU
# scan-time.
# When disabled, virus/phish
detected by heuristic scans will be reported only at
# the end of a scan. If an archive
contains both a heuristically detected
# virus/phish, and a real malware,
the real malware will be reported
#
# Keep this disabled if you intend
to handle "*.Heuristics.*" viruses
# differently from "real" malware.
# If a non-heuristically-detected
virus (signature-based) is found first,
# the scan is interrupted
immediately, regardless of this config option.
#
# Default: no
#HeuristicScanPrecedence yes
##
## Data Loss Prevention (DLP)
##
# Enable the DLP module
# Default: No
#StructuredDataDetection yes
# This option sets the lowest
number of Credit Card numbers found in a file
# to generate a detect.
# Default: 3
#StructuredMinCreditCardCount 5
# This option sets the lowest
number of Social Security Numbers found
# in a file to generate a detect.
# Default: 3
#StructuredMinSSNCount 5
# With this option enabled the DLP
module will search for valid
# SSNs formatted as xxx-yy-zzzz
# Default: yes
#StructuredSSNFormatNormal yes
# With this option enabled the DLP
module will search for valid
# SSNs formatted as xxxyyzzzz
# Default: no
#StructuredSSNFormatStripped yes
##
## HTML
##
# Perform HTML normalisation and
decryption of MS Script Encoder code.
# Default: yes
# If you turn off this option, the
original files will still be scanned, but
# without additional processing.
#ScanHTML yes
##
## Archives
##
# ClamAV can scan within archives
and compressed files.
# If you turn off this option, the
original files will still be scanned, but
# without unpacking and additional
processing.
# Default: yes
ScanArchive yes
# Mark encrypted archives as
viruses (Encrypted.Zip, Encrypted.RAR).
# Default: no
#ArchiveBlockEncrypted no
##
## Limits
##
# The options below protect your
system against Denial of Service attacks
# using archive bombs.
# This option sets the maximum
amount of data to be scanned for each input file.
# Archives and other containers are
recursively extracted and scanned up to this
# value.
# Value of 0 disables the limit
# Note: disabling this limit or
setting it too high may result in severe damage
# to the system.
# Default: 100M
#MaxScanSize 150M
# Files larger than this limit
won't be scanned. Affects the input file itself
# as well as files contained inside
it (when the input file is an archive, a
# document or some other kind of
container).
# Value of 0 disables the limit.
# Note: disabling this limit or
setting it too high may result in severe damage
# to the system.
# Default: 25M
#MaxFileSize 30M
# Nested archives are scanned
recursively, e.g. if a Zip archive contains a RAR
# file, all files within it will
also be scanned. This options specifies how
# deeply the process should be
continued.
# Note: setting this limit too high
may result in severe damage to the system.
# Default: 16
#MaxRecursion 10
# Number of files to be scanned
within an archive, a document, or any other
# container file.
# Value of 0 disables the limit.
# Note: disabling this limit or
setting it too high may result in severe damage
# to the system.
# Default: 10000
#MaxFiles 15000
# Maximum size of a file to check
for embedded PE. Files larger than this value
# will skip the additional analysis
step.
# Note: disabling this limit or
setting it too high may result in severe damage
# to the system.
# Default: 10M
#MaxEmbeddedPE 10M
# Maximum size of a HTML file to
normalize. HTML files larger than this value
# will not be normalized or
scanned.
# Note: disabling this limit or
setting it too high may result in severe damage
# to the system.
# Default: 10M
#MaxHTMLNormalize 10M
# Maximum size of a normalized HTML
file to scan. HTML files larger than this
# value after normalization will
not be scanned.
# Note: disabling this limit or
setting it too high may result in severe damage
# to the system.
# Default: 2M
#MaxHTMLNoTags 2M
# Maximum size of a script file to
normalize. Script content larger than this
# value will not be normalized or
scanned.
# Note: disabling this limit or
setting it too high may result in severe damage
# to the system.
# Default: 5M
#MaxScriptNormalize 5M
# Maximum size of a ZIP file to
reanalyze type recognition. ZIP files larger
# than this value will skip the
step to potentially reanalyze as PE.
# Note: disabling this limit or
setting it too high may result in severe damage
# to the system.
# Default: 1M
#MaxZipTypeRcg 1M
# This option sets the maximum
number of partitions of a raw disk image to be scanned.
# Raw disk images with more
partitions than this value will have up to the value number
# partitions scanned. Negative
values are not allowed.
# Note: setting this limit too high
may result in severe damage or impact performance.
# Default: 50
#MaxPartitions 128
# This option sets the maximum
number of icons within a PE to be scanned.
# PE files with more icons than
this value will have up to the value number icons scanned.
# Negative values are not allowed.
# WARNING: setting this limit too
high may result in severe damage or impact performance.
# Default: 100
#MaxIconsPE 200
##
## On-access Scan Settings
##
# Enable on-access scanning.
Currently, this is supported via fanotify.
# Clamuko/Dazuko support has been
deprecated.
# Default: no
#ScanOnAccess yes
# Don't scan files larger than
OnAccessMaxFileSize
# Value of 0 disables the limit.
# Default: 5M
#OnAccessMaxFileSize 10M
# Set the include paths (all files
inside them will be scanned). You can have
# multiple OnAccessIncludePath
directives but each directory must be added
# in a separate line. (On-access
scan only)
# Default: disabled
#OnAccessIncludePath /home
#OnAccessIncludePath /students
# Set the exclude paths. All
subdirectories are also excluded.
# (On-access scan only)
# Default: disabled
#OnAccessExcludePath /home/bofh
# With this option you can
whitelist specific UIDs. Processes with these UIDs
# will be able to access all files.
# This option can be used multiple
times (one per line).
# Default: disabled
#OnAccessExcludeUID 0
##
## Bytecode
##
# With this option enabled ClamAV
will load bytecode from the database.
# It is highly recommended you keep
this option on, otherwise you'll miss detections for many new
viruses.
# Default: yes
Bytecode yes
# Set bytecode security level.
# Possible values:
#
None - no security at all, meant for debugging. DO NOT USE THIS ON
PRODUCTION SYSTEMS
#
This value is only available if clamav was built with
--enable-debug!
#
TrustSigned - trust bytecode loaded from signed .c[lv]d files,
#
insert
runtime safety checks for bytecode loaded from other sources
#
Paranoid - don't trust any bytecode, insert runtime checks for all
# Recommended: TrustSigned, because
bytecode in .cvd files already has these checks
# Note that by default only signed
bytecode is loaded, currently you can only
# load unsigned bytecode in
--enable-debug mode.
#
# Default: TrustSigned
#BytecodeSecurity TrustSigned
# Set bytecode timeout in
miliseconds.
#
# Default: 5000
# BytecodeTimeout 1000
##
## Statistics gathering and
submitting
##
# Enable statistical reporting.
# Default: no
#StatsEnabled yes
# Disable submission of individual
PE sections for files flagged as malware.
# Default: no
#StatsPEDisabled yes
# HostID in the form of an UUID to
use when submitting statistical information.
# Default: auto
#StatsHostID auto
# Time in seconds to wait for the
stats server to come back with a response
# Default: 10
#StatsTimeout 10
Le fichier de configuration de
clamav-milter
s'appelle
/usr/local/etc/clamav-milter.conf
le voici, voilà les lignes que j'ai modifiées
#Example
MilterSocket
/var/log/clamav/clmilter.sock
ClamdSocket
unix:/var/log/clamav/clamd.sock
AddHeader Replace
LogFile
/var/log/clamav/clamav-milter.log
pour le reste tout est en commentaire
On configure maintenant le fichier
/usr/local/etc/freshclam.conf
en mettant en commentaire la ligne suivante
#Example
Puis en modifiant la ligne suivante conformément à ce qui
a été défini dans le fichier
clamd.conf
# définition de la base des données des virus
DatabaseDirectory /usr/local/share/clamav
J'ai modifié ensuite les lignes suivantes
# définition du fichier de log de
freshclam
UpdateLogFile /var/log/clamav/freshclam.log
# serveur miroir à contacter pour
récupérer les mises oà jour
DatabaseMirror db.fr.clamav.net
# database.clamav.net is a round-robin record which points to our
most
# reliable mirrors. It's used as a fall back in case
db.XY.clamav.net is
# not working. DO NOT TOUCH the following line unless you know what
you
# are doing.
DatabaseMirror database.clamav.net
on pensera à créer préalablement les fichiers de log
touch /var/log/clamav/clamd.log
touch /var/log/clamav/freshclam.log
touch /var/log/clamav/clamav-milter.log
clamav doit être le propriétaire des deux premiers fichiers
chown clamav:clamav /var/log/clamav/clamd.log
chown clamav:clamav /var/log/clamav/freshclam.log
on doit créer préalablement le répertoire contenant la base de
données des virus et clamav doit
en être propriétaire
mkdir /usr/local/share/clamav
chown clamav:clamav /usr/local/share/clamav
La commande freshclam
permet de mettre à jour la base de données à partir
d'informations récupérées sur internet, en tant que root tapez freshclam
--datadir=/usr/local/share/clamav voilà le résultat:
ClamAV update process started at Fri
Sep 29 18:20:04 2023
daily database available for download (remote version: 27046)
Time: 1.4s, ETA: 0.0s
[========================>] 58.97MiB/58.97MiB
Testing database:
'/usr/local/share/clamav/tmp.9fe36bd938/clamav-3557261998181640b08c431851ade988.tmp-daily.cvd'
...
Database test passed.
daily.cvd updated (version: 27046, sigs: 2041850, f-level: 90,
builder: raynman)
main database available for download (remote version: 62)
Time: 3.1s, ETA: 0.0s
[========================>] 162.58MiB/162.58MiB
Testing database:
'/usr/local/share/clamav/tmp.9fe36bd938/clamav-e27b8ca5d89e3bbf79e40fce342cd482.tmp-main.cvd'
...
Database test passed.
main.cvd updated (version: 62, sigs: 6647427, f-level: 90, builder:
sigmgr)
bytecode database available for download (remote version: 334)
Time: 0.2s, ETA: 0.0s
[========================>] 285.12KiB/285.12KiB
Testing database:
'/usr/local/share/clamav/tmp.9fe36bd938/clamav-1d907c928e30a2ab4a04169388540564.tmp-bytecode.cvd'
...
Database test passed.
bytecode.cvd updated (version: 334, sigs: 91, f-level: 90, builder:
anvilleg)
Pour information quand cette commande
est lancée c'est l'utilisateur clamav
qui devient propriétaire du process.
Premiers tests
On lance maintenant
clamd en
tant que root
clamd
On va faire un test maintenant sur le répertoire
clamav-1.3.1
en tant que simple utilisateur
clamscan -r -l log.txt
clamav-1.3.1
L'option -r
permet d'avoir une recherche récursive (à travers le répertoire et
ses sous répertoires), -l pour
logger dans le fichier log.txt.
Voilà un extrait du contenu du dit-fichier aprés l'exécution
de la commande
----------- SCAN SUMMARY -----------
Known viruses: 8697141
Engine version: 1.3.1
Scanned directories: 1966
Scanned files: 13624
Infected files: 52
Data scanned: 2676.77 MB
Data read: 2142.18 MB (ratio 1.25:1)
Time: 436.179 sec (7 m 16 s)
Start Date: 2024:08:10 08:53:20
End Date: 2024:08:10 09:00:37
Il y a des virus qui ont été
volontairement placés dans ce répertoire pour mener des essais. Pour
scanner le répertoire de mail
/var/spool/mail
il faudra être root et rajouter l'option
--mbox.
Lancement automatique
On peut configurer un lancement
automatique pour les mises à jour de la base de donnée avec cron, pour une mise à jour
tous les jours on créera dans le fichier
/etc/cron.daily le fichier freshclam
#!/bin/bash
/usr/local/bin/freshclam --datadir=/usr/local/share/clamav --quiet
-l /var/log/clamav/clam-update.log
Avec les droits d'exécution
chmod 755 freshclam
On va créer maintenant un fichier de log pour les mises à jour
et rendre l'utilisateur
clamav
propriétaire
touch /var/log/clamav/clam-update.log
chmod 600
/var/log/clamav/clam-update.log
chown clamav:clamav
/var/log/clamav/clam-update.log
Autre solution pour un lancement simple en tant que daemon (lancement
six fois par jour) on tape
freshclam --datadir=/usr/local/share/clamav
-d -c 6 -l /var/log/clamav/clam-update.log
Maintenant pour un lancement automatique du daemon
clamd
on va créer le fichier
clamd.service
sous
/usr/lib/systemd/system voici
son contenu
[Unit]
Description = clamd scanner daemon
After = syslog.target
nss-lookup.target network.target
[Service]
Type = simple
ExecStart = /usr/local/sbin/clamd -c
/usr/local/etc/clamd.conf
Restart = on-failure
PrivateTmp = true
[Install]
WantedBy=multi-user.target
maintenant pour que le service soit lancé à chaque boot de la
machine il faudra taper
systemctl enable clamd.service
voillà le résultat
Created symlink from
/etc/systemd/system/multi-user.target.wants/clamd.service to
/usr/lib/systemd/system/clamd.service.
pour le lancer il suffit maintenant de taper
systemctl start clamd.service
et voilà ce que ça donne quand on tape
systemctl status clamd
●
clamd.service - clamd scanner daemon
Loaded: loaded
(/usr/lib/systemd/system/clamd.service; enabled; preset: disabled)
Active: active (running) since Sat
2024-08-10 08:52:49 CEST; 8min ago
Main PID: 97655 (clamd)
Tasks: 2 (limit: 9239)
Memory: 1.2G
CPU: 21.897s
CGroup: /system.slice/clamd.service
└─97655 /usr/local/sbin/clamd -c /etc/clamd.conf
août 10 08:53:11 ultra.kervao.fr clamd[97655]: Mail files support
enabled.
août 10 08:53:11 ultra.kervao.fr clamd[97655]: Mail: RFC1341
handling enabled.
août 10 08:53:11 ultra.kervao.fr clamd[97655]: OLE2 support enabled.
août 10 08:53:11 ultra.kervao.fr clamd[97655]: PDF support enabled.
août 10 08:53:11 ultra.kervao.fr clamd[97655]: SWF support enabled.
août 10 08:53:11 ultra.kervao.fr clamd[97655]: HTML support enabled.
août 10 08:53:11 ultra.kervao.fr clamd[97655]: XMLDOCS support
enabled.
août 10 08:53:11 ultra.kervao.fr clamd[97655]: HWP3 support enabled.
août 10 08:53:11 ultra.kervao.fr clamd[97655]: OneNote support
enabled.
août 10 08:53:11 ultra.kervao.fr clamd[97655]: Self checking every
600 seconds
Lancement automatique du
scanner
Pour un lancement automatique du scanner vous pouvez utiliser
cron,
créer un fichier
scanvirus
à placer sous
/etc/cron.daily
(chaque jour) ou
/etc/cron.hourly
(chaque heure) contenant
#!/bin/bash
/usr/local/bin/clamscan -r -l
/var/log/clamscan/scan.log /home
/usr/local/bin/clamscan -r --mbox
/var/spool/mail
Il faut le rendre exécutable
chmod 755 /etc/cron.daily/scanvirus.
Il scannera tous les jours les répertoires
/home et
/var/spool/mail.
Libre à vous de rajouter des scans dans les partages
samba
ou vos partitions windows.
Interfaçage avec sendmail
L'intérêt maintenant d'un anti
virus est un scan automatique à la réception mais également à
l'envoi d'emails. Pour cela Clam
Anti Virus peut très facilement s'interfacer avec sendmail.
Si la compilation s'est bien passée vous devriez trouver un fichier
clamav-milter sous /usr/local/sbin.
Dans le fichier de config de sendmail
(sous /etc/mail/ ou
/usr/share/sendmail-cf/cf) on rajoutera tout à la fin
les lignes
INPUT_MAIL_FILTER(`clmilter',
`S=local:/var/log/clamav/clmilter.sock, F=, T=S:4m;R:4m')dnl
define(`confINPUT_MAIL_FILTERS',
`clmilter')
Dans l'hypothèse où
SpamAssassin
est déjà interfacé avec
sendmail,
il faudra modifier les dernières lignes comme cela.
INPUT_MAIL_FILTER(`clmilter',
`S=local:/var/log/clamav/clmilter.sock, F=, T=S:4m;R:4m')dnl
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/run/spamass.sock,
F=, T=C:15m;S:4m;R:4m;E:10m')dnl
define(`confMILTER_MACROS_CONNECT',`t, b, j, _, {daemon_name},
{if_name}, {if_addr}')dnl
define(`confMILTER_MACROS_HELO',`s, {tls_version}, {cipher},
{cipher_bits}, {cert_subject}, {cert_issuer}')dnl
define(`confMILTER_MACROS_ENVFROM',`i, {auth_authen},
{auth_type}')dnl
define(`confMILTER_MACROS_ENVRCPT',`r, v, Z')dnl
define(`confINPUT_MAIL_FILTERS', `clmilter,spamassassin')
Dans le fichier
/etc/clamd.conf
on modifiera la ligne suivante
# Path to the local socket. The
daemon doesn't change the mode of the
# created file (portability reasons).
You may want to create it in a directory
# which is only accessible for a user
running daemon.
# je n'ai pas mis le répertoire par
défaut car l'utilisateur clamav
# ne peut écrire sous /var/run
LocalSocket
/var/log/clamav/clamd.sock
On relance maintenant
clamd
systemctl restart clamd.service
Et on lance
clamav-milter
clamav-milter -c /usr/local/etc/clamav-milter.conf
Pour information même en le lançant en tant que root, ce sera
l'utilisateur
clamav qui sera
le propriétaire du process
clamav-milter.
Maintenant on relance
sendmail en
supposant
que votre fichier de conf se trouve sous
/usr/share/sendmail-cf/cf
et se nomme
config.mc
systemctl stop sendmail
cd
/usr/share/sendmail-cf/cf/
m4 config.mc >
/etc/mail/sendmail.cf
systemctl start sendmail
Maintenant pour lancer
clamav-milter
automatiquement, on créera le fichier
clamav-milter.service
dans le répertoire
/usr/lib/systemd/system/
[Unit]
Description='ClamAV Milter'
After=clamd.service
[Service]
Type=forking
ExecStart=/usr/local/sbin/clamav-milter
--config-file /usr/local/etc/clamav-milter.conf
[Install]
WantedBy=multi-user.target
maintenant pour que le service soit lancé à chaque boot de la machine
il faudra taper
systemctl enable
clamav-milter.service
voillà le résultat
Created symlink from
/etc/systemd/system/multi-user.target.wants/clamav-milter.service
to /usr/lib/systemd/system/clamav-milter.service.
pour le lancer il suffit maintenant de taper
systemctl start clamav-milter.service
et voilà ce que donne la commande systemctl
status clamav-milter.service
● clamav-milter.service - 'ClamAV
Milter'
Loaded: loaded
(/usr/lib/systemd/system/clamav-milter.service; enabled; vendor
preset: disabled)
Active: active (running) since Sat
2021-09-11 20:34:04 CEST; 6s ago
Process: 292092
ExecStart=/usr/local/sbin/clamav-milter --config-file
/usr/local/etc/clamav-milter.conf (code=exited, status=0/SUCCESS)
Main PID: 292093 (clamav-milter)
Tasks: 3 (limit: 4677)
Memory: 2.6M
CPU: 10ms
CGroup:
/system.slice/clamav-milter.service
└─292093 /usr/local/sbin/clamav-milter --config-file
/usr/local/etc/clamav-milter.conf
sept. 11 20:34:04 mana.kervao.fr systemd[1]: Starting 'ClamAV
Milter'...
sept. 11 20:34:04 mana.kervao.fr systemd[1]: Started 'ClamAV
Milter'.
Si au lancement
vous avez
l'erreur suivante
/usr/local/sbin/clamav-milter:
--max-children must be given if --external is not given
Vérifiez bien que vous avez décommenté la ligne suivante dans
le fichier
/usr/local/etc/clamd.conf
# Maximal number of threads running at the same time.
# Default: 10
MaxThreads 20
Maintenant comment sait-on si un virus a été intercepté ? Avec
fetchmail quand on récupére le
courrier on a un message de ce genre
fetchmail: lecture du message
olivier.hoarau@funix.org@pop.pro.proxad.net:36 parmi 37 (3143
octets) fetchmail: éliminé
fetchmail: Le serveur SMTP a refusé de délivrer le courrier
Pour
que le mail soit purement et simplement supprimé. Dans votre
fichier .fetchmailrc il
faudra rajouter la ligne suivante
poll pop.fai.net protocol pop3
user
olivier.hoarau@funix.org with password machinchose is olivier
here
options antispam 550 554;
Sinon il restera dans
/var/spool/mail. Plus en détail avec
journalctl on obtient
sept. 29 17:40:37 ultra.kervao.fr sendmail[658550]:
38TFebXF658550: from=<adriana@spartoo.com>, size=44494,
class=0, nrcpts=1,
msgid=<0.0.3DE.F.1D9F2E9F7CCA362.0@email.spartoo.com>,
bodytype=8BITMIME, proto=ESMTP, daemon=MTA, relay=localhost
[127.0.0.1]
sept. 29 17:40:37 ultra.kervao.fr sendmail[658550]:
38TFebXF658550: Milter (clmilter) add: header: X-Virus-Scanned:
clamav-milter 0.105.1 at ultra.kervao.fr
sept. 29 17:40:37 ultra.kervao.fr sendmail[658550]:
38TFebXF658550: Milter (clmilter) add: header: X-Virus-Status:
Clean
Chaque
mail se voit rajouter la ligne suivante dans son entête
X-Virus-Scanned: clamav-milter 1.2.0 at ultra.kervao.fr
X-Virus-Status: Clean