Inhaltsverzeichnis
!!! 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 <FQDN>„ abhilfe!)
/etc/tcp.smtp
cat <<EOF > /etc/tcp.smtp 127.:allow,RELAYCLIENT="" >deny EOF chmod 644 /etc/tcp.smtp
/etc/tcp.qmqp
cat <<EOF > /etc/tcp.qmqp 10.:allow >deny EOF chmod 644 /etc/tcp.qmqp
/var/qmail/bin/qmailctl
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/
/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 <<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!)
/var/qmail/supervise/qmail-qmqpd/run
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
/var/qmail/supervise/qmail-qmqpd/log/ru
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
/var/qmail/supervise/qmail-send/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
/var/qmail/supervise/qmail-send/log/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
/var/qmail/supervise/qmail-smtpd/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
/var/qmail/supervise/qmail-smtpd/log/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
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 <<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:
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.:
<DOMAIN> mail.<DOMAIN> **dns1.**<DOMAIN> **dns2.**<DOMAIN> **db.**<DOMAIN> **http.**<DOMAIN> [[...]]
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 <Return>)
- 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