Installation Serveur Mail Postfix, Amavisd, Mysql, Spamassassin, Dspam, Dovecot
Ce tutoriel a été intégralement repris du site http://www.starbridge.org et a été réalisé par tonio. Il est distribué sous licence creativecommons
Cet article, initié en 2007, est mis à jour régulièrement.
Le système sur lequel est basé ce document est une DEBIAN stable (Wheezy).
Le tuto est aussi entièrement compatible avec la version Testing (Jessie).
Ce tuto fonctionne également sous Ubuntu mais certains paquets présentent de légères différences. On essaiera de les indiquer si possible.
Mise à jour du 5/5/2015
Table des matières
- Préparation de l’environnement
- Cache DNS Local
- Postfix et Mysql
- Paramétrage de Postfix
- Activation du TLS
- Dovecot : SASL, LDA, IMAP et SIEVE
- Installation PostfixAdmin
- La gestion des Quotas
- Antispam / Antivirus
- Vérification des Headers, du Body et du Type Mime par Postfix.
- Amavisd et SA
- Installation Spamassassin
- Installation Amavisd
- Installation Clamav
- Paramétrage Spamassassin
- Dspam
- Fonctions Avancées d’amavisd : Penpals et gestion des users
- Mailzu
- DKIM
- Policyd V2
- Maintenance et automatismes : Tâches Cron
- Vacation AutoReply
- Reporting et analyses des logs
- Firewall
- Versions du Document (ChangeLog)
Préparation de l’environnement
On prendra comme base pour l’exemple le domaine starbridge.org et le hostname
du serveur de mail sera spike.
On met le système à jour :
aptitude update aptitude full-upgrade
On vérifie les fichiers :
/etc/hostname : spike.starbridge.org /etc/hosts : 127.0.0.1 spike.starbridge.org localhost.localdomain localhost spike
Cache DNS Local
Le fonctionnement d’un serveur de mail nécessite l’utilisation intensive de requêtes DNS.
Pour des raisons de performances, il est très fortement conseillé d’installer un cache DNS local.
aptitude install unbound
La configuration de base sous Debian fournie un serveur cache (on peut bien sur le configurer pour gérer son domaine local voire son domaine public mais ce n’est pas le sujet de cet article).
On modifie le /etc/resolv.conf
pour pointer en local :
nameserver 127.0.0.1 search starbridge.org
on relance le serveur DNS :
/etc/init.d/unbound restart
Puis on teste la résolution avec nslookup ou dig
nslookup >server
doit retourner :
Default server: 127.0.0.1 Address: 127.0.0.1#53
puis :
>yahoo.fr
La résolution doit se faire correctement.
On installe ensuite les outils pour la compilation, ils seront nécessaires tout au long de l’installation :
aptitude install bzip2 gcc libpcre3-dev libpcre -dev g libtool libmysqlclient-dev make libssl-dev libmysqld-dev libdb-dev automake autoconf bzip2 lbzip2 libbz2-1.0 libbz2-dev curl libcurl3 libcurl4-openssl-dev libexpat1 libexpat1-dev
On crée le dossier de configuration général :
mkdir /etc/caremail
Postfix et Mysql
- La version stable de Debian (Wheezy) utilise postfix 2.9.6.
- La dernière version de Postfix est la 2.11.
La version Testing de Debian utilise la version 2.11.
Un paramètre important a fait son apparition en 2.10 et il est nécessaire de modifier la configuration pour ceux qui utiliseront la 2.10. On le précisera plus bas.
Le fait de rester en 2.9.6 n’impacte pas les autres fonctionnalités mises en place dans le tuto, donc pour le moment il n’est pas forcément nécessaire de passer en 2.10 pour ceux qui sont en Debian stable
On peut aussi utiliser les backports de la version stable qui proposent la 2.11.2
On lance l’installation de postfix :
aptitude install postfix-mysql postfix-pcre
l’installeur va demander l’effacement de exim que l’on valide
puis il va demander le type d’installation pour postfix, on laisse tout par défaut.
on installe ensuite les autres paquets nécessaires :
aptitude install mysql-client-5.5 mysql-server-5.5 libsasl2-2 libsasl2-modules sasl2-bin openssl ntp
voir le sujet sur le forum concernant l’optimisation de mysql :
https://www.starbridge.org/support/viewtopic.php?f=6&t=1599
On installe apache php5 pour gérer plus tard le tout avec l’interface postfixadmin.
aptitude install libapache2-mod-php5 php5-mysql
Note : Il est fortement conseillé d’installer le SSL avec Apache pour sécuriser les échanges. Cette configuration sera détaillée plus loin lors de l’installation de Postfixadmin.
Pour ceux qui le préfère, on peut tout de suite installer Phpmyadmin pour effectuer l’étape suivante.
(on ne détaillera pas cette installation, en dehors du scope de ce document)
On passe donc à la création de la base sql Postfix :
Note : Si l’on a mis un password lors de l’installation du paquet mysql, il faut sauter la première commande ci dessous et exécuter directement la seconde.
mysqladmin -u root password '*****' mysqladmin -u root --password='*****' create postfix
Création de l’user postfix :
$ mysql -u root -p Enter password: GRANT ALL PRIVILEGES ON postfix.* TO "postfix"@"localhost" IDENTIFIED BY '******';
On crée les tables suivantes dans la base Postfix :
Évidemment on modifie la commande sed pour inclure son domaine.
cd ~ wget http://www.starbridge.org/spip/doc/Procmail/postfix/postfix.sql sed -i 's/starbridge.org/toto.com/g' postfix.sql mysql -u root -p < postfix.sql
Explications :
Seules 3 tables sont nécessaires à Postfix.
Le reste est pour l’interface Postfixadmin que l’on installera plus tard.
Le password (MD5) est “secret”
Le premier INSERT permet à Postfix de savoir que ce domaine est virtuel et qu’il doit donc le gérer.
Le 3ème INSERT est un alias virtuel pointant vers un user de la table mailbox. Cet alias vers lui même sera utilisé par Postfixadmin.
le 4ème INSERT est un simple alias virtuel.
Le 7ème INSERT est un compte (boite email) virtuel, qui utilise un mot de passe encrypté en MD5.
Les deux derniers INSERT permettent de créer le superadministrateur que l’on utilisera plus tard dans Postfixadmin.
#PAGINATION
Paramétrage de Postfix
On remplace tout le /etc/postfix/main.cf
par le contenu ci dessous :
n’oubliez pas de remplacer myhostname = spike.starbridge.org par votre domaine
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) biff = no append_dot_mydomain = no myhostname = spike.starbridge.org alias_maps = hash:/etc/aliases alias_database = hash:/etc/aliases myorigin = $mydomain mydestination = $myhostname, localhost.$mydomain, localhost mynetworks = 127.0.0.0/8 recipient_delimiter = home_mailbox = Maildir/ notify_classes = 2bounce, bounce, delay, policy, protocol, resource, software smtpd_helo_required = yes strict_rfc821_envelopes = yes relay_domains = proxy:mysql:/etc/postfix/mysql_relay_domains_maps.cf relay_recipient_maps = proxy:mysql:/etc/postfix/mysql_relay_recipients_maps.cf virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf,proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_maps.cf,proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_catchall_maps.cf virtual_gid_maps = static:20001 virtual_mailbox_base = /home/virtual virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf,proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_mailbox_maps.cf virtual_minimum_uid = 20001 virtual_uid_maps = static:20001 transport_maps = proxy:mysql:/etc/postfix/mysql_transport.cf,proxy:mysql:/etc/postfix/mysql_transport2.cf proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $smtpd_recipient_restrictions $smtpd_sender_login_maps $has_our_domain_as_sender message_size_limit = 50240000 smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, permit smtpd_data_restrictions = reject_unauth_pipelining, permit
Ceux qui sont en postfix 2.10 et supérieur doivent ajouter cette ligne au dessus du bloc smtpd_recipient_restrictions
smtpd_relay_restrictions =
ce qui donne :
smtpd_relay_restrictions = smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, permit smtpd_data_restrictions = reject_unauth_pipelining, permit
On modifie le /etc/postfix/master.cf
comme ci dessous :
# # Postfix master process configuration file. For details on the format # of the file, see the master(5) manual page (command: "man 5 master"). # # ========================================================================== # service type private unpriv chroot wakeup maxproc command args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd #smtp inet n - n - 1 postscreen #smtpd pass - - n - - smtpd #dnsblog unix - - n - 0 dnsblog #tlsproxy unix - - n - 0 tlsproxy #submission inet n - n - - smtpd 587 inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_etrn_restrictions=reject -o smtpd_client_restrictions=permit_sasl_authenticated,reject #smtps inet n - - - - smtpd # -o smtpd_tls_wrappermode=yes # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject #628 inet n - - - - qmqpd pickup fifo n - n 60 1 pickup -o receive_override_options=no_header_body_checks -o content_filter= cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr #qmgr fifo n - - 300 1 oqmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - n - - smtp # When relaying mail as backup MX, disable fallback_relay to avoid MX loops relay unix - - n - - smtp # -o fallback_relay= # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 showq unix n - n - - showq error unix - - n - - error retry unix - - n - - error discard unix - - n - - discard local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache # # # See the Postfix UUCP_README file for configuration details. # uucp unix - n n - - pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
On crée le groupe et le user vmail avec l’uid et gid 20001, ainsi que le répertoire des mails :
groupadd -g 20001 vmail useradd -g vmail -u 20001 vmail -d /home/virtual -m
On sécurise :
chown -R vmail: /home/virtual chmod 770 /home/virtual
On crée les fichiers d’appel des tables par Postfix :
(la commande sed
permet de spécifier votre password d’accès à la base, dans l’exemple ici c’est toto)
cd /etc/postfix wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_virtual_alias_maps.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_virtual_domains_maps.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_virtual_mailbox_maps.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_relay_domains_maps.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_relay_recipients_maps.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_virtual_alias_domain_maps.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_virtual_alias_domain_catchall_maps.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_virtual_alias_domain_mailbox_maps.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_transport.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_transport2.cf sed -i 's/****/toto/g' mysql_virtual_alias_maps.cf mysql_virtual_domains_maps.cf mysql_virtual_mailbox_maps.cf mysql_relay_domains_maps.cf mysql_relay_recipients_maps.cf mysql_virtual_alias_domain_maps.cf mysql_virtual_alias_domain_catchall_maps.cf mysql_virtual_alias_domain_mailbox_maps.cf mysql_transport.cf mysql_transport2.cf
On sécurise le tout :
chmod 640 /etc/postfix/mysql_* chgrp postfix /etc/postfix/mysql_*
Activation du TLS
Pour un serveur en production, il serait préférable d’utiliser un véritable certificat fourni et signé par une autorité de certification de confiance.
On édite la configuration de ssl pour pouvoir signer des certificats sur 10 ans, au lieu de 1 an par défaut :
vi /etc/ssl/openssl.cnf
on change la ligne default_days en
default_days = 3650
On crée le Certificat Racine :
cd ~ /usr/lib/ssl/misc/CA.pl -newca
on entre les parametres requis, on choisis un pass phrase de son choix et on laisse “challenge password” vide.
CA certificate filename (or enter to create) Making CA certificate ... Generating a 1024 bit RSA private key ....... ......................................... writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:Paris Locality Name (eg, city) []:Paris Organization Name (eg, company) [Internet Widgits Pty Ltd]:Starbridge Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:starbridge.org Email Address []:tonio@starbridge.org Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 84:7c:ce:d2:f7:cf:df:6c Validity Not Before: Nov 13 16:44:33 2007 GMT Not After : Nov 12 16:44:33 2010 GMT Subject: countryName = FR stateOrProvinceName = Paris organizationName = Starbridge commonName = starbridge.org emailAddress = tonio@starbridge.org X509v3 extensions: X509v3 Subject Key Identifier: B9:04:A3:81:E5:5D:D6:82:72:F4:6E:0C:FB:3F:E2:62:1B:EF:B9:57 X509v3 Authority Key Identifier: keyid:B9:04:A3:81:E5:5D:D6:82:72:F4:6E:0C:FB:3F:E2:62:1B:EF:B9:57 DirName:/C=FR/ST=Paris/O=Starbridge/CN=starbridge.org/emailAddress=tonio@starbridge.org serial:84:7C:CE:D2:F7:CF:DF:6C X509v3 Basic Constraints: CA:TRUE Certificate is to be certified until Nov 12 16:44:33 2010 GMT (1095 days) Write out database with 1 new entries Data Base Updated
Ce certificat racine sert à signer les certificats. Il est localisé dans le répertoire /demoCA.
On crée maintenant une clé privée pour le serveur ainsi qu’un csr (Certificate Signing Request : demande de signature de certificat).
mkdir ~/CERT cd ~/CERT openssl req -new -nodes -keyout starbridge-key.pem -out starbridge-req.pem -days 3650
et on entre les paramètres comme ci dessous :
Generating a 1024 bit RSA private key ............. ............. writing new private key to 'starbridge-key.pem' You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. Country Name (2 letter code) [AU]:FR State or Province Name (full name) [Some-State]:Paris Locality Name (eg, city) []:Paris Organization Name (eg, company) [Internet Widgits Pty Ltd]:Starbridge Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:spike.starbridge.org Email Address []:tonio@starbridge.org Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
Note : le paramètre le plus important est le Common Name qui doit être le même que le nom avec lequel se connecte les clients sur le serveur. Ici il s’agit du FQDN : spike.starbridge.org
.
cela génère 2 fichiers :
la clé privée, à protéger absolument
la demande de certificat, qui est pour faire simple un certificat public non signé
On signe maintenant notre certificat public avec le certificat racine :
cd ~ openssl ca -out CERT/starbridge-cert.pem -infiles CERT/starbridge-req.pem
Voici la sortie de la signature :
Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: 84:7c:ce:d2:f7:cf:df:6d Validity Not Before: Nov 13 16:51:32 2007 GMT Not After : Nov 10 16:51:32 2017 GMT Subject: countryName = FR stateOrProvinceName = Paris organizationName = Starbridge commonName = spike.starbridge.org emailAddress = tonio@starbridge.org X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 05:2A:A9:90:6F:2A:80:F7:E3:EF:2B:F9:44:9D:8E:CF:C3:16:18:EF X509v3 Authority Key Identifier: keyid:B9:04:A3:81:E5:5D:D6:82:72:F4:6E:0C:FB:3F:E2:62:1B:EF:B9:57 Certificate is to be certified until Nov 10 16:51:32 2017 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
On copie maintenant le certificat et la clé dans postfix :
mkdir /etc/postfix/tls cp demoCA/cacert.pem CERT/starbridge-key.pem CERT/starbridge-cert.pem /etc/postfix/tls/ chmod 644 /etc/postfix/tls/starbridge-cert.pem /etc/postfix/tls/cacert.pem chmod 400 /etc/postfix/tls/starbridge-key.pem chmod 400 ~/CERT/*
On ajoute ceci au /etc/postfix/main.cf
:
smtp_tls_CAfile = /etc/postfix/tls/cacert.pem smtp_tls_security_level = may smtp_tls_session_cache_database = btree:${data_directory}/smtp_tls_session_cache smtpd_tls_security_level = may smtpd_tls_auth_only = yes smtpd_tls_key_file = /etc/postfix/tls/starbridge-key.pem smtpd_tls_cert_file = /etc/postfix/tls/starbridge-cert.pem smtpd_tls_CAfile = /etc/postfix/tls/cacert.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_tls_session_cache tls_random_source = dev:/dev/urandom smtpd_tls_protocols = !SSLv2,!SSLv3
On redémarre Postfix :
postfix reload
on testera le fonctionnement après l’installation de dovecot.
Dovecot : SASL, LDA, IMAP et SIEVE
De “simple” serveur imap, Dovecot est devenu un ensemble d’outils indispensables pour la messagerie :
il permet de gérer le SASL très simplement au travers de Postfix afin de fournir à ce dernier un moyen d’authentifier les transactions SMTP,
il fournit un agent de livraison de mail très performant et parfaitement intégré à Postfix,
il permet de prendre en charge le langage Sieve pour le filtrage des mails lors de la livraison,
et bien sur, il demeure un serveur imap rapide et léger.
On va détailler ici son installation, fonction par fonction.
Installation de Dovecot :
On va utiliser la version 2.2 de Dovecot.
On compilera depuis les sources.
Créer les users pour dovecot :
adduser --system --group --home /usr/lib/dovecot --gecos "Dovecot mail server" --disabled-password --quiet dovecot adduser --system --home /nonexistent --gecos "Dovecot login user" --disabled-password --quiet dovenull
on compile :
cd ~ mkdir dovecot cd dovecot wget http://dovecot.org/releases/2.2/dovecot-2.2.16.tar.gz wget http://pigeonhole.dovecot.org/releases/2.2/dovecot-2.2-pigeonhole-0.4.7.tar.gz tar xvzf dovecot-2.2.16.tar.gz tar xvzf dovecot-2.2-pigeonhole-0.4.7.tar.gz cd dovecot-2.2.16 ./configure --prefix=/usr/ --sysconfdir=/etc/ --with-mysql --libexecdir=/usr/lib/ --localstatedir=/var --with-moduledir=/usr/lib/dovecot/modules --disable-rpath --disable-static --with-zlib --with-bzlib --with-solr make make install cd ../dovecot-2.2-pigeonhole-0.4.7 ./configure --with-dovecot=/usr/lib/dovecot/ --prefix=/usr/ --sysconfdir=/etc/ --libexecdir=/usr/lib/ --disable-static make make install
On copie les fichiers de configuration nécessaires :
cd /etc/dovecot/ wget http://www.starbridge.org/spip/doc/Procmail/dovecot/dovecot.conf wget http://www.starbridge.org/spip/doc/Procmail/dovecot/dovecot-sql.conf wget http://www.starbridge.org/spip/doc/Procmail/dovecot/dovecot-dict-quota-sql.conf chown vmail:dovecot dovecot-dict-quota-sql.conf chmod 600 dovecot-sql.conf chmod 640 dovecot-dict-quota-sql.conf
On indique le password de la table postfix :
sed -i 's/*****/toto/g' dovecot-sql.conf dovecot-dict-quota-sql.conf
on ne relance pas encore dovecot pour le moment
La livraison des emails : Dovecot LDA
Nous avons maintenant besoin d’un MDA (mail delivery agent) pour livrer les mails dans les boîtes.
Le service de livraison Virtual de Postfix ne convient pas totalement pour notre usage.
En effet nous allons avoir besoin de capacité de filtrage sur le MDA ainsi que la possibilité de gérer les quotas, ce que ne sait pas faire Virtual.
Procmail est très bien pour le filtrage, mais ne supporte pas les users/domaines virtuels, car il ne sait pas communiquer avec une base de données.
Une méthode répandue pour les quotas est l’application du patch VDA sur Postfix, option que nous ne choisirons pas pour des raisons de fiabilité.
Maildrop convient bien, il a d’ailleurs longtemps été utilisé dans ce tuto, mais nous l’avons maintenant remplacé par le MDA inclus dans Dovecot, plus performant et surtout très bien maintenu.
C’est donc Dovecot LDA (Local Delivery Agent, le MDA de dovecot) qui s’occupera de la livraison des mails dans les home.
Il faut configurer Postfix pour qu’il utilise Dovecot comme MDA :
On ajoute ceci au /etc/postfix/main.cf
:
dovecot_destination_recipient_limit = 1 virtual_transport = dovecot
et on ajoute un transport dovecot au /etc/postfix/master.cf
:
A noter que la configuration du tuto permet de choisir son transport par domaine. Il faut pour cela choisir Dovecot dans la configuration de domaine dans Postfixadmin.
Le domaine par défaut, crée par le script sql du tuto, est déja paramétré pour utiliser Dovecot.
Dovecot est également préconfiguré pour utiliser les mêmes certificats SSL que Postfix, que l’on a généré dans l’étape précédente.
Il n’y a donc rien de particulier à configurer pour le SSL sauf si vous avez modifié les noms de fichiers des certificats ssl à l’étape postfix.
il faut maintenant créer un fichier /etc/init.d/dovecot
:
cd /etc/init.d/ wget http://www.starbridge.org/spip/doc/Procmail/init.d/dovecot chmod 755 /etc/init.d/dovecot insserv -v /etc/init.d/dovecot
On lance Dovecot :
/etc/init.d/dovecot start
on relance Postfix :
postfix reload
On verifie dans les logs que tout a démarré correctement.
On teste cette première configuration de base en envoyant un mail a user@starbridge.org
mail user@starbridge.org
note : il faut taper un . (un point seul sur la ligne) pour terminer le message.
On regarde les logs pour les erreurs.
Si tout a fonctionné on devrait trouver dans une ligne :
...dovecot: lda(user@starbridge.org)...
note : si la commande mail n’existe pas sur le système (Ubuntu par exemple) l’installer avec aptitude install mailx
Puis on teste en direct sur le port 25 :
(ce qu’il faut taper est précédé de —>, le reste c’est le retour du serveur) :
---> telnet localhost 25 220 [127.0.0.1] ESMTP Postfix ---> HELO localhost 250 [127.0.0.1] ---> MAIL FROM: <> 250 2.1.0 Sender OK ---> RCPT TO: <user@starbridge.org> 250 2.1.5 OK ---> DATA 354 End data with <CR><LF>.<CR><LF> ---> . 250 2.0.0 Ok: queued as 079474CE44 ---> QUIT 221 2.0.0 Bye Connection closed by foreign host
On regarde les logs pour vérifier.
on regarde dans le dossier /home/virtual/user@starbridge.org
: on devrait trouver les dossiers suivants :
drwx------ 9 vmail vmail 4096 11 sept. 18:20 . drwxrwx--- 4 vmail vmail 4096 11 sept. 18:13 .. -rw------- 1 vmail vmail 384 11 sept. 18:20 dovecot.mailbox.log -rw------- 1 vmail vmail 291 11 sept. 18:20 dovecot-quota drwx------ 2 vmail vmail 4096 11 sept. 18:20 mailboxes
En regardant dans mailboxes on trouvera les dossiers par défaut qui sont crées automatiquement.
Sieve
Dovecot LDA permet d’utiliser le langage de filtrage Sieve.
Celui-ci offre la possibilité d’appliquer des règles spécifiques pour les utilisateurs (redirection dans les répertoires, etc).
Mais avant cela, nous avons besoin d’un fichier de filtre Sieve global (son utilisation est paramétrée dans dovecot.conf
) qui permettra de rediriger les spams dans un dossier de l’utilisateur :
mkdir /home/virtual/sieve chown vmail: /home/virtual/sieve chmod 750 /home/virtual/sieve
on crée le fichier global.sieve
:
vi /home/virtual/sieve/global.sieve require ["fileinto", "envelope", "subaddress"]; if envelope :detail "to" "spam"{ fileinto "Spam"; }
on sécurise :
chown vmail: /home/virtual/sieve/global.sieve chmod 600 /home/virtual/sieve/global.sieve
- NOTE : Le fichier
global.sieve
est commun à tous les comptes et sera appliqué à chaque mail. Si l’on veut appliquer des règles spécifiques à un utilisateur, il suffit de créer un autre fichier sieve dans sonMaildir
. On pourra par exemple rediriger des emails dans des répertoires spécifiques de cette façon. Dovecot cherche pour cela le fichierdovecot.sieve
dans lemaildir
de l’utilisateur.
Pour la création assistée et autonome (par les utilisateurs eux-mêmes) des fichiers Sieve personnels on pourra utiliser un module du Webmail horde.
L’article sur l’installation du Webmail traite ce point en détail.
Il est également possible d’utiliser le protocole Sieve pour créer/modifier les scripts depuis un client lourd, Thunderbird propose par exemple un plugin pour la gestion des scripts Sieve.
Le port de connection par défaut est le 4190.
Les users seront ainsi totalement autonomes sur la gestion de leur paramètres de filtrage.
Consultation des emails par IMAP
On teste l’imap en TLS sur le port 143 depuis un client mail.
Si tout fonctionne correctement on doit accéder aisément aux messages de tests précédents depuis le client mail.
Prise en charge du SASL par Dovecot :
Enfin, on passe à la configuration SASL :
On ajoute ceci au /etc/postfix/main.cf
:
smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_security_options = noanonymous smtpd_sasl_local_domain = broken_sasl_auth_clients = yes smtpd_sasl_authenticated_header = yes
On ajoute également “permit_sasl_authenticated
” dans “smtpd_recipient_restrictions
” pour valider les restrictions (attention à bien placer le paramètre exactement à l’endroit indiqué) :
..... permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, ......
on relance Postfix :
postfix reload
On vérifie le fonctionnement depuis un client mail configuré pour l’authentification SASL sur un chiffrement TLS avec les mêmes identifiants que pour la connexion IMAP (ne pas oublier le @starbridge.org
).
Pour le type d’authentification, il faut sélectionner “en clair” (le terme dépend du client mail).
C’est le chiffrage de la connexion par le TLS qui sécurisera le transfert du password.
C’est pour cela qu’il ne faut pas dissocier TLS et authentification.
Note : la directive smtpd_tls_auth_only = yes
impose l’usage d’une connexion sécurisée pour l’authentification SASL, ce qui limitera les erreurs de configuration des utilisateurs.
Installation PostfixAdmin
Pour faciliter la création des users et la gestion des boîtes et des comptes, on utilise Postfixadmin.
Nous utiliserons une version modifiée que nous prendrons par SVN.
Activation du SSL dans Apache
Le SSL est indispensable pour sécuriser les échanges, en particulier les mots de passe utilisateurs.
On active le SSL par la commande :
a2enmod ssl.conf
Puis on crée le virtual host :
vi /etc/apache2/sites-available/ssl.conf
Et on colle :
NameVirtualHost *:443 <VirtualHost *:443> ServerAdmin webmaster@starbridge.org ServerName www.starbridge.org DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined ServerSignature On SSLEngine On SSLCertificateFile /etc/apache2/ssl/starbridge-certkey-www.pem SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown </VirtualHost>
puis on active le virtual host :
a2ensite ssl
Génération des certificats :
Il est important de créer un certificat avec le même nom que celui utilisé pour la connection.
Par exemple si on se connecte au serveur web par www.starbridge.org il faut créer un certificat avec un Common Name enwww.starbridge.org.
On part du principe que l’on utilise www.starbridge.org.
On crée donc un certificat public non signé et une clé, puis on le signe avec le CA :
cd ~/CERT openssl req -new -nodes -keyout starbridge-key-www.pem -out starbridge-req-www.pem -days 3650
On entre les informations en prenant soin de bien spécifier le Common Name en www.starbridge.org.
Il faut également respecter les informations entrées plus tôt dans le CA.
cd ~ openssl ca -out CERT/starbridge-cert-www.pem -infiles CERT/starbridge-req-www.pem chmod 400 ~/CERT/* cd CERT/ cat starbridge-key-www.pem starbridge-cert-www.pem >starbridge-certkey-www.pem mkdir /etc/apache2/ssl cp starbridge-certkey-www.pem /etc/apache2/ssl/ chmod 600 /etc/apache2/ssl/starbridge-certkey-www.pem chmod 400 ~/CERT/*
On redémarre Apache :
/etc/init.d/apache2 restart
On teste la connexion par
Le navigateur va demander la validation du certificat car celui ci n’est pas reconnu par une autorité de confiance. Ceci est normal (c’est un certificat self-signed).
Pour un serveur en production, il serait donc préférable d’utiliser un véritable certificat (payant).
aptitude install subversion cd /var/www svn co http://smtp04.spamguard.fr/svn/Procmail/mailstorm/postfixadmin-relay postfixadmin-relay chown -R www-data: /var/www/postfixadmin-relay cd postfixadmin-relay chmod 640 *.php cd /var/www/postfixadmin-relay/admin/ chmod 640 *.php cd /var/www/postfixadmin-relay/images/ chmod 640 *.png cd /var/www/postfixadmin-relay/languages/ chmod 640 *.lang cd /var/www/postfixadmin-relay/templates/ chmod 640 *.php cd /var/www/postfixadmin-relay/users/ chmod 640 *.php cd /var/www/postfixadmin-relay/
Il faut remplacer toutes les entrées starbridge dans le fichier de configuration par celles correspondantes à votre domaine.
(toto est le password pour la base sql postfix et toto.com
votre domaine) :
sed -i "s/password'] = '*****'/password'] = 'toto'/" config.inc.php sed -i 's/www.starbridge.org/www.toto.com/g' config.inc.php sed -i 's/starbridge.org/toto.com/g' config.inc.php
On sécurise ce fichier :
chown www-data: /var/www/postfixadmin-relay/config.inc.php chmod 640 config.inc.php
On se connecte ensuite à l’interface :
https://www.starbridge.org/postfixadmin-relay
(bien sur on remplace starbridge par votre domaine sinon vous vous connectez chez moi !!)
On s’identifie avec @starbridge.org
(on l’a créé plus tôt lors des inserts sql – on rappelle que le password est ’secret’)
On retrouvera les éléments entrés en ligne de commande au début du document.
On crée un nouvel utilisateur pour valider.
On rappelle que l’utilisation du SSL pour se connecter à Postfixadmin est INDISPENSABLE si on doit passer par internet pour gérer la plateforme. Sur un réseau local son utilisation serait préférable.
La gestion des Quotas
On l’a vu, on a installé dovecot LDA qui prend en charge les quotas et on a paramétré dans la base SQL des champs pour les gérer.
Il faut maintenant les paramétrer :
On crée un message d’alerte générique pour le dépassement de quotas :
(on pensera à l’adapter a ses besoins mais il faut être prudent dans la mise en forme du fichier)
cd /usr/bin wget http://www.starbridge.org/spip/doc/Procmail/dovecot/quota-warning.sh chmod x /usr/bin/quota-warning.sh
Le reste est déjà paramétré dans Dovecot.
Il suffit d’utiliser Postfixadmin pour régler un quota pour un utilisateur.
Le faire avec l’utilisateur user@starbridge.org
qui par défaut n’a pas de quota.
On teste en envoyant un mail.
On regarde les logs.
Voila le serveur est configuré !
A ce stade le serveur est sécurisé mais ne filtre ni les virus, ni les spams.
Antispam / Antivirus
Paramétrage de Postfix :
Une grande majorité des spams ne respecte pas les règles d’envoi d’email : HELO
incorrect, MAILFROM
d’un domaine inconnu, etc, etc…
Il est très fortement conseillé de lire des documents sur ce sujet, notamment les RFC pour bien comprendre le fonctionnement.
La première chose à faire est de renforcer Postfix pour qu’il soit beaucoup plus restrictif.
Pour cela on va utiliser les smtpd_recipient_restrictions
.
On ne détaillera pas ici les actions précises de chaque règle. (la documentation de Postfix est très complète sur le sujet et l’article sur la gestion du serveur de mail revient sur tous les points en les détaillant).
On édite le main.cf
et on remplace tout le smtpd_recipient_restrictions
par celui-ci :
smtpd_recipient_restrictions = reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_non_fqdn_sender, reject_unknown_recipient_domain, reject_invalid_helo_hostname, reject_unlisted_recipient, reject_unlisted_sender, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_unauth_destination, check_client_access hash:/etc/postfix/internal_networks, check_sender_access proxy:mysql:/etc/postfix/mysql_not_our_domain_as_sender.cf, check_helo_access proxy:mysql:/etc/postfix/mysql-hello.cf, check_sender_access proxy:mysql:/etc/postfix/mysql-sender.cf, check_client_access proxy:mysql:/etc/postfix/mysql-client.cf, permit
on va aussi paramétrer 4 RBL (des blacklists) qui filtrent très efficacement.
Pour cela, on va se servir d’une fonctionnalité apparue depuis la version 2.8 de postfix : postscreen.
Toujours dans le main.cf
, on ajoute tout en bas du fichier :
postscreen_dnsbl_threshold = 2 postscreen_dnsbl_sites = zen.spamhaus.org*2 bl.spamcop.net*2 b.barracudacentral.org*1 bl.mailspike.net*1 postscreen_dnsbl_action = enforce postscreen_greet_action = enforce
Dans le master.cf
, on commente la première ligne :
#smtp inet n - n - - smtpd
et on décommente les suivantes :
smtp inet n - n - 1 postscreen smtpd pass - - n - - smtpd dnsblog unix - - n - 0 dnsblog tlsproxy unix - - n - 0 tlsproxy
- ATTENTION : Il existe d’autres RBL qui peuvent rendre le filtrage encore plus restrictif mais je déconseille de les installer dans Postfix sur un serveur en production, bien que l’on puisse se servir des tables ci dessous (
mysql-sender.cf
etmysql-client.cf
) pour whitelister certains clients ou expéditeurs).
Il vaut mieux gérer les RBL supplémentaires au travers de Spamassassin.
A noter que Postscreen effectue egalement une autre vérification (greet_action) qui est particulièrement efficace (voir la doc de Postfix pour en comprendre le fonctionnement)
Ensuite il faut limiter les possibilités de forging des expéditeurs en vérifiant les MAIL FROM
(adresses expéditrices).
Toujours dans le main.cf, on place au dessus du bloc smtpd_recipient_restrictions =
:
smtpd_sender_login_maps = proxy:mysql:/etc/postfix/mysql-sasl-sender-check.cf,proxy:mysql:/etc/postfix/mysql_virtual_alias_domain_maps.cf smtpd_sender_restrictions = reject_authenticated_sender_login_mismatch smtpd_reject_unlisted_sender = yes smtpd_restriction_classes = has_our_domain_as_sender has_our_domain_as_sender = check_sender_access proxy:mysql:/etc/postfix/mysql_our_domain_as_sender.cf,hash:/etc/postfix/our_domain_as_sender reject
Cela permettra d’empécher des utilisateurs de mettre une autre adresse email dans le MAIL FROM. Ils seront obligés de passer par les domaines que l’on gère.
De même, les utilisateurs authentifiés par SASL seront tenus d’utiliser comme adresse email (MAIL FROM) un alias valide de leur mail principal (on détaillera ce fonctionnement dans le document sur la gestion du serveur).
Il faut maintenant créer les fichiers suivants :
- On crée le fichier
/etc/postfix/internal_networks
:
- On crée le fichier
cd /etc/postfix/ wget http://www.starbridge.org/spip/doc/Procmail/postfix/internal_networks
On édite ce fichier et on spécifie son réseau local et son adresse publique à l’intérieur :
10.0.0 has_our_domain_as_sender
Cela permet de spécifier la ou les plages IP de notre réseau, qui seront autorisées à envoyer un mail avec nos domaines dans le MAIL FROM.
Cela permet également de préciser les IP autorisées à envoyer un mail en se présentant avec notre HELO.
On bloquera ainsi les clients SMTP extérieurs qui se présentent avec un HELO qui est le notre :
- Ensuite on crée les fichier suivants qui appellent les tables SQL.
cd /etc/postfix/ wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql-hello.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql-sender.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql-client.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql-sasl-sender-check.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_our_domain_as_sender.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mysql_not_our_domain_as_sender.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/our_domain_as_sender
Pour info voici leurs fonctions :
/etc/postfix/mysql-hello.cf
: Cette table SQL listera les HELO de nos domaines email (on peut en posséder plusieurs dans le cas d’un serveur multidomaine).
/etc/postfix/mysql-sender.cf
: Il sert à blacklister ou whitelister les MAILFROM, c’est à dire les expéditeurs, selon leur adresse email ou juste le domaine de celle ci.
/etc/postfix/mysql-client.cf
: Il sert à blacklister ou whitelister les clients par leur connection (ip/domaine).
/etc/postfix/mysql-sasl-sender-check.cf
: Il sert à spécifier les adresses que les utilisateurs authentifiés par SASL peuvent utiliser comme MAIL FROM.
On remarquera que l’on fait appel à la table alias. En effet c’est le meilleur endroit pour connaître les MAIL FROM d’un utilisateur, car un mail from valide doit être une adresse valide pour cet utilisateur. (donc un de ces alias)
/etc/postfix/mysql_our_domain_as_sender.cf
: Il sert à spécifier les domaines autorisés comme MAIL FROM pour les users internes authentifiés par leur IP (les clients en local peuvent envoyer un email local sans s’authentifier dans notre configuration)
/etc/postfix/our_domain_as_sender
: Il sert à spécifier le null sender pour la regle du dessus.
On postmape les fichiers qui le nécessitent :
postmap /etc/postfix/internal_networks postmap /etc/postfix/our_domain_as_sender
On modifie le password des fichiers de lookup (la commande sed permet de spécifier votre password d’accès à la base, dans l’exemple ici c’est toto) :
sed -i 's/****/toto/g' mysql-hello.cf mysql-sender.cf mysql-client.cf mysql-sasl-sender-check.cf mysql_our_domain_as_sender.cf mysql_not_our_domain_as_sender.cf
Et on sécurise les fichiers de lookup :
chown -R root:postfix /etc/postfix/mysql* chmod 640 /etc/postfix/mysql*
On crée les tables en question :
Evidemment, on modifie la commande sed pour inclure son domaine. Ici c’est toto.com
cd ~ wget http://www.starbridge.org/spip/doc/Procmail/postfix/postfix_access.sql sed -i 's/starbridge.org/toto.com/g' postfix_access.sql mysql -u root -p < postfix_access.sql
On relance Postfix
postfix reload
on vérifie les logs et on teste.
On a inséré des exemples de blacklist et de whitelist.
Tout le détail du fonctionnement se trouve dans le document gestion serveur de mail.
On peut utiliser PhpMyadmin pour gérer ces tables SQL.
Vérification des Headers, du Body et du Type Mime par Postfix.
Postfix peut vérifier les mails entrants très simplement en analysant le header, le body et le type mime des pièces jointes.
Ce type de blocage est très efficace, plus rapide que de laisser faire Amavisd ou SA, mais manque de souplesse.
Il s’avère cependant très efficace pour bloquer des types de fichiers par exemple sans que le mail ne soit envoyé au serveur puis traité (économie de bande passante et de CPU).
Cependant une trop grande quantité de règles et un fort trafic aurait l’effet inverse sur les performances.
Il faut donc utiliser ces règles avec précaution.
On crée les fichiers nécessaires :
cd /etc/postfix/ wget http://www.starbridge.org/spip/doc/Procmail/postfix/body_checks.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/header_checks.cf wget http://www.starbridge.org/spip/doc/Procmail/postfix/mime_headers_checks.cf
On édite le /etc/postfix/main.cf
et on ajoute les lignes :
header_checks = regexp:/etc/postfix/header_checks.cf body_checks = regexp:/etc/postfix/body_checks.cf mime_header_checks = regexp:/etc/postfix/mime_headers_checks.cf
On relance Postfix :
postfix reload
On teste en envoyant un mail classique puis un autre qui contient un des mots ou type bloqués par ces règles.
Le blocage est immédiat et se traduit par un retour d’erreur au moment de l’envoi.
Amavisd et SA
on installe les prérequis d’amavisd :
aptitude install file libcompress-bzip2-perl nomarch arc p7zip-full arj zoo lzop tnef pax cabextract
et les modules Perl :
Pour ceux qui le souhaitent, on peut installer tous les modules perl nécessaires par CPAN ce qui permet d’avoir les versions les plus récentes : Modules Perl Amavisd par CPAN
aptitude install libarchive-tar-perl libarchive-zip-perl libberkeleydb-perl libcompress-zlib-perl libconvert-tnef-perl libconvert-uulib-perl libdigest-md5-perl libio-stringy-perl libmailtools-perl libmime-base64-perl libmime-perl libnet-perl perl-modules libnet-server-perl libtime-hires-perl libunix-syslog-perl libmail-dkim-perl liblog-log4perl-perl liblog-dispatch-perl libgetopt-argvfile-perl libconvert-binhex-perl libemail-sender-perl libnet-libidn-perl
On installe les dépendances de SA :
Pour ceux qui le souhaitent, on peut installer tous les modules perl nécessaires par CPAN ce qui permet d’avoir les versions les plus récentes : Modules perl pour SA par CPAN
aptitude install razor pyzor libhtml-parser-perl libnet-dns-resolver-programmable-perl liberror-perl libmail-spf-perl libmail-sendmail-perl libnetaddr-ip-perl libdbi-perl libdbd-mysql-perl liblocale-subcountry-perl libwww-perl libimage-base-bundle-perl libimage-base-perl libimage-info-perl libnet-cidr-lite-perl libmime-encwords-perl libemail-valid-perl libencode-detect-perl
Note : IP ::Country n’existe pas en paquet, il faut l’installer par CPAN
Installation Spamassassin
On installe SA depuis les sources :
cd ~ wget http://mirror.ibcp.fr/pub/apache//spamassassin/source/Mail-SpamAssassin-3.4.1.tar.gz tar xvzf Mail-SpamAssassin-3.4.1.tar.gz cd Mail-SpamAssassin-3.4.1 perl Makefile.PL PREFIX=/usr make make install
On lance toute de suite l’update des règles de SA (obligatoire depuis la version 3.3.0) :
sa-update -D
Cela aura pour effet de télécharger les règles à jour. Elles seront installées dans /var/lib/spamassassin/3.004001 (ce qui correspond à la version 3.4.1 de SA)
Installation Amavisd
Télécharger les sources d’amavisd :
cd ~ wget http://amavis.org/amavisd-new-2.10.1.tar.xz tar xvf amavisd-new-2.10.1.tar.xz cd amavisd-new-2.10.1
Créer le user et le groupe amavis :
groupadd -g 1002 amavis useradd -g amavis -u 1002 amavis -d /var/amavis -m
Créer les sous répertoires dans le home d’amavis :
mkdir /var/amavis/tmp /var/amavis/var /var/amavis/db /var/amavis/home chown -R amavis: /var/amavis
On crée 2 lecteur tmpfs pour héberger les répertoires db et tmp d’amavis. Cela accroît notablement les performances de traitement :
Modifier /etc/fstab
:
tmpfs /var/amavis/db tmpfs rw,size=10m,mode=700,uid=amavis,gid=amavis 0 0 tmpfs /var/amavis/tmp tmpfs rw,size=150m,mode=700,uid=amavis,gid=amavis 0 0
Note : La taille de ces lecteurs tmpfs est à modifier selon la charge du serveur, la configuration et bien sur la quantité de RAM disponible.
Pour simplifier /var/amavis/tmp
est dépendant du nombre d’instances d’amavisd et de la taille maximale d’un message. Les paramètres mis ici sont ok pour 5 instances et un message_size_limit de 10 Mo, ce qui est largement suffisant dans la config par défaut d’amavisd (2 instances)
Puis :
mount /var/amavis/tmp mount /var/amavis/db
on vérifie par un
mount -l
Copier les exécutables :
cp amavisd amavisd-nanny amavisd-signer /usr/sbin/ chown root /usr/sbin/amavisd* chmod 755 /usr/sbin/amavisd*
Copier les fichiers de conf :
cd /etc/ wget http://www.starbridge.org/spip/doc/Procmail/amavisd/amavisd.conf chown root:amavis /etc/amavisd.conf chmod 640 /etc/amavisd.conf mkdir /etc/amavisd cd /etc/amavisd wget http://www.starbridge.org/spip/doc/Procmail/amavisd/amavisd.domains wget http://www.starbridge.org/spip/doc/Procmail/amavisd/sender_scores_sitewide
Le fichier de configuration /etc/amavisd.conf
fourni ici est modifié pour coller à nos besoins :
Évidemment il faut éditer tout de même ce fichier pour préciser :
- son réseau local dans @mynetworks,
- son domaine avec $mydomain,
- et son hostname avec $myhostname
Il faut ensuite éditer le fichier /etc/amavisd/amavisd.domains
pour preciser son domaine.
Les domaines supplémentaires s’ajoutent en respectant le même format, un domaine par ligne.
On désactive temporairement l’antivirus pour tester :
On décommente pour cela les lignes (au début du fichier de conf) :
@bypass_virus_checks_maps = (1);
Démarrer amavisd en console pour voir si il manque des prérequis :
/usr/sbin/amavisd debug
Noter les erreurs éventuelles.
Si amavisd ne démarre pas, arrêter la et résoudre les problèmes.
Si c’est ok, arrêter amavisd par CTRL C.
On configure Postfix :
On ajoute à la fin du master.cf :
smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o smtp_send_xforward_command=yes -o disable_dns_lookups=yes -o max_use=20 127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_address_mappings,no_header_body_checks,no_unknown_recipient_checks -o local_header_rewrite_clients= # Amavisd Notification only (pour eviter le no_address_mapping) 127.0.0.1:10029 inet n - n - - smtpd -o content_filter= -o smtpd_delay_reject=no -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o smtpd_data_restrictions=reject_unauth_pipelining -o smtpd_end_of_data_restrictions= -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000 -o smtpd_client_connection_count_limit=0 -o smtpd_client_connection_rate_limit=0 -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks -o local_header_rewrite_clients=
et on modifie toujours dans le master.cf la section sur le port 587 comme ceci :
587 inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_etrn_restrictions=reject -o content_filter=smtp-amavis:[127.0.0.1]:10026 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
(on ajoute en fait la ligne sur le content_filter
)
Cette dernière modification permettra d’utiliser une configuration distincte dans Amavisd pour les utilisateurs se connectant en SASL de l’extérieur.
En effet ceux ci sont en dehors de notre LAN et ne sont donc pas considérés par Amavisd comme locaux (MYNETS
pour amavisd)
En spécifiant un port d’écoute supplémentaire pour Amavisd (10026) on se connecte avec la configuration de la policy_bank ORIGINATING
, qui dispose par défaut du tag ORIGINATING comme la policy bank MYNETS, qui permet à Amavisd de savoir que le client est de confiance.
Les utilisateurs identifiés par SASL hors du lan et les utilisateurs du LAN (identifiés SASL ou pas) seront donc considérés de la même facon. (on note que l’on pourra même modifier le comportement d’Amavisd très précisement de cette facon. Voir l’article suivant sur le sujet.
On édite maintenant le main.cf et on ajoute :
content_filter = smtp-amavis:[127.0.0.1]:10024
Relancer postfix :
postfix reload
Surveiller les logs :
tail -f /var/log/mail.log
Si tout est ok, lancer à nouveau amavisd debug
/usr/sbin/amavisd debug
et taper en console :
telnet 127.0.0.1 10024
Il doit répondre :
Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 [127.0.0.1] ESMTP amavisd-new service ready
quit pour sortir
Pareil pour tester le retour de Postfix :
telnet 127.0.0.1 10025
Il doit répondre un truc du style :
Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 spike.starbridge.org ESMTP Postfix (Debian/GNU)
QUIT pour sortir (en majuscules)
Si les connections sont ok :
Tester le fonctionnement de base (ce qu’il faut taper est précédé de —> , le reste c’est le retour du serveur) :
---> telnet localhost 10024 220 [127.0.0.1] ESMTP amavisd-new service ready ---> HELO localhost 250 [127.0.0.1] ---> MAIL FROM: <> 250 2.1.0 Sender <> OK ---> RCPT TO: <admin@starbridge.org> 250 2.1.5 Recipient <admin@starbridge.org> OK ---> DATA 354 End data with <CR><LF>.<CR><LF> ---> From: virus-tester ---> To: undisclosed-recipients:; ---> Subject: amavisd test - simple - no spam test pattern ---> This is a simple test message from the amavisd-new test-messages. ---> . 250 2.6.0 Ok, id=30897-02, from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as 079474CE44 ---> QUIT 221 2.0.0 [127.0.0.1] amavisd-new closing transmission channel
L’aller-retour postfix/amavisd fonctionne bien !
(on peut arrêter le debug d’amavisd par un CTRL C)
Installation de la base SQL d’amavisd
Amavisd va être couplé à une base sql pour permettre notamment la mise en quarantaine des emails.
On crée la base :
mysql -u root -p create database amavis; GRANT SELECT, INSERT, UPDATE, DELETE ON amavis.* TO 'amavis'@'localhost' IDENTIFIED BY '******'; FLUSH PRIVILEGES; quit
On importe la base sql :
cd ~ wget http://www.starbridge.org/spip/doc/Procmail/amavisd/amavis.sql mysql -u root -p amavis < /root/amavis.sql
On édite amavisd.conf
et on ajoute/modifie les lignes suivantes :
Installation de la base de réputation d’amavisd
Grosse nouveauté depuis la version 2.8.2, la gestion d’une liste de réputation dans une base Redis
Pour l’installer si vous utilisez la version testing faite simplement un
aptitude install redis-server
si vous utilisez la version stable il faut le prendre dans les backports :
ajouter cette ligne a votre /etc/apt/sources.list
deb http://ftp.debian.org/debian wheezy-backports main
puis
aptitude update aptitude -t wheezy-backports install redis-server
rien de particulier à paramétrer pour l’usage que l’on va faire, pas de schéma à installer.
Il suffit de parametrer amavisd pour utiliser Redis :
on ajoute cela au amavisd.conf (juste sous les instructions pour le storage sql)
@storage_redis_dsn = ( { server => '127.0.0.1:6379', reconnect => 20, db_id => 1 } ); $storage_redis_ttl = 16*24*60*60;
Installation Clamav
Prérequis :
aptitude install zlib1g zlib1g-dev libgmpxx4ldbl libgmp3-dev
On compile depuis les sources :
cd ~ wget http://downloads.sourceforge.net/project/clamav/clamav/0.98.6/clamav-0.98.6.tar.gz tar xvzf clamav-0.98.6.tar.gz cd clamav-0.98.6 ./configure --prefix=/usr --sysconfdir=/etc --with-user=amavis --with-group=amavis --with-dbdir=/var/lib/clamav make make install ldconfig mkdir /var/run/clamav chown -R amavis: /var/run/clamav chmod -R 750 /var/run/clamav mkdir /var/lib/clamav chown -R amavis: /var/lib/clamav chmod -R 770 /var/lib/clamav
On met a jour les fichiers de configuration :
cd /etc mv clamd.conf clamd.conf.orig mv freshclam.conf freshclam.conf.orig wget http://www.starbridge.org/spip/doc/Procmail/clamd.conf wget http://www.starbridge.org/spip/doc/Procmail/freshclam.conf
Une tache cron sera utilisée pour planifier la mise à jour de la base antivirale.
On fera cela en fin de tuto.
Créer :
mkdir /var/log/clamav chown -R amavis:amavis /var/log/clamav
Créer un fichier /etc/init.d/clamd
cd /etc/init.d/ wget http://www.starbridge.org/spip/doc/Procmail/clamd chmod 755 /etc/init.d/clamd insserv -v /etc/init.d/clamd
On fait la mise à jour de la base virale :
freshclam
On vérifie que les fichiers soient bien présents dans le répertoire :
ls -la /var/lib/clamav
On lance clamd :
/etc/init.d/clamd start
Et on vérifie les logs :
tail -f /var/log/clamav/clamd.log
Et on vérifie bien que Clam tourne :
ps aux | grep clam
On teste le fonctionnement (le dossier “test” est dans le répertoire clamav-0.98) :
cd /root/clamav-0.98.6/test/ clamscan -l scan.txt clam-x.yz
clamav-x.yz
étant un des fichiers de test présents dans le répertoire test
Installation des signatures additionnelles pour Clam (détection du spam, phising…)
Il s’agit de fichiers supplémentaires que l’on place dans le dossier /var/lib/clamav
aptitude install curl rsync cd /usr/sbin wget http://www.starbridge.org/spip/doc/Procmail/usr/sbin/clamav-unofficial-sigs.sh chmod 755 clamav-unofficial-sigs.sh cd /etc/ wget http://www.starbridge.org/spip/doc/Procmail/clamav-unofficial-sigs.conf mkdir /var/lib/unofficial-clamav-sigs chown -R amavis: /var/lib/unofficial-clamav-sigs
On lance le script :
su -c '/usr/sbin/clamav-unofficial-sigs.sh' amavis
On vérifie que les fichiers sont bien présents dans le répertoire de Clam :
ls -la /var/lib/clamav
On doit trouver les fichiers suivants :
-rw-r--r-- 1 amavis amavis 54185 28 oct. 21:28 bytecode.cvd -rw-r--r-- 1 amavis amavis 6645011 28 oct. 21:27 daily.cvd -rw-r--r-- 1 amavis amavis 38237 29 oct. 19:45 doppelstern.hdb -rw-r--r-- 1 amavis amavis 22549 15 févr. 2012 honeynet.hdb -rw-r--r-- 1 amavis amavis 155 23 juil. 13:09 INetMsg-SpamDomains-2w.ndb -rw-r--r-- 1 amavis amavis 5441471 29 oct. 10:56 junk.ndb -rw-r--r-- 1 amavis amavis 18380023 29 oct. 19:55 jurlbla.ndb -rw-r--r-- 1 amavis amavis 812167 29 oct. 19:55 jurlbl.ndb -rw-r--r-- 1 amavis amavis 242835 25 juil. 12:53 lott.ndb -rw-r--r-- 1 amavis amavis 30750647 28 oct. 21:27 main.cvd -rw-r--r-- 1 amavis amavis 156 29 oct. 20:02 mirrors.dat -rw-r--r-- 1 amavis amavis 3233016 29 oct. 17:29 phish.ndb -rw-r--r-- 1 amavis amavis 28806 29 oct. 16:57 rogue.hdb -rw-r--r-- 1 amavis amavis 9164 19 juin 10:56 sanesecurity.ftm -rw-r--r-- 1 amavis amavis 11717910 29 oct. 19:45 scamnailer.ndb -rw-r--r-- 1 amavis amavis 1805097 28 sept. 13:54 scam.ndb -rw-r--r-- 1 amavis amavis 200405 21 août 10:16 securiteinfobat.hdb -rw-r--r-- 1 amavis amavis 300559 30 mai 22:28 securiteinfodos.hdb -rw-r--r-- 1 amavis amavis 86504 21 août 12:07 securiteinfoelf.hdb -rw-r--r-- 1 amavis amavis 13939950 29 oct. 12:25 securiteinfo.hdb -rw-r--r-- 1 amavis amavis 1389724 29 oct. 12:27 securiteinfohtml.hdb -rw-r--r-- 1 amavis amavis 314920 10 févr. 2012 securiteinfooffice.hdb -rw-r--r-- 1 amavis amavis 468241 16 août 11:12 securiteinfopdf.hdb -rw-r--r-- 1 amavis amavis 29520 21 août 12:26 securiteinfosh.hdb -rw-r--r-- 1 amavis amavis 57676 2 mars 2012 spamimg.hdb -rw-r--r-- 1 amavis amavis 19002 11 avril 2011 spam.ldb -rw-r--r-- 1 amavis amavis 2000207 29 oct. 19:50 spear.ndb -rw-r--r-- 1 amavis amavis 660 29 oct. 19:45 winnow.complex.patterns.ldb -rw-r--r-- 1 amavis amavis 2878686 29 oct. 19:45 winnow_malware.hdb -rw-r--r-- 1 amavis amavis 1498085 29 oct. 19:45 winnow_malware_links.ndb -rw-r--r-- 1 amavis amavis 260787 29 oct. 19:45 winnow_phish_complete_url.ndb -rw-r--r-- 1 amavis amavis 513146 29 oct. 19:45 winnow_spam_complete.ndb
Une tâche cron
sera utilisée pour mettre à jour ces fichiers (on le fera en fin de tuto)
Installation de ClamdMon pour la surveillance du demon clam :
installer le script de surveillance clamdmon
:
cd ~ wget http://www.starbridge.org/spip/doc/Procmail/clamdmon-1.0.tar.gz tar xvzf clamdmon-1.0.tar.gz cd clamdmon-1.0 make make install
Une tâche cron
sera utilisée (on le fera en fin de tuto)
Paramétrage Spamassassin
Les binaires de SA ont été installés à l’étape précédente.
Sa configuration de base se fait dans le fichier /etc/mail/spamassassin/local.cf
mais pour la plupart des paramètres, c’est le fichier amavisd.conf
qui sera prioritaire.
Lorsqu’on utilise Amavisd pour appeler SA il est inutile de lancer spamd.
On remplace le /etc/mail/spamassassin/local.cf
par celui ci :
cd /etc/mail/spamassassin/ mv local.cf local.cf-orig wget http://www.starbridge.org/spip/doc/Procmail/spamassassin/local.cf
On édite le fichier pour adapter les paramètres internal_networks
et trusted_networks
.
internal_networks
et trusted_networks
sont des paramètres très importants pour la pertinence de la détection. Il faut absolument les configurer correctement.
On sécurise :
chown amavis: /etc/mail/spamassassin/local.cf chmod 640 /etc/mail/spamassassin/local.cf
SA fonctionne sur 2 types de tests :
- Heuristiques (ensemble de règles)
- Bayésiens (apprentissage et statistiques)
Pour le filtre bayésien, depuis la version 3.4 de SA, on utilise une base redis
.
Le serveur redis
etant déjà installé, il n’y a rien a faire, le fichier local.cf
est paramétré !
On initialise la base :
su amavis -c 'sa-learn -D --spam gtube.txt'
On doit voir la connexion à Redis dans la sortie.
Mise à jour des Rules et ajout des Rules Sought et Starbridge :
On prépare l’installation des rules Sought et Starbridge :
cd /etc/mail/spamassassin/ wget http://yerp.org/rules/GPG.KEY wget http://www.starbridge.org/updates/starbridge/GPG-eole.KEY sa-update --import GPG.KEY sa-update --import GPG-eole.KEY
On met à jour :
sa-update -D --gpgkey 6C6191E3 --channel sought.rules.yerp.org sa-update -D --gpgkey C0FB2D51 --channel updates.starbridge.org
Les fichiers seront placés dans /var/lib/spamassassin
:
ls -la /var/lib/spamassassin/3.004000/
on vérifie que les rules Starbridge soient bien présentent directement dans le sous répertoire updates_starbridge_org
.
Attention : ces rules Starbridge comportent des éléments essentiels pour le bon fonctionnement de l’antispam, il faut être sur qu’elles soient présentes dans ce sous répertoire
On vérifie que tout soit OK :
su -c "spamassassin -D --lint" amavis
Compilation des Rulesets
La compilation des règles permet d’accélèrer sensiblement le traitement.
Pour cela il faut installer au préalable le paquet re2c
:
aptitude install re2c
on lance ensuite la commande
sa-compile -D
cela prend un certain temps avant de se terminer.
Les règles compilées seront placées dans le répertoire /var/lib/spamassassin/compiled
.
Il faut maintenant activer l’usage de ces règles grace au plugin Rule2XSBody :
On édite /etc/mail/spamassassin/v320.pre
et on décommente la ligne suivante :
loadplugin Mail::SpamAssassin::Plugin::Rule2XSBody
on vérifie que tout soit ok :
su -c 'spamassassin -D --lint' amavis
Pour une mise à jour des rules et une compilation régulière (1 fois par jour maximum) on créera une tache cron spécifique en fin de tuto.
Le script mettra à jour les différentes rules et en cas de modification, lancera une compilation de ces dernieres puis relancera amavisd.
Cette tache est gourmande en ressource, il faut la planifier impérativement en dehors des heures de service.
- SA est prêt et fonctionnel !!
On démarre en debug-sa
:
/usr/sbin/amavisd debug-sa
on doit trouver dans la liste ceci :
SA dbg: bayes: _open_db(not yet connected) /usr/sbin/amavisd[11536]: SA dbg: bayes: Redis on-connect, db_id 2 /usr/sbin/amavisd[11536]: SA dbg: bayes: redis server version 2.8.7, memory used 139.5 MiB, Lua is available /usr/sbin/amavisd[11536]: SA dbg: bayes: found bayes db version 3
Bayes n’est pas encore disponible car il n’a pas analysé assez de mails pour fonctionner. Ceci est normal.
On envoie un mail et on doit voir dans le debug le bon fonctionnement.
On arrête amavisd par un CTRL C.
Explication sur le fonctionnement global de SA
SA distingue Spammy et Spams. Un spammy est un mail qui est probablement un spam. Un message marqué comme Spam est en revanche probablement un véritable spam.
_C’est le score attribué qui décide de ce statut.
Par défaut, Amavisd mets les spams en quarantaine, c’est à dire qu’au dessus du score de 10, il envoie les mails dans un espace de stockage en base. Il ne sont donc pas livrés dans la boite du destinataire.
Au dessus de 4.3 et jusqu’à 10, les mails sont considérés comme spammy et sont tout de même livrés dans la boite de destinataire, mais avec le sujet modifié et des entêtes spécifiques.
Au dessous de 4.3, le mail est clean.
Pour faire la distinction entre mail clean et spammy, on traitera le mail plus loin par Sieve.
Lancement d’amavisd
On crée un fichier /etc/init.d/amavis
:
cd /etc/init.d/ wget http://www.starbridge.org/spip/doc/Procmail/init.d/amavis chmod 755 /etc/init.d/amavis insserv -v /etc/init.d/amavis
on lance amavisd :
/etc/init.d/amavis start
On regarde les logs.
On envoie un mail et on regarde l’entête de celui ci.
on doit voir les X-Spam- headers.
On rappelle que Dovecot LDA est parametré pour déposer le courier détecté comme spam dans le dossier spam de chaque utilisateur.
Il crée également les dossiers spéciaux.
le Dossier Spam recevra tous les Spammy.
Les 2 dossiers SpamToLearn et SpamFalse pourront etre utilisés pour transmettre des mails à apprendre au systeme.
L’apprentissage des bases Bayes de SA se fait automatiquement lors de la réception mais peut aussi etre fait manuellement en alimentant les dossiers spéciaux.
On crée deux boite spéciale dédiées à la gestion du spam :
spamtrap@starbridge.org hamtrap@starbridge.org
Ces deux serviront à l’admin pour trier les mails classés par les users dans leurs dossiers spamfalse et spamtolearn
- Il faut d’abord créer un script qui scanne les 2 dossiers d’apprentissage SpamToLearn et SpamFalse des boîtes des utilisateurs (Dossiers crées automatiquement par Dovecot LDA à la première livraison) puis envoie leur contenu vers les deux boites hamtrap et spamtrap.
On crée deux boites et deux répertoires spéciaux de transit deux répertoires de stockage :
mkdir -p /var/tmp/spamtrap/cur mkdir /var/tmp/spamtrap/new mkdir -p /var/tmp/hamtrap/cur mkdir /var/tmp/hamtrap/new chown -R vmail: /var/tmp/spamtrap chown -R vmail: /var/tmp/hamtrap mkdir /home/spamtrap mkdir /home/hamtrap chown -R vmail: /home/spamtrap chown -R vmail: /home/hamtrap mkdir /home/spamtrap-backup mkdir /home/hamtrap-backup chown -R vmail: /home/spamtrap-backup chown -R vmail: /home/hamtrap-backup
les deux répertoires de backup permettent de disposer d’un corpus de spam/ham pour l’apprentissage en cas de migration ou de remise à zero de la base bayes.
on crée un ficher /etc/caremail/cron/sa-trap-sdbox
mkdir /etc/caremail/cron/ cd /etc/caremail/cron/ wget http://www.starbridge.org/spip/doc/Procmail/caremail/cron/sa-trap-sdbox chmod 755 /etc/caremail/cron/sa-trap-sdbox
On modifie à l’intérieur de ce fichier les 2 boites de destination pour ajuster à son installation.
Il suffira d’indiquer aux utilisateurs de déplacer les emails non détectés comme Spam dans le dossier SpamToLearn et de copier les email légitimes détectés à tort comme Spam dans le Dossier SpamFalse.
Le script déplacera lors de son exécution tous ces emails dans les boites spamtrap et hamtrap
Une tache sera ajoutée en fin de tuto pour lancer automatiquement ce script.
Attention : TOUS les mails déposés dans les dossiers SpamTolearn et SpamFalse sont déplacés c’est à dire qu’ils seront EFFACES de ces dossiers.
L’admin pourra alors consulter ces emails, et une fois validés, il lancera un script manuellement qui fera l’apprentissage soit comme spam soit comme ham (non spam).
on crée le script d’apprentissage pour l’admin /etc/caremail/sa-dspam-learn-sdbox
:
cd /etc/caremail/ wget http://www.starbridge.org/spip/doc/Procmail/caremail/sa-dspam-learn-sdbox chmod 755 /etc/caremail/sa-dspam-learn-sdbox
Activation de Clam dans Amavisd
Le fichier amavisd.conf
fourni dans ce tuto est modifié pour ne prendre en charge que l’antivirus Clamav.
Pour info voici les paramètres modifiés (à la fin du fichier) :
@av_scanners = ( # ### http://www.clamav.net/ ['ClamAV-clamd', &ask_daemon, ["CONTSCAN {}n", "/var/run/clamav/clamd.ctl"], qr/bOK$/, qr/bFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ], ); @av_scanners_backup = ( ### http://www.clamav.net/ - backs up clamd or Mail::ClamAV ['ClamAV-clamscan', 'clamscan', "--stdout --no-summary -r --tempdir=$TEMPBASE {}", [0], qr/:.*sFOUND$/, qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ], ); 1; # insure a defined return
Pour activer Clam on commente au début du fichier :
@bypass_virus_checks_maps = (1);
On relance amavisd :
/etc/init.d/amavis restart
L’antivirus est chargé.
On crée grace à postfixadmin l’alias email : virusalert@starbridge.org
vers admin@starbridge.org
.
On teste le fonctionnement :
--> telnet 127.0.0.1 10024 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. 220 [127.0.0.1] ESMTP amavisd-new service ready --> MAIL FROM:<test@example.com> 250 2.1.0 Sender test@example.com OK --> RCPT TO:<postmaster> 250 2.1.5 Recipient postmaster OK --> DATA 354 End data with <CR><LF>.<CR><LF> --> Subject: test2 - virus test pattern --> --> X5O!P%@AP[4PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H H* --> . --> QUIT 221 2.0.0 [127.0.0.1] (amavisd) closing transmission channel Connection closed by foreign host.
On doit voir dans les logs :
Blocked INFECTED (Eicar-Test-Signature)
On peut aussi tester l’envoi d’un mail infecté dans une archive (pour tester le travail de décompression) en récupérant des fichiers de test sur eicar.com et en les envoyant par email.
Dspam
Beaucoup considère Dspam comme une alternative plus performante de SA.
Je trouve qu’ils sont plutôt complémentaires.
Amavisd permet de gérer les 2 en parallèle.
cd ~ wget http://heanet.dl.sourceforge.net/project/dspam/dspam/dspam-3.10.2/dspam-3.10.2.tar.gz tar xvzf dspam-3.10.2.tar.gz cd dspam-3.10.2 ./configure --prefix=/usr --disable-dependency-tracking --includedir=/usr/include --with-logdir=/var/log/dspam/ --with-dspam-home=/var/amavis/dspam --sysconfdir=/etc/ --enable-domain-scale --without-delivery-agent --with-mysql-includes=/usr/include/mysql --with-storage-driver=mysql_drv --enable-virtual-users --enable-preferences-extension --enable-daemon --enable-debug make make install
Créer la base sql :
mysql -u root -p
On importe la base sql :
cd ~ wget http://www.starbridge.org/spip/doc/Procmail/dspam/mysql_objects-4.1.sql mysql -u root -p dspam < mysql_objects-4.1.sql
On modifie le fichier de conf dspam.conf
original (toto étant votre password d’accès à la base sql dspam
que vous venez de paramétrer) :
cd /etc/ mv dspam.conf dspam.conf-orig wget http://www.starbridge.org/spip/doc/Procmail/dspam.conf sed -i 's/******/toto/g' dspam.conf
On installe un init.d
pour le nouveau démon :
cd /etc/init.d/ wget http://www.starbridge.org/spip/doc/Procmail/init.d/dspam chmod x dspam
On active le démarrage automatique :
insserv -v /etc/init.d/dspam
Modifier les droits sur les exécutables (même user qu’amavisd) et le dspam.conf
chown amavis: /usr/bin/dspam* chown amavis: /etc/dspam.conf chmod 750 /usr/bin/dspam* chmod 640 /etc/dspam.conf chown amavis: /var/log/dspam
Sécuriser le répertoire de dspam dans le home d’amavisd :
chown -R amavis: /var/amavis/dspam
on édite le /etc/amavisd.conf
et on ajoute le bloc suivant juste avant la ligne “$sa_tag_level_deflt
“
$dspam = 'dspam'; @spam_scanners = ( ['SpamAssassin', 'Amavis::SpamControl::SpamAssassin'], ['DSPAM', 'Amavis::SpamControl::ExtProg', $dspam, [ qw(--client --stdout --process --deliver=innocent,spam --user), $daemon_user ], score_factor => 0.39, ], );
On passe les paramètres par défaut de dspam (ils vont s’insérer en base) :
dspam_admin change preference default "dailyQuarantineSummary" "off" dspam_admin change preference default "enableBNR" "on" dspam_admin change preference default "enableWhitelist" "on" dspam_admin change preference default "fallbackDomain" "off" dspam_admin change preference default "ignoreGroups" "off" dspam_admin change preference default "ignoreRBLLookups" "off" dspam_admin change preference default "makeCorpus" "off" dspam_admin change preference default "optIn" "off" dspam_admin change preference default "optOut" "on" dspam_admin change preference default "optOutClamAV" "on" dspam_admin change preference default "processorBias" "on" dspam_admin change preference default "showFactors" "off" dspam_admin change preference default "signatureLocation" "headers" dspam_admin change preference default "spamAction" "tag" dspam_admin change preference default "spamSubject" "[SPAM]" dspam_admin change preference default "statisticalSedation" "6" dspam_admin change preference default "storeFragments" "off" dspam_admin change preference default "tagNonspam" "off" dspam_admin change preference default "tagSpam" "off" dspam_admin change preference default "trainingMode" "TOE" dspam_admin change preference default "trainPristine" "off" dspam_admin change preference default "whitelistThreshold" "10"
On crée le user virtuel avec le même uid qu’amavisd
(ici c’est 1002) :
mysql -u root -p dspam INSERT INTO `dspam_virtual_uids` (`uid`, `username`) VALUES (1002, 'amavis');
on active le user :
dspam_admin change preference default "optIn" "on" dspam_admin change preference default "optOut" "off"
On lance le démon dspam
/etc/init.d/dspam start
On verifie qu’il tourne
ps aux | grep dspam
relancer amavisd :
/etc/init.d/amavis restart
On vérifie les logs. On doit voir :
Found spam scanner DSPAM at /usr/bin/dspam
On envoie un email :
On vérifie les logs, les headers des email pour les tags X-DSPAM
et le remplissage de la base de données.
Principe de fontionnement :
Dans cette configuration, Dspam marque simplement les mails (il ajoute un tag dans le header).
Avant la version 2.6.3 d’amavisd, le score etait transmis à SA.
Désormais, le score est ajouté APRÈS Spamassassin, par amavisd.
Les scores par défaut sont inscrits en dur dans le binaire d’amavisd : 3.8 pour un spam, 0.1 pour un ham.
Actuellement l’autolearn n’est pas pris en charge dans cette implémentation.
Il faudra donc alimenter manuellement la base de dspam depuis un corpus.
On crée les taches de maintenance de dspam :
On crée un fichier /etc/caremail/dspam-purge-4.1.sql
cd /etc/caremail/ wget http://www.starbridge.org/spip/doc/Procmail/dspam-purge-4.1.sql
une tache cron lancera ce script automatiquement (en fin de tuto)
Filtrage par extensions et type mime dans amavisd
On peut également renforcer le blocage des fichiers par extension et type mime dans amavisd, indépendamment de l’antivirus.
Ce blocage est très efficace et peut être complémentaire du premier blocage par Postfix sur ces fichiers (headers, body, type mime), car il utilise cette fois les capacités de décodage et de décompression d’Amavisd.
Par exemple, on pourra facilement bloquer un fichier exe
à l’intérieur d’un fichier zip
.
Voir mon fichier amavisd.conf
pour des exemples de type mime et d’extensions de fichiers.
Voilà le serveur de mail et le filtrage sont configurés !
Fonctions Avancées d’amavisd : Penpals et gestion des users
Maintenant que l’on a un système fonctionnel articulé autour d’Amavis, on peut ajouter 2 fonctions intéressantes :
Penpals : qui permet de maintenir une liste des messages auquels un user a déjà répondu et ainsi moduler les scores en fonction
Gestions des users dans Amavisd par Mysql : cela permet de gérer par utilisateur les grandes fonctions d’Amavisd (désactivation de l’antivirus, de l’antispam, maintien de whitelist et de blacklist personnelles…)
La base mysql est déja créée et fonctionnelle.
Pour l’instant seul penpals fonctionne automatiquement.
En revanche la fonction users demande d’être paramétrée :
Pour cela, on pourra utiliser le module SAM de horde (voir le tuto horde pour cela) soit alimenter manuellement la base SQL.
Un exemple pour un paramétrage pour un utilisateur :
INSERT INTO `mailaddr` (`id`, `priority`, `email`) VALUES (1, 5, 'toto@toto.com'); INSERT INTO `policy` (`id`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES (1, 'test@starbridge.org', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', NULL, NULL, NULL, NULL, NULL, NULL, 5, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); INSERT INTO `users` (`id`, `priority`, `policy_id`, `email`, `fullname`, `local`) VALUES (1, 7, 1, 'test@starbridge.org', NULL, NULL); INSERT INTO `wblist` (`rid`, `sid`, `wb`) VALUES (1, 1, '15.0');
Ici on a crée un parametre pour un user de notre domaine test@starbridge.org
.
On voit dans la table users qu’on lui donne l’id 1 et on lui associe la policy 1.
Une policy reprend tous les paramètres présents dans amavisd.conf
.
On les retrouve dans la table policy. Si la valeur est NULL alors c’est celle du fichier amavisd.conf qui sera utilisée. Sinon c’est celle de la table.
Ici on a modifié le score de détection spam (5 au lieu de 4.3)
Ensuite on a ajouté une entrée a la table mailaddr où l’on spécifie des expéditeurs, par exemple toto@toto.com
avec l’id 1.
Grâce à la table wblist
on pourra maintenir une liste de score à attribuer en fonction de ces adresses d’expéditeurs ET de users (le destinataire dans notre réseau), ce qui rend ces listes entièrement personnelles.
Ainsi dans notre exemple, wblist pour rid 1 (recipient id 1 = test@starbridge.org
) et le sid 1 (sender id 1 =toto@toto.com
) on attribue un score positif de 15.
C’est l’équivalent dans le fichier amavisd.conf
du soft whitelisting/blacklisting mais cette fois uniquement pour un utilisateur et non tous les autres.
On peut aussi faire du hard whitelisting/blacklisting en specifiant W ou B au lieu du score.
On verra le module horde SAM pour laisser gérer facilement ces options par l’utilisateur lui même (SAM ne gère que le hard whitelisting/blacklisting).
On peut également utiliser cette table sql pour paramétrer finement non pas par users mais par domaine.
Pour cela il faudra juste utiliser le @starbridge.org
pour prendre en compte tous les users de celui ci.
par exemple :
INSERT INTO `users` (`id`, `priority`, `policy_id`, `email`, `fullname`, `local`) VALUES (3, 6, 4, '@starbridge.org', '', 'Y'); INSERT INTO `policy` (`id`, `policy_name`, `virus_lover`, `spam_lover`, `banned_files_lover`, `bad_header_lover`, `bypass_virus_checks`, `bypass_spam_checks`, `bypass_banned_checks`, `bypass_header_checks`, `spam_modifies_subj`, `virus_quarantine_to`, `spam_quarantine_to`, `banned_quarantine_to`, `bad_header_quarantine_to`, `clean_quarantine_to`, `other_quarantine_to`, `spam_tag_level`, `spam_tag2_level`, `spam_kill_level`, `spam_dsn_cutoff_level`, `spam_quarantine_cutoff_level`, `addr_extension_virus`, `addr_extension_spam`, `addr_extension_banned`, `addr_extension_bad_header`, `warnvirusrecip`, `warnbannedrecip`, `warnbadhrecip`, `newvirus_admin`, `virus_admin`, `banned_admin`, `bad_header_admin`, `spam_admin`, `spam_subject_tag`, `spam_subject_tag2`, `message_size_limit`, `banned_rulenames`) VALUES (4, '@starbridge.org', 'N', 'N', 'Y', 'N', 'N', 'N', 'Y', 'N', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 4.3, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
En résumé, on crée un user général qui englobe tous les comptes dans starbridge.org.
On lui attribue la policy 4 qui correspond à toutes les options par défaut, sauf les 2 options de vérification des fichiers bannis, qui sont sur bypass.
Ainsi tous les users du domaine starbridge.org pourront recevoir les fichiers bannis.
Les users qui le désirent pourront toujours personnaliser ces options dans Horde au travers du module SAM car la priorité du user général est de 6 alors que celle des users crées par le module SAM est de 7.
Leur paramétrage personnel sera donc prioritaire à celui du user général.
On peut également mixer avec la table wblist et mailaddr pour créer des whitelist/blacklist par domaines.
Maintenance des bases SQL d’amavisd
Les tables vont grossir au fur et à mesure des réceptions, il faut donc regulièrement les purger.
On utilise le champ partition_tag
comme élément de sélection, cela permet de limiter le temps des requêtes de purge.
Ce champ contient le numéro de la semaine de l’enregistrement sql. Il est inséré par amavisd pour chaque INSERT dans la base.
On crée un fichier amavis-purgesql
:
cd /etc/caremail/ wget http://www.starbridge.org/spip/doc/Procmail/caremail/amavis-purgesql
Une tache cron assurera l’activation réguliere de la purge (en fin de tuto)
Mailzu
Installation du gestionnaire de quarantaine : Mailzu
Pour gérer la quarantaine et pour permettre aux utilisateurs de la consulter, on installe Mailzu.
_Il s’agit ici d’une version modifiée intégrant des patches de la communauté (gestion des admins par exemple) mais aussi des modification persos sur les requêtes SQL pour prendre en compte le partition_tag d’amavisd.
On installe les prérequis :
aptitude install php5-imap php5-mcrypt php5-gd php-pear
on installe les modules pear :
pear update-channels rm -rf /usr/share/php/.channels rm /usr/share/php/doc ln -s /usr/share/doc/php-pear /usr/share/php/doc pear update-channels pear upgrade-all pear install DB pear install MDB2 pear install pear/MDB2#mysql pear install Mail pear install Mail_Mime pear install Mail_mimeDecode pear install Log pear install Net_Socket pear install Date pear install Auth_SASL pear install HTTP_Request pear install File pear install Net_SMTP pear install Cache
on télécharge depuis SVN :
cd /var/www svn co http://smtp04.spamguard.fr/svn/Procmail/mailzu quarantine
NOTE : Cette version de mailzu est compatible avec php 5.4
pour l’utiliser avec php 5.3, il suffit de revenir sur la modification de deux lignes dans le fichier suivant :
https://smtp04.spamguard.fr/websvn/diff. … hp&rev=237
On sécurise :
chown -R www-data: /var/www/quarantine chmod 640 /var/www/quarantine/config/config.php
On modifie les paramètres (attention il y a 2 passwords à modifier, un pour Postfix : toto et un pour Amavisd : titi)
cd /var/www/quarantine/config sed -i 's/toto/toto/g' config.php sed -i 's/titi/toto/g' config.php sed -i 's/www.starbridge.org/www.toto.com/g' config.php sed -i 's/spike.starbridge.org/spike.toto.com/g' config.php
le paramètre $conf[’auth’][’s_admins’]
permet de lister les admins de site, c’est-à-dire ceux qui auront accès à toutes les quarantaines de tous les utilisateurs.
Modifier l’entrée admin@starbridge.org
pour utiliser votre admin global et laisser l’entrée @.
qui est l’admin global par défaut.
Les admins de domaine sont ceux qui ont accès à un seul domaine.
Cette version de Mailzu récupere la liste des admins depuis celle de postfixadmin.
on crée le fichier de log :
touch /var/log/mailzu.log chown www-data: /var/log/mailzu.log
On se connecte sur l’interface :
https://www.starbridge.org/quarantine
L’utilisateur est admin@starbridge.org
(c’est votre email d’administrateur admin@votredomaine.com
) et le password ’secret
’.
On teste la quarantaine pour voir si tout fonctionne.
DKIM
Vérification et signatures des messages par DKIM
Cette technique est désormais quasi indispensable pour assurer une meilleure délivrabilité des emails, et depuis la version 2.6, amavisd propose désormais d’exécuter l’intégralité des tâches DKIM : Vérification des messages reçus et signatures des messages sortants.
La vérification DKIM des mails recus et faites par defaut dans amavisd.
Pour la génération des signatures, il faut configurer amavisd :
On génére la clé :
mkdir /var/amavis/dkim cd /var/amavis/dkim amavisd genrsa /var/amavis/dkim/starbridge.key.pem
les droits du fichier sont mis correctement par amavisd.
Si l’on a plusieurs domaines on répète la procédure pour chaque.
On ajoute ceci au /etc/amavisd.conf
:
dkim_key('starbridge.org', 'starbridge', '/var/amavis/dkim/starbridge.key.pem');
A partir d’ici Amavisd est capable de signer les messages sortants.
Mais le serveur destinataire ne sera pas capable de les vérifier, car il faut publier la clé publique dans les DNS :
Pour cela, on lance la commande suivante pour afficher la clé publique du ou des domaines que l’on a parametré plus haut.
amavisd showkeys
on fait un copier/coller du résultat pour le domaine et on le colle tel quel dans la zone DNS.
Le serveur DNS Unbound gère bien sûr cet enregistrement (TXT) et il suffira de l’enregistrer dans le fichier de zone et de la recharger.
Si les DNS sont gérés par l’hébergeur, la plupart d’entre eux propose de modifier les champs TXT, mais ce n’est pas le cas de tous.
Il faudra donc vérifier ce point.
On teste l’enregistrement avec une commande d’amavisd :
amavisd testkeys
Depuis la version 2.7, Amavisd propose un programme externe de signature.
Pour le moment la configuration se fait directement dans le binaire amavisd-signer
:
vi /usr/sbin/amavisd-signer
On édite les lignes suivantes :
$daemon_user = 'amavis'; $daemon_group = 'amavis'; $daemonize = 1;
et on ajoute juste sous les exemple de dkim_key, la même entrée que dans amavisd.conf :
On crée un init.d
pour cet exécutable :
cd /etc/init.d/ wget http://www.starbridge.org/spip/doc/Procmail/init.d/amavisd-signer chmod 755 /etc/init.d/amavisd-signer insserv -v /etc/init.d/amavisd-signer
On lance le signer
:
/etc/init.d/amavisd-signer start
On relance amavisd.
Pour pouvoir signer les messages il faut que ceux ci proviennent pour amavisd d’une source de confiance, c’est à dire en provenance du réseau spécifié dans amavisd comme étant local (policy bank MYNETS
), ou bien depuis le port 587 dans postfix en TLS SASL (policy bank ORIGINATING
).
On teste en envoyant un mail et on vérifie dans les logs que la signature s’applique bien.
On retrouvera cette signature dans les headers du message envoyé.
Notes :
On peut aller plus loin dans la configuration d’Amavisd mais pour ne pas surcharger le tuto nous n’aborderons pas ces points ici.
La configuration d’amavisd doit également être modifiée en fonction de la charge du serveur. Par défaut 2 instances sont actives ($max_servers = 2 ;
). Le calcul du nombre d’instances nécessaires demande certains ajustements à l’usage et doit être considéré comme un prérequis sur la mise en production d’un serveur susceptible de traiter des volumes conséquents.
On peut consulter la doc d’amavisd sur ce point.
Dans notre configuration on filtre (antispam, antivirus) sur les mails entrants ET sortants. On peut économiser des ressources systèmes en désactivant l’antispam sur les mails sortants en provenance d’utilisateurs authentifiés. Voir la configuration dans cet article
Pour info, les mails soumis localement (pickup) bypassent tous les tests : spams, AV, header/body. C’est le cas pour les mails système comme ceux de cron, logwatch ou autres. Cette configuration a été faite dans la partie pickup en début de tuto.
Policyd V2
Policyd V2 est un policy service de Postfix qui permet entre autres de contrôler les clients qui se connectent sur le serveur de mail (nombre d’email/heures….), en contrôlant le volume des email envoyés.
Policyd V2 est surtout très utile pour lutter contre les mail bombing, les ddos, les spywares et les abus en tout genre (limitation entrées/sorties)
on installe les prérequis perl :
aptitude install libconfig-inifiles-perl libcache-fastmmap-perl
On crée un user policyd :
groupadd -g 20002 policyd useradd -g policyd -u 20002 policyd -s /bin/false
cd ~ wget http://download.policyd.org/v2.1.x-201310261831/cluebringer-v2.1.x-201310261831.tar.gz tar xvzf cluebringer-v2.1.x-201310261831.tar.gz cd cluebringer-v2.1.x-201310261831
On installe les fichiers :
mkdir /usr/lib/policyd-2.1 cp -r cbp /usr/lib/policyd-2.1/ cp -r awitpt /usr/lib/policyd-2.1/ cp cbpolicyd /usr/sbin/
mkdir /var/log/cbpolicyd mkdir /var/run/cbpolicyd
chown policyd: /var/log/cbpolicyd /var/run/cbpolicyd
Créer la base sql :
mysql -u root -p create database policyd2; GRANT SELECT, INSERT, UPDATE, DELETE ON policyd2.* TO 'policyd2'@'localhost' IDENTIFIED BY '*****'; FLUSH PRIVILEGES; quit
On importe la base sql :
wget http://www.starbridge.org/spip/doc/Procmail/cluebringer/policyd.mysql mysql -u root -p policyd2 < policyd.mysql
On installe le /etc/cluebringer.conf
et on modifie le password (ici votre password serait toto) :
cd /etc/ wget http://www.starbridge.org/spip/doc/Procmail/cluebringer/cluebringer.conf sed -i 's/****/toto/g' cluebringer.conf
On sécurise le fichier :
chmod 640 /etc/cluebringer.conf
On crée un fichier /etc/init.d/policyd2
:
cd /etc/init.d/ wget http://www.starbridge.org/spip/doc/Procmail/init.d/policyd2 chmod 755 /etc/init.d/policyd2 insserv -v /etc/init.d/policyd2
On lance le daemon :
/etc/init.d/policyd2 start
On vérifie qu’il tourne bien et avec le bon user :
ps aux | grep cluebringer
et on vérifie les logs :
tail -f /var/log/cbpolicyd/cbpolicyd.log
On ajoute plusieurs entrees policy service au /etc/postfix/main.cf
:
en dessous du bloc has_our_domain_as_sender
:
client_throttle = check_policy_service inet:127.0.0.1:10031
avant le bloc smtpd_recipient_restrictions
:
smtpd_client_restrictions = check_policy_service inet:127.0.0.1:10031
on modifie l’entree du smtpd_restriction_classes
:
smtpd_restriction_classes = has_our_domain_as_sender client_throttle
apres le bloc smtpd_data_restrictions
:
smtpd_end_of_data_restrictions = check_policy_service inet:127.0.0.1:10031
puis dans le master.cf
on modifie l’entree du port 587 :
587 inet n - n - - smtpd -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_etrn_restrictions=reject -o content_filter=smtp-amavis:[127.0.0.1]:10026 -o smtpd_client_restrictions=client_throttle,permit_sasl_authenticated,reject
On relance postfix :
postfix reload
on copie l’ihm de management :
cd /var/www svn co http://smtp04.spamguard.fr/svn/Procmail/cluebringer/www webui cd ~/cluebringer-v2.1.x-201310261831 cp -rp webui/* /var/www/webui/ chown -R www-data: /var/www/webui
on modifie les credentials de la base dans /var/www/webui/includes/config.php
puis on sécurise le fichier :
chmod 400 /var/www/webui/includes/config.php
Attention : par défaut il n’y a pas d’authentification sur cette interface, on a donc mis un .htaccess
avec un deny from all pour sécuriser l’installation, mais pour utiliser l’interface il faudra que vous modifiez ce htaccess pour accepter soit par votre ip, soit par un login/password
Dans tous les cas, bien s’assurer que l’accès ne soit pas possible directement par un navigateur !
ATTENTION : si l’on n’a pas configuré le AllowOverride All
dans le virtualhost
d’apache comme indiqué au début du tuto, le .htaccess ne sera pas pris en compte et l’IHM sera librement accessible !!
on se connecte sur l’interface et on modifie les parametres comme on le souhaite (l’aide en ligne est disponible)
Un premier paramétrage est livré par défaut.
On teste en envoyant un email.
On doit voir des logs policyd
et le mail doit être correctement livré.
on met en place la purge quotidienne :
On crée un fichier policydv2-purge.sql
:
cd /etc/caremail/ wget http://www.starbridge.org/spip/doc/Procmail/caremail/policydv2-purge.sql
Une tache cron assurera le lancement. (en fin de tuto)
Maintenance et automatismes : Tâches Cron
Toutes les taches cron du tuto sont réunies pour faciliter la gestion :
cd /etc/caremail/ wget http://www.starbridge.org/spip/doc/Procmail/caremail/CAReMAILcron wget http://www.starbridge.org/spip/doc/Procmail/spamassassin/sa-compile cd cron/ wget http://www.starbridge.org/spip/doc/Procmail/caremail/cron/daily-purge-sql.sh wget http://www.starbridge.org/spip/doc/Procmail/caremail/cron/daily-purge.sh wget http://www.starbridge.org/spip/doc/Procmail/caremail/cron/amavis-purge.sh wget http://www.starbridge.org/spip/doc/Procmail/caremail/cron/dspam-purgesql.sh wget http://www.starbridge.org/spip/doc/Procmail/caremail/cron/amavis-purgesql.sh wget http://www.starbridge.org/spip/doc/Procmail/caremail/cron/policydv2-purgesql.sh wget http://www.starbridge.org/spip/doc/Procmail/caremail/cron/sa-update.sh chmod 755 /etc/caremail/sa-compile
il faut changer les passwords des fichiers dspam-purgesql.sh
, amavis-purgesql.sh
et policydv2-purgesql.sh
par ceux que vous avez parametrés plus tot.
puis on sécurise
chmod 700 /etc/caremail/cron/*
Enfin on fait un lien dans /etc/cron.d :
ln -s /etc/caremail/CAReMAILcron /etc/cron.d/
Vacation AutoReply
On peut éventuellement activer un système de réponse automatique en cas absence.
Note : Il est fortement déconseillé d’utiliser ce genre d’autoréponse car il peut générer un trafic illégitime. (Backscatter Mails).
Voir ces liens pour plus d’informations :
http://www.spamcop.net/fom-serve/cache/329.html
http://www.rfc-editor.org/rfc/rfc3834.txt
Pour limiter ce risque il est nécessaire d’installer le mécanisme d’autoreply au plus proche de la boite email, au moment de la livraison, une fois que tous les tests antispams ont été effectués.
On utilisera donc Sieve pour cela.
Un autoreply n’ayant réellement de sens que s’il peut etre géré directement par l’utilisateurs, il faut utiliser une interface graphique pour générer le code du filtre Sieve.
Le webmail Horde propose un excellent module pour cela (ingo).
Ce point est traité dans le tuto sur horde.
Reporting et analyses des logs
Pour suivre les logs que génèrent le serveur de mail, il est conseillé d’utiliser des outils particuliers.
on installe :
aptitude install logcheck logwatch
– Logcheck :
Son utilisation est automatique après l’installation sous debian.
Toutes les heures il envoie un rapport des logs du serveurs ne contenant que les points qui doivent attirer l’attention.
– Logwatch :
son installation est également automatisé par la debian.
Il envoie un rapport journalier sur les logs.
Pour des résultats pertinent avec postfix/amavis, il faut ajouter les modifications suivantes :
cd ~ wget http://downloads.sourceforge.net/project/logreporters/amavis-logwatch/release/1.51.02/amavis-logwatch-1.51.02.tgz tar xvzf amavis-logwatch-1.51.02.tgz cd amavis-logwatch-1.51.02 cp amavis-logwatch /usr/share/logwatch/scripts/services/amavis cp amavis-logwatch.conf /usr/share/logwatch/default.conf/services/amavis.conf cd .. wget http://downloads.sourceforge.net/project/logreporters/postfix-logwatch/release/1.40.00/postfix-logwatch-1.40.00.tgz tar xvzf postfix-logwatch-1.40.00.tgz cd postfix-logwatch-1.40.00 cp postfix-logwatch /usr/share/logwatch/scripts/services/postfix cp postfix-logwatch.conf /usr/share/logwatch/default.conf/services/postfix.conf
-Mailgraph :
Mailgraph génére des graphiques sur l’utilisation de la messagerie
aptitude install mailgraph sed -i 's/IGNORE_LOCALHOST=false/IGNORE_LOCALHOST=true/' /etc/default/mailgraph sed -i 's!) SPAM\!) (SPAM|SPAMMY)\!' /usr/sbin/mailgraph /etc/init.d/mailgraph restart
note : le dernier sed
est pour la version stable du paquet mailgraph
. Si on a la version testing
ce n’est pas nécessaire.
On se connecte pour les graphiques avec l’url :
https://www.starbridge.org/cgi-bin/mailgraph.cgi
– Volume des mails d’alertes
Au début du tuto, on a parametré Postfix pour alerter le postmaster par mail pour la plupart des évènements, en particulier les bounces.
Une fois la période de tests terminés, il est conseillé de désactiver ces options car l’on risque d’être rapidement submergé par les mails à destination du Postmaster.
Pour cela il faut éditer le main.cf
et commenter la ligne suivante :
notify_classes = 2bounce, bounce, delay, policy, protocol, resource, software
puis
postfix reload
Firewall
Il est capital de protéger le serveur par un firewall.
On utilisera iptables.
Ci dessous un exemple pour un serveur standalone.
Il faudra bien sur l’adapter à la topologie du réseau.
ne pas oublier d’activer ce script au démarrage !
Versions du Document (ChangeLog)
- 7.9 05/5/2015
Dovecot : modification du script sa-trap-sdbox pour s’exécuter en vmail au lieu de root
Spamassassin : mise à jour 3.4.1
- 7.8 27/3/2015
Dovecot mise à jour 2.2.16
Clamav : mise à jour 0.98.6
- 7.7 2/2/2015
Policyd : désactivation IPv6. (merci à Yvon)
- 7.6 26/11/2014
Clamav : mise à jour 0.98.5
- 7.5 15/11/2014
Dovecot : mise à jour 2.2.15
Amavisd : mise à jour 2.10.1
ajout de paramètres pour les failles SSL dans les configurations
- 7.4 28/09/2014
Clamav : mise à jour 0.98.4
Dovecot : mise à jour 2.2.13
Amavisd : mise à jour 2.9.1
- 7.3 30/05/2014
Cron:retrait du script SAawl, obsolete depuis le passage à redis pour la base bayes
Clamav : mise à jour 0.98.3
Dovecot : mise à jour 2.2.12
Amavisd : mise à jour 2.9.0
- 7.2 2/05/2014
Dovecot : modificationurl pigeonhole
- 7.1 4/04/2014
Dovecot : mise à jour 2.2.12
Amavisd : mise à jour 2.8.2-rc1
Spamassassin : mise à jour 3.4.0
clamav : mise à jour 0.98.1
Amavisd et SA : utilisation de Redis
- 7.0 16/11/2013
General : Typo
Dovecot : Mise a jour 2.2.7
Clamav : mise à jour 0.98
- 6.13 22/06/2013
General : remplacement du serveur svn pour les sources du tuto
- 6.12 20/05/2013
Dovecot : correction dudovecot.conf
: ajout pluginnotify
Postfix : correction erreur dans le texte poursmtpd_recipient_restrictions
- 6.11 19/05/2013
Mise à jour debian (prise en compte du passage en Wheezy Stable)
Mise à jour postfix (2.10 ou 2.9.6 en fonction de la distribution ajout du parametresmtpd_relay_restrictions
pour retro compatibilité de la 2.10)
Mise à jour dovecot 2.2.1 et Sieve Pigeonhole 0.4.0
- 6.10.0 24/04/2013
Clamd : 0.97.8
- 6.9.0 20/04/2013
Clamd : 0.97.7
- 6.8.9 10/02/2013
Dovecot : mise à jour 2.1.15
Clamav : mise à jour du script de téléchargement des signatures
- 6.8.8 12/01/2013
Dovecot : mise à jour 2.1.13
- 6.8.7 12/01/2013
General : pb de compatibilité mysql et certains fichier de creation de table : le TYPE a disparu en 5.5, il faut utiliserENGINE
a la place : les fichiers concernés sontpostfix.sql, bayes_awl.sql, policyd.mysql
- 6.8.6 28/10/2012
General : typo et erreur de lien
Sieve : modification du comportement du sieve global (after au lieu de before)
- 6.8.5 29/09/2012
Dovecot : mise à jour 2.1.10, pigeonhole 0.3.3
Clamd : 0.97.6
- 6.8.4 8/09/2012
Spamassassin : patch pour corriger le bug mysql
- 6.8.3 26/08/2012
Dovecot : modification de l’exemple d’arboresnce d’un maildir. Modification duglobal.sieve
pour tenir compte du retrait du prefixINBOX
.
- 6.8.2 19/08/2012
Amavisd : modification binaireamavisd
: retour au score standard pour dspam : 10 et -1. On utilise le score factor dans le fichier de conf pour moduler le score : modification duamavisd.conf score_factor
pourdspam
passe de 1 à 0.39
- 6.8.1 19/08/2012
Dspam : mise à jour 3.10.2
Dovecot : mise à jour 2.1.9, ajout plugin zlib manquant pour pop3
Clamav : Mise à jour 0.98
- 6.8.0 16/08/2012
Amavisd : mise à jour 2.8.0
- 6.7.9 11/08/2012
Dovecot : ajout d’unchmod
manquant
General : ajout fichier manquant pour purge amavis
- 6.7.8 02/08/2012
Général : remplacement des crontab par un fichier cron général et des fichiers par service dans un dossier spécifique.
SA/DSPAM : refonte dusa-learn
pour prendre en comptedspam
et le formatsdbox
- 6.7.7 01/08/2012
Dovecot : migration dovecotmaildir
verssdbox
, activation compression, préparation à l’arrivée desolr
General : typo, ajout lien vers optimisation Mysql
Mailzu : mise à jour pour php 5.4
- 6.7.6 11/07/2012
ajout paquets pour la compilation
ajout de la compression dans la compilation dovecot
ajout de solr dans la compilation dovecot
passage dovecot 2.1.8
Mise à jourpolicyd2
- 6.7.5 18/06/2012
Clamav : mise à jour 0.97.5
Mysql : indication du passage en 5.5 pour la version debian testing
Amavisd : mise à jour 2.7.1
Amavisd : retrait de la quarantaine/var/virusmail
, plus utilisée
- 6.7.4 09/04/2012
Postfix : fix pour les warnings surfallback_relay
dans lemaster.cf
. Finalement il y avait bien un leger changement de conf a faire !
- 6.7.3 09/04/2012
Clamav : mise a jour 0.97.4
Postfix : ajustements du texte pour la version 2.9.1 : version par defaut de la debian testing et des backports stable. Pas de modification de configuration.
- 6.7.2 22/02/2012
Dovecot : Mise a jourdovecot 2.1.1
- 6.7.1 17/02/2012
Dovecot : Mise a jourdovecot 2.1.0, pigeonhole 0.3.0
- 6.7.0 22/01/2012
Postfix : Mise a jour postfixadmin en version 2.4 et modification dulookup transport
- 6.6.6 18/11/2011
Mise a jourdovecot 2.0.16
,pigeonhole 0.25
- 6.6.4 27/10/2011
Logwatch : mise à jourpostfix-logwatch-1.39.07
- 6.6.3 19/10/2011
Clamav : mise a jour 0.97.3
- 6.6.2 13/10/2011
Général : mise en forme et typos
SA : retrait deAWL
- 6.6.1 24/09/2011
Logwach : mise à jour
- 6.6.0 16/09/2011
Postfix : retour à l’installation par paquet avec les backports squeeze
- 6.5.9 16/09/2011
Dovecot : Mise à jour dovecot et pigeonhole
- 6.5.8 16/09/2011
Clamav : mise a jour 0.97.2
Dspam : mise a jour 3.10.0
- 6.5.7 4/07/2011
Amavisd 2.7.0 version finale
- 6.5.6 26/06/2011
Spamassassin : upgrade en 3.3.2
Typos (merci à Bouks !)
- 6.5.5 14/06/2011
Amavisd : modification duamavisd-signer
pour passer en démon
- 6.5.4 14/06/2011
Clamav : maj en 0.97.1
- 6.5.3 14/06/2011
postfix : mise à jourmaster.cf
pour retrait duchroot
sur tous les processes (conforme aumaster.cf
des sources postfix)
Mise à jour du script sql amavis (verifier les diffs)
- 6.5.2 03/06/2011
Spamassassin : upgrade en 3.3.2 rc2
- 6.5.1 02/06/2011
Policyd : migration en V2
- 6.5.0 31/05/2011
Général : mise à jour pour Squeeze, retrait paquets inutiles
Amavisd 2.7.0-rc1
passage de bind a unbound pour les dns
postfix 2.8.3 depuis les sources et utilisation de postscreen
ajoutpyzor
etrazor
pour SA
ajoutdkim amavisd-signer
maj script sql dspam
- 6.4.2 29/05/2011
Dovecot : mise a jour 2.0.13 et sieve 0.2.3
- 6.4.1 28/05/2011
Amavisd : modification du script sql pour utiliser le partitionning sur la table quarantine. La version 5.1 de mysql doit être utilisée.
- 6.4.0 18/05/2011
retrait des rulesSARE
desormais obsoletes et ajout des rulesSOUGHT
- 6.3.0 08/03/2011
global : mise a jour pour les changements de versions debian
dovecot : mise à jour en version 2.0.11
- 6.2.7 05/03/2011
Logwatch : mise à jour scripts
- 6.2.6 28/02/2011
Clamav : mise à jour en version 0.97
- 6.2.5 09/12/2010
Dovecot : mise à jour dovecot-2.0-pigeonhole-0.2.2
- 6.2.4 04/12/2010
Dovecot : mise à jour en version 2.0.8
- 6.2.3 30/11/2010
Clamav : mise a jour en version 0.96.5
- 6.2.2 25/09/2010
Clamav : mise a jour en version 0.96.3
- 6.2.1 18/09/2010
Dovecot : mise à jour en version 2.0.3
- 6.2.0 11/09/2010
Global : passage de maildrop a dovecot pour la livraison des mails.
Dovecot : passage en version 2.0.2
- 6.1.9 17/08/2010
Clamav : mise a jour en version 0.96.2
- 6.1.8 07/06/2010
Mise à jour script sanesecurity : v3.7.1
- 6.1.7 19/05/2010
Clamav : mise a jour en version 0.96.1
- 6.1.6 27/04/2010 (merci à Alex)
SA : mauvais chemin pour une commande de test
Amavisd : ajout du paramètremydomain
dans les explications des modifications duamavisd.conf
- 6.1.5 16/04/2010
Logwatch : Mise à jour des 2 modules.
- 6.1.4 02/04/2010
Clamav : mise à jour en version 0.96
- 6.1.3 20/03/2010
SA : mise à jour en version 3.3.1
- 6.1.2 13/03/2010
Postfixadmin : ajout du transportdovecot
. Correction d’un bug lors de la creation d’un domaine en relay
- 6.1.1 20/02/2010
Postfixadmin : adaptation dupostfix.sql
et du tuto pour créer l’utilisateur d’administratin en@starbridge.org
et non plusadmin@starbridge.org
. Insertion dans la tablepostfix_helo
du domaine. (Merci à Barronmonster pour la contribution !)
- 6.1.0 28/01/2010
DSPAM : refonte du mode d’appel de DSPAM. Utilisation du demon dspam.
- 6.0.4 28/01/2010
FIX : amavisd : passage du champpolicy_name
de la tableamavis.policy
devarchar(32)
àvarchar(255)
pour eviter un bug avec le modulesam
dans le cas d’un email dépassant les 32 caracteres. (l’email étant utilisé par sam commepolicy_name
)
- 6.0.3 26/01/2010
SA : mise à jour en version 3.3.0
- 6.0.2 24/01/2010
Mise à jour script sanesecurity : v3.7
- 6.0.1 16/01/2010
Mailzu : installation initiale du gestionnaire de quarantaine
- 6.0.0 16/01/2010
systeme : précision sur l’installation de mysql pour lenny ou squeeze (5.0 ou 5.1)
général : retrait complet de l’installation de courier-imap pour dovecot et réorganisation des chapitres
postfix : ajout du fichiermysql_relay_recipients_maps.cf
manquants
postfix : ajout des fichiersmysql_transport.cf
etmysql_transport2.cf
nécessaire pour la version de postfixadmin modifiée.
postfix : ajout du parametretransport_maps
par défaut
Postfixadmin : mise en place de la version modifiée sous SVN, remplacement des pass par défaut enmd5 hex
- 5.0.5 11/01/2010
DSPAM : mise à jour en version finale 3.9.0
- 5.0.4 08/01/2010
SA : activation du plugin AWL dans la conf car il est par défaut désactivé
- 5.0.3 07/01/2010
SA : lancement desa-update
juste apres l’installation pour télécharger les rules : Celles ci ne sont plus livrées par défaut dans le package, il faut les télécharger.
- 5.0.2 06/01/2010
FIX : amavis : correction du script de purge pour éviter l’effacement de la semaine en cours
- 5.0.1 04/01/2010
Postfix : ajout de la gestion des aliases domains (non activés par défaut)
- 5.0.0 03/01/2010
SA : Mise à jour en version 3.3.0 rc1
Postfix : passage de[not_]our_domain_has_sender
en requête mysql
- 4.9.8 21/12/2009
Dspam : mise à jour en 3.9.0-RC2
- 4.9.7 15/11/2009
Vacation autoreply : retrait du modulevacation.pl
, car le risque de générer du backscatter est trop important. Rajout d’une information sur le sujet et orientation à prendre.
- 4.9.6 02/11/2009
Dspam : mise à jour en 3.9.0-BETA4
- 4.9.5 01/11/2009
Amavisd : modification de la base SQL. Drop des contraintes et ajout d’un champ dans une clé primaire. Modification du script de purge pour utiliser le partition_tag. Modification duamavisd.conf
pour insérer lepartition_tag
dans la base.
- 4.9.4 28/10/2009
Clamd : Mise à jour en version 0.95.3
- 4.9.3 2/10/2009
Général : Mise à jour des scriptsinit.d
(clamd/amavis/policyd) pour intégrer les headers LSB. Ajout des commandesinsserv
dans le cas de la version testing.
- 4.9.2 12/09/2009
Mise à jour script sanesecurity : v3.6
- 4.9.1 26/08/2009
DSPAM : mise à jour en dspam-3.9.0-BETA1
- 4.9.0 26/08/2009
SA : passage des règlesamavis-sanesecurity
sur les rules starbridge pour une mise à jour automatique avecsa-update
Général : création d’un répertoire commun pour les scripts de maintenance. Modification des chemins.
SA : modification du sa-update et passage de la compilation desrulesets
en quotidien dans le script directement.
- 4.8.9 25/08/2009
Logwatch : Mise à jour
- 4.8.8 05/07/2009
SA : ajoutd’un channel starbridge pour les mises à jours des regles SA
- 4.8.7 30/06/2009
Dspam : mise à jour paramétrage dansamavisd.conf
et dansdspam.conf
- 4.8.6 27/06/2009
Clamd : Mise à jour en version 0.95.2
- 4.8.5 26/06/2009
Amavisd : Mise à jour du binaire et du fichier de conf en 2.6.4.
Dspam : Mise à jour en 3.9.0 ALPHA2
- 4.8.4 11/06/2009
Amavisd : modification dumaster.cf
et duamavisd.conf
pour ajouter le port 10029 spécifique aux notifications d’amavisd
Dspam : mise à jour du script de création des tables MySQL.
- 4.8.3 17/05/2009
amavisd : mise à jour prérequis libdb4.4-dev par libdb4.6-dev. Le paquet n’existe plus dans Lenny
paragraphe antispam : modification de l’ordre d’exécution du tutorial pour éviter le message suivant au démarrage d’amavisd durant les tests" Can’t locate object method "new" via package "Amavis ::SpamControl" at /usr/sbin/amavisd line 13878."
- 4.8.2 10/05/2009
Dspam : Mise à jour version 3.9.0
Mise à jour script sanesecurity : v3.0
- 4.8.1 24/04/2009
Clamav : Mise à jour script signature en 2.7.2. Changement du nom du script en :clamav-unofficial-sigs
- 4.8.0 23/04/2009
Amavisd : mise à jour en 2.6.3. Modification du fichier de configuration pour prendre en compte le changement de gestion de Dspam par amavisd.
- 4.7.7 20/04/2009
Dspam : ajout des outils de compilation nécessaires (automake, autoconf
).
- 4.7.6 16/04/2009
Dspam : mise à jour des liens de téléchargement vers la version de la communauté.
- 4.7.5 08/04/2009
Clamd : Mise à jour en version 0.95.1
- 4.7.4 05/04/2009
Mise à jour script sanesecurity : v2.7
Amavisd : mise à jour du binaire avec 2 patches correctifs
- 4.7.3 23/03/2009
Clamd : Mise à jour en version 0.95
- 4.7.2 15/03/2009
courier-authdaemon : modification du/etc/init.d/courier-authdaemon
pour la version testing Squeeze de debian. Le script crée désormais le répertoire run, il faut donc lui spécifier les bonnes permissions.
- 4.7.1 07/03/2009
changement du lien de téléchargement du binaire d’amavisd pour integrer les differents patches correctifs de la version 2.6.2
- 4.7.0 21/02/2009
Mise à jour script sanesecurity : update script ajout du fichier de conf
- 4.6.9 24/01/2009
Mise à jour script sanesecurity : unification des 2 fichiers
- 4.6.8 21/01/2009
Mise à jour du script sanesecurity suite au changement de mode de telechargement
- 4.6.7 21/01/2009
Postfixadmin : Mise à jour en 537
Vacation.pl mise a jour
- 4.6.6 20/01/2009
Postfixadmin : Mise à jour en 529
Mise a jourpostfix.sql
: ajout champlocal_part
- 4.6.5 04/01/2009
Amavisd : Mise à jour en 2.6.2
correction de mise en forme du tuto suite à une update SPIP
- 4.6.4 06/12/2008
Amavisd : Mise à jour en 2.6.2-rc2
- 4.6.3 26/11/2008
Clamd : Mise à jour en version 0.94.2
Amavisd : Mise à jour en 2.6.2-rc1
- 4.6.2 17/11/2008
Amavisd : Mise à jour en 2.6.2-pre1. Les nouvelles signatures Sanesecurity ont été ajouté au code, donc on les enleve duamavisd.conf
.
- 4.6.1 12/11/2008
Amavisd : modification duamavisd.conf
pour utiliser des fichiers externes pour les domaines et les whitelist/blacklist. Ajout des nouvelles signatures SaneSecurity
SA : Ajout des nouvelles signatures SaneSecurity
SaneSecurity : mise à jour du script
Clamd : Mise à jour en version 0.94.1
Postfixadmin : mise à jour en 478
- 4.6.0 26/09/2008
Postfix : retrait de la rbllist.dsbl.org
. Celle ci est arrêtée définitivement.
- 4.5.9 04/09/2008
Clamd : Mise à jour en version 0.94
- 4.5.8 03/09/2008
Postfixadmin : mise à jour en version 458. Mise à jour devacation.pl
- 4.5.7 02/08/2008
Postfixadmin : mise à jour en version 432. Corrige le bug pour l’effacement duvacation_notification
dans le mode admin
- 4.5.6 01/08/2008
Postfixadmin : mise à jour vacation.pl. Remise en forme du paragraphe dans le tuto pour créer le/etc/postfix/transport
par wget sed.
Dspam : simplification de l’import sql (wget)
- 4.5.5 31/07/2008
Postfixadmin : mise à jour en version 431. Mise à jour du fichierconfig.inc.php
- 4.5.4 20/07/2008
SA : retrait de la procédure cpan et installation des modules perl en package debian.
- 4.5.3 19/07/2008
Amavisd : retrait de la procédure cpan et installation des modules perl en package debian.
- 4.5.2 18/07/2008
Amavisd : Modification des options de compilation pour déplacer les binaires dans le chemin par defaut :/usr
au lieu de/usr/local
Policyd : Idem
SA : idem. On installe SA directement par perl et non plus par CPAN.
- 4.5.1 17/07/2008
Clamd : Modification des options de compilation pour deplacer les binaires dans le chemin par defaut :/usr
au lieu de/usr/local
. Même chose pourclamdmon
dont le package fourni a été modifié.
Dspam : Idem
- 4.5.0 08/07/2008
Clamd : Mise à jour en version 0.93.3
- 4.4.9 04/07/2008
Postfixadmin : Mise à jour du script sql de création des tables
Postfix : passage des commandes de creation des fichiers de lookup sql de la partie antispam/antivirus en wget/sed.
- 4.4.8 02/07/2008
Postfix : Modification des droits sur les lookup sql de la partie antispam. Le owner doit etreroot
, et nonpostfix
.
Maildrop : Modification de la création du fichierquotawarnmsg
. On ne le place plus que dans/etc/
. La creation du dossier/usr/local/courier
étant inutile.
- 4.4.7 01/07/2008
Mailfilter : Modification de la création du dossier des mails envoyés par défaut. Désormais le répertoire sera Sent, et plus sent-mail pour compatibilité avec les dernières versions de horde et avec Thunderbird. Ajout d’une règle pour intercepter les mails avec l’extension spam, utilisée par amavisd si il est paramétré avec Mailzu.
- 4.4.6 30/06/2008
Policyd : précision sur la possibilité de placer la vérification dans lesmtpd_recipient_restrictions
dans le cas ou le controle du nombre de mails envoyés/recus est primordial.
- 4.4.5 28/06/2008
Amavisd : Mise à jour en version 2.6.1
- 4.4.4 28/06/2008
Amavisd : modification du script sql pour le pb d’import. Correction officielle.
- 4.4.3 25/06/2008
Clamav : Mise à jour du scriptUpdateSaneSecurity.sh
pour éviter le controle du répertoire/var/lib/clamav
(structure differente dans les dernieres versions de clamav)
- 4.4.2 24/06/2008
Postfix : Modification dans la mise en forme du tuto de l’insert des tables sql principales et des fichiers de lookup. (wget sed)
SASL : idem pour tout la section
- 4.4.1 23/06/2008
Postfix : Mise en place des prérequis pour l’utilisation de certains domaines en relais uniquement en cochant l’option relative dans postfixadmin. (ajout du fichier/etc/postfix/mysql_relay_domains_maps.cf
et modification du fichier/etc/postfix/mysql_virtual_domains_maps.cf
)
- 4.4.0 16/06/2008
Maildrop : Passage à la version par paquet debian. Au niveau fonctionnel cela modifie le comportement demaildrop
lors d’un over quota : il ne rejette plus le mail générant ainsi un bounce, mais il met celui-ci en queue.
Courier/Dovecot : Mise en forme du tuto pour bien séparer les 2 installations
Clamd : ajout de clamdmon en telechargement car il a disparu des sources de clamd 0.93.1
- 4.3.6 14/06/2008
SA : Mise à jour en version 3.2.5
- 4.3.5 11/06/2008
Amavisd : ajout dans leamavisd.conf
fourni d’une sectionbanned_rules
, permettant de specifier dans les policies dans la base sql une liste personnalisée de fichiers bannis. Il s’agit d’exemple qui pourront bien sur être modifiés.
- 4.3.4 11/06/2008
Amavisd : ajout d’exemple et d’explication sur les policies dans SQL. Explication sur la possibilité de paramétrer par domaine.
- 4.3.3 09/06/2008
Clamd : Mise à jour en version 0.93.1
- 4.3.2 02/06/2008
Policyd : désactivation des options de verifications du HELO par défaut dans le fichier de configuration fourni. La verification duHELO
est déjà faite dans postfix et le contrôle duHELO
selon l’hote peut générer des blocages. Ces 2 contrôles peuvent etre réactivés si l’on comprend bien leur fonctionnement.
- 4.3.1 02/05/2008
Postfixadmin : Remplacement dans le tuto duconfig.inc.php
par un fichier preconfiguré a télécharger.
Postfixadmin : mise à jour en version 3.5.8. Cette version correspond a la release 2.2
- 4.3.0 23/04/2008
Amavisd : Mise à jour en version 2.6.0. Mise à jour du fichieramavisd.conf
pour ajouter le paramètre d’activation de la signature dkim
- 4.2.8 22/04/2008
Général : Uniformisation du nom du serveur dans le tuto : dans le/etc/hosts
retrait du domaine seul (starbridge.org). Dans la partie TLS, modification du CN en spike.starbridge.org au lieu de starbridge.org
- 4.2.7 20/04/2008
Amavisd : Mise à jour en version 2.6.0rc2. Mise à jour du script sql et du fichieramavisd.conf
.
- 4.2.6 14/04/2008
Clamd : Mise à jour en version 0.93. Mise à jour des fichiers de configuration.
- 4.2.5 9/04/2008
Maildrop : mise à jour de l’url pour récupérer les sources
- 4.2.4 1/04/2008
Amavisd : modification du tuto pour faire en sorte de recuperer le fichier de conf d’amavisd correctement modifié au début de l’installation et d’eviter ainsi les erreurs de conf.
- 4.2.3 28/03/2008
Amavisd : prerequis Mail ::DKIM deplacé de la partie SA vers amavisd dans le tuto car c’est désormais un prérequis pour amavisd
- 4.2.2 26/03/2008
Reporting : Ajout de mailgraph pour générer des graphiques.
- 4.2.1 26/03/2008
Policyd : FIX pour le pb de multiple recipient : Suppression de la vérification depolicyd
sur les recipient. (policyd.conf
mis a jour)
- 4.2.0 21/03/2008
Postfix : Nettoyage d’une ACL inutile dans le stagesmtpd_sender_restrictions
(reject_unknown_sender_domain
) car présente ensuite dans le stage smtpd_recipient_restrictions.
Policyd : Déplacement de la règle d’appel de policyd dans le main.cf du stagesmtpd_recipient_restrictions
àsmtpd_end_of_data_restrictions
. Cela permet à Policyd de connaitre la taille d’un message, mais aussi cela permet de faire passer au travers de policyd les senders locaux. Cela permettra donc un controle de flux pour les users internes. Mise à jour du document de gestion du serveur pour refleter ce changement.
- 4.1.1 21/03/2008
Amavisd : Activation dans amavisd du port 10026 pour utiliser la policy bankORIGINATING
et permettre aux utilisateurs passant par le port 587 et authentifiés par SASL d’etre considérés comme locaux par amavisd, meme si ils sont en dehors du LAN.
- 4.1.0 20/03/2008
Amavisd : Mise à jour en 2.6.0rc1. Mise à jour du script SQL d’amavisd. Ajout d’une section pour configurer la signature DKIM par amavisd.
- 4.0.4 19/03/2008
Général : ajout de lien pour suivre l’installation de Dovecot à la place de Courier-imap dans le tuto
- 4.0.3 13/03/2008
Amavisd : mise à jour en amavisd-new-2.5.4
- 4.0.2 11/03/2008
Postfix : Mise à jour dumaster.cf
de base pour la version 2.5 (ajout de proxywrite).
Postfixadmin : Mise en jour en 311
- 4.0.1 10/03/2008
Postfix : Mise à jour des chemins btree dans lemain.cf
pour prendre en compte un changement dans la version 2.5 de postfix. ($queue_directory
==> $data_directory
). Ajout d’une note pour la compatibilité avec Postfix < 2.5
- 4.0.0 26/02/2008
FIX : Maildrop : le mail de warning lors de l’approche du quota (90%) ne fonctionnait plus ==> Modification de la méthode d’installation du fichier quotawarnmsg et surtout de sa localisation.
- 3.9.8 12/02/2008
Clam : Mise à jour en version 0.92.1
- 3.9.7 31/01/2008
Clam : Mise à jour du script UpdateSaneSecurity.sh.
- 3.9.6 30/01/2008
Logwatch : Mise à jour en amavis-logwatch-1.48.27
- 3.9.5 29/01/2008
Courier : ajout d’une clause dans authmysqlrc pour vérifier le statut actif du compte et rendre le login imap impossible si celui ci est desactivé
- 3.9.4 29/01/2008
Dspam : passage du fichier de configuration en wget et sed pour modification du password.
- 3.9.3 28/01/2008
firewall : le script de firewall a été transformé en lien pour limiter la taille de la page du tuto.
policyd : passage du fichier de configuration en wget, modification du uid/gid du user policyd en 20002 pour matcher le fichier de conf. passage du fichier init en wget
- 3.9.2 21/01/2008
Postfixadmin : Mise à jour en révision 298
- 3.9.1 14/01/2008
Général : modification de la procédure de création de nombreux script en wget pour faciliter la mise en oeuvre (sa-learn, sa-update, sa-compile, dspam…..)
- 3.9.0 11/01/2008
Postfixadmin : Mise à jour en révision 291. Ajout d’un import wget pour le config.inc.php et d’une commande de substitition du nom de domaine pour faciliter l’edition de ce fichier de config.
Postfix : ajout d’un script pour importer la table sql et commande rapide pour le changement du domaine.
Maildrop : ajout d’un wget pour importer directement le fichier authmysqlrc et éviter ainsi les erreurs de saisie. Ajput de la commande pour modifier le password dans le fichier.
- 3.8.9 9/1/2008
SA : Mise à jour en version 3.2.4.
- 3.8.8 31/12/2007
Postfixadmin : Mise à jour en révision 283.
- 3.8.7 18/12/2007
Clam : Mise à jour en version 0.92
- 3.8.6.1 18/12/2007
SA : FIX : Correction de l’erreur sur le nom du fichier sql de la base suite à la mise à jour 3.8.4
- 3.8.6 17/12/2007
Amavisd/Postfix : Modification du destinataire du test telnet (postmaster —> admin@starbridge.org) qui ne fonctionnait plus depuis la mise à jour du tuto 3.8.1
Général : modification de la commande de création du user vmail. Création automatique du home “virtual”.
Maildrop : Précision pour le paquet libpcre -dev sous etch.
- 3.8.5 14/12/2007
Postfixadmin : Mise à jour en révision 268. Adaptation du config.inc.php.
- 3.8.4 12/12/2007
SA : ajout du support de l’AutoWhitelist (AWL) : ajout de la table sql, modification du local.cf et ajout d’un script de purge.
SA : modification de l’import SQL : modification du script pour prendre en compte la creation directe des tables InnoDB. Retrait de la section de conversion en InnoDB.
Amavisd : Mise à jour en version 2.5.3
- 3.8.3 09/12/2007
Clam : modification du fichier clamdmon.sh pour ajouter les chemins vers les binaires.
- 3.8.2 06/12/2007
Postfix : ajout d’un paragraphe dans la section analyse des logs sur la nécessité de desactiver l’envoi de mail au postmaster pour les bounces, une fois la période de test terminée.
- 3.8.1 30/11/2007
Postfix-Amavisd : Retrait du paramètre receive_override = no_address_mappings dans le main.cf pour le déplacer dans le master.cf sur le port 10025. Cela permettra d’utiliser pleinement les rêgles par utilisateurs dans amavisd.
amavisd : Changement du destinataire des mails d’alerte virus (virusalert ==> admin)
- 3.8.0.1 27/11/2007
Postfixadmin : svn : mise a jour en version 248
typos
- 3.8.0 25/11/2007
Amavisd : ajout d’une section sur la configuration de Penpals et des lookups SQL pour une gestion par utilisateurs
- 3.7.4 23/11/2007
SA : /etc/sa-update.sh, ajout des chemins en dur vers les binaires, pour eviter les problèmes avec Ubuntu.
SA : ajout du chemin dans la crontab pour le sa-learn
- 3.7.3 22/11/2007
policyd : ajout des INSERT dans la table blacklist_helo
- 3.7.2 20/11/2007
Postfix : Activation dans le master.cf du port 587 (submission).
Postfix : Préparation du port 465 (smtps) mais non activé (commenté). Il peut etre nécessaire suivant les cas de figure. Ce port est considéré comme obsolète.
Firewall : Ouverture du port 587.
Amavisd : ajout de notes et d’un lien vers un autre article du site sur l’utilisation du port 587 pour bypasser l’antispam pour les mails sortants.
- 3.7.1 15/11/2007
Postfixadmin : passage en révision 227.
- 3.7.0 13/11/2007
TLS : Refonte totale de la création des certificats et de la CA.
Postfix-TLS : modification des options relatives dans le main.cf
Imapd-ssl : Ajout de la creation d’un certificat personnalisé et signé par la CA
Postfixadmin-ApacheSSL : Modification du certificat.
UpdateSaneSecurity : Changement pour la 1ere execution du script : c’est le user amavis qui la lance, a l’identique du cron.
Postfix : Nettoyage du main.cf original (celui du debut du tuto). retrait de parametres inutiles. Pas de changement dans les fonctionnalités.
- 3.6.6 12/11/2007
Maildrop : ajout d’une précision sur le point pour terminer un mail en ligne de commande.
Maildrop : Ajout d’une précision sur les droits à appliquer au fichier personnel .mailfilter.
Postfix sql : Nettoyage des scripts de création des tables postfix_hello et postfix_access. (AUTO INCREMENT)
Postfixadmin : passage en révision 215.
Postfixadmin : Retrait du paragraphe sur le .htaccess dans le répertoire admin car celui ci n’existe plus dans cette version. (il est vide)
Postfixadmin : Retrait du paragraphe sur la correction de l’affichage.
Postfixadmin : Mise à jour du config.inc.php
Amavisd : retrait du mkdir /var/amavis, déjà crée par la commande adduser.
sa-learn : précision sur les deplacements des emails dans les dossiers SpamFalse et SpamToLearn
Typo
- 3.6.5 08/11/2007
Vacation.pl : modification du script pour ne pas envoyer d’autoreply pour messages marqués comme spam par SA.
- 3.6.4 07/11/2007
Maildrop : modification des droits appliqués sur le /var/run/courier/authdaemon. (775 ==> 750)
- 3.6.3.1 30/10/2007
FIX clam : Modification du chmod sur le dossier /var/tmp/clamdb pour eviter une erreur de droits lors de l’exécution du script.
- 3.6.3 28/10/2007
Clam : modification dans le tuto pour automatiquement telecharger les fichiers de configuration clamd.conf et freshclam.conf. Plus besoin de les editer manuellement.
Freshclam : Modification du cron en edition de la crontab plutôt que par un fichier dans /etc/cron.d
SA : ajout de 2 modules perl optionnels : Mail ::DKIM et Encode ::Detect. Ajout du package libssl-dev necessaire a la compilation, en début de tuto.
SA : Edition du fichier /etc/mail/spamassassin/v312.pre pour activation du plugin Mail ::Dkim
- 3.6.2 27/10/2007
Clam : modification du crontab de UpdateSaneSecurity. Il sera exécuté par le user amavis. (au lieu de root)
Clam : Déplacement du paragraphe de UpdateSaneSecurity dans celui de l’install de clamd.
Clam : retrait de la création du RamDisk /var/lib/clamav pour éviter le problème au redémarrage.
clam : ajout du lancement de freshclam lors de l’init.d de clam.
Freshclam : Retrait du lancement de freshclam en cron au boot. Retrait d’un —log-verbose en trop dans la ligne.
Clamav : installation de clamdmon pour surveiller Clam.
- 3.6.1 25/10/2007
vacation.pl : ajout du module Mail ::Sendmail dans les prérequis (ils se trouvent dans la partie amavisd du tuto) pour éviter un problème de dépendances.
- 3.6 24/10/2007
postfixadmin : modification du script de sécurisation des fichiers, effacement du setup.php plus tôt dans le tuto. Rappel du password du superadmin
postfixadmin : ajout de la modification pour la mise en page en francais
logwatch : mise à jour des liens pour le téléchargement suite aux changements sur le site original.
typos
- 3.5.9 17/10/2007
postfixadmin : passage en révision 157
postfixadmin : mise à jour vacation.pl
- 3.5.8 04/10/2007
postfixadmin : passage en révision 132. Modification du config.inc.php
postfixadmin : mise à jour vacation.pl
- 3.5.7 03/10/2007
policyd : mise à jour de la version en 1.82. Modification des liens.
- 3.5.6 26/09/2007
postfixadmin : on passe le SVN à la révision 99.
Typo
- 3.5.6 23/09/2007
postfixadmin : retrait de la modification du EHLO en HELO dans le fichier function.inc.php = bugs d’envoi du mail création de boite fixé.
postfixadmin : on fixe temporairement le SVN à la révision 66, pour des bugs dans les versions supérieures à la date d’aujourd’hui.
- 3.5.5.1 20/09/2007
postfixadmin vacation : nouvelle version de vacation.pl
postfixadmin vacation : ajout des modules perl nécessaires.
- 3.5.5 19/09/2007
Postfixadmin vacation : Modification du fichier vacation.pl fourni
Postfixadmin vacation : modification de la table vacation : champ active INT (1) en active INT (4) et conversion de la table en InnoDB
Postfixadmin vacation : Ajout de la table vacation_notification.
Postfixadmin : Modification de la table Domain : ajout du champ quota
Postfix Admin config.inc.php : ajout de paramètres optionnels
- 3.5.4 09/09/2007
maildrop : retrait de GDBM extensions enabled. de l’exemple de retour d’un maildrop -v car cette extension a été désactivé dans le configure.
maildrop : modification du configure : retrait de –enable-maildropmysql et –with-mysqlconfig=/etc/courier/maildropmysql.config devenuent obsolètes.
maildrop : ajout d’un workaround pour l’erreur a la fin du make install de la version 2.0.4.
- 3.5.3 05/09/2007
Postfixadmin : ajout de la commande de redémarrage d’apache à la fin de la configuration SSL.
SASL : modification des droits sur le /var/spool/postfix/run/saslauthd de 770 en 710.
- 3.5.2 02/09/2007
sa-learn : modification du script pour éliminer les messages d’alertes inutiles par email.
- 3.5.1 29/08/2007
Vacation : correction d’une erreur dans le fichier /etc/postfix/transport : oubli du :
- 3.5 28/08/2007
Postfix Mysql : correction d’une erreur dans le fichier /etc/postfix/virtual_domains_maps.cf : à la place de SELECT description il fallait lire SELECT domain
- 3.4.2 24/08/2007
Postfixadmin : correction d’une erreur sur la commande svn (merci à ARk0 !) ( un – inutile devant le co
- 3.4.1 23/08/2007
Général : Modification de la base debian :: on prend désormais la version testing comme référence.
Clamav : modification des prérequis de compilation : paquet renommé dans la version lenny : libgmpxx4ldbl
- 3.4 21/08/2007
Maildrop : modification de la version en 2.0.4.
Maildrop : Ajout de make à la liste de packages nécessaires à l’installation.
Maildrop : Explication sur le message d’erreur à la fin du make install et sur le temps nécessaire au ./configure.
Maildrop : retrait du paragraphe sur le fichier obsolète maildropmysqlconfig
Maildrop : ajout de précisions sur la procédure de test.
TLS : ajout d’un chmod sur le dossier /etc/postfix/tls
SASL : modification du fichier /etc/init.d/postfix pour tenir compte des mises à jour debian. (dans la ligne FILE, le fichier etc/nss_mdns.config a été ajouté par l’installeur)
Postfix : mise à jour du master.cf original pour correspondre à la dernière version de l’installeur.
Postfixadmin : [rouge]refonte totale[/rouge]. Installation de la version SVN. Mise à jour des commentaires.
Postfixadmin : ajout d’une section sur l’installation du SSL dans apache
Clamav : Mise à jour version 0.91.2 et mise à jour des fichiers de configuration d’exemple.
Clamav : modification des prérequis de compilation. (changement de version du paquet debian libgmpxx4)
Ramdisk : modification du mount pour les ramdisk (mount tmfs)
Vacation : modification/simplification de la procédure (ajout de wget) et modification du lien vers postfixadmin dans cette section en https:// (ajout du ssl)
- 3.3 19/08/2007
retrait de scores obsolètes dans local.cf pour SA : (HTML_60_70 et HTML_SHOUTING3)
- 3.2 11/08/2007
modification de la structure des tables SQL de postfixadmin : correction des index.
ajout de sa-compile dans l’installation de SA
- 3.1 08/08/2007
ajout de la section sur les mises à jour des règles SA et installation des règles SARE.
ajout de la section sur l’installation des signatures supplémentaires de Clam : sanesecurity.
mise à jour du ficher amavisd.conf d’exemple (lien)
- 3.0 06/08/2007
ajout d’une section Firewall avec un exemple.
modification des liens pointant sur le tuto webmail (tuto crée ce jour)
- 2.8 30/07/2007
retrait du paragraphe sur la modification d’amavisd 2.50 et antérieures pour fonctionner avec dspam 3.8.0. On utilise amavisd 2.52 par défaut désormais. Si nécessaire, la modification à effectuer est toujours documentée dans l’article spécifique sur DSPAM.
typos
précision sur le fichier maildropmysql.config dans la partie sur Maildrop
- 2.7 27/07/2007
retrait des commandes postmap inutiles sur les fichiers de lookup Mysql
mise à jour de certains lookup sql qui étaient notés avec l’ancienne syntaxe de postfix.
- 2.6 18/07/2007
Mise à jour du lien pour clamav 0.91.1
- 2.5 09/07/2007
Modification du master.cf pour eviter le filtrage et les body/header checks sur le pickup.
- 2.4 03/07/2007
ajout de la modification de /etc/init.d/courier-authdaemon sous ubuntu pour éviter le changement des droits à chaque lancement.
simplification du paragraphe sur les RBL. Seules 2 listes restent en fonction par défaut.
- 2.3 30/06/2007
modification du lien de clamd pour la version 0.91rc2 en raison du bug de demarrage de la version 0.90.3.
- 2.2 29/06/2007
ajout d’un paragraphe dans courier-imap sur l’utilisation de ENHANCEDIDLE.
ajout d’un paragraphe dans courier-imap sur le nombre de process maximum
ajout d’un paragraphe dans courier-imap sur le fonctionnement des fichiers de configuration imapd et imapd-ssl
- 2.1 28/06/2007
Typo
- 2.0 27/06/2007
Partie antispam, paramétrage de postfix (stmd_recipient_restrictions..) : Refonte complète du paragraphe pour ajouter des règles pour éviter le spoofing des adresses expéditrices.
Postfix main.cf (au début du tuto) : ajout de $smtpd_sender_login_maps dans proxy_read_maps.
Mise à jour des liens pour Amavisd-2.5.2
- 1.3 26/06/2007 Merci à Guillain pour son aide !
Typos : type Mime
Headers/body/tyme Mime : modification des noms de fichiers pour qu’ils aient tous la terminaison .cf
SASL : Ajout du START=yes dans le /etc/default/saslauthd
Maildrop : ajout de libpcre3-dev dans les paquets nécessaires à installer (compatibilité Ubuntu)
Maildrop : ajout de l’installation de la commande mail pour les systèmes Ubuntu
- 1.2 06/06/2007
Modification du script d’apprentissage SA
ajout des boîtes email d’apprentissage Spam et Ham
ajout des répertoires par défaut dans les boîtes imap : SpamToLearn et SpamFalse
- 1.1 31/05/2007
Modification du Main.cf et déplacement du reject_unauth_pipelining sous smtpd_data_restrictions.
Modification de postfixadmin pour corriger le bug d’envoi de l’email de confirmation lié a la restriction sur le pipelining.
- 1.0 Article Original