Accueil > Logiciel, Tutoriel > Installation Serveur Mail Postfix, Amavisd, Mysql, Spamassassin, Dspam, Dovecot

Installation Serveur Mail Postfix, Amavisd, Mysql, Spamassassin, Dspam, Dovecot

02/06/2021 Categories: Logiciel, Tutoriel Tags: , , ,
Print Friendly, PDF & Email

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  Creative Commons License

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

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 son Maildir. On pourra par exemple rediriger des emails dans des répertoires spécifiques de cette façon. Dovecot cherche pour cela le fichier dovecot.sieve dans le maildir 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

https://www.starbridge.org

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 et mysql-client.cf) pour whitelister certains clients ou expéditeurs).
Lire aussi:  MySQL Master / Slave Replication

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 :
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 :

Lire aussi:  MySQL - Monitorer le port 3306

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.

exemple firewall

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 : modification url 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 du dovecot.conf : ajout plugin notify
    Postfix : correction erreur dans le texte pour smtpd_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 parametre smtpd_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 utiliser ENGINE a la place : les fichiers concernés sont postfix.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 du global.sieve pour tenir compte du retrait du prefix INBOX.
  • 6.8.2 19/08/2012
    Amavisd : modification binaire amavisd : retour au score standard pour dspam : 10 et -1. On utilise le score factor dans le fichier de conf pour moduler le score : modification du amavisd.conf score_factor pour dspam 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’un chmod 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 du sa-learn pour prendre en compte dspam et le format sdbox
  • 6.7.7 01/08/2012
    Dovecot : migration dovecot maildir vers sdbox, activation compression, préparation à l’arrivée de solr
    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 à jour policyd2
  • 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 sur fallback_relay dans le master.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 jour dovecot 2.1.1
  • 6.7.1 17/02/2012
    Dovecot : Mise a jour dovecot 2.1.0, pigeonhole 0.3.0
  • 6.7.0 22/01/2012
    Postfix : Mise a jour postfixadmin en version 2.4 et modification du lookup transport
  • 6.6.6 18/11/2011
    Mise a jour dovecot 2.0.16, pigeonhole 0.25
  • 6.6.4 27/10/2011
    Logwatch : mise à jour postfix-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 de AWL
  • 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 du amavisd-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 à jour master.cf pour retrait du chroot sur tous les processes (conforme au master.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
    ajout pyzor et razor pour SA
    ajout dkim 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 rules SARE desormais obsoletes et ajout des rules SOUGHT
  • 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ètre mydomain dans les explications des modifications du amavisd.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 transport dovecot. Correction d’un bug lors de la creation d’un domaine en relay
  • 6.1.1 20/02/2010
    Postfixadmin : adaptation du postfix.sql et du tuto pour créer l’utilisateur d’administratin en @starbridge.org et non plus admin@starbridge.org. Insertion dans la table postfix_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 champ policy_name de la table amavis.policy de varchar(32) à varchar(255) pour eviter un bug avec le module sam dans le cas d’un email dépassant les 32 caracteres. (l’email étant utilisé par sam comme policy_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 fichier mysql_relay_recipients_maps.cf manquants
    postfix : ajout des fichiers mysql_transport.cf et mysql_transport2.cf nécessaire pour la version de postfixadmin modifiée.
    postfix : ajout du parametre transport_maps par défaut
    Postfixadmin : mise en place de la version modifiée sous SVN, remplacement des pass par défaut en md5 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 de sa-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 module vacation.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 du amavisd.conf pour insérer le partition_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 scripts init.d (clamd/amavis/policyd) pour intégrer les headers LSB. Ajout des commandes insserv 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ègles amavis-sanesecurity sur les rules starbridge pour une mise à jour automatique avec sa-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 des rulesets 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 dans amavisd.conf et dans dspam.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 du master.cf et du amavisd.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 jour postfix.sql : ajout champ local_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 du amavisd.conf.
  • 4.6.1 12/11/2008
    Amavisd : modification du amavisd.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 rbl list.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 de vacation.pl
  • 4.5.7 02/08/2008
    Postfixadmin : mise à jour en version 432. Corrige le bug pour l’effacement du vacation_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 fichier config.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 pour clamdmon 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 etre root, et non postfix.
    Maildrop : Modification de la création du fichier quotawarnmsg. 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 le smtpd_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 script UpdateSaneSecurity.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 de maildrop 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 le amavisd.conf fourni d’une section banned_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 du HELO est déjà faite dans postfix et le contrôle du HELO 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 du config.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 fichier amavisd.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 fichier amavisd.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 de policyd sur les recipient. (policyd.conf mis a jour)
  • 4.2.0 21/03/2008
    Postfix : Nettoyage d’une ACL inutile dans le stage smtpd_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 stage smtpd_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 bank ORIGINATING 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 du master.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 le main.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
Lire aussi:  MySQL database replication with Linux

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
Categories: Logiciel, Tutoriel Tags: , , ,
Les commentaires sont fermés.