MailCleaner: installation et configuration
De wikiGite
ATTENTION: UPDATE 01/2015 : les listes RHSBL* n'existe plus. Ne pas la cocher si elle apparaît encore dans les menus
Sommaire
- 1 Installation
- 2 Configuration
- 3 "Mutualisation" de Mailcleaner
- 4 Validation de l'intallation
- 5 TIPS
Installation
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 http://www.mailcleaner.org/downloads/mailcleaner_community_2012v6_64bit.iso
Booter sur l'iso ou donner l'iso comme périphérique de démarrage si c'est une VM. L'installation se lance automatiquement.
Aprés le 1er reboot, configuration de base en ligne de commande :
1 keyboard 2 root passwd 3 network 4 MC Install/Reinstall
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).
ATTENTION: BUG : en cas d'erreurs mysql, laisser l'installation se terminer (jusqu'à "starting services...")
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...":
ps -ef | grep install
kill <pid des processus *install*>
puis :
aptitude update
aptitude safe-upgrade #(répondre yes et yes)
cd /usr/mailcleaner
cvs -q update -dP
source lib/updates/update_binaries.sh
stabilizeBinaries
cd install
/opt/mysql5/bin/mysqladmin -S /var/mailcleaner/run/mysql_master/mysqld.sock -u root password 'new-password'
/opt/mysql5/bin/mysqladmin -S /var/mailcleaner/run/mysql_slave/mysqld.sock -u root password 'new-password'
par sécurité éditer ./MC_prepare_dbs.sh, aux alentour de la ligne 124 modifier :
/opt/mysql5/bin/mysql -S ${VARDIR}/run/mysql_slave/mysqld.sock < /tmp/tmp_install.sql 2>&1
/opt/mysql5/bin/mysql -S ${VARDIR}/run/mysql_master/mysqld.sock < /tmp/tmp_install.sql 2>&1
par
/opt/mysql5/bin/mysql -S ${VARDIR}/run/mysql_slave/mysqld.sock < /tmp/tmp_install.sql 2>&1
sleep 5
/opt/mysql5/bin/mysql -S ${VARDIR}/run/mysql_master/mysqld.sock < /tmp/tmp_install.sql 2>&1
sleep 5
puis continuer l'installation :
./MC_prepare_dbs.sh # donner le mdp root mysql
/usr/mailcleaner/bin/check_db.pl --update
/usr/mailcleaner/bin/dump_apache_config.pl
/etc/init.d/mailcleaner restart
/usr/mailcleaner/bin/collect_rrd_stats.pl
si problème de connexion en admin au webui :
/opt/mysql5/bin/mysql -S /var/mailcleaner/run/mysql_master/mysqld.sock -uroot -p mc_config
mysql> update administrator set password=ENCRYPT('new-password') where username='admin';
Première connexion :
https://mailcleaner.domain.fr/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 dbs to the slave(s)
scp /root/.bogofilter/wordlist.db mailcleaner2.domain.com:/var/mailcleaner/spool/bogofilter/database/
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).
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 lien vers gethamspam.sh dans cron.daily (appelé gethamspam sans ".sh" sinon cron ne prend pas)
cd /etc/cron.daily
ln -s /opt/mailcleaner/scripts/gethamspam.sh gethamspam
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
tar -cvf /var/mailcleaner/spool/spamassassin/spambayes.tgz /var/mailcleaner/spool/spamassassin/bayes*
fi
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
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
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 :
Commencer par :
chmod 755 /usr/mailcleaner/bin/resync_db.sh
Et lancer :
/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