!!! ACHTUNG - evtl. veraltet - ACHTUNG !!!
Diese Seite wurde zuletzt am 9. Juli 2014 um 08:53 Uhr geändert.
Grundlage für dieses kleine HowTo ist ein (v)Server mit Debian GNU/Linux „Squeeze“.
Wem die ganzen Abschnitte „händisch“ in die Konsole zu „tippen“ (dazu zähle ich auch einfach mal das „mit linker Maustaste markieren und mit mittlerer Maustaste einfügen), der kann sich auch alles als deletantisches Skript (ftp://ftp.bluemetaljackets.de/qmail/netqmail_with_qmqp.sh enthält alles bis einschließlich „optional: Client (mutt)“) downloaden, ausführbar machen und „starten“ (… dann ist das hier halt die Dokumentation dazu).
aptitude install daemontools daemontools-run ucspi-tcp build-essential
(ggf. sollte hier bereits ein alter MTA deinstalliert werden, z. B. exim4 und sendmail!)
cd /usr/local/src wget ftp://ftp.bluemetaljackets.de/qmail/qmail-dummy_1.0_all.de dpkg --purge --force-depends exim4 exim4-base exim4-config exim4-daemon-light dpkg --install qmail-dummy_1.0_all.deb
addgroup --system nofiles adduser --system --ingroup nofiles --home /var/qmail/alias --no-create-home alias adduser --system --ingroup nofiles --home /var/qmail --no-create-home qmaild adduser --system --ingroup nofiles --home /var/qmail --no-create-home qmaill adduser --system --ingroup nofiles --home /var/qmail --no-create-home qmailp addgroup --system qmail adduser --system --ingroup qmail --home /var/qmail --no-create-home qmailq adduser --system --ingroup qmail --home /var/qmail --no-create-home qmailr adduser --system --ingroup qmail --home /var/qmail --no-create-home qmails adduser postmaster
(da qmail-getpw den Benutzer mit der UID „0“ ignoriert, ist ein „echter“ lokaler Benutzer für den Empfang von E-Mails von Nöten!)
mkdir /var/qmail
mkdir /etc/qmail
ln -s /etc/qmail /var/qmail/control
mkdir -p /var/log/qmail/{qmqpd,smtpd}
chown -R qmaill.nofiles /var/log/qmail
ln -s /var/log/qmail /var/qmail/log
cd /usr/local/src wget http://qmail.org/netqmail-1.06.tar.gz tar xzf netqmail-1.06.tar.gz cd netqmail-1.06 make make setup check ln -s /var/qmail/bin/sendmail /usr/lib/ ln -s /var/qmail/bin/sendmail /usr/sbin/
./config
(sollte der DNS-Server den MAIL-vServer nicht kennen, schafft “./config-fast <FQDN>„ abhilfe!)
cat <<EOF > /etc/tcp.smtp 127.:allow,RELAYCLIENT="" >deny EOF chmod 644 /etc/tcp.smtp
cat <<EOF > /etc/tcp.qmqp 10.:allow >deny EOF chmod 644 /etc/tcp.qmqp
cat <<EOF > /var/qmail/bin/qmailctl
#!/bin/sh
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 svok /etc/service/qmail-qmqpd ; then
svc -u /etc/service/qmail-qmqpd /etc/service/qmail-qmqpd/log
else
echo "qmqpd 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-qmqpd"
svc -d /etc/service/qmail-qmqpd /etc/service/qmail-qmqpd/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
svstat /etc/service/qmail-qmqpd
svstat /etc/service/qmail-qmqpd/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
echo "Pausing qmail-qmqpd"
svc -p /etc/service/qmail-qmqpd
;;
cont)
echo "Continuing qmail-send"
svc -c /etc/service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /etc/service/qmail-smtpd
echo "Continuing qmail-qmqpd"
svc -c /etc/service/qmail-qmqpd
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /etc/service/qmail-smtpd /etc/service/qmail-smtpd/log
echo "* Stopping qmail-qmqpd."
svc -d /etc/service/qmail-qmqpd /etc/service/qmail-qmqpd/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
echo "* Restarting qmail-qmqpd."
svc -u /etc/service/qmail-qmqpd /etc/service/qmail-qmqpd/log
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
tcprules /etc/tcp.qmqp.cdb /etc/tcp.qmqp.tmp < /etc/tcp.qmqp
chmod 644 /etc/tcp.qmqp.cdb
echo "Reloaded /etc/tcp.smtp and /etc/tcp.qmqp."
;;
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
EOF
chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/sbin/
echo "20" > /var/qmail/control/concurrencyincoming chmod 644 /var/qmail/control/concurrencyincoming
(Könnte man analog zu smtpd auch für qmqpd machen, aber dort gefallen mir die „voreingestellten“ 40 eigentlich ganz gut!)
echo "./Maildir/" > /var/qmail/control/defaultdelivery chmod 644 /var/qmail/control/defaultdelivery
cat <<EOF > /var/qmail/rc #!/bin/sh exec env - PATH="/var/qmail/bin:\$PATH" \\ qmail-start "\$( cat /var/qmail/control/defaultdelivery )" EOF chmod 755 /var/qmail/rc
(dash versteht leider kein $( < /var/qmail/control/defaultdelivery ) mehr!)
mkdir -p /var/qmail/supervise/qmail-qmqpd/log cat <<EOF > /var/qmail/supervise/qmail-qmqpd/run #!/bin/sh QMAILDUID=\$( id -u qmaild ) NOFILESGID=\$( id -g qmaild ) exec /usr/bin/softlimit -m 4000000 \\ /usr/bin/tcpserver -v -x /etc/tcp.qmqp.cdb \\ -u "\$QMAILDUID" -g "\$NOFILESGID" 0 628 /var/qmail/bin/qmail-qmqpd 2>&1 EOF chmod 755 /var/qmail/supervise/qmail-qmqpd/run
cat <<EOF > /var/qmail/supervise/qmail-qmqpd/log/run #!/bin/sh exec /usr/bin/setuidgid qmaill /usr/bin/multilog t /var/log/qmail/qmqpd EOF chmod 755 /var/qmail/supervise/qmail-qmqpd/log/run
mkdir -p /var/qmail/supervise/qmail-send/log cat <<EOF > /var/qmail/supervise/qmail-send/run #!/bin/sh exec /var/qmail/rc EOF chmod 755 /var/qmail/supervise/qmail-send/run
cat <<EOF > /var/qmail/supervise/qmail-send/log/run #!/bin/sh exec /usr/bin/setuidgid qmaill /usr/bin/multilog t /var/log/qmail EOF chmod 755 /var/qmail/supervise/qmail-send/log/run
mkdir -p /var/qmail/supervise/qmail-smtpd/log cat <<EOF > /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 25 \\ /var/qmail/bin/qmail-smtpd 2>&1 EOF chmod 755 /var/qmail/supervise/qmail-smtpd/run
cat <<EOF > /var/qmail/supervise/qmail-smtpd/log/run #!/bin/sh exec /usr/bin/setuidgid qmaill /usr/bin/multilog t /var/log/qmail/smtpd EOF chmod 755 /var/qmail/supervise/qmail-smtpd/log/run
echo postmaster > /var/qmail/alias/.qmail-root ln -s .qmail-root /var/qmail/alias/.qmail-mailer-daemon ln -s .qmail-root /var/qmail/alias/.qmail-abuse chmod 644 /var/qmail/alias/.qmail-root
su - postmaster -c /var/qmail/bin/maildirmake ~/Maildir
(sollte jeder Benutzer vor dem ersten Maileingang mit seinen Rechten ausführen!)
ln -s /var/qmail/supervise/qmail-qmqpd /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /etc/service/
aptitude install mutt cat <<EOF >> /etc/Muttrc set mbox_type=Maildir set folder="~/Maildir" set mbox="~/Maildir" set record="+.Sent" set postponed="+.Drafts" set spoolfile="~/Maildir" EOF
Jetzt fehlen nur noch die anderen (v)Server:
Hier müssen alle (v)Server mit ihrem FQDM dazugetragen (einer/Zeile) werden, die den qmail-qmqpd-Dienst nutzen sollen, z. B.:
<DOMAIN> mail.<DOMAIN> **dns1.**<DOMAIN> **dns2.**<DOMAIN> **db.**<DOMAIN> **http.**<DOMAIN> [[...]]
qmailctl reload
Mittlerweile favorisiere ich „nullmailer“ vor mini-qmail, weil
… und so wird er installiert:
aptitude install nullmailer mailutils
hostname -f | mail postmaster
… dann sollte eine E-Mail ohne Betreff und Co. mit dem FQDN des (v)Servers im Mail-(v)Server eintrudeln, was man auf dem Mail-(v)Server nun wie folgt überprüfen kann:
su - postmaster -c mutt