Outils personnels

MailCleaner: installation et configuration : Différence entre versions

De wikiGite

(Whitelist / blacklist manuelles)
 
(34 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
= Installation =
 
= Installation =
sur L'hyperviseur :
+
{{Note|Le site communautaire est accessible sur http://www.mailcleaner.org. Le site commercial sur http://www.mailcleaner.net}}
<syntaxhighlight lang="bash">wget http://www.mailcleaner.org/downloads/mailcleaner_community_2012v6_64bit.iso</syntaxhighlight>
+
Télécharger l'image :
Donner l'iso comme périphérique de démarrage et lancer la VM. L'installation se lance automatiquement.
+
<syntaxhighlight lang="bash">wget https://cdn.mailcleaner.net/downloads/vm/MailCleaner_KVM_LATEST.zip</syntaxhighlight>
 +
Décompresser et attribuer le disque virtuel Mailcleaner.qcow2.template à une VM.
  
Aprés le 1er reboot, configuration de base en ligne de commande :
+
Aprés le 1er boot et connexion à la console (attention, on est en qwerty à ce moment. Le mot de passe par défaut "MCPassw0rd" donne donc "?CPqssz0rd" sur un clavier français), configuration de base en ligne de commande :
 
   1 keyboard
 
   1 keyboard
 
   2 root passwd
 
   2 root passwd
 
   3 network
 
   3 network
   4 MC Install/Reinstall
+
 
 +
ATTENTION : une fois l'ip changée, le firewall bloque le SSH externe au réseau local car n'accepte que les connexions de la plage locale !
 +
/usr/mailcleaner/etc/init.d/firewall stop # débloque la situation dans un premier temps
 +
 
 +
Puis :
 +
/usr/mailcleaner/bin/mc_mysql -m mc_config
 +
insert into external_access (service,port,protocol,allowed_ip) values ('ssh','22','TCP','0.0.0.0/0');
 +
 
 +
Rebooter
 +
 
 +
Ajouter le nom "mailcleaner" au fichier host du poste qui servira à faire le premier paramétrage, car le nom "mailcleaner" est demandé "en dur" par les URLs des pages de setup.
 +
 
 +
S'il y a un firewall entre le poste à l'extérieur et Mailcleaner, penser aussi à ouvrir temporairement le port 4242 utilisé lors du setup de base.
 +
 
 +
Première connexion :
 +
   https://mailcleaner/admin
 +
 
 +
<!-- ARCHIVE : manips manuelles pour MC2012 installé à partir d'une iso
 
Passer les points dans l'ordre pour arriver au 4 : configuration, création des bases.\\  
 
Passer les points dans l'ordre pour arriver au 4 : configuration, création des bases.\\  
 
Donner un ID unique par machine pouvant faire partie d'un cluster (voir plus bas).
 
Donner un ID unique par machine pouvant faire partie d'un cluster (voir plus bas).
 
<br/>
 
<br/>
<div align=center><font color=RED><b>BUG : en cas d'erreurs mysql, laisser l'installation se terminer (jusqu'à "starting services...")</b></font></div>
+
{{Warning|BUG : en cas d'erreurs mysql, laisser l'installation se terminer (jusqu'à "starting services...")}}
<br/>
 
 
En effet, l'installateur n'attend pas - pour une raison inconnue - la fin de création des bases de données avant de continuer (notamment sur serveur virtualisé), et ne peut donc pas créer ses tables !\\  
 
En effet, l'installateur n'attend pas - pour une raison inconnue - la fin de création des bases de données avant de continuer (notamment sur serveur virtualisé), et ne peut donc pas créer ses tables !\\  
 
Dans ce cas, se connecter en ssh et forcer l'arrêt du script qui reste bloqué sur "starting services...":
 
Dans ce cas, se connecter en ssh et forcer l'arrêt du script qui reste bloqué sur "starting services...":
Ligne 46 : Ligne 63 :
 
<syntaxhighlight lang="bash">/opt/mysql5/bin/mysql -S /var/mailcleaner/run/mysql_master/mysqld.sock -uroot -p mc_config</syntaxhighlight>
 
<syntaxhighlight lang="bash">/opt/mysql5/bin/mysql -S /var/mailcleaner/run/mysql_master/mysqld.sock -uroot -p mc_config</syntaxhighlight>
 
   mysql> update administrator set password=ENCRYPT('new-password') where username='admin';
 
   mysql> update administrator set password=ENCRYPT('new-password') where username='admin';
Première connexion :
+
-->
  https://mailcleaner.domain.fr/admin
 
  
 
= Configuration =
 
= Configuration =
Ligne 59 : Ligne 75 :
 
   * Anti-spam
 
   * Anti-spam
 
     * Enable access to whitelist
 
     * Enable access to whitelist
     * NiceBayes enable module, désactiver decisive
+
     * NiceBayes enable module, désactiver decisive (voir [[#bayes|Filtres Bayes]] pour modifier le score que NiceNayes doit ajouter à spamassassin)
 
     * preRBLSs enable module, activer listes ips.backscatterer.org et dsn.bl.rfc-ignorant.de
 
     * preRBLSs enable module, activer listes ips.backscatterer.org et dsn.bl.rfc-ignorant.de
 
     * UriRBLs enable module, activer les 3 listes
 
     * UriRBLs enable module, activer les 3 listes
Ligne 104 : Ligne 120 :
 
<syntaxhighlight lang="bash">sa-learn --backup > regles.txt</syntaxhighlight>
 
<syntaxhighlight lang="bash">sa-learn --backup > regles.txt</syntaxhighlight>
 
Sur le serveur Mailcleaner :
 
Sur le serveur Mailcleaner :
<syntaxhighlight lang="bash">sa-learn -p /usr/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf --siteconfigpath /usr/mailcleaner/share/spamassassin --restore regles.txt</syntaxhighlight>
+
<syntaxhighlight lang="bash">sa-learn -p /opt/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf --siteconfigpath /opt/mailcleaner/share/spamassassin --restore regles.txt</syntaxhighlight>
 +
 
 +
<span id="bayes"></span>
  
 
== Filtre Bayes ==
 
== Filtre Bayes ==
Ligne 119 : Ligne 137 :
  
 
# backup Spamassassin bayes db
 
# backup Spamassassin bayes db
sa-learn -p /usr/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf --siteconfigpath /usr/mailcleaner/share/spamassassin --backup >/var/mailcleaner/spool/spamassassin/spamass_rules.bak
+
sa-learn -p /opt/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf --siteconfigpath /opt/mailcleaner/share/spamassassin --backup >/var/mailcleaner/spool/spamassassin/spamass_rules.bak
 
# backup Bogofilter bayes db
 
# backup Bogofilter bayes db
 
cp -a /root/.bogofilter/wordlist.db "/root/.bogofilter/$TIMESTAMP-wordlist.db"
 
cp -a /root/.bogofilter/wordlist.db "/root/.bogofilter/$TIMESTAMP-wordlist.db"
Ligne 141 : Ligne 159 :
 
# copy the database to the right location
 
# copy the database to the right location
 
cp /root/.bogofilter/wordlist.db /var/mailcleaner/spool/bogofilter/database/wordlist.db
 
cp /root/.bogofilter/wordlist.db /var/mailcleaner/spool/bogofilter/database/wordlist.db
# If slave(s) Mailcleaner exists, ssh copy dbs to the slave(s)
+
# If slave(s) Mailcleaner exists, ssh copy db to the slave(s)
 
scp /root/.bogofilter/wordlist.db mailcleaner2.domain.com:/var/mailcleaner/spool/bogofilter/database/
 
scp /root/.bogofilter/wordlist.db mailcleaner2.domain.com:/var/mailcleaner/spool/bogofilter/database/
 +
# Copy the backup of spamassasin rules on slave(s). It must then be applied on it by --restore.
 
scp /var/mailcleaner/spool/spamassassin/spamass_rules.bak mailcleaner2.domain.com:/var/mailcleaner/spool/spamassassin/
 
scp /var/mailcleaner/spool/spamassassin/spamass_rules.bak mailcleaner2.domain.com:/var/mailcleaner/spool/spamassassin/
  
Ligne 154 : Ligne 173 :
 
Il appelle /opt/mailcleaner/scripts/imap-sa-learn.pl (http://forum.mailcleaner.org/viewtopic.php?f=3&t=836, voir aussi http://www.gagravarr.org/code). Le script crée une base /root/.bogofilter/wordlist.db et la copie dans /var/mailcleaner/spool/bogofilter/database. Il semble que les 2 emplacements soient nécessaires (à vérifier à l'occasion).
 
Il appelle /opt/mailcleaner/scripts/imap-sa-learn.pl (http://forum.mailcleaner.org/viewtopic.php?f=3&t=836, voir aussi http://www.gagravarr.org/code). Le script crée une base /root/.bogofilter/wordlist.db et la copie dans /var/mailcleaner/spool/bogofilter/database. Il semble que les 2 emplacements soient nécessaires (à vérifier à l'occasion).
  
Note : PENSER a changer le propriétaire de  /var/mailcleaner/spool/bogofilter/database/wordlist.db pour que mailcleaner puisse le modifier!
+
{{Note|PENSER a changer le propriétaire de  /var/mailcleaner/spool/bogofilter/database/wordlist.db pour que mailcleaner puisse le modifier!
<syntaxhighlight lang="bash">chown mailcleaner:mailcleaner /var/mailcleaner/spool/bogofilter/database/wordlist.db</syntaxhighlight>
+
<syntaxhighlight lang="bash">chown mailcleaner:mailcleaner /var/mailcleaner/spool/bogofilter/database/wordlist.db</syntaxhighlight>}}
Créer un lien vers gethamspam.sh dans cron.daily (appelé gethamspam sans ".sh" sinon cron ne prend pas), paramétrer logrotate pour archiver /var/log/gethamspam.log.
+
Créer un fichier dans cron.d (appelé gethamspam sans ".sh" car cron ne prend pas toujours)
 +
<syntaxhighlight lang="bash">
 +
#
 +
# cron-jobs for bayes bogofilter database
 +
#
 +
MAILTO=root
 +
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 +
00 06 * * * root /opt/mailcleaner/scripts/gethamspam.sh >> /var/log/gethamspam.log 2>&1</syntaxhighlight>
 +
Paramétrer logrotate pour archiver /var/log/gethamspam.log : créer /etc/logrotate.d/gethamspam contenant :
 +
<syntaxhighlight lang=bash enclose=div>/var/log/gethamspam.log {
 +
weekly
 +
rotate 3
 +
compress
 +
nomail
 +
notifempty
 +
missingok
 +
}</syntaxhighlight>
  
 
SLAVE : si des Mailcleaner de secours sont en cluster avec celui-ci, une fois les bases copiées par le script, il faut les traiter.
 
SLAVE : si des Mailcleaner de secours sont en cluster avec celui-ci, une fois les bases copiées par le script, il faut les traiter.
  * la base Bogofilter n'a pas besoin d'intervention
+
* la base Bogofilter n'a pas besoin d'intervention
  * la base Spamassassin doit être restaurée sur le slave, par exemple par un script de ce genre :
+
* la base Spamassassin doit être restaurée sur le slave, par exemple par un script de ce genre :
 
<syntaxhighlight lang="bash" enclose=div>
 
<syntaxhighlight lang="bash" enclose=div>
 
#!/bin/bash
 
#!/bin/bash
Ligne 166 : Ligne 201 :
 
then
 
then
 
   rm -f /var/mailcleaner/spool/spamassassin/spambayes.tgz
 
   rm -f /var/mailcleaner/spool/spamassassin/spambayes.tgz
  tar -cvf /var/mailcleaner/spool/spamassassin/spambayes.tgz /var/mailcleaner/spool/spamassassin/bayes*
 
 
fi
 
fi
 +
tar -cvf /var/mailcleaner/spool/spamassassin/spambayes.tgz /var/mailcleaner/spool/spamassassin/bayes*
 
if [ -f /var/mailcleaner/spool/spamassassin/spamass_rules.bak ]
 
if [ -f /var/mailcleaner/spool/spamassassin/spamass_rules.bak ]
 
then
 
then
Ligne 174 : Ligne 209 :
 
fi
 
fi
 
</syntaxhighlight>
 
</syntaxhighlight>
Activer le module dans l'interface. Le déclarer **non décisif**. Il doit faire partie du score de spamassassin, sinon il y a trop de faux-positifs.
+
Activer le module dans l'interface. Le déclarer '''non décisif'''. Il doit faire partie du score de spamassassin mais pas plus, sinon il y a trop de faux-positifs.
  
 
Pour l'intégrer à spamassassin, créer une règle (dans un fichier xxxxx.cf à créer dans /usr/share/mailcleaner/share/spamassassin) :
 
Pour l'intégrer à spamassassin, créer une règle (dans un fichier xxxxx.cf à créer dans /usr/share/mailcleaner/share/spamassassin) :
Ligne 181 : Ligne 216 :
 
   describe LOCAL_NICEBAYES_HEADER  NiceBayes header detected
 
   describe LOCAL_NICEBAYES_HEADER  NiceBayes header detected
 
   score LOCAL_NICEBAYES_HEADER    1.5
 
   score LOCAL_NICEBAYES_HEADER    1.5
 +
 
== Règles custom spamassassin ==
 
== Règles custom spamassassin ==
 
Modifier la configuration de sa-update (procédure selon ces préconisation (ajout de channels, surtout) :
 
Modifier la configuration de sa-update (procédure selon ces préconisation (ajout de channels, surtout) :
Ligne 244 : Ligne 280 :
 
Créer un lien pour un lancement journalier (ou dans cron.hourly si on veut un update toutes les heures !):
 
Créer un lien pour un lancement journalier (ou dans cron.hourly si on veut un update toutes les heures !):
 
<syntaxhighlight lang="bash">ln -s /opt/mailcleaner/scripts/clamav-unofficial-sigs.sh /etc/cron.daily/clamav-unofficial-sigs</syntaxhighlight>
 
<syntaxhighlight lang="bash">ln -s /opt/mailcleaner/scripts/clamav-unofficial-sigs.sh /etc/cron.daily/clamav-unofficial-sigs</syntaxhighlight>
 +
 +
== Scores Fuzzy ==
 +
Fuzzy a une fâcheuse tendance à générer quelques faux-positifs. Notamment, la règle de vérification des types d'images boucle sur chaque image du mail, et si elle buggue (image non reconnue par rapport à son extension) pour une raison ou une autre, le score s’additionne pour chaque image. ça peut aller vite !
 +
 +
Donc, on baisse au moins ce score. Dans /etc/mailscanner/FuzzyOcr.cf_template (qui reconstruit /usr/mailcleaner/share/spamassassin/FuzzyOcr.cf à chaque redémarrage de mailcleaner) modifier :
 +
focr_wrongext_score '''0.1'''
 +
Relancer mailcleaner
 +
service mailcleaner restart
 +
 
== Whitelist / blacklist manuelles ==
 
== Whitelist / blacklist manuelles ==
 +
* Pour Spamassassin
 
Il est possible d'ajouter des filtres, par exemple une whitelist/blacklist manuelle : /usr/mailcleaner/share/spamassassin/lists-custom.cf de ce format :
 
Il est possible d'ajouter des filtres, par exemple une whitelist/blacklist manuelle : /usr/mailcleaner/share/spamassassin/lists-custom.cf de ce format :
 
   whitelist_from          *.gooddomain.fr
 
   whitelist_from          *.gooddomain.fr
Ligne 252 : Ligne 298 :
 
<syntaxhighlight lang="bash">chown mailcleaner.mailcleaner /usr/mailcleaner/share/spamassassin/lists-custom.cf</syntaxhighlight>
 
<syntaxhighlight lang="bash">chown mailcleaner.mailcleaner /usr/mailcleaner/share/spamassassin/lists-custom.cf</syntaxhighlight>
  
=== Mise en cluster ==
+
* Pour Greylistd pour les services utilisant plusieurs IPs (Google, Outlook...)
 +
Ajouter un fichier /usr/mailcleaner/etc/greylistd/whitelist-hosts
 +
# Google
 +
# https://support.google.com/a/answer/60764?hl=en
 +
209.85.128.0/17
 +
64.233.160.0/19
 +
66.102.0.0/20
 +
66.249.80.0/20
 +
72.14.192.0/18
 +
74.125.0.0/16
 +
108.177.8.0/21
 +
173.194.0.0/16
 +
216.58.192.0/19
 +
216.239.32.0/19
 +
172.217.0.0/19
 +
172.217.32.0/20
 +
172.217.128.0/19
 +
172.217.160.0/20
 +
172.217.192.0/19
 +
108.177.96.0/19
 +
35.191.0.0/16
 +
130.211.0.0/22
 +
 +
# Outlook.com / MS
 +
# https://technet.microsoft.com/en-us/library/dn163583(v=exchg.150).aspx
 +
23.103.132.0/22
 +
23.103.136.0/21
 +
23.103.144.0/20
 +
23.103.198.0/23
 +
23.103.200.0/22
 +
23.103.212.0/22
 +
40.92.0.0/14
 +
40.107.0.0/17
 +
40.107.128.0/18
 +
52.100.0.0/14
 +
65.55.88.0/24
 +
65.55.169.0/24
 +
94.245.120.64/26
 +
104.47.0.0/17
 +
157.55.234.0/24
 +
157.56.110.0/23
 +
157.56.112.0/24
 +
207.46.100.0/24
 +
207.46.163.0/24
 +
213.199.154.0/24
 +
213.199.180.128/26
 +
216.32.180.0/23
 +
 +
# Yahoo.com
 +
216.109.112.0/20
 +
216.39.48.0/20
 +
98.136.0.0/14
 +
 
 +
== Mise en cluster ==
 
sur les 2 serveurs :
 
sur les 2 serveurs :
 
<syntaxhighlight lang="bash">cat /etc/mailcleaner.conf | grep PWD</syntaxhighlight>
 
<syntaxhighlight lang="bash">cat /etc/mailcleaner.conf | grep PWD</syntaxhighlight>
Ligne 262 : Ligne 361 :
 
   4) add a slave (donner l'IP du serveur SLAVE)
 
   4) add a slave (donner l'IP du serveur SLAVE)
 
Sur slave :
 
Sur slave :
<br/>
 
<div align=center><font color=RED><b>BUG !!!! Un des scripts n'est pas exécutable !</b></font></div>
 
<br/>
 
Commencer par :
 
<syntaxhighlight lang="bash">chmod 755 /usr/mailcleaner/bin/resync_db.sh</syntaxhighlight>
 
Et lancer :
 
 
<syntaxhighlight lang="bash">/usr/mailcleaner/scripts/configuration/slaves.pl</syntaxhighlight>
 
<syntaxhighlight lang="bash">/usr/mailcleaner/scripts/configuration/slaves.pl</syntaxhighlight>
 
   1) change host settings (donner l'IP de ce serveur)
 
   1) change host settings (donner l'IP de ce serveur)
 
   5) set this host as a slave (donner l'IP du serveur MAITRE)
 
   5) set this host as a slave (donner l'IP du serveur MAITRE)
  
=== Mises à jour ==
+
== Mises à jour ==
 
Commencer par un snapshot de la VM !!
 
Commencer par un snapshot de la VM !!
<syntaxhighlight lang="bash">cd /usr/mailcleaner
+
 
 +
Vérifier la version en cours de chacun des serveurs dans monitoring/status
 +
 
 +
Vérifier la dernière version ici : http://www.mailcleaner.org/doku.php/downloads:latest
 +
 
 +
<syntaxhighlight lang="bash">
 +
aptitude update
 +
aptitude safe-upgrade
 +
cd /usr/mailcleaner
 +
cvs -q update -dP
 +
source lib/updates/update_binaries.sh
 +
stabilizeBinaries
 +
install/install_perl_libs.sh
 +
install/install_sa.sh
 +
/usr/mailcleaner/bin/check_db.pl --update
 +
/etc/init.d/mailcleaner restart
 +
</syntaxhighlight>
 +
 
 +
<!-- Ancienne méthode
 +
cd /usr/mailcleaner
 
cvs update -dP updates # noter les numéros de patchs téléchargés
 
cvs update -dP updates # noter les numéros de patchs téléchargés
bin/apply_update.sh <PATCHNUMBER> # ne renvoit rien si OK</syntaxhighlight>
+
bin/apply_update.sh <PATCHNUMBER> # ne renvoit rien si OK
 
Vérifier le patch appliqué dans "Monitoring" / "status"
 
Vérifier le patch appliqué dans "Monitoring" / "status"
 +
-->
 +
 +
= "Mutualisation" de Mailcleaner =
 +
On entend par là, faire profiter d'autres boîtes mails du filtrage de Mailcleaner. Pour ça rien de plus simple :
 +
apt-get install fetchmail
 +
Créer un fichier /etc/fetchmailrc avec par exemple :
 +
defaults
 +
proto pop3
 +
set logfile "/var/log/fetchmaillog"
 +
set daemon 300
 +
 +
# Fetchmail config
 +
poll pop3.remotedomain.com with proto POP3
 +
    user "mymail@remotedomain.com" with password "MON_PASS" is user@domainknownbyMC.com here
 +
    smtphost "localhost" smtpname "user@domainknownbyMC.com"
 +
 +
touch /var/log/fetchmaillog
 +
chown fetchmail /var/log/fetchmaillog
 +
update-rc.d enable fetchmail
 +
service fetchmail start
 +
 +
= Validation de l'intallation =
 +
on peut tirer profit d'un scan complet chez MXTOOLBOX
 +
<nowiki>https://mxtoolbox.com/domain/serveurmx.domaine.fr</nowiki>
  
 
= TIPS =
 
= TIPS =
  * /opt/mailcleaner/scripts/configuration/set_ip_config.sh pour changer l'ip du système
+
* Le slave n'a peut-être pas le bon nom de host pour la bannière SMTP. Dans /etc/mailcleaner.conf, si la ligne n'y est pas, ajouter :
  * Changer le nom d'hôte : modifier dans /etc/hosts, /etc/hostname, et lancer /etc/init.d/hostname.sh
+
HELONAME = mx2.domaine.fr
  * sur serveur SLAVE, si le message
+
Puis relancer (par l'interface) le "incoming MTA"
  
  failed to open /var/mailcleaner/spool/tmp/mailcleaner/domains.list for linear search: No such file or directory
+
* /opt/mailcleaner/scripts/configuration/set_ip_config.sh pour changer l'ip du système
 +
 
 +
* Changer le nom d'hôte : modifier dans /etc/hosts, /etc/hostname, et lancer /etc/init.d/hostname.sh
 +
 
 +
* sur serveur SLAVE, si le message :
 +
 
 +
failed to open /var/mailcleaner/spool/tmp/mailcleaner/domains.list for linear search: No such file or directory
  
 
apparaît, lancer :
 
apparaît, lancer :
 
<syntaxhighlight lang="bash">/usr/mailcleaner/bin/dump_domains.pl</syntaxhighlight>
 
<syntaxhighlight lang="bash">/usr/mailcleaner/bin/dump_domains.pl</syntaxhighlight>
 +
 +
* Test des règles de spam :
 +
  /usr/mailcleaner/bin/is_spam.sh -D source-mail.eml

Version actuelle datée du 4 juillet 2018 à 16:00

Installation

Notepad.gif NOTE: Le site communautaire est accessible sur http://www.mailcleaner.org. Le site commercial sur http://www.mailcleaner.net

Télécharger l'image :

wget https://cdn.mailcleaner.net/downloads/vm/MailCleaner_KVM_LATEST.zip

Décompresser et attribuer le disque virtuel Mailcleaner.qcow2.template à une VM.

Aprés le 1er boot et connexion à la console (attention, on est en qwerty à ce moment. Le mot de passe par défaut "MCPassw0rd" donne donc "?CPqssz0rd" sur un clavier français), configuration de base en ligne de commande :

 1 keyboard
 2 root passwd
 3 network

ATTENTION : une fois l'ip changée, le firewall bloque le SSH externe au réseau local car n'accepte que les connexions de la plage locale !

/usr/mailcleaner/etc/init.d/firewall stop # débloque la situation dans un premier temps

Puis :

/usr/mailcleaner/bin/mc_mysql -m mc_config
insert into external_access (service,port,protocol,allowed_ip) values ('ssh','22','TCP','0.0.0.0/0');

Rebooter

Ajouter le nom "mailcleaner" au fichier host du poste qui servira à faire le premier paramétrage, car le nom "mailcleaner" est demandé "en dur" par les URLs des pages de setup.

S'il y a un firewall entre le poste à l'extérieur et Mailcleaner, penser aussi à ouvrir temporairement le port 4242 utilisé lors du setup de base.

Première connexion :

 https://mailcleaner/admin


Configuration

Système

Commencer par passer en revue l'intégralité de la configuration

 * Configuration / General settings : passer le GUI en français + adresses mails, décocher "Display domain selector", remplir Company
 * Configuration / Domains
   * Domain default settings : paramétrer emails dans general,  preferences, activer greylist dans filtering
 * SMTP
   * SMTP checks : activer les 4 RBLs
 * Anti-spam
   * Enable access to whitelist
   * NiceBayes enable module, désactiver decisive (voir Filtres Bayes pour modifier le score que NiceNayes doit ajouter à spamassassin)
   * preRBLSs enable module, activer listes ips.backscatterer.org et dsn.bl.rfc-ignorant.de
   * UriRBLs enable module, activer les 3 listes
   * spamc enable DCC Razor Pyzor, décocher DKIM control
 * Services / web interfaces
   * changer le nom URL
   * enable SSL, ajouter certificats (cat /usr/mailcleaner/etc/apache/certs/certificate.pem, copier la partie KEY (avec BEGIN RSA PRIVATE KEY et END) dans private key et le reste (avec BEGIN CERTIFICATE et END) dansSSL certificate)
 * Monitoring/status (ou en cliquant dans le message en haut)
   * redémarrer les services qui doivent l'être

Rebooter une fois. Si l'installateur redémarre après boot (au lieu d'arriver sur la demande de login), sortir (5), lancer :

update-rc.d -f z_installmc remove

pour le désactiver au prochain redémarrage.

RBLs

 * soit niveau SMTP -> rejetés
 * soit niveau PreRBLS -> quarantaine
 * soit niveau Spamc -> inclu dans la décision de tag spam

Attention à ne pas cocher les même RBLs à ces différents niveaux, ça ne servirait à rien et ralentirait le filtrage.

Whitelists/blacklists

 * Whitelists :
   * Config/Anti-spam/Enable access to whitelist : c'est une whitelist générale (pour tous les domaines), mais il faut aussi qu'elle soit activée pour que les whitelists par domain apparaissent
   * Config/Domains/<nom de domain>/filtering/Enable whitelist
 * Blacklists :
   * Config/SMTP/Connection control

Voir aussi plus bas : whitelists / blacklists manuelles.

Quarantaine

Quarantaine/ Rapport de quarantaine :

 * Domains/<nom de domaine>/preferences

voir aussi les preferences par défaut dans "Domain default settings"/"preferences"

Ajout d'un domaine à relayer

"Domains" / "New domain"

Paramétrer le serveur destinataire dans "delivery", cliquer "submit" et tester la destination.

Paramétrer "address verification" : smtp, donner IPip du serveur destinataire, cliquer "submit" et "tester"

Améliorations

transfert de règles sa-learn

Sur l'ancien serveur :

sa-learn --backup > regles.txt

Sur le serveur Mailcleaner :

sa-learn -p /opt/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf --siteconfigpath /opt/mailcleaner/share/spamassassin --restore regles.txt

Filtre Bayes

Le filtre est désactivé car aucune base n'est créée par défaut. Dans l'entête des mails on voit :

 NiceBayes disabled (no database ?)

Le principe est de déclarer une boîte aux lettres dédiée aux spams / hams, scannée par un script tous les jours pour alimenter la base. Installer la librairie nécessaire :

apt-get install libmail-imapclient-perl

Créer un script /opt/mailcleaner/scripts/gethamspam.sh :

#!/bin/bash
# copy the old database to a timestamped copy
TIMESTAMP=$(date +%d)
REPORT_EMAIL=admin@domain.com

# backup Spamassassin bayes db
sa-learn -p /opt/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf --siteconfigpath /opt/mailcleaner/share/spamassassin --backup >/var/mailcleaner/spool/spamassassin/spamass_rules.bak
# backup Bogofilter bayes db
cp -a /root/.bogofilter/wordlist.db "/root/.bogofilter/$TIMESTAMP-wordlist.db"
if [ -f "/root/.bogofilter/$TIMESTAMP-wordlist.db.gz" ]
then
   rm -f "/root/.bogofilter/$TIMESTAMP-wordlist.db.gz"
fi
gzip "/root/.bogofilter/$TIMESTAMP-wordlist.db"

# get the spam and ham from the imap mailbox for the spamassassin and bogofilter db's
/opt/mailcleaner/scripts/imap-sa-learn.pl
if [ $? -ne 0 ]
then
    (
      echo "Subject: Bogofilter database update $(hostname) failed"
      ls -l /var/mailcleaner/spool/bogofilter/database/
      ) | /usr/sbin/sendmail $REPORT_EMAIL
    exit 1
fi

# copy the database to the right location
cp /root/.bogofilter/wordlist.db /var/mailcleaner/spool/bogofilter/database/wordlist.db
# If slave(s) Mailcleaner exists, ssh copy db to the slave(s)
scp /root/.bogofilter/wordlist.db mailcleaner2.domain.com:/var/mailcleaner/spool/bogofilter/database/
# Copy the backup of spamassasin rules on slave(s). It must then be applied on it by --restore.
scp /var/mailcleaner/spool/spamassassin/spamass_rules.bak mailcleaner2.domain.com:/var/mailcleaner/spool/spamassassin/

# get the spam and ham counts from bogofilter - this just prints how many spam and ham you collected so far...
/opt/bogofilter/bin/bogoutil -w /var/mailcleaner/spool/bogofilter/database/wordlist.db .MSG_COUNT

Sans oublier

chmod 755 /opt/mailcleaner/scripts/gethamspam.sh
chmod 755 /opt/mailcleaner/scripts/imap-sa-learn.pl

Il appelle /opt/mailcleaner/scripts/imap-sa-learn.pl (http://forum.mailcleaner.org/viewtopic.php?f=3&t=836, voir aussi http://www.gagravarr.org/code). Le script crée une base /root/.bogofilter/wordlist.db et la copie dans /var/mailcleaner/spool/bogofilter/database. Il semble que les 2 emplacements soient nécessaires (à vérifier à l'occasion).

Notepad.gif NOTE: PENSER a changer le propriétaire de /var/mailcleaner/spool/bogofilter/database/wordlist.db pour que mailcleaner puisse le modifier!

chown mailcleaner:mailcleaner /var/mailcleaner/spool/bogofilter/database/wordlist.db

Créer un fichier dans cron.d (appelé gethamspam sans ".sh" car cron ne prend pas toujours)

#
# cron-jobs for bayes bogofilter database
#
MAILTO=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
00 06 * * *	root /opt/mailcleaner/scripts/gethamspam.sh >> /var/log/gethamspam.log 2>&1

Paramétrer logrotate pour archiver /var/log/gethamspam.log : créer /etc/logrotate.d/gethamspam contenant :

/var/log/gethamspam.log {
	weekly
	rotate 3
	compress
	nomail
	notifempty
	missingok
}

SLAVE : si des Mailcleaner de secours sont en cluster avec celui-ci, une fois les bases copiées par le script, il faut les traiter.

  • la base Bogofilter n'a pas besoin d'intervention
  • la base Spamassassin doit être restaurée sur le slave, par exemple par un script de ce genre :
#!/bin/bash
if [ -f /var/mailcleaner/spool/spamassassin/spambayes.tgz ]
then
  rm -f /var/mailcleaner/spool/spamassassin/spambayes.tgz
fi
tar -cvf /var/mailcleaner/spool/spamassassin/spambayes.tgz /var/mailcleaner/spool/spamassassin/bayes*
if [ -f /var/mailcleaner/spool/spamassassin/spamass_rules.bak ]
then
  sa-learn -p /usr/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf --siteconfigpath /usr/mailcleaner/share/spamassassin --restore /var/mailcleaner/spool/spamassassin/spamass_rules.bak
  rm -f /var/mailcleaner/spool/spamassassin/spamass_rules.bak
fi

Activer le module dans l'interface. Le déclarer non décisif. Il doit faire partie du score de spamassassin mais pas plus, sinon il y a trop de faux-positifs.

Pour l'intégrer à spamassassin, créer une règle (dans un fichier xxxxx.cf à créer dans /usr/share/mailcleaner/share/spamassassin) :

 # Custom rules
 header LOCAL_NICEBAYES_HEADER    X-NiceBayes =~ /is spam/
 describe LOCAL_NICEBAYES_HEADER  NiceBayes header detected
 score LOCAL_NICEBAYES_HEADER     1.5

Règles custom spamassassin

Modifier la configuration de sa-update (procédure selon ces préconisation (ajout de channels, surtout) :

 * http://forum.mailcleaner.org/viewtopic.php?f=15&t=964
 * http://forum.mailcleaner.org/viewtopic.php?f=3&t=1776)

Pour commencer, créer les répertoires, importer les clés spamassassin et les règles updates en une seul commande :

/usr/local/bin/sa-update -v

Intégrer la clé GPG du canal Sought :

wget http://yerp.org/rules/GPG.KEY
/usr/local/bin/sa-update --import GPG.KEY

créer /opt/mailcleaner/scripts/sa-update-customs.sh

#!/bin/bash
# Spamassassin auto updater with custom channels
# First import key 6C6191E3 :
#  wget http://yerp.org/rules/GPG.KEY
#  sa-update --import GPG.KEY
SAUPD=/usr/local/bin/sa-update
$SAUPD --channel updates.spamassassin.org --updatedir /usr/mailcleaner/share/spamassassin >> /var/log/sa-update.log 2>&1
$SAUPD --gpgkey 6C6191E3 --channel sought.rules.yerp.org --updatedir /usr/mailcleaner/share/spamassassin >> /var/log/sa-update.log 2>&1
$SAUPD -v >> /var/log/sa-update.log 2>&1
wget http://www.pccc.com/downloads/SpamAssassin/contrib/KAM.cf >> /var/log/sa-update.log 2>&1
mv -f KAM.cf /usr/mailcleaner/share/spamassassin/KAM.cf
/usr/mailcleaner/etc/init.d/mailscanner restart

sans oublier

chmod 755 /opt/mailcleaner/scripts/sa-update-customs.sh

et créer un lien dans cron.daily vers le script et paramétrer logrotate pour archiver /var/log/sa-update.log.

Modifier également /usr/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf :

 bayes_auto_learn 1
 bayes_auto_learn_threshold_spam 7.0
 bayes_auto_learn_threshold_nonspam -0.1

Règles custom Clamav (Clamspam)

Clamav est installé et lancé après l'installation de base, mais Clamspam ne démarre pas par défaut car il n'a pas de base. On va charger les bases custom.

aptitude install rsync gnupg curl socat gzip dnsutils
mkdir -p /opt/mailcleaner/sanesecurity/cache
cd /opt/mailcleaner/install

Vérifier la dernière version du script sur http://downloads.sourceforge.net/project/unofficial-sigs/files

wget http://downloads.sourceforge.net/project/unofficial-sigs/clamav-unofficial-sigs-3.7.2.tar.gz
tar -xvzf clamav-unofficial-sigs-3.7.2.tar.gz
cd /opt/mailcleaner/scripts
cp /opt/mailcleaner/install/clamav-unofficial-sigs-3.7.2/clamav-unofficial-sigs.sh .
cp /opt/mailcleaner/install/clamav-unofficial-sigs-3.7.2/clamav-unofficial-sigs.conf .
chmod 755 clamav-unofficial-sigs.sh

Modifier clamav-unofficial-sigs.sh :

 default_config="/opt/mailcleaner/scripts/clamav-unofficial-sigs.conf"

Modifier les options suivantes dans clamav-unofficial-sigs.conf :

 PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/opt/clamav/bin"
 clam_dbs="/var/mailcleaner/spool/clamspam"
 clamd_pid="/var/mailcleaner/run/clamav/clamspamd.pid"
 reload_dbs="yes"
 #reload_opt="clamdscan --reload" # Commenter cette ligne
 reload_opt="/usr/mailcleaner/etc/init.d/clamspamd restart" # et ajouter celle-ci
 clamd_socket="/var/mailcleaner/run/clamav/clamspamd.sock"
 work_dir="/opt/mailcleaner/share/sanesecurity/cache"   #Top level working directory
 user_configuration_complete="yes"

Lancer le script une première fois, afin qu'il crée ses répertoires, ses fichiers de bases et fasse une première synchronisation.

Créer un lien pour un lancement journalier (ou dans cron.hourly si on veut un update toutes les heures !):

ln -s /opt/mailcleaner/scripts/clamav-unofficial-sigs.sh /etc/cron.daily/clamav-unofficial-sigs

Scores Fuzzy

Fuzzy a une fâcheuse tendance à générer quelques faux-positifs. Notamment, la règle de vérification des types d'images boucle sur chaque image du mail, et si elle buggue (image non reconnue par rapport à son extension) pour une raison ou une autre, le score s’additionne pour chaque image. ça peut aller vite !

Donc, on baisse au moins ce score. Dans /etc/mailscanner/FuzzyOcr.cf_template (qui reconstruit /usr/mailcleaner/share/spamassassin/FuzzyOcr.cf à chaque redémarrage de mailcleaner) modifier :

focr_wrongext_score 0.1

Relancer mailcleaner

service mailcleaner restart

Whitelist / blacklist manuelles

  • Pour Spamassassin

Il est possible d'ajouter des filtres, par exemple une whitelist/blacklist manuelle : /usr/mailcleaner/share/spamassassin/lists-custom.cf de ce format :

 whitelist_from          *.gooddomain.fr
 blacklist_from          *.baddomain.fr
 blacklist_from          mail@baddomain.fr

Et ne pas oublier :

chown mailcleaner.mailcleaner /usr/mailcleaner/share/spamassassin/lists-custom.cf
  • Pour Greylistd pour les services utilisant plusieurs IPs (Google, Outlook...)

Ajouter un fichier /usr/mailcleaner/etc/greylistd/whitelist-hosts

# Google
# https://support.google.com/a/answer/60764?hl=en
209.85.128.0/17
64.233.160.0/19
66.102.0.0/20
66.249.80.0/20
72.14.192.0/18
74.125.0.0/16
108.177.8.0/21
173.194.0.0/16
216.58.192.0/19
216.239.32.0/19 
172.217.0.0/19
172.217.32.0/20
172.217.128.0/19
172.217.160.0/20
172.217.192.0/19
108.177.96.0/19
35.191.0.0/16
130.211.0.0/22

# Outlook.com / MS
# https://technet.microsoft.com/en-us/library/dn163583(v=exchg.150).aspx
23.103.132.0/22
23.103.136.0/21
23.103.144.0/20
23.103.198.0/23
23.103.200.0/22
23.103.212.0/22
40.92.0.0/14
40.107.0.0/17
40.107.128.0/18
52.100.0.0/14
65.55.88.0/24
65.55.169.0/24
94.245.120.64/26
104.47.0.0/17
157.55.234.0/24
157.56.110.0/23
157.56.112.0/24
207.46.100.0/24
207.46.163.0/24
213.199.154.0/24
213.199.180.128/26
216.32.180.0/23

# Yahoo.com
216.109.112.0/20
216.39.48.0/20
98.136.0.0/14

Mise en cluster

sur les 2 serveurs :

cat /etc/mailcleaner.conf | grep PWD

pour avoir les mots de passes des bases respectives.

Sur master :

/usr/mailcleaner/scripts/configuration/slaves.pl
 1) change host settings (donner l'IP de ce serveur)
 4) add a slave (donner l'IP du serveur SLAVE)

Sur slave :

/usr/mailcleaner/scripts/configuration/slaves.pl
 1) change host settings (donner l'IP de ce serveur)
 5) set this host as a slave (donner l'IP du serveur MAITRE)

Mises à jour

Commencer par un snapshot de la VM !!

Vérifier la version en cours de chacun des serveurs dans monitoring/status

Vérifier la dernière version ici : http://www.mailcleaner.org/doku.php/downloads:latest

aptitude update
aptitude safe-upgrade
cd /usr/mailcleaner
cvs -q update -dP
source lib/updates/update_binaries.sh
stabilizeBinaries
install/install_perl_libs.sh
install/install_sa.sh
/usr/mailcleaner/bin/check_db.pl --update
/etc/init.d/mailcleaner restart


"Mutualisation" de Mailcleaner

On entend par là, faire profiter d'autres boîtes mails du filtrage de Mailcleaner. Pour ça rien de plus simple :

apt-get install fetchmail

Créer un fichier /etc/fetchmailrc avec par exemple :

defaults
proto pop3
set logfile "/var/log/fetchmaillog"
set daemon 300

# Fetchmail config
poll pop3.remotedomain.com with proto POP3
   user "mymail@remotedomain.com" with password "MON_PASS" is user@domainknownbyMC.com here
   smtphost "localhost" smtpname "user@domainknownbyMC.com"
touch /var/log/fetchmaillog
chown fetchmail /var/log/fetchmaillog
update-rc.d enable fetchmail
service fetchmail start

Validation de l'intallation

on peut tirer profit d'un scan complet chez MXTOOLBOX

https://mxtoolbox.com/domain/serveurmx.domaine.fr

TIPS

  • Le slave n'a peut-être pas le bon nom de host pour la bannière SMTP. Dans /etc/mailcleaner.conf, si la ligne n'y est pas, ajouter :
HELONAME = mx2.domaine.fr

Puis relancer (par l'interface) le "incoming MTA"

  • /opt/mailcleaner/scripts/configuration/set_ip_config.sh pour changer l'ip du système
  • Changer le nom d'hôte : modifier dans /etc/hosts, /etc/hostname, et lancer /etc/init.d/hostname.sh
  • sur serveur SLAVE, si le message :
failed to open /var/mailcleaner/spool/tmp/mailcleaner/domains.list for linear search: No such file or directory

apparaît, lancer :

/usr/mailcleaner/bin/dump_domains.pl
  • Test des règles de spam :
 /usr/mailcleaner/bin/is_spam.sh -D source-mail.eml