ezmlm: installation et configuration sous Ubuntu ou Debian

Dans ce billet je vais decrire la mise en place du gestionnaire de mailing-list ezmlm-idx sur une distribution Linux (Ubuntu dans mon cas mais ce tutorial peut etre utilisé sous n’importe que *nix puisque l’on va partir des sources.)

On va considérer dans ce billet que vous avez une installation fonctionnelle de qmail + vpopmail sur votre serveur.
Si ce n’est pas le cas, reportez vous aux billets:

ezmlm-idx est une version « améliorée » du gestionaire de mailing-list créé par DJB. Il va donc nous falloir récuperer les sources de ezmlm puis les sources de ezmlm-idx, mélanger les premières avec les secondes et hop.
Ca ne vous semble pas clair ? Alors passons à la pratique pour faire la lumiere.

Récupération des sources

On va télécharger les sources de ezmlm depuis le site officiel de DJB:

cd /usr/local/src
wget http://cr.yp.to/software/ezmlm-0.53.tar.gz
tar zxvf  ezmlm-0.53.tar.gz

On va ensuite récuperer les sources de ezmlm-idx:

wget http://www.ezmlm.org/archive/7.0.2/ezmlm-idx-7.0.2.tar.gz
tar zxvf  ezmlm-idx-7.0.2.tar.gz

Compilation

On va commencer par ezmlm:

cd ezmlm-0.53
make

Et la c’est le drame !!!
Vous allez avoir ce joli message à l’issue du make :

./load auto-str substdio.a error.a str.a
/usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference in substdio.a(substdo.o)
/lib/libc.so.6: could not read symbols: Bad value
collect2: ld returned 1 exit s

Allons on ne panique pas, le code de DJB commence a dater, on va devoir bricoler un peu:

echo gcc -O2 -include /usr/include/errno.h > conf-cc
echo cc -m32 -O2 -include /usr/include/errno.h >> conf-cc
echo cc -m32 > conf-ld

Il faut aussi editer les fichiers ezmlm-return.c et ezmlm-manage.c pour y ajouter un include:

#include “log.h”

Si ça ne vous cause pas tout ça, mettez simplement cette ligne en tete des deux fichiers ;)

Et on peu recommencer et terminer la compilation de ezmlm:

make
make man
make setup

On passe a présent a ezlml-idx:

cd ../ezmlm-idx
make
make man

On va faire une petite pause a ce niveau pour tester l’ensemble, ezmlm-idx propose un petit binaire pour tester que tout fonctionne comme il se doit:

./ezmlm-test
ezmlm-make:           OK
Using subdb plugin:   std
ezmlm-reject:         OK
ezmlm-[un|is]sub[n]:  OK
ezmlm-checksub:       OK
ezmlm-send:           OK
ezmlm-tstdig:         OK
ezmlm-weed:           OK
.
.

Si tout est OK il ne vous reste plus qu’a déployer les binaires:

make setup

Et voila !

Exemple de configuration pour une newsletter

ezmlm est un gestionnaire de mailing-list mais il peut très bien être utilisé pour gérer l’envoi de newsletter.
La singularité d’une newsletter est que seuls les modérateurs peuvent poster un message, il nous faudra donc utiliser les flag m et o lors de la création de la liste.

On va donc créer une liste newsletter@ :

  • Sur le domaine lists.domaine.com (préalablement créer via vpopmail->vadddomain).
  • Ayant les options de modération faisant que seuls les modérateurs puissent poster (om)
  • Ayant le nom de la newsletter comme prefixe dans le sujet (-f)
  • Ou seul les abonnés auront accès aux archives (-g)

On va considéré que le repertoire vpopmail – ou sont stocké les comptes du domaine – est : /home/vpopmail/domains/lists.domain.com, la commande pour créer cette liste va donc etre:

./ezmlm-make -o -m -f -g /home/vpopmail/domains/lists.domain.com /home/vpopmail/domains/lists.domain.com/.qmail-newsletter newsletter lists.domain.com

On va ensuite définir le modérateur/redacteur,  en considérant que son adresse mail est : moderateur @ domain.com

./ezmlm-sub /home/vpopmail/domains/domain.com/newsletter mod moderateur @ domain.com

On va ajouter les abonnés moderateur @ domain.com et toorop @ toorop.fr à cette liste:

./ezmlm-sub /home/vpopmail/domains/lists.domain.com/newsletter/ moderateur @ domain.com 
./ezmlm-sub /home/vpopmail/domains/lists.domain.com/newsletter/ toorop @ toorop.fr

Voila, la liste est prete a etre utilisée, si vous avez besoinde plus de détails quand a la configuration d’une mailing-list et des outils qui permettent de la gérer je vous renvois sur les manpages correspondantes. Si vous préférez la consultation en ligne c’est par ICI.

Partagez cet article

Vpopmail on Ubuntu

Cet article fait suite au précédent concernant l’installation de qmail, je vais donc considérer que vous avez une installation de qmail fonctionnelle avant de commencer l’installation de vpopmail.

vpopmail permet de gérer simplement les domaines virtuels sur un serveur mail. Meme si vous ne comptez pas utiliser de doamines virtuels sur votre serveur mail, il peut être intéressant d’installer vpopmail pour profiter des facilités d’administration qu’il procure.

Comme pour l’installation de qmail on va partir des sources, configurer, compiler et installer.

On va avoir besoin des libs libdev

apt-get install libev3 libev-dev

Obtention du code source

vpomail est développé par Inter7, je vous conseille d’aller faire un petit tour sur le site pour lire un peu de doc ;)

On télécharge les sources:

cd /usr/local/src;
wget http://downloads.sourceforge.net/project/vpopmail/vpopmail-devel/5.5.0/vpopmail-5.5.0.tar.bz2?use_mirror=ovh;

On décompresse:

bzip2 -d vpopmail-5.5.0.tar.bz2;
tar xpf vpopmail-5.5.0.tar;
cd vpopmail-5.5.0;

Configuration et compilation

Avant toute chose, il faut créer les utilisateurs qui vont gérer vpomail:

groupadd vchkpw;
useradd -g vchkpw vpopmail;

Comme vous pourrez le constater en consultant la doc, vpomail supporte beaucoup d’option pour le ./configure.
Dans le cas présent, je vais utiliser les option suivantes:

  • –enable-qmail-ext: permet d’activer les extension qmail
  • –enable-clear-passwd : permet de faire des authentification de type PLAIN

C’est tout, je n’active pas le roaming-user qui permet d’utiliser popbeforesmtp comme authentification SMTP car il est préférable d’utiliser SMTPAUTH.

./configure --enable-qmail-ext --enable-clear-passwd;
make;
make install-strip;

Il nous faut a présent compiler et installer le module d’authentification, enfin plus exactement on doit définir quel backend va être utilisé pour stocker les éléments d’identification des comptes locaux.
Les options possibles sont: mysql, LDAPD, postgres, Oracle, Sybase et CDB. Dans mon cas, je vais faire simple et efficace (ce qui est en général gage de fiabilité) en utilisant CDB.
CDB est un systeme de stockage de paires clefs->valeurs developpé par notre amis DJB.

Dans l’arborescence des sources vous trouverez un répertoire backends qui contient les différents modules. En fonction de votre besoin, il vous suffit de vous rendre dans le repertoire correspondant, configurer, compiler et installer:

cd backends/cdb;
./configure;
make;
make install;

Il nous faut installer le script RC qui va gerer le deamon vusaged qui va permettre de recuperer les quota de façon « optimisé »::

cp /usr/local/src/vpopmail-5.5.0/vusaged/contrib/rc.vusaged /etc/init.d/vusaged;
update-rc.d vusaged defaults

Si tout c’est bien passé, vpopmail est installé.

Bin oui c’est tout ;)

Concernant la documentation des divers binaires proposés par vpopmail, vous avez toute la documentation nécessaire ici

A suivre: installation d’un gestionnaire de mailing-list: ezmlm

Partagez cet article

Installation de qmail sur Ubuntu Server 10.04 Lucid

Dans ce billet je vais expliquer comment installer qmail sous Ubuntu dans « les règles de l’art« .
Qu’est ce que je veux dire par la ?
Ubuntu (et Debian) propose une méthode d’installation basée sur le paquet qmail-src, d’un autre coté DJB (le créateur de qmail) à préconisé une méthode et bien entendu les deux sont différentes. Dans ce tuto je vais utiliser la méthode de DJB.

Dans cette partie, je ne vais pas traiter de la mise ne place d’un service de messagerie complet (ça viendra), mais juste la mise en place de qmail en tant que MTA et sa configuration minimale. Typiquement ce genre d’installation sera utilisée sur un serveur qui a surtout besoin d’envoyer des mails  mais qui ne gère pas de boite mails (un serveur web par exemple, dans mon cas ça va être pour un serveur de mailing-list)

Pré-requis

On va considérer que vous avez:

  • Un serveur sous Ubuntu (server ou pas) connecté au net.
  • Le minimum vital d’installé (divers outils d’admin et de dev entre autre un compilateur…).

De mon coté je vais utiliser une machine virtuelle sous openvz, avec un Ubuntu minimal.

On va avoir besoin des éléments suivant:

  • netqmail: netqmail est la version de qmail maintenue par les gourous de qmail. Concrètement il y a juste quelque retouches par rapport au qmail d’origine pour que le code reste compatible avec les distribs « modernes ».
  • ucspi-tcp : ce « module » va gérer la partie tcp de notre installation en particulier pas le biais de tcp-server.
  • daemontools: qui va veiller a ce que nos différents éléments soient UP

Installation de ucspi-tcp

On ne vas pas se casser la tête, on va se contenter d’utiliser le gestionnaire de paquets:

apt-get install ucspi-tcp

Installation de daemontools

On ne vas pas se fatiguer inutilement ici non plus:

apt-get  install daemontools daemontools-run

Installation de netqmail

Téléchargement des sources

Quoi ? Quel scandale ! On va utiliser des sources, compiler, installer…. ! Et puis il faudra recommencer a chaque fois qu’une faille sera découverte ? Quelle horreur !!!

Alors oui on va se taper du make, mais rassurez vous il y a très peu de chance pour que vous ayez à mettre a jour vos binaires qmail-* pour des questions de sécu: qmail est fiable performant et secure par défaut et le restera.

On se déplace dans le répertoire /usr/local/src et on download les sources de qmail/netqmail:

cd /usr/local/src/;
wget http://www.qmail.org/netqmail-1.06.tar.gz;
gunzip netqmail-1.06.tar.gz;
tar xpf netqmail-1.06.tar;

Création du répertoire accueillant qmail

mkdir -p /var/qmail

Création de l’utilsateur de de son groupe

cd netqmail-1.06
cp INSTALL.ids IDS

On va éditer le fichier IDS pour decommenter la partie qui nous concerne, a savoir ce qu’il y a sous l’intitulé Linux et commenter ou supprimer tout le reste :

$ cat IDS
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias alias
useradd -g nofiles -d /var/qmail qmaild
useradd -g nofiles -d /var/qmail qmaill
useradd -g nofiles -d /var/qmail qmailp
groupadd qmail
useradd -g qmail -d /var/qmail qmailq
useradd -g qmail -d /var/qmail qmailr
useradd -g qmail -d /var/qmail qmails

Il nous suffit a présent d’exécuter ce script pour créer utilisateur et groupe:

sh IDS

Compilation et configuration de base

On va compiler les sources et déployer les binaires. Attention il est très important avant d’aller plus loin de vérifier que le nom d’hôte de la machine soit correctement configurée. Le script d’installation va récupérer le hostname pour la config de base de qmail.

cd /usr/local/src/netqmail-1.06;
make setup check;
./config;

On va créer le script /var/qmail/rc et y mettre

#!/bin/sh

# Using stdout for logging
# Using control/defaultdelivery from qmail-local to deliver messages by default

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"

Il nous faut maintenant le rendre exécutable, créer le répertoire de logs et définir le format de mailbox a utiliser

chmod 755 /var/qmail/rc;
mkdir /var/log/qmail;
echo ./Mailbox >/var/qmail/control/defaultdelivery;

Création du script de gestion de qmail

Ce script va permettre de lancer/arreter qmail. On le crée dans /var/qmail/bin/qmailctl

nano /var/qmail/bin/qmailctl

Puis on y colle:

#!/bin/sh

# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`

case "$1" in
  start)
    echo "Starting qmail"
    if svok /etc/service/qmail-send ; then
      svc -u /etc/service/qmail-send /etc/service/qmail-send/log
    else
      echo "qmail-send supervise not running"
    fi
    if svok /etc/service/qmail-smtpd ; then
      svc -u /etc/service/qmail-smtpd /etc/service/qmail-smtpd/log
    else
      echo "qmail-smtpd supervise not running"
    fi
    if [ -d /var/lock/subsys ]; then
      touch /var/lock/subsys/qmail
    fi
    ;;
  stop)
    echo "Stopping qmail..."
    echo "  qmail-smtpd"
    svc -d /etc/service/qmail-smtpd /etc/service/qmail-smtpd/log
    echo "  qmail-send"
    svc -d /etc/service/qmail-send /etc/service/qmail-send/log
    if [ -f /var/lock/subsys/qmail ]; then
      rm /var/lock/subsys/qmail
    fi
    ;;
  stat)
    svstat /etc/service/qmail-send
    svstat /etc/service/qmail-send/log
    svstat /etc/service/qmail-smtpd
    svstat /etc/service/qmail-smtpd/log
    qmail-qstat
    ;;
  doqueue|alrm|flush)
    echo "Flushing timeout table and sending ALRM signal to qmail-send."
    /var/qmail/bin/qmail-tcpok
    svc -a /etc/service/qmail-send
    ;;
  queue)
    qmail-qstat
    qmail-qread
    ;;
  reload|hup)
    echo "Sending HUP signal to qmail-send."
    svc -h /etc/service/qmail-send
    ;;
  pause)
    echo "Pausing qmail-send"
    svc -p /etc/service/qmail-send
    echo "Pausing qmail-smtpd"
    svc -p /etc/service/qmail-smtpd
    ;;
  cont)
    echo "Continuing qmail-send"
    svc -c /etc/service/qmail-send
    echo "Continuing qmail-smtpd"
    svc -c /etc/service/qmail-smtpd
    ;;
  restart)
    echo "Restarting qmail:"
    echo "* Stopping qmail-smtpd."
    svc -d /etc/service/qmail-smtpd /etc/service/qmail-smtpd/log
    echo "* Sending qmail-send SIGTERM and restarting."
    svc -t /etc/service/qmail-send /etc/service/qmail-send/log
    echo "* Restarting qmail-smtpd."
    svc -u /etc/service/qmail-smtpd /etc/service/qmail-smtpd/log
    ;;
  cdb)
    tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
    chmod 644 /etc/tcp.smtp.cdb
    echo "Reloaded /etc/tcp.smtp."
    ;;
  help)
    cat <<HELP
   stop -- stops mail service (smtp connections refused, nothing goes out)
  start -- starts mail service (smtp connection accepted, mail can go out)
  pause -- temporarily stops mail service (connections accepted, nothing leaves)
   cont -- continues paused mail service
   stat -- displays status of mail service
    cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- schedules queued messages for immediate delivery
 reload -- sends qmail-send HUP, rereading locals and virtualdomains
  queue -- shows status of queue
   alrm -- same as doqueue
  flush -- same as doqueue
    hup -- same as reload
HELP
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
    exit 1
    ;;
esac

exit 0

On fixe les droits du script pour qu’il soit exécutable et on crée un lien vers /usr/bin ce qui va nous permettre de lancer ce script sans avoir a entrer son chemin complet.

chmod 755 /var/qmail/bin/qmailctl;
ln -s /var/qmail/bin/qmailctl /usr/bin;

On va devoir à présent créer les supervises scripts, ces scripts vont être utilisés par daemontools pour superviser qmail.
Dans ce qui suit comme c’est un peu laborieux et répétitif je vais me contenter pour chacun d’un « nano le script » et en dessous son contenu.

Avant tout on va créer les répertoires de log:

mkdir -p /var/qmail/supervise/qmail-send/log;
mkdir -p /var/qmail/supervise/qmail-smtpd/log;

Et c’est parti pour les scripts…

nano /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc

Pour qmail-smtpd:

nano /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/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/qmail/control/rcpthosts ]; then
    echo "No /var/qmail/control/rcpthosts!"
    echo "Refusing to start SMTP listener because it'll create an open relay"
    exit 1
fi

exec /usr/bin/softlimit -m 4000000 \
    /usr/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
        -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

On va configurer des maintenant le concurrencincoming qui définit le nombre maximum de transactions SMTP entrantes. On va pour le moment se contenter de 20.

echo 20 > /var/qmail/control/concurrencyincoming;
chmod 644 /var/qmail/control/concurrencyincoming;

Pour les logs qmail-smtpd:

nano /var/qmail/supervise/qmail-smtpd/log/run

Qui doit contenir

#!/bin/sh
exec /usr/bin/setuidgid qmaill /usr/bin/multilog t /var/log/qmail/qmail-smtpd

Les logs qmail-send a présent:

nano /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
exec /usr/bin/setuidgid qmaill /usr/bin/multilog t /var/log/qmail/qmail-send

La partie « pénible » se termine, il nous faut a présent fixer les droits sur ces scripts:

chmod 755 /var/qmail/supervise/qmail-send/run;
chmod 755 /var/qmail/supervise/qmail-send/log/run;
chmod 755 /var/qmail/supervise/qmail-smtpd/run;
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run;

On créé les repertoires pour les logs:

mkdir -p /var/log/qmail/qmail-smtpd;
mkdir -p /var/log/qmail/qmail-send;
chown qmaill /var/log/qmail/qmail-send /var/log/qmail/qmail-smtpd;

Bien on va à présent définir les autorisations de relais. Par défaut qmail accepte uniquement le relais pour les domaine qu’il gère, autrement dit uniquement pour le domaine que vous avez définis comme hostname du serveur. Comme cette installation de qmail va aussi servir de SMTP pour les applications locales, donc qui « attaquent » le SMTP sur le port 127.0.0.1, on va autoriser cette IP a relayer:

echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp;
qmailctl cdb;

Le système ou une application peut avoir besoin d’envoyer des mails en utilisant le binaire sendmail, on va donc faire en sorte que notre configuration supporte cette fonctionnalité. qmail intègre un binaire sendmail, qui implémente les même commandes/options que le binaire sendmail d’origine.

ln -s /var/qmail/bin/sendmail /usr/lib;
ln -s /var/qmail/bin/sendmail /usr/sbin;

Configuration des alias

Dans cette installation nous n’allons pas créer de boite locale, tous les mails devront donc etre redirigés vers un autre compte. Dans mon cas je vais tout rediriger vers techAprotecmail.com (A=@).

echo "&tech@protecmail.com" > /var/qmail/alias/.qmail-root;
echo "&tech@protecmail.com" > /var/qmail/alias/.qmail-postmaster;
ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon;
ln -s .qmail-postmaster /var/qmail/alias/.qmail-abuse;
chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster;

Lancement de qmail et vérifications

Voici venu le moment critique ou l’on va savoir si tout fonctionne correctement…. ou pas.

Comme on l’a vu, les process liés à qmail sont gérés par daemontools via les scripts « supervise », il nous faut donc créer les liens necessaires pour que daemontools soit en mesure de les exploiter. Attention dans une installation classique les supervises scripts doivent être linkés vers /services. Dans notre cas, on a utilisé les paquets Ubuntu pour daemontool et ce dernier à une configuration différentes et utilise /etc/service, on va garder cette config.

ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /etc/service

On lance qmail (en fait daemontools doit avoir fait son boulot et qmail devrait être lancé):

qmailctl start

On vérifie que qmail tourne correctement grâce a la commande :

$ qmailctl stat
/etc/service/qmail-send: up (pid 864) 5 seconds
/etc/service/qmail-send/log: up (pid 875) 5 seconds
/etc/service/qmail-smtpd: up (pid 867) 5 seconds
/etc/service/qmail-smtpd/log: up (pid 865) 5 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0

Bon c’est bien beau tout ça, mais pour le systeme il n’y a pas de MTA installé puisque l’on n’a pas utilisé le gestionnaire de paquets pour installer qmail. Il faut donc gruger un peu et faire croire au systeme qu’il y a un MTA.
Comme ma rencontre avec Ubuntu|Debian est assez récente, j’ai préféré utiliser mon Joker « Appel a un ami » pour touver le truc car mes recherches chez l’ami google n’étaient pas très concluantes. En l’occurrence Stéphane (que je vous conseille par ailleurs si vous avez besoin d’infogérance pour vos serveurs) m’a donné le truc. En gros on fait un paquet virtuel, ainsi le systeme va croire qu’un MTA est installé.

apt-get install equivs
cd /tmp
cp /usr/share/doc/equivs/examples/mail-transport-agent.ctl .
equivs-build mail-transport-agent.ctl
dpkg -i /tmp/mta-local_1.0_all.deb

On va installer un petit binaire qui va nous permettre d’envoyer des mails en ligne de commande (on pourrait utiliser qmail-inject ou sendmail, mais je pense que la commande mail est plus repandue et donc plus habituelle)

apt-get install bsd-mailx

On fait un test d’envois en local pour voir si ça redirige correctement vers une boite externe (ou pourrait se contenter de faire un test vers une adresse dsitante, mais la on fait d’une pierre deux coups):

echo "un test de MTA" | mail -s"MTA" root

Normalement vous devriez recevoir le mail sur l’adresse configurée dans .qmail-root. Si ce n’est pas le cas consultez vos logs (/var/log/qmail).

Voila c’est tout pour aujourd’hui. Ce howto  se verra complété dans un avenir plus ou moins proche par un autre tuto décrivant la mise ne place d’un gestionnaire de mailing list. Et comme on aime les outils de DJB ce sera ezmlm.

/etc
Partagez cet article