From 222b87b983856748b1101aebc64b97c4b68880ce Mon Sep 17 00:00:00 2001 From: Gregory Colpart Date: Sun, 22 Oct 2017 19:31:54 +0200 Subject: [PATCH] relecture --- HowtoAmavis.md | 217 ++++++++++++++++++++++++------------------- HowtoDovecot.md | 62 ++++++------- HowtoSpamAssassin.md | 185 ++++++++++++++++++++++++++++++++++++ 3 files changed, 335 insertions(+), 129 deletions(-) create mode 100644 HowtoSpamAssassin.md diff --git a/HowtoAmavis.md b/HowtoAmavis.md index 0254405a..b4b79669 100644 --- a/HowtoAmavis.md +++ b/HowtoAmavis.md @@ -6,7 +6,7 @@ title: Howto Amavis * Documentation : -[Amavis](https://www.ijs.si/software/amavisd/) est ... +[Amavis](https://www.ijs.si/software/amavisd/) est logiciel qui permet de filtrer les emails pour détecter des virus, spams ou pièces jointes. Il s'interface avec un serveur [SMTP](HowtoSMTP) comme [Postfix](HowtoPostfix) et permet d'utiliser des logiciels externes comme ClamAV ou SpamAssassin. ## Installation @@ -50,11 +50,10 @@ Fichiers de configuration : └── README.l10n ~~~ -La configuration se trouve dans _/etc/amavis/conf.d/_ et se modifie/surcharge (autant que possible) dans le fichier _50-user_. -Voici les directives que l'on pourra modifier : +La configuration se trouve dans les fichiers du répertoire `/etc/amavis/conf.d/` et nous utilisons le fichier /etc/dovecot/conf.d/49-evolinux-defaults.conf` pour notre configuration de base : ~~~ -# Correction d'un bug sous Lenny +# expediteur des notifications $mailfrom_notify_admin = "postmaster\@$mydomain"; $mailfrom_notify_recip = "postmaster\@$mydomain"; $mailfrom_notify_spamadmin = "postmaster\@$mydomain"; @@ -69,6 +68,12 @@ $X_HEADER_LINE = "by Amavis at $mydomain"; # Notifications de fichiers bannis / virus $virus_admin = "postmaster\@$mydomain"; +# Que faire avec les messages détectés +$final_virus_destiny = D_DISCARD; +$final_banned_destiny = D_BOUNCE; +$final_spam_destiny = D_BOUNCE; +$final_bad_header_destiny = D_PASS; + # Pour recevoir des bounces (mails originals) des fichiers bloqués / virus #$banned_quarantine_to = "banned\@$mydomain"; #$virus_quarantine_to = "virus\@$mydomain"; @@ -79,41 +84,18 @@ $sa_tag2_level_deflt = 6.31; $sa_tag_level_deflt = -1999; $sa_kill_level_deflt = 1999; $sa_dsn_cutoff_level = -99; -$sa_spam_subject_tag = '[SPAM]'; +$sa_spam_subject_tag = '[SPAM] '; # log $log_level = 2; # En fonction besoin/ressources, on ajuste le nbre de process -$max_servers = 10; - +$max_servers = 5; ~~~ -Le comportement des notifications par défaut est de : +### Configuration avec Postfix -* notifier l'expéditeur (?) et $virus_admin lors de la présence d'un fichier banni, mail non délivré -* notifier $virus_admin lors de la présence d'un virus, mail non délivré -* Évidemment pour les spams, personne n'est notifié - -Note : Si le domaine de l'expéditeur est dans @local_domains_acl, alors l'expéditeur est toujours notifié ! - -Pour activer l'antivirus et/ou l'antispam, on décommentera les lignes adéquats dans le fichier _15-content_filter_mode_... - -Avant d'activer l'antivirus ClamAV, on ajoutera l'utilisateur _clamav_ dans le groupe _amavis_ pour autoriser clamd à lire dans /var/lib/amavis -et l'inverse pour autoriser amavisd à lancer clamscan (et lire dans /var/lib/clamav) : - -~~~ -# adduser clamav amavis -# adduser amavis clamav -~~~ - -Il faut aussi modifier ce paramètre dans /etc/clamav/clamd.conf : - -~~~ -AllowSupplementaryGroups true -~~~ - -Pour activer Amavis avec Postfix, on ajoutera dans le fichier _master.cf_ : +Pour activer Amavis avec [Postfix](HowtoPostfix), on ajoutera dans le fichier `/etc/postfix/master.cf` : ~~~ smtp-amavis unix - - y - 2 lmtp @@ -152,15 +134,78 @@ pre-cleanup unix n - n - 0 cleanup -o recipient_bcc_maps= ~~~ -Pour éviter les doublons, il est conseillé d'ajouter l'option _-o cleanup_service_name=pre-cleanup_ +Pour éviter les doublons, il est conseillé d'ajouter l'option `-o cleanup_service_name=pre-cleanup` aux services _smtp_, _cleanup_, _submission_ et _smtps_. -Et dans _main.cf_ : +Et enfin dans `/etc/postfix/main.cf` : ~~~ content_filter = smtp-amavis:[127.0.0.1]:10024 ~~~ +## Filtres externes + +### ClamAV + +L'usage principal d'Amavis est de lancer un antivirus, notamment [ClamAV](https://www.clamav.net/) qui est libre et gratuit. + +~~~ +# apt install clamav-daemon +# adduser clamav amavis +# adduser amavis clamav +~~~ + +Il faut aussi modifier ce paramètre via `/etc/clamav/clamd.conf` : + +~~~ +AllowSupplementaryGroups true +~~~ + +Et enfin on active l'antivirus dans la configuration Amavis via la ligne : + +~~~ +@bypass_virus_checks_maps = ( + \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re); +~~~ + +### SpamAssassin + +On peut aussi lancer [SpamAssassin](HowtoSpamAssassin) avec Amavis. + +~~~ +# apt install spamassassin spamc +~~~ + +Puis on active SpamAssassin dans la configuration Amavis via la ligne : + +~~~ +@bypass_spam_checks_maps = ( + \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re); +~~~ + + +## Administration + +### Notifications + +Le comportement des notifications par défaut est de : + +* notifier l'expéditeur (?) et $virus_admin lors de la présence d'un fichier banni, mail non délivré +* notifier $virus_admin lors de la présence d'un virus, mail non délivré +* évidemment pour les spams, personne n'est notifié + +> *Note* : Si le domaine de l'expéditeur est dans `@local_domains_acl`, alors l'expéditeur est toujours notifié ! + +On peut modifier ce comportement avec les directives : + +~~~ +$final_virus_destiny = D_DISCARD; +$final_banned_destiny = D_BOUNCE; +$final_spam_destiny = D_BOUNCE; +$final_bad_header_destiny = D_PASS; +~~~ + + ### Ressortir un mail de quarantaine Lorsqu'un mail est mis en quarantaine, amavisd logue un message du style : @@ -175,22 +220,18 @@ Pour le ressortir de la quarantaine et le renvoyer au destinataire : # amavisd-release 5/banned-5VspXCi2iNIn ~~~ -#### Erreur "Can't connect to UNIX socket" +### Renvoyer les emails bloqués vers une adresse email -Il est possible que la chaussette d'Amavis soit située dans /var/run à la place de /var/lib, dans ce cas il suffit de modifier la socket dans /etc/amavis/conf.d/25-amavis_helpers : +Tous les emails bloqués (virus, fichiers bannis, etc.) peuvent être renvoyés sur une adresse. +Pour cela, on configure le paramètre suivant : ~~~ -$unix_socketname = "/var/lib/amavis/amavisd.sock"; +$banned_quarantine_to = "quarantaine\@example.com"; ~~~ -### Bouncer tout les mails bloqués vers une adresse mail +### Whitelister une adresse email -Rajouter ceci dans le fichier _/etc/amavis/conf.d/50-user_ : -$banned_quarantine_to = "nom\@domain.com"; - -### Whitelister une adresse mail - -Rajouter ceci dans le fichier _/etc/amavis/conf.d/50-user_ : +On peut mettre en liste blanche des adresses email via la directive : ~~~ @whitelist_sender_maps = ( new_RE( @@ -198,69 +239,49 @@ Rajouter ceci dans le fichier _/etc/amavis/conf.d/50-user_ : )); ~~~ -## Intégration LDAP -Rajouter le schéma de `https://amavis.org/LDAP.schema.txt` en le convertissant en LDIF. +## Intégration avec LDAP -``` -$ cd /tmp -$ wget https://amavis.org/LDAP.schema.txt -$ mkdir /tmp/ldif -$ echo 'include /tmp/LDAP.schema.txt' >> /tmp/slap.conf -# slaptest -f /tmp/slap.conf -F /tmp/ldif/ -``` +Amavis a besoin d'avoir son propre schéma LDAP : -Changer les attributs : +Il faut intégrer ce schéma à votre annuaire LDAP puis configurer Amavis : -``` -dn: cn={0}ldap -objectClass: olcSchemaConfig -cn: {0}ldap -``` - -Par (avec le bon numéro `ls /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{*`) : - -``` -dn: cn={5}amavis -objectClass: olcSchemaConfig -cn: {5}amavis -``` - -Supprimer à la fin : - -``` -entryUUID: 4437d7ae-914f-1036-9cdf-cd9cc71d539a -creatorsName: cn=config -createTimestamp: 20170227154345Z -entryCSN: 20170227154345.031267Z#000000#000#000000 -modifiersName: cn=config -modifyTimestamp: 20170227154345Z -``` - -Supprimer la ligne cr32 : - -``` -# CRC32 32ff7a5a -``` - -Le copier dans le dossier des schémas : - -``` -# install -v -o openldap -g openldap -m 640 /tmp/ldif/cn\=config/cn\=schema/cn\=\{0\}ldap.ldif /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{5\}amavis.ldif -``` - -Puis redémarrer slapd. - -On pourra ensuite ajouter ceci dans la configuration amavis : - -``` +~~~ $enable_ldap = 1; $default_ldap = { hostname => '127.0.0.1', tls => 0, - base => 'cn=%d,dc=mail,dc=domain,dc=tld', scope => 'sub', + base => 'cn=%d,ou=people,dc=example,dc=com', scope => 'sub', query_filter => '(&(mailacceptinggeneralid=%m)(accountActive=TRUE))' }; +~~~ + +Évidemment, vous devez adapter la configuration à votre annuaire LDAP, notamment `query_filter`. + +Vous pouvez ensuite ajouter la classe `amavisAccount` à vos objets et utiliser les différents attributs (`amavisBypassVirusChecks`, `amavisBypassSpamChecks`, `amavisSpamTagLevel`, etc.). + + +## Monitoring + +### Nagios + +Nous utilisons ce petit script Perl [check_amavis.pl](https://github.com/glensc/monitoring-plugin-check_amavis) : + +~~~ +$ /usr/local/lib/nagios/plugins/check_amavis --server 127.0.0.1 --from monitoring@example.com --to postmaster@localhost --port 10024 +~~~ + + +## FAQ + +### Erreur "Can't connect to UNIX socket" + +Si vous obtenez cette erreur, il est possible que la socket d'Amavis soit +située dans `/var/run/` à la place de `/var/lib/`. Dans ce cas il suffit de +modifier la socket dans la configuration d'Amavis : + +~~~ +$unix_socketname = "/var/lib/amavis/amavisd.sock"; +~~~ + -``` -> **Note**: La `query_filter` est propre au schéma Evolix. diff --git a/HowtoDovecot.md b/HowtoDovecot.md index 26c0484e..a20fb1d8 100644 --- a/HowtoDovecot.md +++ b/HowtoDovecot.md @@ -42,36 +42,36 @@ Fichiers de configuration : ~~~ /etc/dovecot/ -├── dovecot.conf -├── conf.d/ -│   ├── 10-auth.conf -│   ├── 10-director.conf -│   ├── 10-logging.conf -│   ├── 10-mail.conf -│   ├── 10-master.conf -│   ├── 10-ssl.conf -│   ├── 10-tcpwrapper.conf -│   ├── 15-lda.conf -│   ├── 15-mailboxes.conf -│   ├── 20-imap.conf -│   ├── 20-managesieve.conf -│   ├── 20-pop3.conf -│   ├── 90-acl.conf -│   ├── 90-plugin.conf -│   ├── 90-quota.conf -│   ├── 90-sieve.conf -│   ├── 90-sieve-extprograms.conf -│   ├── auth-checkpassword.conf.ext -│   ├── auth-deny.conf.ext -│   ├── auth-dict.conf.ext -│   ├── auth-ldap.conf.ext -│   ├── auth-master.conf.ext -│   ├── auth-passwdfile.conf.ext -│   ├── auth-sql.conf.ext -│   ├── auth-static.conf.ext -│   ├── auth-system.conf.ext -│   ├── auth-vpopmail.conf.ext -│   └── z-evolinux-defaults.conf +├ dovecot.conf +├ conf.d/ +│ ├── 10-auth.conf +│ ├── 10-director.conf +│ ├── 10-logging.conf +│ ├── 10-mail.conf +│ ├── 10-master.conf +│ ├── 10-ssl.conf +│ ├── 10-tcpwrapper.conf +│ ├── 15-lda.conf +│ ├── 15-mailboxes.conf +│ ├── 20-imap.conf +│ ├── 20-managesieve.conf +│ ├── 20-pop3.conf +│ ├── 90-acl.conf +│ ├── 90-plugin.conf +│ ├── 90-quota.conf +│ ├── 90-sieve.conf +│ ├── 90-sieve-extprograms.conf +│ ├── auth-checkpassword.conf.ext +│ ├── auth-deny.conf.ext +│ ├── auth-dict.conf.ext +│ ├── auth-ldap.conf.ext +│ ├── auth-master.conf.ext +│ ├── auth-passwdfile.conf.ext +│ ├── auth-sql.conf.ext +│ ├── auth-static.conf.ext +│ ├── auth-system.conf.ext +│ ├── auth-vpopmail.conf.ext +│ └── z-evolinux-defaults.conf ├── dovecot-dict-auth.conf.ext ├── dovecot-dict-sql.conf.ext ├── dovecot-ldap.conf.ext @@ -564,4 +564,4 @@ Si vous constatez une lenteur à chaque requête avec votre client POP/IMAP (Rou ~~~ #!include auth-system.conf.ext -~~~ \ No newline at end of file +~~~ diff --git a/HowtoSpamAssassin.md b/HowtoSpamAssassin.md new file mode 100644 index 00000000..e14b7c12 --- /dev/null +++ b/HowtoSpamAssassin.md @@ -0,0 +1,185 @@ +--- +categories: mail +title: Howto SpamAssassin +... + +* Documentation : + +[SpamAssassin](http://spamassassin.apache.org/) est un filtre pour évaluer si des emails sont des spams. + +## Installation + +Nous utilisons la version [Apache-ITK](http://mpm-itk.sesse.net/) depuis des années en production sur de nombreux serveurs critiques. Apache-ITK permet de préciser pour chaque VirtualHost un utilisateur, un groupe et une option *MaxClients* spécifiques, ce qui est utile pour la sécurité d'un serveur multi-sites. + +~~~ +# apt install spamassassin spamc +~~~ + + +## Configuration + +~~~ +required_score 5 +report_safe 0 +rewrite_header Subject [SPAM] +add_header all Report _REPORT_ + +# filtre bayesien +# mkdir -p /var/spool/spam +use_bayes 1 +bayes_auto_learn 1 +bayes_path /var/spool/spam/bayes +bayes_file_mode 0777 + +# AWL : AutoWhitelist +# mkdir -p /var/spool/spam +loadplugin Mail::SpamAssassin::Plugin::AWL +use_auto_whitelist 1 +auto_whitelist_path /var/spool/spam/auto_whitelist +auto_whitelist_file_mode 0666 + +# LANG TESTS +Mail::SpamAssassin::Plugin::TextCat +ok_languages en fr es it +ok_locales en fr es it + +score BODY_8BITS 1.500 +score CHARSET_FARAWAY 3.200 +score CHARSET_FARAWAY_HEADER 3.200 +score HTML_CHARSET_FARAWAY 0.500 +score MIME_CHARSET_FARAWAY 2.450 +score UNWANTED_LANGUAGE_BODY 2.800 + +# DCC +# use_dcc 1 => un plugin maintenant... +score DCC_CHECK 2.9 + +# RAZOR : +use_razor2 1 +razor_timeout 10 +score RAZOR2_CHECK 2.9 +score RAZOR2_CF_RANGE_51_100 1.3 + +# pyzor : +use_pyzor 0 + +# RBL (Realtime Blackhole List) +skip_rbl_checks 0 +score RCVD_IN_BL_SPAMCOP_NET 3 + +# misc +score HELO_DYNAMIC_IPADDR 0.3 +score BIZ_TLD 0.1 +score PRIORITY_NO_NAME 0.2 + +# disable HTML tests + +score HTML_MESSAGE 0 +score HTML_00_10 0 +score HTML_10_20 0 +score HTML_20_30 0 +score HTML_30_40 0 +score HTML_40_50 0 +score HTML_50_60 0 +score HTML_60_70 0 +score HTML_70_80 0 +score HTML_80_90 0 +score HTML_90_100 0 +#score HTML_COMMENT_8BITS 0 +score UPPERCASE_25_50 0 +score UPPERCASE_50_75 0 +score UPPERCASE_75_100 0 +score MIME_HTML_ONLY 0.1 +# From +# Trop de faux negatifs avec BAYES_(0|1|2|3|4)* +score BAYES_00 0 0 -0.01 -0.01 +score BAYES_01 0 0 -0.01 -0.01 +score BAYES_10 0 0 -0.01 -0.01 +score BAYES_20 0 0 -0.01 -0.01 +score BAYES_30 0 0 -0.01 -0.01 +score BAYES_40 0 0 -0.01 -0.01 +score BAYES_44 0 0 -0.01 -0.01 +score BAYES_50 0 0 0.1 0.1 +score BAYES_56 0 0 0.5 0.5 +score BAYES_60 0 0 1.0 1.0 +score BAYES_70 0 0 2.5 2.5 +score BAYES_80 0 0 3.5 3.5 +score BAYES_90 0 0 4.5 4.5 +score BAYES_99 0 0 8.0 8.0 + +score RCVD_IN_SORBS_DUL 0.3 +score SUBJ_ILLEGAL_CHARS 0 +score RCVD_IN_NJABL_DUL 0.3 + +score ADDRESS_IN_SUBJECT 0.1 + +score HELO_LH_HOME 1.0 + +#internal_networks 192.168.XXX/24 +trusted_networks 31.170.8.33 31.170.8.15 62.212.111.216 88.179.18.233 85.118.59.50 +#score ALL_TRUSTED 0.3 +score HELO_DYNAMIC_IPADDR 0.3 + +score FORGED_MUA_OUTLOOK 0.5 + +# Eudora sucks +score EXTRA_MPART_TYPE 0.1 +score MIME_BOUND_EQ_REL 0.1 +score MIME_QP_LONG_LINE 0.1 + +# SMTP senders *have* dynamic IP addresses +# A.B.C.D.dnsbl.sorbs.net -> 127.0.0.10 +score RCVD_IN_DYNABLOCK 0 +score HELO_DYNAMIC_IPADDR 0.3 +score RCVD_IN_SORBS 0.1 +score RCVD_IN_PBL 0.1 +score RCVD_IN_SORBS_DUL 0 + +# old bug... +score FH_DATE_PAST_20XX 0.0 +~~~ + +### AWL : AutoWhiteList + +SpamAssassin a un puissant outil d’AWL si l’on définit bien une liste d’emails / expéditeurs avant de l’initialiser. +Néanmoins, il faut le maintenir. + +Pour lister sa whitelist (couple email / 2 1er octets de l’IP) + +~~~ +# sa-awl /var/spool/spam/auto_whitelist + + AVG (TOTSCORE/COUNT) -- EMAIL|ip=IPBASE + +AVG est le score moyen +TOTSCORE est le score total des mails +COUNT est le nombre de mails +~~~ + +Pour supprimer les entrées “vues” moins de 2 fois : + +~~~ +# sa-awl --clean --min 2 /var/spool/spam/auto_whitelist +~~~ + +Pour supprimer des entrées particulières : + +~~~ +# spamassassin --remove-addr-from-whitelist=foo@bar +SpamAssassin auto-whitelist: removing address: foo@bar +~~~ + + +## Administration + +### Whitelist / blacklist + +Par utilisateur (`~/.spamassassin/user_prefs`) ou global : + +~~~ +whitelist_from jdoe@example.org +whitelist_from *@example.com +blacklist_from bad@example.net +~~~ + +