Netqmail/Vpopmail

Un article de Wiki SOS-ADMIN.


Voici une maniére d'installer NetQmail à la sauce Life With Qmail
Ce guide vous est proposé par www.elginux.com

Sommaire

Avant-propos

Histoire de s'instruire un petit peu avec de jolie image, je vous invite à regarder, voir imprimer, encadrer, etc... ceci :
http://www.nrg4u.com/qmail/the-big-qmail-picture-103-a4.pdf

Téléchargement des sources

Code : Téléchargement des sources

Création du répertoire de travail

mkdir -p /home/src/soft
cd /home/src/soft

Téléchargement des sources

wget http://www.qmail.org/netqmail-1.06.tar.gz
wget http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
wget http://ovh.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.25.tar.gz

Dépaquetage des sources

Code : Préparation des sources pour leur compilation
cd /home/src
tar xvfz soft/netqmail-1.06.tar.gz
tar xvfz soft/ucspi-tcp-0.88.tar.gz
tar xvfz soft/vpopmail-5.4.25.tar.gz
mkdir -p /package
mv soft/daemontools-0.76.tar.gz /package
chmod 1755 /package
cd /package
tar xvfz daemontools-0.76.tar.gz

Création des répertoires

Code : Répertoires et liens utiles pour qmail
mkdir -p /var/qmail
mkdir -p /etc/qmail
ln -s /etc/qmail /var/qmail/control

Création des comptes Unix

Ceci est à appliquer uniquement si ces groupes et users n'existent pas sur votre systéme. Vérifiez vos fichiers /etc/passwd et /etc/group.

Code : Création des comptes systéme pour qmail
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias -s /bin/false alias
useradd -g nofiles -d /var/qmail -s /bin/false qmaild
useradd -g nofiles -d /var/qmail -s /bin/false qmaill
useradd -g nofiles -d /var/qmail -s /bin/false qmailp
groupadd qmail
useradd -g qmail -d /var/qmail -s /bin/false qmailq
useradd -g qmail -d /var/qmail -s /bin/false qmailr
useradd -g qmail -d /var/qmail -s /bin/false qmails

Nous allons ajouter le user et group pour vpopmail, et déporter son répertoire /etc avec un lien symbolique

Code : Création du compte systéme pour vpopmail
groupadd -g 89 vchkpw
useradd -g vchkpw -u 89 -d /home/vpopmail -s /bin/false vpopmail
mkdir -p /etc/vpopmail
mkdir -p /home/vpopmail
ln -s /etc/vpopmail /home/vpopmail/etc

Installation de NetQmail

Dans certains cas, et avant de lancer le make setup check, il faut modifier certains fichiers tels que conf-cc et conf-ld. Par exemple, pour une archi 64bits, il faut modifier conf-cc et y retirer le -O2.

Code : Installation de NetQmail
cd /home/src/netqmail-1.06
make setup check
./config

Si ./config ne trouve pas votre hostname alors :

Code : Installation de NetQmail
./config-fast the.full.hostname

Installation de NetQmail + patch chkuser

Si vous souhaitez inclure des patchs tel que chkuser par exemple :
NB : ne tenez pas compte du paragraphe précédent nommé "Installation de NetQmail"
IMPORTANT : vous devez d'abord installer vpopmail afin de pouvoir compiler NetQmail avec le patch chkuser

Code : Installation de NetQmail + patch chkuser
cd /home/src/soft
wget http://www.interazioni.it/opensource/chkuser/download/archives/chkuser-2.0.9-release.tar.gz
cd /home/src
tar xvfz soft/chkuser-2.0.9-release.tar.gz
cd /home/src/netqmail-1.06
patch < /home/src/chkuser-2.0.9-release.patch
make setup check
./config

ou si ./config ne trouve pas votre hostname

./config-fast the.full.hostname

Vous trouverez la doc de ce patch sur :
http://www.interazioni.it/opensource/chkuser/documentation/

Installation de ucspi-tcp

Code : Installation de ucspi-tcp
cd /home/src/ucspi-tcp-0.88
patch < /home/src/netqmail-1.06/other-patches/ucspi-tcp-0.88.errno.patch
make
make setup check

Installation de daemontools

Code : Installation de daemontools
cd /package/admin/daemontools-0.76/src
patch < /home/src/netqmail-1.06/other-patches/daemontools-0.76.errno.patch
cd ..
package/install

Vous devriez avoir Daemontools qui fonctionne sur votre systéme. package/install à dû ajouter SV:123456:respawn:/command/svscanboot à votre fichier /etc/inittab, et vous devriez voir "l'arbre de daemontools" tourner en utilisant cette commande : ps fauxw.

Installation de vpopmail

Code : Installation de vpopmail
cd /home/src/vpopmail-5.4.25
./configure --enable-roaming-users --enable-clear-passwd --enable-qmail-ext
make
make install-strip

Les 2 lignes suivantes sont à adapter à votre systéme et votre outil de gestion de tâches cron.

echo "127.0.0.1:allow,RELAYCLIENT=\"\"" >/etc/tcp.smtp
echo "*:allow" >>/etc/tcp.smtp
echo "40 * * * * root /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null" >>/etc/crontab

Démarrer NetQmail

/var/qmail/rc

Fichier : /var/qmail/rc
#!/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`"

Ce fichier étant créé via votre éditeur favori (vim, nano, etc...).

Code : Chmod et répertoire des logs
chmod 755 /var/qmail/rc
# rm -Rf /var/log/qmail
mkdir -p /var/log/qmail
echo ./Maildir >/var/qmail/control/defaultdelivery

Les fichiers systémes de démarrage

Le script qmailctl

Avec votre éditeur favori, créez le fichier /var/qmail/bin/qmailctl :

Fichier : /var/qmail/bin/qmailctl
#!/bin/sh

# For Red Hat chkconfig
# chkconfig: - 80 30
# 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..."
echo ""
if svok /service/qmail-send ; then
svc -u /service/qmail-send /service/qmail-send/log
echo "Starting qmail-send"
else
echo "qmail-send supervise not running"
fi
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
echo "Starting qmail-smtpd"
else
echo "qmail-smtpd supervise not running"
fi
if svok /service/qmail-pop3d ; then
svc -u /service/qmail-pop3d /service/qmail-pop3d/log
echo "Starting qmail-pop3d"
else
echo "qmail-pop3d supervise not running"
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo ""
echo " qmail-smtpd"
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo " qmail-send"
svc -d /service/qmail-send /service/qmail-send/log
echo " qmail-pop3d"
svc -d /service/qmail-pop3d /service/qmail-pop3d/log
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
svstat /service/qmail-pop3d
svstat /service/qmail-pop3d/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd
echo "Pausing qmail-pop3d"
svc -p /service/qmail-pop3d
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
echo "Continuing qmail-pop3d"
svc -c /service/qmail-pop3d
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send /service/qmail-send/log
echo "* Sending qmail-pop3d SIGTERM and restarting."
svc -t /service/qmail-pop3d /service/qmail-pop3d/log
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd /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

Code : Exécutez qmailctl
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin
qmailctl cdb

Les supervise scripts

Code : Création des répertoires pour les supervise scripts
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
mkdir -p /var/qmail/supervise/qmail-pop3d/log

Maintenant, passons à la création des différents scripts :

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

Fichier : /var/qmail/supervise/qmail-send/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-send 2>&1

Vous devez maintenant exécuter ces commandes :

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

Attention à la version du programme 'head' que vous utilisez. Les dernières versions n'acceptent plus 'head -1' mais 'head -n 1'.

Fichier : /var/qmail/supervise/qmail-smtpd/run
#!/bin/sh

QMAILDUID=`id -u vpopmail`
NOFILESGID=`id -g vpopmail`
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/local/bin/softlimit -m 40000000 \
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
/var/qmail/bin/qmail-smtpd mx.domain.tld \
/home/vpopmail/bin/vchkpw /usr/bin/true 2>&1
Fichier : /var/qmail/supervise/qmail-smtpd/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-smtpd 2>&1

Fichier : /var/qmail/supervise/qmail-pop3d/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec tcpserver -H -R -v -c100 0 110 qmail-popup mx.domain.tld \
/home/vpopmail/bin/vchkpw qmail-pop3d Maildir 2>&1
Fichier : /var/qmail/supervise/qmail-pop3d/log/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH
exec setuidgid qmaill multilog t s100000 n20 /var/log/qmail/qmail-pop3d 2>&1

Finalisation

Il ne nous reste plus qu'a finaliser l'installation :

Code : /var/qmail/alias
echo "pseudo@domain.tld" > /var/qmail/alias/.qmail-root
echo "pseudo@domain.tld" > /var/qmail/alias/.qmail-postmaster
ln -s /var/qmail/alias/.qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster
Code :

Répertoire des logs :

mkdir -p /var/log/qmail/qmail-send
mkdir -p /var/log/qmail/qmail-smtpd
mkdir -p /var/log/qmail/qmail-pop3d
chown -R qmaill /var/log/qmail

chmod des exécutables :

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
chmod 755 /var/qmail/supervise/qmail-pop3d/run
chmod 755 /var/qmail/supervise/qmail-pop3d/log/run

Liens symboliques vers daemontools :

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

N'oublier pas de remplacer sendmail :

mv /usr/lib/sendmail /usr/lib/sendmail.old
mv /usr/sbin/sendmail /usr/sbin/sendmail.old
chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin

Voilà, votre serveur email devrais être fonctionnel et prét à l'usage.

Code : Pour le vérifier
qmailctl stop
qmailctl start
Code : Reste à vérifier que tous fonctionnent correctement
# qmailctl stat
/service/qmail-send: up (pid 30303) 187 seconds
/service/qmail-send/log: up (pid 30304) 187 seconds
/service/qmail-smtpd: up (pid 30305) 187 seconds
/service/qmail-smtpd/log: up (pid 30308) 187 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0


Sources

Elgi