Installer QMail et Vpopmail

Si vous avez déjà un serveur de mail installé (postfix, sendmail, exim…) il faut l’enlever. Généralement, avec apt-get remove app ça fonctionne.
Ensuite, il faut faire croire au serveur qu’un serveur de mail est installé, sinon l’installation de certains outils risquent d’être impossible (par exemple, MySQL refusera de s’installer). Pour ce faire, on va utiliser equivs :

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

Maintenant, entrons dans le vif du sujet. Il faut donc commencer par créer les répertoires et télécharger les sources

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


wget http://www.boscorelly.net/linux/qmail/netqmail-1.06.tar.gz
wget http://www.boscorelly.net/linux/qmail/ucspi-tcp-0.88.tar.gz
wget http://www.boscorelly.net/linux/qmail/daemontools-0.76.tar.gz
wget http://www.boscorelly.net/linux/qmail/vpopmail-5.4.25.tar.gz

Ensuite on décompresse les sources

cd /home/src
tar -xzvf soft/netqmail-1.06.tar.gz
tar -xzvf soft/ucspi-tcp-0.88.tar.gz
tar -xzvf soft/vpopmail-5.4.25.tar.gz

Pour daemontools, c’est légèrement différent

mkdir -p /package
mv soft/daemontools-0.76.tar.gz /package
chmod 1755 /package
cd /package
tar -xzvf daemontools-0.76.tar.gz

Il faut maintenant créer les dossiers et liens inhérents à QMail

mkdir -p /var/qmail
mkdir -p /etc/qmail
ln -s /etc/qmail /var/qmail/control

Création des comptes Unix de 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

Compilation et installation de QMail

Si vous avez une architecture basée autour d’un OS 64 bits, il est nécessaire de modifier le fichier conf-cc et y retirer le -O2.
Il y a deux possibilité pour compiler QMail. Soit vous laissez faire compilateur et il récupèrera tout seul votre hostname, soit vous le forcez.
Méthode « normale » :

cd /home/src/netqmail-1.06
make setup check
./config

Méthode « forcée » :

./config-fast hostname

On va maintenant installer tous les logiciels donc QMail a besoin pour fonctionner.

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

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

Installation de 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
cd /home/src/vpopmail-5.4.25
./configure –enable-roaming-users –enable-clear-passwd –enable-qmail-ext
make
make install-strip

Il est nécessaire d’ajouter ces quelques lignes pour que tout fonctionne bien. En vérité, cela permet de définir qui est autorisé et qui n’est pas autorisé à relayer. La première ligne autorise l’hôte local à relayer, et la seconde, tous les utilisateurs autentifiés.

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

Maintenant, il faut démarrer QMail. Pour cela, utilisez les scripts ci-dessous :

/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` »

Répertoires de log de QMail

chmod 755 /var/qmail/rc
mkdir -p /var/log/qmail
echo ./Maildir >/var/qmail/control/defaultdelivery

Le script de démarrage qmailctl

/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 <
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 permet l’exécution du script de contrôle

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

Les scripts de log de QMail

Création des dossiers

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

Création des scripts de log à proprement parler

/var/qmail/supervise/qmail-send/run

#!/bin/sh
exec /var/qmail/rc

/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

/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

Prenez bien note de changer le mx.domain.tld par votre hostname.

/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

/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

Prenez bien note de changer le mx.domain.tld par votre hostname.

/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

Pour terminer, il est nécessaire de créer les 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

Et de créer quelques répertoires encore.

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

Ainsi que quelques CHMOD et quelques liens symboliques

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

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

Si un serveur de mail était présent avant, il faut remplacer les exécutables de 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à, maintenant QMail devrait fonctionner :

qmailctl stop
qmailctl start
qmailctl stat
/service/qmail-send: up (pid 22707) 6242588 seconds
/service/qmail-send/log: up (pid 22721) 6242588 seconds
/service/qmail-smtpd: up (pid 22702) 6242588 seconds
/service/qmail-smtpd/log: up (pid 22708) 6242588 seconds
/service/qmail-pop3d: up (pid 22704) 6242588 seconds
/service/qmail-pop3d/log: up (pid 22705) 6242588 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0

Pour ajouter un domaine à Vpopmail, soit on peut utiliser QMailadmin, soit on fait comme ceci :

/home/vpopmail/bin/vadddomain domaine.com

Et pour ajouter un utilisateur :

/home/vpopmail/bin/vadduser user@domaine.com

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *