Mise en place de Postfix

Installation

Par défaut sur une machine Debian on trouve Exim, qu'il va falloir purger si ce n'est déjà fait :
# aptitude purge exim11

Ensuite on installe Postfix :
# aptitude install postfix

Configuration de base

Un serveur de mail est utile sur une machine Linux même si celle-çi n'a pas une vocation de serveur mail, ou même si elle n'est pas connectée à Internet. En effet, des outils systèmes comme cron, at ou encore des outils de sécurité comme tiger ou snort sont configurés, ou peuvent être configurés, pour envoyer des mails à l'administrateur système afin de l'informer du résultat de leur exécution. Pour une utilisation locale, vous sauterez les sections « Gestion du mail pour un nom de domaine » et « Éviter le spam ».

Vous pouvez vous baser sur le fichier de configuration généré par debconf selon les réponses que vous avez faites lors de l'installation. Si Postfix était déjà installé lorsque vous vous êtes lancé dans sa configuration, vous pouvez le reconfigurer avec debconf en appelant la commande suivante :
# dpkg-reconfigure postfix

Si vous voulez le configurer entièrement à la main, vous pouvez commencer par copier le fichier de configuration type fourni par le mainteneur du paquet, pour l'adapter à vos besoins :
# cd /etc/postfix/
# mv main.cf main.cf.old
# cp /usr/share/postfix/main.cf.dist main.cf

On va ensuite éditer ce fichier /etc/postfix/main.cf sur lequel repose la majeure partie de la configuration de Postfix. Les paramètres y ressemblent à des variables shell, avec une notation $variable.

On spécifie le nom de la machine :
myhostname = HOSTNAME

Postfix signale les problèmes à l'alias postmaster. Vous pouvez ne pas être intéressé par tous les types d'événements, aussi ceci est configurable. La valeur par défaut signale seulement les problèmes sérieux (ressource et logiciel) au postmaster, mais il est possible d'obtenir plus de détails.
notify_classes = resource, software
notify_classes = resource,software,bounce,delay,policy

On peut indiquer un programme externe pour délivrer les messages vers les boîtes mail des utilisateurs. Les utilisateurs qui souhaitent bénéficier des possibilités offertes par procmail le feront via leur ~/procmailrc (par exemple, filtrer les mails pour éviter les spams) tandis que les autres verrront simplement leur mail délivré directement.
mailbox_command = /usr/bin/procmail -a "$EXTENSION"

On renseigne quelques paramètres :
sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
mailq_path = /usr/bin/mailq
setgid_group = postdrop

On commente les paramètres suivants, non essentiels (en mettant un « # » devant) :
html_directory =
manpage_directory =
sample_directory =
readme_directory =

Le paramètre biff spécifie si le système doit notifier ou non les utilisateurs en cas de nouveau mail (« You have new mail » dans votre terminal).
biff = no

On spécifie le protocole par defaut utlisé pour délivrer les messages :
default_transport = smtp

Pour éviter de diffuser le programme et sa version de notre serveur de mail :
smtpd_banner = Mail server aurelp.fr.eu.org

La limite en nombre de processus :
default_process_limit = 10

Le nombre de messages délivrés simultanement en local :
local_destination_concurrency_limit = 2

Le nombre de messages délivrés simultanement aux autres :
default_destination_concurrency_limit = 10

La taille maximal d'une mailbox (0 = pas de limite) :
mailbox_size_limit = 512000000

La taille minimum d'espace sur le disque pour accepter les messages (ici 30 Mo) :
queue_minfree = 31457280

La taille maximum des messages acceptés (ici 3 Mo) :
message_size_limit = 3145728

Alias

On va utiliser le fichier /etc/aliases pour rediriger le mail de certains utilisateurs vers d'autres :
alias_maps = hash:/etc/aliase
alias_database = hash:/etc/aliases

Il est souhaitable de paramétrer au minimum un alias pour postmaster pointant vers le nom d'un utilisateur. Cet alias doit exister pour que les gens puissent vous signaler des problèmes de distribution de courrier. Vérifiez que vous redirigez également le courrier du super-utilisateur. La syntaxe de ce fichier est la suivante :

utilisateur_origine: utilisateur_destination
mailer-daemon: root
postmaster: root
root: aurelien

Lancez la commande newaliases après toute modification de /etc/aliases.

Gestion du mail pour un nom de domaine

Pour gérer le mail d'un nom de domaine, il faut que la machine soit désignée MX par le serveur DNS : voir à ce sujet le billet sur BIND. Il faudra aussi penser à configurer votre firewall pour qu'il laisse tout le monde accéder à votre port 25.

Le paramètre $mydomain indique le nom de domaine pour lequel notre serveur gère le mail. La valeur par défaut est le nom de la machine, $myhostname.
mydomain = leprovost.eu.org

Le paramètre $myorigin indique le domaine qui apparaît dans le courrier envoyé à partir de cette machine, la valeur par défaut étant $myhostname.
myorigin = /etc/mailname
J'ai placé « leprovost.eu.org » dans /etc/mailname.

Le paramètre $mydestination indique les domaines pour lesquels cette machine délivrera le courrier localement, au lieu de le transmettre à une autre machine. La valeur par défaut est de recevoir le courrier à destination de la machine elle-même (localhost). mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

Postfix relaie le courrier des clients des réseaux et des domaines autorisés, définis par le paramètre $mynetworks. La valeur par défaut autorise tous les clients des sous-réseaux IP auxquels la machine est reliée. Si vous renseignez $mynetworks, Postfix ignore $mynetworks_style.
mynetworks = 127.0.0.0/8

Postfix relaie le courrier étranger, c'est-à-dire provenant de clients hors réseaux autorisés, seulement vers les destinations autorisées. Les destinations extérieures autorisées sont définies avec le paramètre $relay_domains. Par défaut, Postfix autorise tous les domaines (et sous-domaines) listés dans le paramètre mydestination. C'est le point sensible qui peut transformer un serveur mail en relai pour les spams.
relay_domains = $mydestination

Par défaut, Postfix tente de délivrer le courrier directement sur Internet. Suivant votre environnement, ce n'est pas toujours possible et/ou souhaitable : votre système peut être éteint en dehors des heures ouvrées, il peut être derrière un firewall, ou bien encore être connecté via un fournisseur d'accès qui n'autorise pas la livraison directe du courrier. Enfin, certains fournisseurs d'accès (comme par exempke AOL) posent des problèmes pour envoyer du courrier vers leurs abonnés à partir de serveurs personnels. Dans ces cas, vous devez configurer Postfix pour effectuer les livraisons via un relais, en général le SMTP de votre fournisseur d'accès. L'utilisation des « [] » évite la consultation des champs MX du DNS.
relayhost = [smtp.free.fr]

Premiers contrôles contre le spam

On veut accepter le courrier extérieur à destination de « utilisateur@exemple.fr », mais pas à destination de « utilisateur@machin.exemple.fr » :
parent_domain_matches_subdomains = debug_peer_list smtpd_access_maps

On désactive certaines techniques utilisées pour obtenir des adresses mail valides sur le serveur :
disable_vrfy_command = yes

Les spammeurs ne respectent rien, pas même les RFC. Du coup on peut commencer à les filtrer en rejettant les comportements non conforme à la norme. Par exemple, on fixera une pause d'une seconde en début de connection : si le serveur en face ne la respecte, ça signifie qu'il a été écrit pour utiliser abusivement la canalisation des commandes SMTP, afin d'accélérer ses livraisons. On rejettera aussi les mails provenant de serveurs tournant sur une IP sans DNS associé.

smtpd_helo_required = yes
strict_rfc821_envelopes = yes
smtpd_client_restrictions =
   sleep 1, reject_unauth_pipelining,
smtpd_recipient_restrictions =
   permit_mynetworks,
   permit_sasl_authenticated,
   reject_invalid_hostname,
   reject_unauth_destination,
   reject_unknown_sender_domain,
   reject_unknown_recipient_domain,
   reject_unauth_destination,

La ligne « permit_sasl_authenticated » ne doit être ajoutée que si vous comptez envoyer des mails à partir de n'importe quelle IP, après vous être identifié. Voyons ça plus en détail.

Utiliser son serveur SMTP pour l'envoi des mails, où que l'on soit

Les utilisateurs nomades n'ont peut-être pas envie de passer leur temps à reconfigurer leur client mail, dès qu'ils changent d'endroit et donc de FAI. Pour éviter cela on va utiliser notre serveur mail comme SMTP, en le configurant pour qu'il demande une identification. J'ai dit à sasl d'utiliser l'identification Imap de Courrier, ce qui nécessite de configurer ce dernier pour que sasl marche.

On commence par générer les certificats nécessaires pour TLS :
# openssl req -new -outform PEM -out /etc/postfix/sasl/smtpd.cert -newkey rsa:2048 -nodes -keyout /etc/postfix/sasl/smtpd.key -keyform PEM -days 365 -x509
Répondez aux questions posées. Quand on vous demande « Common Name (eg, YOUR name) », entrez votre nom de domaine : dans mon cas, « aurelp.fr.eu.org ».

On protège notre clé privée :
# chgrp postfix /etc/postfix/sasl/smtpd.key ; chmod 640 /etc/postfix/sasl/smtpd.key

Dans /etc/postfix/main on ajoute :

# Utiliser SASL pour l'authentification des clients SMTP
smtpd_sasl_auth_enable = yes

# TLS
smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/sasl/smtpd.cert
smtpd_tls_key_file = /etc/postfix/sasl/smtpd.key
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

Ensuite on installe SASL :
# aptitude install sasl2-bin libsasl2-modules

On ajoute l'utilisateur postfix au groupe sasl :
# adduser postfix sasl

On édite /etc/default/saslauthd :

START=yes
MECHANISMS="rimap"
MECH_OPTIONS="localhost"
THREADS=0
OPTIONS="-r -c -m /var/spool/postfix/var/run/saslauthd"

Si vous avez sorti postfix de son chroot, il faut mettre /var/run/saslauthd.

On crée le répertoire : mkdir -p /var/spool/postfix/var/run/saslauthd

On crée /etc/postfix/sasl/smtpd.conf :

pwcheck_method: saslauthd
mech_list: plain login

Une fois Courier configuré (voir plus bas), vous pourrez tester la configuration de sasl avec la commande suivante :
# testsaslauthd -f /var/spool/postfix/var/run/saslauthd/mux -u USER -p PASS

Vérifications et tests

Tant que la sortie de
# /etc/init.d/postfix check
vous renvoie quelque chose, jetez-y un coup d'oeil. Ensuite, relancez Postfix :
# /etc/init.d/postfix restart

Pour les tests il est souhaitable d'activer le maximum de choses dans $notify_classes. Tant que vous avez quelque chose de ce genre dans /var/log/mail.*, votre serveur mail n'est pas en bon état mache :

Oct  9 13:16:32 theodule postfix/master[8717]: warning: process /usr/lib/postfix /smtpd pid 8880 exit status 1
Oct  9 13:16:32 theodule postfix/master[8717]: warning: /usr/lib/postfix/smtpd: bad command startup -- throttling

Une fois que Postfix s'est lancé correctement, vous pouvez essayer de vous envoyer un mail en local, puis vers un autre nom de domaine, puis à partir d'un autre nom de domaine vers votre serveur mail.

Regrouper les mails de plusieurs adresses

Si comme moi, vous commencez à compter plusieurs adresses mails, vous éprouvez sans doute le besoin de regrouper tous vos mails sur une seule adresse. On va utiliser fetchmail pour ce faire, en lui indiquant de laisser procmail traiter les courriers collectés.

On commence par installer les outils nécessaires :
# aptitude install fetchmail fetchmail-ssl procmail cron anacron logrotate

Ensuite on édite le fichier ~/.fetchmailrc :

poll pop.FAI1.fr protocol POP3
username USER
password PASS

poll pop.FAI2.com protocol POP3
username USER
password PASS

poll pop.MAIL3.org protocol POP3 port 995
username USER
password PASS
ssl

Il faudra ensuite effectuer
% chmod 600 ~/.fetchmailrc
ou fetchmail refusera de se lancer. Étant donné que les mots de passe y sont stockés en clair, c'est la moindre des précautions à prendre.
Vérifiez que le nom d'hôte de votre machine est renseigné dans /etc/hosts

Lancez ensuite en simple utilisateur :
% crontab -e
pour rajouter ces lignes :

*/15 * * * * /usr/bin/fetchmail -t 120 -m /usr/bin/procmail >>.log-fetchmail 2>>.log-fetchmail
5 0 * * * /usr/sbin/logrotate -s $HOME/.logrotate.status $HOME/.logrotate.conf
*/15 * * * * sh ~/scripts/faux_posneg >/dev/null 2>/dev/null

Cron envoie par mail toute sortie, standart ou sterr. Si vous voulez complétement éviter les mails, spécifiez « MAILTO = "" » au début de la crontab.

Nettoyage des logs

Bien qu'utiles, les fichiers de comptes-rendus (logs) finissent par devenir encombrants. Afin de limiter l'espace disque occupé, nous limitons leur taille de tous les fichiers de log que nous avons créés. De la même manière que nous avons fait appel à cron pour automatiser une tâche, nous allons faire appel à un logiciel spécialisé dans ce type de travail, logrotate. On le configure en créant un fichier de paramètres, qui indique la taille maximale et les niveaux de sauvegardes. Dès que le log dépasse la limite fixée, logrotate le déplace en sauvegarde, décale d'un cran les autres sauvegardes et supprime la dernière.

Créez $HOME/.logrotate.conf :

/home/aurelien/.log-fetchmail {
   rotate 2
   size=50k
}

/home/aurelien/.log-procmail {
   rotate 2
   size=100k
}

/home/aurelien/.razor/razor-agent.log {
   rotate 2
   size=50k
}

Éviter le spam

SpamAssassin et Bogofilter

On va indiquer à procmail de filtrer les mails avec SpamAssassin et Bogofilter. Ils ajouteront des en-têtes au mail qui permettront au logiciel de mail utilisé de les trier par dossier. On utilisera aussi pyzor pour interroger et alimenter les bases de données coopératives de lutte anti-spam, et formail pour reformater correctement les mails. On commence par installer :
# aptitude install bogofilter spamassassin razor

Éditez ensuite /etc/default/spamassassin pour positionner « ENABLED » sur 1. Puis rendez-vous sur http://www.yrex.com/spam/spamconfig.php afin de créer un fichier de configuration pour SpamAssassin. Vous placerez le résultat dans $HOME/.spamassassin/user_prefs, chez moi ça a donné ça :

# SpamAssassin config file for version 3.x
# Generated by http://www.yrex.com/spam/spamconfig.php (version 1.50)

# How many hits before a message is considered spam.
required_score          5.0

# Encapsulate spam in an attachment (0=no, 1=yes, 2=safe)
report_safe             0

# Enable the Bayes system
use_bayes               1

# Enable Bayes auto-learning
bayes_auto_learn        1

# Score minimal pour apprendre que le message est un spam : 10
# Score maximal pour apprendre que le message n'est pas un spam : -5.0

# Enable or disable network checks
skip_rbl_checks         0
use_razor2              1
use_pyzor               0

# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales              en

# exemple de score pour une règle
#score SUBJECT_DRUG_GAP_C 3.0

Dans $HOME/.spamassassin/razor-agent.conf mettez

razorhome = ~/.razor

Une fois que tout ça est fait, lancez
# /etc/init.d/spamassassin start

Pour tester que votre configuration de SpamAssassin est bonne, la sortie de
% spamassassin --lint
doit être nulle.

Apprentissage

Afin d'augmenter la pertinence de SpamAssassin et de Bogofilter, il faut leur donner à manger à la fois des spams et du courrier légitime. Commencez par les regrouper dans deux fichiers (chez moi ils sont au formats mbox).

Pour Bogofilter :
% bogofilter -MBvts spam
% bogofilter -MBvtn ham

Pour SpamAssassin :
% sa-learn --spam --mbox spam
% sa-learn --ham --mbox ham

Pour gérer les faux positifs et négatifs, on crée ce script ~/scripts/faux_posneg.sh :

#!/bin/sh

cd ~/Maildir/.Faux_positifs/cur/

for i in `ls`
do
 bogofilter -Bvtn $i
 sa-learn --ham $i
 mv $i ~/Maildir/cur/
done

cd ~/Maildir/.Faux_negatifs/cur/
for i in `ls`
do
 bogofilter -Bvts $i
 sa-learn --spam $i
 mv $i ~/Maildir/.Spams/cur/
done

Ainsi si un mail licite est classé comme spam, il vous suffira de le mettre dans le répertoire Faux_positifs (par Imap ou le webmail) et ce script se chargera d'apprendre à SpamAssassin et Bogofilter qu'ils se sont trompés, puis il le placera dans la boîte de réception. Les faux négatifs iront bien entendu dans le dossier Spams.

Procmail

On édite ~/.procmailrc :

SHELL=/bin/sh
MAILDIR=$HOME/Maildir
LOGFILE=$HOME/.log-procmail
VERBOSE=yes

# On reformate les mails correctement, notamment le champ from initial
#
:0f
| formail

# On soumet à l'analyse de spamassassin, en prenant soin
# de nettoyer les spams analysés des précédentes traces d'analyse.
# On ne traite que les messages inférieurs à 250 kB car la majeure
# partie des spams ne sont pas plus volumineux et travailler sur de
# gros messages peut rendre spamassassin gourmand en ressources.
#
:0fw
* < 256000
| spamassassin -d | spamassassin

# Si spamassassin se plante en cours de route, le mail
# qu'il traitait ne sera pas perdu. Il arrivera dans DEFAULT.
#
:0e
{
    exitcode=$?
}

# On passe par bogofilter
# -p)assthrough -u)pdate, -l)og -e)xitcode 0 for spam and ham
# -v)erbose
#
:0fw
| bogofilter -p -u -l -e -v

# On récupère aussi les erreurs de Bogofilter.
# Better put this after _EACH_ delivering recipe (not shown here).
# Later, the MTA will try again to deliver it.
# 75 is the value for EX_TEMPFAIL in /usr/include/sysexits.h
#
:0e
{
    EXITCODE=75
    HOST
}

# Work around procmail bug: any output on stderr will cause the "F" in "From"
# to be dropped. This will re-add it.
:0
* ^^rom 
{
  LOG="*** Dropped F off From_ header! Fixing up. "

  :0 fhw
  | sed -e '1s/^/F/'
}
# Le courrier marqué comme spam par SpamAssassin
#
:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
.Spams/

# Le courrier marqué comme spam par Bogofilter
#
:0:
* ^X-Bogosity: (Spam|Yes)
.Spams/

# put copy error catcher here to avoid fallthrough

# Le courrier marqué comme spam possible par SpamAssassin
#
:0:
* ^X-Spam-Status: Yes
.Suspects/

# Le courrier marqué comme spam possible par Bogofilter
#
:0:
* ^X-Bogosity: Unsure
.Suspects/

# Le reste du courrier est considéré comme licite
#
:0:
$MAILDIR/

Vous devriez maintenant trouver de nouveaux en-têtes relatifs au spam dans vos mails.

Installer un serveur POP/Imap

On va utiliser Courier :
# aptitude install courier-pop-ssl courier-imap-ssl courier-authlib-mysql

L'utilisation des protocoles POP et IMAP avec SSL nécessite de posséder un certificat X.509 valide et signé. Lors de l'installation de courier-pop-ssl et courier-imap-ssl, un certificat X.509 auto-signé sera généré. J'explique la procédure pour les regénérer, car vous voulez peut-être changer les informations qu'ils contiennent — et de toutes façons ils expireront au bout d'un an.

Editez les fichiers /etc/courier/pop3d.cnf et /etc/courier/imapd.cnf :

[ req_dn ]
C=FR
ST=France
L=Montpellier
O=Mail server aurelp.fr.eu.org
OU=Certificat généré par l'admin
CN=aurelp.fr.eu.org
emailAddress=EMAIL

Puis effacez les certificats /etc/courier/*.pem et lancez
# dpkg-reconfigure courier-pop-ssl courier-imap-ssl

Pour séparer les comptes courriers et systèmes, on va demander à Courier d'utiliser MySQL pour l'indentification des utilisateurs. Éditez /etc/courier/authdaemonrc :

authmodulelist="authmysql"

Puis /etc/courier/authmysqlrc. Veillez à ne pas mettre d'espaces supplémentaires en début ou en fin de ligne, mettez des tabulations entre les options et leur arguments, et commentez les options non utilisées.

MYSQL_SERVER        localhost
MYSQL_USERNAME      courier
MYSQL_PASSWORD      votre_mdp
MYSQL_PORT      3306
MYSQL_DATABASE      courier
MYSQL_USER_TABLE    mailbox
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD     uid
MYSQL_GID_FIELD     gid
MYSQL_LOGIN_FIELD   user
MYSQL_HOME_FIELD    home

Étant donné que le mot de passe est stocké en clair :
# chmod 600 authmysqlrc

Ensuite connectez-vous à phpMyAdmin et créez la base de donnée courier à partir de ce fichier SQL. Puis créez un utilisateur courier et donnerez-lui le droit de faire des requêtes (SELECT) sur cette base. Ajoutez au moins un login dans la nouvelle base, pour pouvoir utiliser Courier. Son mot de passe doit être chiffré avec la méthode « ENCRYPT ».

Pour finir, créez vos maildirs :
% maildirmake.courier ~/Maildir
% maildirmake.courier ~/Maildir/.Spams
% maildirmake.courier ~/Maildir/.Suspects
% maildirmake.courier ~/Maildir/.Faux_positifs
% maildirmake.courier ~/Maildir/.Faux_negatifs
Si vous relevez votre courrier en POP3, Courier viendra taper dans ~/Maildir/ sans se soucier des sous-boîtes.

Une fois que la configuration est finie, on demande à Courier de prendre en compte nos modifications :
# for i in /etc/init.d/courier-* ; $i stop done ; for i in /etc/init.d/courier-* ; $i start done
Le cas échéant, pensez à ouvrir dans votre firewall les ports 110, 143, 993 et 995 (respectivement POP3, Imap, Imap-SSL et POP3-SSL).

J'ai eu du mal à faire communiquer Courier et MySQL. Si cela vous arrive aussi, activez les logs dans MySQL de cette manière :
# /etc/init.d/mysql stop && mysqld --verbose --log=/var/log/mysql.log &
et vérifiez avec phpmyadmin que la requête que Courier effectue est valide.

J'utilise KMail comme client lourd. Dans l'onglet « Extras » de la configuration de votre compte, vous avez un bouton « Vérifier ce que le serveur peut gérer » qui vous renseignera sur ce que votre serveur supporte (ici a priori les 3 options). Je vous conseille de choisir TLS. KMail vous informe que l'on n'a pas cherché à faire signer nos certificats.

Installer un webmail

Dans le cadre d'un utilisation nomade, il est pratique d'avoir ses mails accessible via le ouaib. Personnellement, j'utilise un client lourd (kmail) pour les lire sur ma machine principale, mais je me connecte aussi à partir d'autres endroits et j'apprécie de pouvoir consulter mes nouveaux mails sur le serveur. On va installer un client Imap accessible par le web, j'ai nommé un webmail. J'ai choisi IMP, basé sur le framework Horde, qui permettra d'utiliser également le carnet d'adresse Turba et le gestionnaire de signets Trean.

Horde

Il vous faut créer un hôte virtuel pour votre webmail (voir le billet sur Apache), à moins que vous ne souhaitiez accéder à votre webmail par une URL du style « http://serveur.tld/webmail/ ». Ensuite assurez-vous que votre installation de PHP sera suffisante :
# aptitude install php5-gd php5-imap php5-ldap php5-mysql php5-pear php-log php-db php-net-socket php-mail php-mail-mime php-http-request php5-memcache phpmyadmin

Téléchargez puis décompressez horde-X.Y.Z.tar.gz pour placer les fichiers obtenus dans /var/www/webmail. Procédez de même avec IMP et Téléchargez en plaçant les fichiers respectivement dans /var/www/webmail/imp/ et dans /var/www/webmail/turba/.

Trean n'étant pas encore finalisé, il n'est accessible que via les snapshots CVS. Placez dans un sous-répertoire comme les autres. Il faut aussi l'activer : éditez le fichier /var/www/webmail/config/registry.php, faîtes une recherche sur « trean » et modifiez la ligne « status » de la manière suivante :

'status' => 'active',

Ouvrez ensuite l'URI http://webmail.serveur.tld/test.php (ou bien http://serveur.tld/webmail/test.php selon votre configuration) pour vérifier que votre installation de PHP comporte tous les éléments nécessaire à Horde.

Par défaut, Horde semble s'attendre à être placé dans un sous-répertoire « horde3 » à la racine du site. Pour éviter des grognements du style

[Sat Oct 21 23:13:16 2006] [error] [client 192.168.0.15] File does not exist: /var/www/webmail/horde3

on éxécutera la commande suivante après s'être placé dans /var/www/webmail :
# ln -s . horde3

Par mesure de sécurité :
# chown -R root:root /var/www/webmail
Pour pouvoir accéder à la configuration par le navigateur :
# chown -R www-data.www-data /var/www/webmail/config /var/www/webmail/imp/config /var/www/webmail/turba/config /var/www/webmail/trean/config

Télécharger ensuite ce fichier SQL tiré du paquet Debian (ou prenez la dernière version à l'intérieur du paquet horde3) et éxécutez-le à l'aide de phpmyadmin, après avoir changé le mot de passe pour l'utilisateur horde.

La majeure partie du reste de la configuration va s'effectuer par le biais de votre navigateur, à l'adresse « http://webmail.serveur.tld ». Notez que si vous n'avez pas de serveur IMAP fonctionnel, horde ne fonctionnera pas.

Pour les paramètres essentiels, ensuite dans « Administration > Configuration > Configuring Horde ». Dans la section « Database », spécifiez qu'on va utiliser MySQL, et entrez les infos de connection. Sélectionnez UTF-8 comme encodage. Dans la section « Authentification », entrez le ou les utilisateur(s) qui seront administrateurs. Puis sélectionnez « IMAP authentification » comme méthode d'identification, pour « Configuration type » entrez « Separate values ». Choisissez le port 143 et le protocole « imap/tls/novalidate-cert ».

Si quelque chose se passe mal et que vous voulez revenir en connection automatique, écrasez /var/ww/ebmail/config/conf.php par sa sauvegarde et rechargez /var/www/webmail/.

Éditez ensuite /var/www/webmail/imp/config/servers.php :

$servers['imap'] = array(
   'name' => 'IMAP Server',
   'server' => 'localhost',
   'hordeauth' => true,
   'protocol' => 'imap/ssl/novalidate-cert',
   'port' => 993,
   'maildomain' => 'aurelp.fr.eu.org',
   'smtphost' => 'mail.aurelp.fr.eu.org',
   'smtpport' => 25,
   'realm' => '',
   'preferred' => '',
);

On utilise SSL car la Sarge n'a que PHP4, or il faut PHP 5.1 pour utiliser TLS.

Pour Turba, il faut récupérer /var/www/webmail/turba/scripts/sql/turba_objects.mysql.sql et l'éxécuter dans la table horde grâce à phpmyadmin.

Faites ensuite le tour de la configuration d'Horde, d'IMP, de Turba et de votre ou vos compte(s) utilisateur(s) pour les adapter à vos besoins.

Accéder à votre webmail de manière chiffrée

Le mail fait partie de la correspondance privée ; pour qu'il le reste, autant le lire en https. Cette partie suppose que vous avez un apache fonctionnel. Malheureusement, on ne peut avoir qu'un seul hôte https par IP, mais cela est en train de changer avec des choses comme SNI.

On active le mod_ssl d'apache :
# cd /etc/apache2/mods-enabled
# ln -s ../mods-available/ssl.load
# ln -s ../mods-available/ssl.conf

Ensuite on crée le fichier /etc/apache2/sites-enabled/horde.domain.tld :

<VirtualHost *:443>
 ServerName horde.domain.tld
 ServerAdmin postmaster@domain.tld
 ServerSignature Off
 SSLEngine on
 SSLCertificateFile /etc/ssl/private/horde.pem
 DocumentRoot /var/www/webmail/
 <Directory />
   Options SymLinksIfOwnerMatch MultiViews
   AllowOverride None
 </Directory>
 ErrorLog /var/log/apache2/horde-error.log
 LogLevel warn
 CustomLog /var/log/apache2/horde-access.log combined
</VirtualHost>

Ensuite on crée notre certificat :
# make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/private/horde.pem

Et pour finir on relance apache :
# /etc/init.d/apache2 restart

Remerciements et liens

Pour la partie Postfix, la traduction française de la doc m'a beaucoup aidé, en particulier la liste de tous les paramètres du fichier de configuration.

Si vous voulez appronfondir l'aspect anti-spam, rendez-vous sur cette page.

Enfin, vous trouverez ici plus de détails sur la syntaxe de Procmail.