**!!! 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).
===== Debian-Pakete installieren =====
==== Distribution ====
aptitude install daemontools daemontools-run ucspi-tcp build-essential
//(ggf. sollte hier bereits ein alter MTA deinstalliert werden, z. B. exim4 und sendmail!)//
==== eigene ====
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
===== (System-) Gruppen und Benutzer anlegen =====
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!)//
===== Verzeichnisse erstellen =====
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
===== kompilieren =====
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/
===== konfigurieren =====
./config
//(sollte der DNS-Server den MAIL-vServer nicht kennen, schafft "./config-fast " abhilfe!)//
==== /etc/tcp.smtp ====
cat < /etc/tcp.smtp
127.:allow,RELAYCLIENT=""
>deny
EOF
chmod 644 /etc/tcp.smtp
==== /etc/tcp.qmqp ====
cat < /etc/tcp.qmqp
10.:allow
>deny
EOF
chmod 644 /etc/tcp.qmqp
==== /var/qmail/bin/qmailctl ====
cat < /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 <
==== /var/qmail/control/concurrencyincoming ====
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!)//
==== /var/qmail/control/defaultdelivery ====
echo "./Maildir/" > /var/qmail/control/defaultdelivery
chmod 644 /var/qmail/control/defaultdelivery
==== /var/qmail/rc ====
cat < /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!)//
==== /var/qmail/supervise/qmail-qmqpd/run ====
mkdir -p /var/qmail/supervise/qmail-qmqpd/log
cat < /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
==== /var/qmail/supervise/qmail-qmqpd/log/ru ====
cat < /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
==== /var/qmail/supervise/qmail-send/run ====
mkdir -p /var/qmail/supervise/qmail-send/log
cat < /var/qmail/supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc
EOF
chmod 755 /var/qmail/supervise/qmail-send/run
==== /var/qmail/supervise/qmail-send/log/run ====
cat < /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
==== /var/qmail/supervise/qmail-smtpd/run ====
mkdir -p /var/qmail/supervise/qmail-smtpd/log
cat < /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
==== /var/qmail/supervise/qmail-smtpd/log/run ====
cat < /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
===== Aliase =====
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
===== Maildir =====
su - postmaster -c /var/qmail/bin/maildirmake ~/Maildir
//(sollte jeder Benutzer vor dem ersten Maileingang mit seinen Rechten ausführen!)//
===== (automatisch) starten =====
ln -s /var/qmail/supervise/qmail-qmqpd /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /etc/service/
===== optional: Client (mutt) =====
aptitude install mutt
cat <> /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:
===== andere (v)Server =====
==== /var/qmail/control/locals auf dem Mail-(v)Server ====
Hier müssen alle (v)Server mit ihrem FQDM dazugetragen (einer/Zeile) werden, die den qmail-qmqpd-Dienst nutzen sollen, z. B.:
mail.
**dns1.**
**dns2.**
**db.**
**http.**
[[...]]
{{Platzhalter}}
===== Konfiguration neu laden =====
qmailctl reload
===== die anderen (v)Server =====
==== nullmailer ====
Mittlerweile favorisiere ich "nullmailer" vor mini-qmail, weil
- er als Debian-Paket verfügbar ist //(Faulheit siegt)//
- er andere MTAs ersetzt //(uns somit das selbstgebaute qmail-dummy-Paket dort überflüssig ist)//
- er eine eigene Queue hat //(falls der Mail-(v)Server mal offline sein sollte)//
... und so wird er installiert:
aptitude install nullmailer mailutils
* den FQDN des Mail-(v)Servers sollte dpkg korrekt ermitteln können (einfach )
* den eigenen FQDN ebenfalls
* als Parameter fehlen noch: **qmqp --port=628**
==== Test ====
=== im (v)Server ===
hostname -f | mail postmaster
=== im Mail-(v)Server ===
... 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