<!-- title: SMTP Relay avec qmail sur Debian Wheezy -->
<!-- category: Debian -->
<!-- tag: planet -->

J'ai cherché une alternative plus simple qu'Exim et Postfix pour que mes
serveurs Debian puissent envoyer des emails d'alerte.<!-- more --> C'est une fonctionnalité
utile si on installe fail2ban ou logwatch. Je n'ai pas besoin de gérer des
utilisateurs ou de recevoir des emails, juste d'en envoyer en utilisant le
serveur SMTP du FAI comme relais. J'ai trouvé
[**qmail**](http://en.wikipedia.org/wiki/Qmail) en faisant quelques recherches,
un antique MTA dont la dernière version stable 1.0.3 date de 1998 (gasp !) mais
qui est toujours disponible dans les dépôts Debian.

Avant de lancer l'installation, il faut s'assurer que le hostname du serveur
est un FQDN, c'est à dire un nom DNS complet. Si ce n'est pas le cas, qmail
refuse de s'installer.  Si le serveur n'a pas de nom DNS, on peut mettre
n'importe quel domaine, ça ne gêne dans la configuration que nous allons mettre
en place. On peut modifier le hostname de manière persistente en deux étapes :

1. éditer le fichier /etc/hostname
2. forcer sa mise à jour avec la commande /etc/init.d/hostname.sh

L'installation de qmail désinstalle Postfix ou Exim4 car un seul MTA peut
s'approprier le port 25.

    apt-get install qmail qmail-run

Il s'agit d'un service local, on ne veut surtout pas ouvrir le port 25 sur
Internet. On peut forcer qmail à n'écouter que sur l'interface loopback en
modifiant le script de démarrage. Ce n'est pas l'idéal mais vu la fréquence de
mise à jour de qmail, on ne craint pas trop de voir cette modification écrasée.
Il faut remplacer *0* par *127.0.0.1* dans le fichier
**/etc/qmail/qmail-smtpd/run**.

Voici la version modifiée :

``` shell
    QMAILDUID=`id -u qmaild`
    NOFILESGID=`id -g qmaild`
    MAXSMTPD=`cat /var/lib/qmail/control/concurrencyincoming`
    LOCAL=`head -1 /var/lib/qmail/control/me`

    if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
        echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
        echo /var/qmail/supervise/qmail-smtpd/run
        exit 1
    fi

    if [ ! -f /var/lib/qmail/control/rcpthosts ]; then
        echo "No /var/lib/qmail/control/rcpthosts!"
        echo "Refusing to start SMTP listener because it'll create an open relay"
        exit 1
    fi

    exec softlimit -m 7000000 \
        tcpserver -v -R -l "$LOCAL" -x /etc/qmail/tcp.smtp.cdb -c "$MAXSMTPD" \
            -u "$QMAILDUID" -g "$NOFILESGID" 127.0.0.1 smtp qmail-smtpd 2>&1
```

On modifie la configuration pour envoyer des emails en utilisant le serveur
SMTP Orange en tant que root@orange.fr si on est l'utilisateur root. On
remplace le contenu du fichier **/etc/qmail/defaulthost** avec ceci :

    orange.fr

On supprime le contenu du fichier **/etc/qmail/defaultdomain** et on configure
le relais dans le fichier **/etc/qmail/smtproutes** :

    smtp.orange.fr <utilisateur> <mot de passe>

Pour tester on relance qmail :

    qmailctl stop
    qmailctl start

Et on tente l'envoi d'un email avec la commande mail :

    mail -s "Hello" someone@somewhere.fr
    Ceci est un test
    ^D

Le fichier de log **/var/log/qmail/current** permet de vérifier l'état de l'envoi.
