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