!!! 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