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