Life with qmail

Life with qmail

Dave Sill
29 March 2004
Übersetzer: Sebastian Wallroth
sebastian@wallroth.de
7. Juni 2004
Dies ist eine möglichst exakte Übersetzung des Textes http://lifewithqmail.org/lwq.html.

Inhalt

1. Einleitung
1.1. Zielpublikum 1.2. Was ist qmail?
1.3. Warum sollte man qmail benutzen?
1.4. Geschichte
1.5. Features
1.6. Verwandte Packages
1.7. Architektur
1.8. Lizenz
1.9. Vergleich mit anderen MTAs
1.10. Dokumentation
1.11. Support
2. Installation
2.1. Einleitende Worte zur Installation
2.2. Vorbereitung
2.3. Systemvoraussetzungen
2.4. Quellcode downloaden
2.5. Quellcode kompilieren
2.6. ucspi-tcp installieren
2.7. daemontools installieren
2.8. qmail starten
2.9. Testen der Installation
3. Konfiguration
3.1. Konfigurationsdateien
3.2. Weiterleitung
3.3. Multiple Hostnamen
3.4. Virtuelle Domains
3.5. Aliase
3.6. qmail-Benutzer
3.7. Spam-Kontrolle
3.8. Virus-Scannen
4. Benutzung
4.1. .qmail-Dateien 4.2. Nachrichten versenden
4.3. Umgebungsvariables
5. Fortgeschrittene Themen
5.1. procmail 5.2. POP- und IMAP-Server
5.3. POP- und IMAP-Clients
5.4. Mehrfach-RCPT- versus Einfach-RCPT-Zustellung
5.5. VERP
5.6. Fehlerbeseitigung
5.7. Große Server
5.8. Migration von Sendmail nach qmail 5.9. Mailinglistenmanager
5.10. Patche
5.11. QMTP
A. Danksagung
B. Verwandte Packages
B.1. dot-forward B.2. fastforward
B.3. ucspi-tcp
B.4. daemontools
B.5. qmailanalog
B.6. rblsmtpd
B.7. serialmail
B.8. mess822
B.9. ezmlm
B.10. safecat
B.11. djbdns
B.12. maildrop
B.13. syncdir
C. Wie Internet-Mail funktioniert
C.1. Wie eine Nachricht von Punkt A zu Punkt B kommt
C.2. Mehr Informationen
D. Architektur
D.1. Modulare Systemarchitektur
D.2. Dateistruktur
D.3. Warteschlangenstruktur
D.4. Bilder
E. Selten gestellte Fragen
E.1. In welchen Abständen versucht qmail aufgeschobene Nachrichten zu senden?
E.2. Warum kann ich keine Mail an eine großen Rechner mit vielen MXs schicken?
E.3. Was ist QUEUE_EXTRA?
F. Fehlermeldungen
G. Gotchas
G.1. qmail stellt Superusern keine Mails zu.
G.2. qmail stellt nicht an Benutzer zu, die keine eigenes Home-Verzeichnis haben.
G.3. qmail stellt nicht an Benutzer zu, deren Benutzername Großbuchstaben enthält.
G.4. qmail ersetzt Punkte (.) in Erweiterungsadressen durch Doppelpunkte (:).
G.5. qmail konvertiert Großbuchstaben in Erweiterungsadressen in Kleinbuchstaben.
G.6. qmail verwendet /etc/hosts nicht.
G.7. qmail loggt SMTP-Aktivität nicht mit.
G.8. qmail erzeugt keine Verzögerungshinweise.
G.9. qmail ist langsam, wenn /var/qmail/queue/lock/trigger abgeschmiert ist/die falschen Rechte hat/eine reguläre Datei ist.
G.10. DNS- oder IDENT-Lookups können SMTP langsam machen.
G.11. Wagenvorlauf/Zeilenvorschub-Zeilen (Carriage Return/Linefeed, CRLF) funktionieren nicht.
G.12. qmail-send oder tcpserver hören auf zu arbeiten, wenn das Log gesichert wird.
G.13. qmail-smtpd überprüft den lokalen Teil einer Adresse nicht.
G.14. Firewalls können einen Externzugriff auf ihren SMTP-/POP3-/IMAP-Server blockieren.
G.15. qmail-inject setzt das Von-Feld auf anonymous, wenn USER und LOGNAME nicht gesetzt sind.
G.16. qmail-send stoppt nicht immer sofort, wenn es gekillt wurde.
H. Oft gestellte Fragen über Life with qmail
H.1. Welche Version hat Life with qmail?
H.2. Wem gehört Life with qmail?
H.3. Welcher Lizenz unterliegt Life with qmail?
H.4. Wie kann ich benachrichtigt werden, wenn neue Versionen von LWQ zur Verfügung gestellt werden?
H.5. Wo können LWQ-Mitarbeiter und -Fans miteinander kommunizieren?
H.6. Wurde Life with qmail in die Sprache XYZ übersetzt?
H.7. Ist Life with qmail in PostScript, PDF, einfachem Text oder irgendeinem anderen Format neben HTML verfügbar?
H.8. Ich habe Life with qmail benutzt und habe mein System abstürzen lassen/meine Festplatte gelöscht/meine Liebesleben ruiniert/meinen Hund getötet/etc.
H.9. Wie kann ich LWQ unterstützen?
H.10. Was hat sich in dieser Version von LWQ geändert?

1. Einführung

1.1. Zielpublikum

Life with qmail richtet sich an jeden, der daran interessiert ist, qmail zu benutzen, vom Amateur (Newbie), der gerade Linux auf einem Reserve-PC installiert hat, bis hinauf zum erfahrenen System- oder Mail-Administator. Wenn sie etwas mangelhaft und unklar finden, lassen sie es mich wissen. Senden sie ihre Kommentare an lwq@sill.org.

Es ist eine Fülle von Informationen über qmail von den verschiedensten Quellen verfügbar. Manche wenden sich an Newbies, manche setzen voraus, dass der Leser mehr Erfahrung hat. Life with qmail versucht, diese Informationen in einer einzigen Quelle zu "verbinden", Geheimtipps zu geben und alles unter der Voraussetzung, dass der Leser nur Basisfähigeiten hat, wie:

1.2. Was ist qmail?

qmail ist ein Internet Mail Transfer Agent (MTA) für UNIX-ähnliche Betriebssysteme. Es ist eine Ersetzung für das Sendmail-System, dass mit UNIX-Betriebssystem ausgeliefert wird. qmail benutzt das Simple Mail Transfer Protocol (SMTP), um Nachrichten mit MTAs auf anderen Systemen auszutauschen.


Hinweis: Der Name ist "qmail", nicht "Qmail".

1.3. Warum sollte man qmail benutzen?

Ihr Betriebssystem beinhaltet bereits einen MTA, wahrscheinlich Sendmail. Wenn sie also dieses Dokument lesen, suchen sie wahrscheinlich nach etwas besserem. Einige Vorteile von qmail gegenüber handelsüblichen MTAs sind:

1.3.1. Sicherheit

qmail wurde für hohe Sicherheit entworfen. Sendmail hat eine lange Geschichte ernsthafter Sicherheitsprobleme. Als Sendmail geschrieben wurde, war das Netz ein viel friedlicherer Ort. Jeder kannte jeden und es gab nur eine geringe Notwendigkeit hochsicher zu entwerfen und zu programmieren. Das heutige Internet ist eine viel feindseligere Umgebung für Netzwerkserver. Der Autor von Sendmail, Eric Allman, hat mit der Straffung des Programms gute Arbeit geleistet, aber mit einem kurzen Redesign kann man keine wahre Sicherheit erreichen.

1.3.2. Leistung

qmail parallelisiert die Mailzustellung mit standardmäßig bis zu 20 simultanen Zustellungen.

1.3.3. Zuverlässigkeit

Wenn qmail einmal eine Nachricht akzeptiert, dann garantiert es, das sie nicht verloren gehen wird. qmail unterstützt auch ein neues Mailbox-Format, das sogar zuverlässiger als NFS arbeitet, ohne den Locking-Mechanismus zu verwenden.

1.3.4. Einfachheit

qmail ist kleiner als jeder andere MTA mit äquivalentem Funktionsumfang.


Hinweis: Die offizielle qmail-Webseite, http://cr.yp.to/qmail.html behandelt die Vorteile von qmail extensiver.

1.4. Geschichte

qmail wurde von Dan Bernstein (DJB) geschrieben, http://cr.yp.to/djb.html; heute ein Mathematikprofessor an der University of Illinois in Chicago. Dr. Bernstein ist auch sehr bekannt für seine Arbeit auf dem Feld der Kryptografie und seinen Rechtsstreit gegen die US-Regierung wegen des Veröffentlichens von Verschlüsselungscode. Sehen sie sich http://www.news.com/News/Item/0,4,36217,00.html?owv oder http://cr.yp.to/export.html für mehr Informationen über den Rechtsstreit an.

Das erste öffentliche Release von qmail, Betaversion 0.70, erschien am 24. Januar 1996. Das erste Gamma Release, 0.90, kam am 1. August 1996.

Version 1.0, das erste Generalrelease, wurde am 20. Februar 1997 angekündigt. Die gegenwärtige Version, 1.03, wurde am 15. Juni 1998 herausgebracht.

Vom nächsten Release wird erwartet, dass es eine Testversion von 2.0 sein wird. Einige Dinge, die in Version 2 auftauchen werden, sind hier beschrieben: http://cr.yp.to/qmail/future.html.

1.5. Features

Die qmail-Webseite, http://cr.yp.to/qmail.html, zeigt eine umfassende Liste der Features von qmail. Diese Sektion basiert maßgeblich auf dieser Liste.

1.5.1. Setup

1.5.2. Sicherheit

1.5.3. Nachrichtenerstellung

1.5.4. SMTP-Service

1.5.5. Warteschlangenmanagement

1.5.6. Bounces

1.5.7. Routing nach Domain

1.5.8. SMTP-Zustellung

1.5.9. Weiterleitung und Mailinglisten

1.5.10. Lokale Zustellung

1.5.11. POP3-Service

1.6. Verwandte Packages

qmail folgt der klassischen UNIX-Philosophie, dass jedes Tool eine einzelne, wohldefinierte Funktion haben soll und dass komplexe Funktionen gebaut werden sollen, indem eine Serie von einfachen Tools in einer "Pipeline" verbunden werden. Die Alternative ist, mehr und mehr komplexe Tools zu bauen, die viel der Funktionalität der einfacheren Tools neu erfinden.

Es ist also nicht überraschend, dass qmail nicht alles das tut, was irgendwer von ihm will. Hier sind einige der bekanntesten für qmail geschriebenen Add-Ons. Natürlich können auch viele Standard-Unix-Werkzeuge mit qmail zusammenarbeiten.

1.7. Architektur

Anhang D behandelt qmails funktionale und physikalische Struktur. Vereinfacht gesagt, besteht qmail aus einer Serie von Programmen (Modulen), die verschiedene Aufgaben erledigen.

1.8. Lizenz

Das qmail-Copyright gehört dem Autoren Dan Bernstein und wird ohne Aussage über Benutzerrechte ausgeliefert. Auf http://cr.yp.to/softwarelaw.html umreißt er, was er für ihre Rechte hält, wenn sie unter US-Copyright-Recht stehen. Auf http://cr.yp.to/qmail/dist.html garantiert er das Recht, qmail-Quellcode auszuliefern. Binäre Ausgaben sind unter den Bedingungen erlaubt, die auf http://cr.yp.to/qmail/var-qmail.html beschrieben sind.

Die Hauptaussagen sind, dass sie qmail für jeden beliebigen Zweck benutzen können, dass sie unmodifizierte qmail-Quellcode-Ausgaben, eingeschränkte var-qmail-Binärausgaben und Patche für qmail weitergeben können. Sie dürfen modifizierten qmail-Quellcode oder Nicht-Binärausgaben von var-qmail nicht verbreiten.

1.9. Vergleich mit anderen MTAs

Es könnte ein Buch über dieses Thema geschrieben werden, aber es würde langweilig sein, es zu lesen. Hier ist ein Schnellvergleich von qmail mit einigen der verbreitetsten UNIX-MTAs.

MTA Reifegrad Sicherheit Features Leistung Sendmail-Ähnlichkeit Modularität
qmail mittel hoch hoch hoch Add-Ons ja
Sendmail hoch niedrig hoch niedrig x nein
Postfix mittel hoch mittel hoch ja ja
exim mittel niedrig hoch mittel ja nein
Courier niedrig mittel hoch mittel optional ja

Sendmail-Ähnlichkeit meint, dass der MTA sich in einigen Punkten wie Sendmail verhält, die einen Wechsel von Sendmail zu einem alternativen MTA durchschaubarer für einen Benutzer machen, wie zum Beispiel das Benutzen von .forward-Dateien, /etc/aliases und das Zustellen nach /var/spool/mail.

Jonathan de Boyne Pollard bietet Berichte über viele Unix-MTAs auf http://homepages.tesco.net/~J.deBoynePollard/Reviews/UnixMTSes/. Ein anderer detaillierter Vergleich ist verfügbar unter http://www.geocities.com/mailsoftware42/.

1.10. Dokumentation

1.10.1. man pages

qmail wird mit einem kompletten Set von man pages ausgeliefert. Nach der Installation befinden sie sich in /var/qmail/man. Sie müssen dieses Verzeichnis vermutlich ihrer MANPATH-Umgebungsvariablen hinzufügen.

Shell Befehl
Bourne (/bin/sh) MANPATH=$MANPATH:/var/qmail/man; export MANPATH
bash, Korn export MANPATH=$MANPATH:/var/qmail/man
C Shell setenv MANPATH $MANPATH:/var/qmail/man

Von nun an sollten Befehle in der Form "man name-of-qmail-man-page" die passende man page anzeigen.

Die man pages sind online auch im HTML-Format verfügbar:


Hinweis: Die qmail man pages sind mit Informationen nur so angefüllt, aber sie fordern ein sorgfältiges Lesen, weil sie in einem sehr dichten, technischen Stil geschrieben sind. Sie sollten sie sich ausdrucken und einmal durchlesen, um sich damit vertraut zu machen, was vorhanden ist und wo es zu finden ist. Sehr wenige Informationen werden auf mehreren Seiten wiederholt, so dass, wenn sich nicht wissen, wo etwas beschrieben ist, es sehr schwer für sie sein kann, es zu finden.

1.10.2. Dokumente

qmail wird mit einer Reihe von Dokumenten ausgeliefert, die unter /var/qmail/doc installiert sind. Sie beinhalten:

Diese Dokumente sind auch online verfügbar unter:

1.10.3. FAQs

Es gibt zwei offizielle FAQ (Oft gestellte Fragen. Mit Antworten.)-Dokumente:

Die Web-FAQ ist vollständiger.

1.10.4. Bücher

1.10.4.1. qmail, Das Handbuch

Dave Sill, der Autor von Life with qmail hat ein qmail-Buch für Apress (http://www.apress.com/) geschrieben. Dieses Buch, qmail, Das Handbuch, behandelt alles, was in dieser Anleitung steht, geht aber mehr ins Detail und behandelt außerdem eine Menge neuer Themen.

Mehr Informationen finden unter http://www.apress.com/catalog/book/1893115402/. Um dieses Buch bei Amazon zu bestellen, gehen sie zu http://www.amazon.de/exec/obidos/ASIN/1893115402/viadrina. (Die deutsche Version finden sie unter http://www.amazon.de/exec/obidos/ASIN/382660962X/viadrina/; Anm. d. Übers.)

1.10.4.2. qmail

John Levine hat ein qmail-Buch für O'Reilly & Associates (http://www.oreilly.com/) geschrieben. Siehe http://qmail.gurus.com/ für mehr Informationen einschließlich des Inhaltsverzeichnisses und einem Beispiel-Kapitel.(Nur auf englisch unter http://www.amazon.de/exec/obidos/ASIN/1565926285/viadrina/, Anm. d. Übers.)

1.10.4.3. Running qmail

Richard Blum hat Running qmail geschrieben, das bei Sams publiziert wurde. Dieses Buch hat gemischte Besprechungen in der qmail-Mailingliste erhalten.

Informationen über dieses Buch und eine Bestellmöglichkeit finden sie unter http://www.amazon.de/exec/obidos/ASIN/0672319454/viadrina/.

1.10.5. Listenarchive

Die qmail-E-Mail-Liste, die von Dan Bernstein verwaltet wird, ist eine wertvolle Quelle für Informationen. Ein Webarchiv dieser Liste wird vorgehalten unter:

Eine Suchmaschine für dieses Archiv findet sich unter:

Andere Webarchive sind verfügbar unter:

Antworten auf die meisten Fragen über qmail finden sie in diesem Listenarchiv.

1.10.6. Andere Webseiten

1.11. Support

1.11.1. Mailinglisten

Die folgende Liste befindet sich auf list.cr.yp.to. Um dem Ernten von E-Mail-Adressen durch Spammer vorzubeugen, vermeide ich das Benutzen der vollständigen, gültigen Adressen und von "mailto"-URLs.

Die Listen werden durch ezmlm verwaltet, das verschiedene Adressen benutzt, um verschiedene Funktionen auszuführen:

Um eine einzuschreibende/auszutragende E-Mail-Adresse anzugeben, sagen wir joe@beispiel.com, senden sie eine Nachricht an:

1.11.1.1. qmail

Die Haupt-qmail-Mailingliste. Für die Diskussion, Fragen und Antworten über die meisten Dinge, die mit qmail zu tun haben, außer den Themen mit einer eigenen Liste. Lesen sie Charles Cazabons "12 Schritte zur qmail-Listen-Glückseligkeit" unter http://www.qcc.sk.ca/~charlesc/writings/12-steps-to-qmail-list-bliss.html bevor sie hier posten. Lesen sie außerdem die FAQs und durchsuchen die Listenarchive, bevor sie eine Frage posten. Wenn sie Fragen stellen, versuchen sie bitte, ausreichend Details mitzuliefern, um den Leuten zu ermöglichen, zu antworten:


Hinweis: Die qmail-Listen benutzen ein Werkzeug, das qsecretary (q-Sekretär; Anm. d. Übers.) genannt wird, um sicherzustellen, dass gepostete Nachrichten kein Spam sind. Aus jeder Nachricht, die in der Liste gepostet wird, resultiert eine E-Mail-Bestätigungsanfrage vom qsecretary. Lesen sie die Nachricht und folgen die den Anweisungen, um ihre Nachricht zu bestätigen--normalerweise reicht einfach eine Antwort auf die qsecretary -Nachricht. Regelmäßige Listen-Poster automatisieren diesen Prozess häufig mit Hilfe von Autorespondern wie Charles Cazabons pymsgauth, verfügbar unter http://www.qcc.ca/~charlesc/software/pymsgauth/pymsgauth.html. pymsgauth vergleicht, ob die Nachricht, die an die qmail-Liste gesandt wurde, wirklich von ihnen kam, so dass es nicht automatisch gefälschte Nachrichten bestätigt, die in ihrem Namen an die Liste geschickt wurden.

1.11.1.2. qmailannounce

Die qmail-Ankündigungs-Mailingliste. Neue Ausgaben werden hier angekündigt. Es gibt keine Zustelladresse: es ist eine Nur-Lesen-Liste.

1.11.1.3. serialmail

Für die Diskussion des serialmail-Packages.

1.11.1.4. ezmlm

Für die Diskussion der ezmlm-Mailinglistenmanager.

1.11.2. Consultants

Besuchen sie http://www.qmail.org/top.html#paidsup für eine Liste von Anbietern kommerziellen Supports.

1.11.3. FAQTS Wissensdatenbank

Eine Datenbank mit qmail-bezogenen Fragen und Antworten ist unter http://qmail.faqts.com/ verfügbar. Wenn sie eine Frage haben, die die FAQ nicht beantwortet, versuchen sie diese Wissensdatenbank zu durchsuchen. Es ist insbesondere geeignet, um "Wie geht das" Fragen zu beantworten.


2. Installation

Dieser Abschnitt behandelt die Installation von qmail. Wenn sie ein erfahrener Systemadministrator sind, können sie qmail installieren, indem sie den Anweisungen in INSTALL aus der Quelltextauslieferung folgen. Die INSTALL-Anweisungen sind die offiziellen Installationsanweisungen. Sie sind komplexer als die Life with qmail-Anweisungen und sie setzen voraus, dass der Leser ein erfahrener System- und Mailadministrator ist. Sie sind jedoch veraltet und geben nicht Bernsteins derzeit empfohlenen Praktiken wieder.


Hinweis: Wenn sie sich entscheiden, zu installieren, indem sie die folgenden Anweisungen befolgen, sollten sie zuerst den ganzen Abschnitt durchlesen, um sich mit den gesamten Prozess vertraut zu machen.

2.1. Einleitende Worte zur Installation

2.1.1. Binär versus Quellcode

Aufgrund qmails restriktiver Lizenzierung bezüglich der Auslieferung von vorbereiteten Packages, wird qmail üblicherweise mit einer Quellcodeauslieferung installiert.

Wenn sie nicht mit dem Unterschied zwischen Quellcode und Binärdateien vertraut sind, stellen sie sich vor, sie bestellen eine Pizza zu sich nach Hause. Die "binäre" Version der Pizza trifft essfertig ein. Die "Quellcode"-Pizza kommt als Bausatz mit Mehl, Hefe, Käse, Soße, Belag und Anweisungen, wie man eine Pizza selber backt. Quellcodeinstallationen sind ein bisschen mehr Arbeit für sie, aber wenn sie den Anweisungen gewissenhaft folgen, dann ist das Ergebnis das gleiche--oder sogar besser. Die selbst gebackene Pizza wird frischer sein, sie können den Belag nach ihren Vorlieben auswählen und sie werden eine Menge mehr über ihre Pizza wissen und sie "funktioniert".

Das sichere Betreiben eines internetzugänglichen Netzwerkservices ist nicht einfach. Ein ungeeignet konfigurierter Service kann den Host in die Gefahr bringen, attackiert zu werden oder kann benutzt werden, um andere Seiten zu attackieren--und damit potenziell den Administrator der gesetzlichen Haftbarkeit ausliefern. Je mehr sie über ihre Netzwerkservices wissen, umso wahrscheinlicher sind diese passend konfiguriert und sicher.

2.1.2. Tarball versus betriebssystemspezifische Packages

Einige Betriebssysteme bieten einen Mechanismus für automatisierte Quellcodeinstallationen. Um zur Pizza-Analogie zurückzukehren: sie machen es möglich, die Zutaten und Anweisungen so zusammenzupacken, dass sie nur einen Knopf drücken müssen, um die Pizza sich selbst backen zu lassen.

Klingt gut, oder?

In der Praxis könnte es jedoch weniger gut laufen. Diese Packages zusammenzustellen ist ziemlich diffizil und sie könnten nicht so arbeiten, wie es von ihnen erwartet wird. Sie sind Software, und wie jede Software, können sie Fehler enthalten. Aber auch wenn sie fehlerfrei sind, hat die Bequemlichkeit, die sie bieten, ihren Preis. Sie verlieren die meisten der Vorteile einer selbstgebackenen Pizza: die Möglichkeit, die Beläge nach ihren persönlichen Vorlieben zu wählen und das Wissen, wie die Pizza gemacht wurde und wie sie funktioniert.

Wenn qmail eine Pizza wäre, könnte das selbsterstellende Verfahren als der einzuschlagende Weg erscheinen. Aber er ist es nicht: es ist ein grausam kompliziertes System, das der Installierer/Verwalter sehr gut verstehen muss, um in der Lage zu sein, es laufruhig arbeiten zu lassen. Das selbstinstallierende qmail ist einfacher zu installieren als die benutzerinstallierte Version, aber die benutzerinstallierte Version ist einfacher zu konfigurieren und nach Fehlern zu durchsuchen. Sie installieren qmail einmal auf einem System, aber sie werden wahrscheinlich mehrfach in die Verlegenheit kommen, es neu zu konfigurieren oder erklären zu müssen, warum die Mails nicht so flutschen, wie sie denken, dass sie es tun sollten.

Aus diesen Gründen empfehle ich, qmail von Grund auf und mit dem Quellcode-Tarball zu installieren, nicht mit einem Red Hat-RPM oder einen anderen selbstinstallierenden Paket.

2.2. Vorbereitung

Bevor sie qmail auf einem System installieren, insbesondere, wenn es ihre erste qmail-Installation ist, gibt es ein paar Dinge, über die sie nachdenken müssen.

2.3. Systemvoraussetzungen

qmail kann man auf den meisten UNIX und UNIX-ähnlichen Systemen installieren und laufen lassen, aber es gibt einige wenige Voraussetzungen:


Hinweis: Die Warteschlange muss auf einem Dateisystem liegen, das das Benutzen von ausführbaren und setuid()-Dateien erlaubt. Einige Betriebssystemausgaben mounten automatisch /var mit der nosuid oder der noexec-Option. Auf solchen Systemen sollten diese Optionen entweder ausgeschaltet werden oder /var/qmail/bin sollte auf einem anderen Dateisystem, ohne diese Optionen, liegen. Der Verzeichnisse erstellen-Abschnitt beschreibt, wie symbolische Links angewandt werden, um letzteres zu erreichen.

Hinweis: qmail wird auf Apples OS X nicht richtig installiert, wenn sie diesen Anweisungen oder denen in der INSTALL-Datei folgen. Jay Soffian hat eine Prozedur für das Installieren unter OS X dokumentiert, die unter http://www.soffian.org/docs/qmail_on_os_x.html verfügbar ist. Kyle Wheeler empfiehlt die folgenden Änderungen:
Bevor sie kompilieren, ändern sie Zeile 4 von strerr_sys.c wie folgt:

struct strerr strerr_sys = {0,0,0,0};

Und ändern sie Zeile 81 von hier.c wie folgt:

c(auto_qmail,"doc","INSTALL.txt",auto_uido,auto_gidq,0644);

Außerdem, als vermutlicher Fix dafür, dass qmail manchmal beim Booten hängen bleibt, führen
sie diesen Befehl als root aus (nachdem sie die Benutzer entsprechend der Installations-
anweisungen angelegt haben):

nidump passwd / > /etc/passwd

2.4. Quellcode downloaden

OK, jetzt haben sie ein System, dass die Voraussetzungen erfüllt, fertig für die Installation von qmail. Der erste Schritt ist das Downloaden des Quelltextes für qmail und beliebiger anderer Add-Ons. Sie werden natürlich qmail brauchen und sie sollten vermutlich auch ucspi-tcp und daemontools holen:

Laden sie diese Dateien mit Hilfe ihres Webbrowsers, Webclients (z.B. wget) oder FTP-Clients.


Hinweis: Wenn einer der Links nicht funktioniert, dann wahrscheinlich, weil das Package upgedatet wurde. In diesem Fall sollten sie nach http://cr.yp.to/software.html gehen und dort den Links folgen, um die gegenwärtige Version zu downloaden. Es ist möglich, dass upgegradete Versionen nicht mit den folgenden Anweisungen kompatibel sind, also lesen sie unbedingt die Release-Hinweise im Abschnitt "Upgrading from previous versions...".

Hinweis: Diese Installation benutzt die netqmail-Distribution von qmail, die aus dem offiziellen qmail 1.03-Tarball und einem Patch besteht, der eine Handvoll Bugs, Mängel und Inkompatibilitäten fixt. Siehe http://www.qmail.org/netqmail/ und die netqmail CHANGES-Datei.

2.5. Quellqode kompilieren

2.5.1. Prüfen sie die Build-Umgebung

Zuerst müssen sie sicherstellen, dass sie die notwendigen Werkzeuge haben, um das Programm zu kompilieren. Wie sie das feststellen, hängt von der UNIX-Variante ab, die sie benutzen. Der einfachste Weg, obgleich ohne Garantie, ist, es zu versuchen.


Hinweis: Wenn einer dieser Tests fehlschlägt, können sie stoppen und zum nächsten Abschnitt gehen.
$ cc
cc: No input files specified
$

In diesem Abschnitt werden wir durch die eigentlichen Schritte des Kompilierens von qmail gehen. Cut-n-Paste wird von Nutzen sein, ist aber nicht wirklich notwendig.

2.5.2. Entpacken der Distribution

Wenn sie so weit gekommen sind, dann haben sie einen funktionierenden C-Compiler und Kopien der Tarballs. Als nächstes kopieren oder verschieben sie die Tarballs in das Verzeichnis, in dem sie die Arbeit verrichten wollen. /usr/local/src ist eine gute Wahl für qmail und ucspi-tcp. daemontools sollte unter /package gebaut werden.

Jetzt sollten sie vielleicht root werden, wenn sie es nicht bereits sind.

su
umask 022
mkdir -p /usr/local/src
mv netqmail-1.05.tar.gz ucspi-tcp-0.88.tar.gz /usr/local/src
mkdir -p /package
mv daemontools-0.76.tar.gz /package
chmod 1755 /package

Nun können sie die Packages entpacken.

cd /usr/local/src
gunzip netqmail-1.05.tar.gz
tar xpf netqmail-1.05.tar
cd netqmail-1.05
./collate.sh # watch for errors here
cd ..
gunzip ucspi-tcp-0.88.tar.gz
tar xpf ucspi-tcp-0.88.tar
rm *.tar # optional, unless space is very tight
cd /package
gunzip daemontools-0.76.tar.gz
tar xpf daemontools-0.76.tar
rm *.tar # optional, again 

Es sollten jetzt Verzeichnisse mit den Namen /usr/local/src/netqmail-1.05, /usr/local/src/ucspi-tcp-0.88 und /package/admin/daemontools-0.76 existieren.

2.5.3. Verzeichnisse anlegen

Seit qmails Installationsprogramm die Unterverzeichnisse so erzeugt, wie sie gebraucht werden, müssen sie nur das qmail-"home"-Verzeichnis anlegen:

mkdir /var/qmail

Und weiter zum nächsten Abschnitt.


Hinweis: Falls sie einige oder alle der qmail-Dateien woanders ablegen wollen als in /var, kann das durch das Erzeugen von symbolischen Links unter /var/qmail erreicht werden, die zu den anderen Speicherorten zeigen.

Zum Beispiel können so die qmail-Konfigurationsdateien in /etc/qmail gespeichert werden:

mkdir /etc/qmail
ln -s /etc/qmail /var/qmail/control

2.5.4. Benutzer und Gruppen anlegen

Der einfachste Weg, um die nötigen Beutzer und Gruppen anzulegen, ist, eine kleine Skriptdatei zu erstellen, die das für sie erledigt. Im Quelltextverzeichnis finden sie eine Datei namens INSTALL.ids. Sie enthält die Befehle für viele Plattformen, das macht das Kopieren mit einem neuen Namen und das Editieren der Datei schnell und einfach.

cd /usr/local/src/netqmail-1.05/netqmail-1.05
cp INSTALL.ids IDS

Dann löschen sie mit ihrem Lieblingseditor alles in der Datei, außer den Zeilen, die sie brauchen. Zum Beispiel sehen sie hier, wie IDS nach dem Editieren für FreeBSD aussehen würde:

pw groupadd nofiles
pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
pw groupadd qmail
pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent
pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent
pw useradd qmails -g qmail -d /var/qmail -s /nonexistent

Um es dann laufen zu lassen, benutzen sie entweder chmod um es auführbar zu machen oder lassen sie es mit sh laufen:

Erste Methode:

chmod 700 IDS
./IDS

Zweite Methode:

/bin/sh IDS

Wenn das Skript durchgelaufen ist, werden alle ihre Benutzer und Gruppen angelegt sein und sie können zum nächsten Abschnitt weitergehen.

Aber was tun sie, wenn ihr System nicht in INSTALL.ids aufgelistet ist? Sie müssen sie von Hand anlegen. Starten sie ihren Lieblingseditor und editieren sie /etc/group. Sie müssen folgende zwei Zeilen am Ende der Datei hinzufügen:

qmail:*:2107:
nofiles:*:2108:

Hinweis: Stellen sie sicher, dass 2107 und 2108 nicht bereits benutzt werden. Wenn sie benutzt werden, wählen sie zwei Zahlen, die noch frei sind.

Als nächstes fügen sie mit vipw (bei den meisten Systeme ist es dabei, wenn nicht, werden sie wieder ihren Editor benötigen, aber jetzt für /etc/passwd) diese Zeilen am Ende der Datei hinzu:

alias:*:7790:2108::/var/qmail/alias:/bin/true
qmaild:*:7791:2108::/var/qmail:/bin/true
qmaill:*:7792:2108::/var/qmail:/bin/true
qmailp:*:7793:2108::/var/qmail:/bin/true
qmailq:*:7794:2107::/var/qmail:/bin/true
qmailr:*:7795:2107::/var/qmail:/bin/true
qmails:*:7796:2107::/var/qmail:/bin/true

Hinweis: Stellen sie sicher, dass 7790-7796 nicht bereits benutzt werden und dass 2107 und 2108 dieselben Gruppen-IDs sind, die oben benutzt werden.

Sie müssen keine dieser Zeilen unbedingt am Ende der Datei einfügen, es ist hier einfach der simpelste Weg, es zu beschreiben.

Sie sind nun bereit, im nächsten Abschnitt fortzufahren.

2.5.5. Kompilieren

Sie können jetzt anfangen, qmail zu kompilieren. Wechseln sie in das Verzeichnis /usr/local/src/netqmail-1.05/netqmail-1.05 und los geht's:

cd /usr/local/src/netqmail-1.05/netqmail-1.05

Im Abschnitt Prüfen sie die Build-Umgebung haben sie ihren C-Compiler lokalisiert. Wenn er nicht mit cc aufgerufen wird oder das Verzeichnis, in dem er liegt, nicht in ihrer PATH-Umgebungsvariablen ist, müssen sie conf-cc editieren und conf-ld. Sagen wir, ihre Compiler ist gcc und er ist in ihrem PATH. Editieren sie einfach conf-cc und conf-ld und ersetzen sie "cc" mit "gcc".

Nun geben sie das Folgende ein:

make setup check

Wenn der Build komplett ist, werden sie ihre Nach-Installations-Konfiguration vornehmen müssen. Ein paar Skripte werden angeboten, um diesen Job sehr viel einfacher zu machen.

Wenn ihr DNS richtig konfiguriert ist, dann sollte diese Skript alles sein, was sie jetzt brauchen:

./config

Wenn aus irgendeinem Grund config ihren Hostnamen nicht im DNS finden kann, dann müssen sie das config-fast-Skript laufen lassen:

./config-fast der.volle.hostname

Wenn zum Beispiel ihre Domain beispiel.com und der Hostname ihres Computers delfin ist, dann würde ihre config-fast-Zeile so aussehen:

./config-fast delfin.beispiel.com

Hinweis: In einem kleinen lokalen LAN könnten sie eine Pseudodomain wie ".local" benutzen. Wenn ihr Hostname zum Beispiel "mash" ist, können sie ./config-fast mash.local nehmen. Wenn sie das tun, konfigurieren sie qmail unbedingt so, dass es einen gültigen Internetdomainnamen in den Antwortadressen benutzt. (Siehe Abschnitt 3, Konfiguration.)

qmail ist nun auf ihrem System installiert und bereit, gestartet zu werden! Der nächste Abschnitt wird sie durch die Schritte des Startens und Testens qmails führen.

2.6. ucspi-tcp installieren

Vorhin haben sie die qmail-, ucspi-tcp und daemontools-Tarballs ausgepackt. Nun wechseln sie in das ucspi-tcp-Verzeichnis:

cd /usr/local/src/ucspi-tcp-0.88

Wenn sie im Abschnitt Kompilieren conf-cc und conf-ld modifiziert haben, müssen sie dieselben Änderungen in diesem Verzeichnis vornehmen.

Dann führen sie folgendes aus:

patch < /usr/local/src/netqmail-1.05/other-patches/ucspi-tcp-0.88.errno.patch
make
make setup check

Das war's. ucspi-tcp ist installiert.

2.7. daemontools installieren

Wechseln sie in das daemontools-Build-Verzeichnis:

cd /package/admin/daemontools-0.76

Wie gehabt, wenn sie conf-cc und conf-ld während des qmail- und ucspi-tcp-Builds modifiziert haben, werden sie dieselben Änderungen im src-Verzeichnis machen müssen.

Dann führen sie folgendes aus:

cd src
patch < /usr/local/src/netqmail-1.05/other-patches/daemontools-0.76.errno.patch
cd ..
package/install

Auf BSD-Systemen (kein /etc/inittab) werden sie an dieser Stelle rebooten müssen, um svscan zu starten, den Master Service Control Daemon.

Benutzen sie "ps -ef | grep svscan" oder "ps waux | grep svscan" um sicherzustellen, dass svscan läuft.


Hinweis: Unter Solaris werden sie den /etc/inittab-Eintrag, der mit svscan beginnt, von:
SV:123456:respawn:/command/svscanboot

bis:

SV:123456:respawn:/command/svscanboot </dev/null >/var/log/svscan 2>&1

oder:

SV:123456:respawn:/command/svscanboot </dev/null >/dev/msglog 2>&1

modifizieren müssen, je nachdem, ob sie Fehlermeldungen, die beim Start von svscan auftreten, an eine Logdatei oder an die Systemkonsole gesandt werden sollen. Eine Erklärung, warum das notwendig ist, finden sie hier:

http://marc.theaimsgroup.com/?l=log&m=100327801309834&w=2



Hinweis: Ein Slackware-Benutzer berichtet, dass der SV-/etc/inittab-Eintrag vor den x1-Eintrag verschoben werden muss, sonst svscan startet nicht beim Booten.

2.8. qmail starten

2.8.1. /var/qmail/rc

Das /var/qmail/boot-Verzeichnis enthält Beispiel-qmail-Boot-Skripte für verschiedene Konfigurationen: /var/spool/mail versus $HOME/Mailbox, zur Benutzung von procmail oder dot-forward und verschiedene Kombinationen davon. Sie können sie sich gerne ansehen, aber für unsere Installation werden wir folgendes Skript verwenden:

#!/bin/sh

# stdout wird fuer das Logging verwendet
# control/defaultdelivery wird von qmail-local standardmaessig benutzt, um Nachrichten zu versenden

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"

Hinweis: Dieses Skript benutzt linksgeneigte Hochkommas (`), keine einfachen Hochkommas ('). Am besten kopieren sie die Skripte aus dieser Anleitung und fügen sie ein, anstatt sie Abzutippen.

Benutzen sie ihren Editor, um das obige /var/qmail/rc zu erstellen, dann führen sie diese Befehle aus:

chmod 755 /var/qmail/rc
mkdir /var/log/qmail

An dieser Stelle müssen sie sich für die Standardzustellmethode für Nachrichten entscheiden, die nicht durch eine .qmail-Datei zugestellt werden. Die folgende Tabelle erklärt einige übliche Wahlmöglichkeiten.

Mailboxformat Name Ort Standardzustellung Kommentare
mbox Mailbox $HOME ./Mailbox die üblichste Methode; funktioniert mit den meisten MUAs
maildir Maildir $HOME ./Maildir/ zuverlässiger; weniger MUA-Support
mbox  Benutzername /var/spool/mail Siehe INSTALL.vsm die traditionelle UNIX-Mailbox

Siehe INSTALL.mbox, INSTALL.maildir und INSTALL.vsm für mehr Informationen.

Um den Standardmailboxtyp auszuwählen, fügen sie einfach den Standardzustellung-Wert aus dem Tabelle in /var/qmail/control/defaultdelivery ein. Um beispielsweise die Standard-qmail-Mailbox-Zustellung auszuwählen, tun sie folgendes:

echo ./Mailbox >/var/qmail/control/defaultdelivery

Hinweis: defaultdelivery ist keine Standard-qmail-Kontroll-Datei. Es ist ein Feature der obigen /var/qmail/rc-Datei. Das defaultdelivery-Argument in qmail-start ist das contents einer .qmail-Datei. Dieses spezifiziert die Zustellinstruktionen für den Fall, dass kein eigentliches .qmail gefunden wird. Indem man diese Instruktionen in ein separate Kontrolldatei auslagert, muss man keine  Shell-Metazeichen in den Zustellinstruktionen zu quoten und vermeidet unsaubere mehrzeilige Befehlsargumente.

2.8.2. Systemstartdateien

2.8.2.1. Das qmailctl-Skript

Wenn sie das /var/qmail/rc-Skript von Hand starten mussten, dann wurde qmail möglicherweise nur teilweise gestartet. Aber wir wollen qmail jedes Mal automatisch gestartet haben, wenn das System gebootet wird und wir wollen es sauber heruntergefahren haben, wenn das System angehalten wird.

Das wird durch das Erstellen eines Start/Stop-Skriptes wie dem folgenden in /var/qmail/bin/qmailctl erreicht:

#!/bin/sh

# Beschreibung: Das qmail MTA

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 "qmail wird gestartet"
if svok /service/qmail-send ; then
svc -u /service/qmail-send /service/qmail-send/log
else
echo "qmail-send Ueberwachung laeuft nicht"
fi
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
else
echo "qmail-smtpd Ueberwachung laeuft nicht"
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stoppe qmail..."
echo " qmail-smtpd"
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo " qmail-send"
svc -d /service/qmail-send /service/qmail-send/log
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Leere die Timeouttabelle und sende ein ALRM-Signal an qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sende HUP-Signal an qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Lasse qmail-send pausieren"
svc -p /service/qmail-send
echo "Lasse qmail-smtpd pausieren"
svc -p /service/qmail-smtpd
;;
cont)
echo "Setze qmail-send fort"
svc -c /service/qmail-send
echo "Setze qmail-smtpd fort"
svc -c /service/qmail-smtpd
;;
restart)
echo "Starte qmail neu:"
echo "* Stoppe qmail-smtpd."
svc -d /service/qmail-smtpd /service/qmail-smtpd/log
echo "* Sende SIGTERM an qmail-send und starte es neu."
svc -t /service/qmail-send /service/qmail-send/log
echo "* Starte qmail-smtpd neu."
svc -u /service/qmail-smtpd /service/qmail-smtpd/log
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
echo "/etc/tcp.smtp neu geladen."
;;
help)
cat <<HILFE
stop -- stoppt Mailservice (smtp-Verbindungen werden abgewiesen, nichts geht nach draussen)
start -- startet Mailservice (smtp-Verbindungen werden akzeptiert, Mail kann nach draussen)
pause -- stoppt Mailservice zeitweilig (Verbindungen werden akzeptiert, nichts geht nach draussen)
cont -- setzt pausierenden Mailservice fort
stat -- zeigt Status des Mailservice an
cdb -- baut tcpserver cdb-Datei fuer smtp neu
restart -- stoppt und startet smtp neu, sendet qmail-send ein TERM & startet es neu
doqueue -- setzt Nachrichten in der Warteschlange auf sofortige Zustellung
reload -- sendet qmail-send ein HUP, liest locals und virtualdomains neu
queue -- zeigt Status der Warteschlange
alrm -- tut das gleiche wie doqueue
flush -- tut das gleiche wie doqueue
hup -- tut das gleiche wie reload
HILFE
;;
*)
echo "Benutzung: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
exit 1
;;
esac

exit 0

Dieses Skript ist verfügbar unter http://www.lifewithqmail.org/qmailctl-script-dt70.

Erstellen sie dieses Skript mittels ihres Editors oder indem sie es mit ihrem Webbrowser downloaden (empfohlen).

Machen sie das qmailctl-Skript ausführbar und verlinken sie es zu einem Verzeichnis in ihrem Pfad:

chmod 755 /var/qmail/bin/qmailctl
ln -s /var/qmail/bin/qmailctl /usr/bin

2.8.2.2. Die supervise-Skripte

Nun erstellen sie die supervise-Verzeichnisse für die qmail-Services:

mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log

Erstellen sie die /var/qmail/supervise/qmail-send/run-Datei:

#!/bin/sh
exec /var/qmail/rc

Erstellen sie die /var/qmail/supervise/qmail-send/log/run-Datei:

#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail

Erstellen sie die /var/qmail/supervise/qmail-smtpd/run-Datei:

#!/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 oder LOCAL ist nicht gesetzt in
echo /var/qmail/supervise/qmail-smtpd/run
exit 1
fi

if [ ! -f /var/qmail/control/rcpthosts ]; then
echo "Keine /var/qmail/control/rcpthosts vorhanden!"
echo "Verweigere Start des SMTP-Listeners, weil das einen offenen Relay erzeugen wuerde."
exit 1
fi

exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

Hinweis: concurrencyincoming ist keine Standard-qmail-Kontrolldatei. Es ist ein Feature des obigen Skriptes. Übrigens ist es eine -1 (minus eins) in der LOCAL-Zeile und ein -l (minus kleines L) in der tcpserver-Zeile.

Hinweis: Unter Solaris arbeitet das normale id-Programm in diesem Skript nicht richtig. Benutzen sie /usr/xpg4/bin/id anstelle von id, z.B.:
QMAILDUID=`/usr/xpg4/bin/id -u qmaild`
NOFILESGID=`/usr/xpg4/bin/id -g qmaild`


Note: Das Speicherlimit, das im softlimit-Befehl angegeben wird, muss möglicherweise erhöht werden, abhängig vonihrem Betriebssystem und ihrer Hardwareplattform. Wenn Verbindungsversuche zu Port 25 fehlschlagen oder externe Systeme ihnen keine Mails schicken können oder sie eine Nachricht wie diese sehen:

  /usr/local/bin/tcpserver: error while loading shared libraries:
  libc.so.6: failed to map segment from shared object: Cannot
  allocate memory

versuchen sie es auf 3000000 oder 4000000 anzuheben.


Erstellen sie die concurrencyincoming-Kontrolldatei:

echo 20 > /var/qmail/control/concurrencyincoming
chmod 644 /var/qmail/control/concurrencyincoming

Erstellen sie die /var/qmail/supervise/qmail-smtpd/log/run-Datei:

#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd

Machen sie die run-Dateien ausführbar:

chmod 755 /var/qmail/supervise/qmail-send/run
chmod 755 /var/qmail/supervise/qmail-send/log/run
chmod 755 /var/qmail/supervise/qmail-smtpd/run
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

Danach richten sie die Logverzeichnisse ein:

mkdir -p /var/log/qmail/smtpd
chown qmaill /var/log/qmail /var/log/qmail/smtpd

Zum Schluss verlinken sie die supervise-Verzeichnisse nach /service:

ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service

Das /service-Verzeichnis wird erstellt, wenn daemontools installiert wird.


Hinweis: Das qmail-System wird automatisch starten, bald nachdem diese Links erstellt sind. Wenn sie es jetzt nicht laufen lassen wollen, tun sie folgendes:
qmailctl stop

2.8.2.3. SMTP-Zugriffskontrolle

Erlauben sie dem lokalen Host Mails mittels SMTP einzufügen:

echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp
qmailctl cdb

2.8.3. Anhalten und Abschalten des installierten MTA

Obwohl es möglich ist, qmail und ihren exististierenden MTA, was wahrscheinlich Sendmail ist, gleichzeitig laufen zu lassen, kann ich das nicht empfehlen, außer, sie wissen, was sie tun. Und, offen gesagt, wenn sie das hier lesen, dann wissen sie vermutlich nicht, was sie tun. :-)

Wenn ihr existierender MTA Sendmail ist, dann sollten sie ihn durch das Ausführen des init.d-Skriptes mit dem "stop"-Argument stoppen können. Beispielsweise sollte einer der folgenden Befehle funktionieren:

/etc/init.d/sendmail stop
/sbin/init.d/sendmail stop
/etc/rc.d/init.d/sendmail stop

Wenn sie kein init.d/sendmail-Skript finden können, dann lokalisieren sie sendmails PID mittels "ps -ef|grep sendmail" oder "ps waux|grep sendmail" und stoppen sie es mittels:

kill PID-of-sendmail 

Wenn Sendmail nicht ihr MTA ist, dann sehen sie in der Dokumentation ihres MTA wegen der korrekten Abschaltprozedur nach.

Sie sollten außerdem erwägen, den alten MTA komplett von ihrem System zu entfernen. Zumindest sollten sie das init.d-Skript abschalten, so dass es nicht versucht, den MTA wieder zu starten, wenn das System neu gebootet wird.

Bei Red Hat Linux kann das Entfernen von Sendmail so erreicht werden:

rpm -e --nodeps sendmail

Hinweis: Wenn sie eine RPM-basierte Linux-Distribution wie Red Hat benutzen, kann das Entfernen des MTA-Packages einige Probleme bereiten. Werkzeuge, die das System updaten, könnten versuchen, Sendmail wieder zu installieren oder MUA-Packages können nicht mehr installiert werden, weil sie nicht feststellen können, ob eine MTA installiert ist. Mate Wierdl bietet ein Rumpfpackage namens "fake_mta" an, dass installiert werden kann, um diese Probleme zu vermeiden. Installieren sie einfach das RPM, das hier verfügbar ist: http://www.csi.hu/mw/fake_mta-1-1memphis.noarch.rpm.

Stellen sie sicher, dass nichts den SMTP-Port (25) abhört. Schuldige könnten ein alter MTA, inetd oder xinetd sein. Der folgende Befehl sollte keinen Output produzieren (es sei denn, der qmail-smtpd-Service läuft):

netstat -a | grep smtp

Wenn etwas läuft, stellen sie sicher, dass es nicht qmail ist, indem sie folgendes tun:

qmailctl stop

Wiederholen sie den netstat-Check:

netstat -a | grep smtp

Wenn sie immer noch Output erhalten, dann müssen sie den Schuldigen finden und das Problem beseitigen, bevor qmails SMTP-Service laufen kann.

Zuletzt ersetzen sie jedes existierende /usr/lib/sendmail mit der qmail-Version:

mv /usr/lib/sendmail /usr/lib/sendmail.old # ignorieren sie Fehlermeldungen
mv /usr/sbin/sendmail /usr/sbin/sendmail.old # ignorieren sie Fehlermeldungen
chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old # ignorieren sie Fehlermeldungen
ln -s /var/qmail/bin/sendmail /usr/lib
ln -s /var/qmail/bin/sendmail /usr/sbin

Hinweis: Es ist wichtig, die sendmail-Links zu erstellen, ungeachtet ihres vorherigen MTA, wenn sie einen hatten. Der sendmail-Befehl wird von vielen Applikationen zum Versenden von Mail aufgerufen.

Der letzte Schritt ist, ein paar Systemaliase zu erstellen.

2.8.4. Systemaliase erstellen

Es gibt drei Systemaliase, die auf allen qmail-Installationen erstellt werden können:

Alias Zweck
postmaster Nach RFC 2821 erforderlich, zeigt auf den Mailadministrator (sie)
mailer-daemon De-Facto-Standard-Empfänger für einige Bounces
root leitet Mail von einem besonderen Account zum Systemadministrator um

Um diese Aliase zu erstellen, entscheiden sie für jedes, wohin es verweisen soll (einen lolalen Benutzer oder eine entfernte Adresse) und erstellen und füllen sie die zugehörigen .qmail-Dateien. Wenn zum Beispiel der lokale Benutzer dave sowohl System- und Mailadministrator ist:

echo dave > /var/qmail/alias/.qmail-root
echo dave > /var/qmail/alias/.qmail-postmaster
ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster

Siehe INSTALL.alias für mehr Details.

2.8.5. qmail starten

Wenn sie qmail oben nach der Erstellung der Links in /service gestoppt haben, dann sollten sie es jetzt neu starten:

qmailctl start

2.9. Testen der Installation

qmail sollte nun laufen. Starten sie zuerst qmailctl stat, um sicherzustellen, dass die Services hochgefahren sind und laufen:

# qmailctl stat
/service/qmail-send: up (pid 30303) 187 seconds
/service/qmail-send/log: up (pid 30304) 187 seconds
/service/qmail-smtpd: up (pid 30305) 187 seconds
/service/qmail-smtpd/log: up (pid 30308) 187 seconds
messages in queue: 0
messages in queue but not yet preprocessed: 0

Alle vier Services sollten länger als eine Sekunde "up" sein. Wenn das nicht so ist, dann haben sie sich möglicherweise im zugehörigen run-Skript vertippt oder sie haben einen oder mehrere Schritte beim Erstellen der nötigen Dateien, Verzeichnisse oder Links ausgelassen. Gehen sie erneut Schritt für Schritt durch die Installation und überprüfen sie ihre Arbeit. Sie können auch das inst_check-Skript downloaden und laufen lassen, das unter http://lifewithqmail.org/inst_check verfügbar ist. Beispiel:

# sh inst_check
! /var/log/qmail has wrong owner, should be qmaill
...try: chown qmaill /var/log/qmail
#

Wenn inst_check Probleme findet, beseitigen sie sie und starten sie das Skript erneut. Wenn alles gut aussieht, wird inst_check melden:

Congratulations, your LWQ installation looks good!

Das readproctitle-Programm hält ein Log der Fehlermeldungen, die von Services generiert werden, die von scscan gemanagt werden. Um diese Nachrichten zu sehen, benutzen sie ps oder irgend einen anderen Prozessauflistungsbefehl. Beispielsweise könnten sie soetwas sehen:

# ps -efl | grep "service errors" | grep -v grep
000 S root 1006 1001 0 76 0 - 334 pipe_w Mar31 ? 00:00:00
readproctitle service errors: ...unable to start qmail-smtpd/run: exec format error
#

In diesem Fall ist das Problem, dass ein Fehler in der ersten Zeile des /service/qmail-smtpd/run-Skriptes sitzt--meist dadurch verursacht, dass die Datei im DOS-Format vorliegt (CR-LF-Zeilenenden anstelle von Unix' nur-LF).

Manchmal hilft es, einen Service von Hand zu starten, um Konfigurationsprobleme zu finden. Wenn beispielsweise ihr qmail-smtpd/log-Service nicht läuft, dann tun sie folgendes:

cd /service/qmail-smtpd/log
svc -d .
./run
wenn es keine Fehler gibt, geben sie eine Zeile Text ein und drücken sie ENTER
wenn es weiterhin Fehler gibt, drücken sie STRG-D (Ende der Datei) 

An dieser Stelle sollten sie in der Lage sein, das Problem zu identifizieren und es zu beseitigen. Wenn sie das erstmal getan haben, kehren sie, wenn nötig, in das Serviceverzeichnis zurück und tun sie folgendes:

svc -u .

Wenn erst alle Services mit >1 Sekunde Betriebszeit oben sind, folgen die den Instruktionen in TEST.deliver und TEST.receive, um sicherzustellen, dass sie korrekt arbeiten. Beachten sie, dass, wenn sie diese Instruktionen benutzen, das Logging von multilog nach /var/log/qmail, nicht von splogger nach soetwas wie /var/log/maillog vorgenommen wird.


Hinweis: Wenn sie das maildir-Mailboxformat als Standardzustellmethode gewählt haben, dann müssen sie ein Maildir-Verzeichnis in ihrem Home-Verzeichnis und im Home-Verzeichnis der aliase erstellen, bevor sie diese Instruktionen ausprobieren. Lesen sie den maildir-Abschnitt, um zu verstehen, wie dieses Verzeichnis richtig erstellt wird.

3. Konfiguration

Sie haben qmail mit der empfohlenen Quellcode-Tarball-Methode, einer der sebstkompilierenden Packages oder einem var-qmail-Package installiert. Dieser Abschnitt enthält Informationen, die sie brauchen werden, um qmail so zu konfigurieren, dass es auf die Art funktioniert, die sie wollen.

3.1. Konfigurationsdateien

Alle qmail-Systemkonfigurationsdateien, mit Ausnahme der .qmail-Dateien in ~alias, befinden sich in /var/qmail/control. Die qmail-control Man Page enthält eine Tabelle, wie die folgende:

Kontrollelement Standardwert Benutzt von Zweck
badmailfrom none qmail-smtpd auf die schwarze Liste gesetzte Absenderadressen
bouncefrom MAILER-DAEMON qmail-send Benutzername des Bounce-Absenders
bouncehost me qmail-send Hostname des bounce-Absenders
concurrencyincoming none /service/qmail-smtpd/run Maximum der gleichzeitig hereinkommenden SMTP-Verbindungen
concurrencylocal 10 qmail-send Maximum der gleichzeitigen lokalen Zustellungen
concurrencyremote 20 qmail-send Maximum der gleichzeitigen Remote-Zustellungen
defaultdelivery none /var/qmail/rc Standard-.qmail-Datei
defaultdomain me qmail-inject Standard-Domainname
defaulthost me qmail-inject Standard-Hostname
databytes 0 qmail-smtpd max Anzahl Bytes in einer Nachricht (0=kein Limit)
doublebouncehost me qmail-send Hostname des Doppel-Bounce-Absenders
doublebounceto postmaster qmail-send Benutzer, der die Doppel-Bounces empfangen soll
envnoathost me qmail-send Standard-Domain für Adressen ohne "@"
helohost me qmail-remote Hostname, der im SMTP-HELO-Befehl benutzt wird
idhost me qmail-inject Hostname für Nachrichten-IDs
localiphost me qmail-smtpd Name, der durch lokale IP-Addresse ersetzt wird
locals me qmail-send Domains, die wir lokal beliefern
me FQDN of system various Standard für viele Kontrolldateien
morercpthosts none qmail-smtpd Zweite rcpthosts-Datenbank
percenthack none qmail-send Domains, die "%"-artige Weiterleitungen benutzen dürfen
plusdomain me qmail-inject Domain, die durch führendes "+" ersetzt wird
qmqpservers none qmail-qmqpc IP-Adressen der QMQP-Server
queuelifetime 604800 qmail-send Sekunden, die eine Nachricht in der Warteschlange verbleiben kann
rcpthosts none qmail-smtpd Domains, für die wir Mails akzeptieren
smtpgreeting me qmail-smtpd SMTP-Grußbotschaft
smtproutes none qmail-remote künstliche SMTP-Routen
timeoutconnect 60 qmail-remote Wie lange, in Sekunden, auf eine SMTP-Verbindung gewartet wird
timeoutremote 1200 qmail-remote Wie lange, in Sekunden, auf einen Remote-Server gewartet wird
timeoutsmtpd 1200 qmail-smtpd Wie lange, in Sekunden, auf einen SMTP-Client gewartet wird
virtualdomains none qmail-send Virtuelle Domains und Benutzer

Für mehr Informationen über eine spezielle Kontrolldatei, lesen sie die Man Page für das Modul, das unter "Benutzt durch" aufgelistet ist.

3.2. Weiterleitung

3.2.1. Einleitung

Was ist Weiterleitung? Das ist, wenn ein MTA eine Nachricht mittels SMTP akzeptiert, die nicht mal so erscheint, als ob sie entweder für eine lokale Adresse oder von einem lokalem Absender ist.

In der Vor-Spam-Zeit war es üblich für MTAs, als offene Weiterleiter konfiguriert zu sein: nicht wählerische Server, die Mails von jedem, für jeden akzeptieren würden.

Die meisten MTAs sind heute konfiguriert, entweder Weiterleitung komplett abzuschalten oder nur bestimmten vertrauenswürdigen Benutzern oder Systemen zu erlauben, sie als Weiterleiter zu benutzen.

Chris Johnson hat ein sehr gutes Dokument speziell für qmail-Benutzer geschrieben. Ich ermuntere sie, http://www.palomine.net/qmail/relaying.html zu besuchen.

3.2.2. Weiterleitung abschalten

Wenn sie den offiziellen Anweisungen für die Installation von qmail folgen, ist das Weiterleiten standardmäßig abgeschaltet. Das wird erreicht durch das Bestücken der Datei /var/qmail/control/rcpthosts mit den vollqualifizierten Domainnamen, die in locals und virtualdomains (den lokalen Hosts) aufgelistet sind. Der Name der Kontrolldatei, rcpthosts, kommt vom SMTP-RCPT-Befehl (engl. RCPT, recipient: Empfänger; Anm. d. Übers.). In einer SMTP-Session wird RCPT benutzt, um die Adressen der Empfänger einer Adresse zu spezifizieren. rcpthosts listet also die gültigen Hostnamen, die in RCPT-Adressen erscheinen dürfen.

3.2.3. Selektives Weiterleiten erlauben

Die meisten Einzelbenutzer- und Kleine-Arbeitsgruppen-Server können das Weiterleiten komplett abschalten, wenn sie aber eine verteilte Benutzergemeinschaft unterstützen müssen, dann werden sie einen Weg brauchen, um ihren Benutzern zu erlauben, und nur ihren Benutzern, ihr System als Weiterleiter zu benutzen. Das wird mit tcpserver gemacht, mit dem die RELAYCLIENT-Umgebungsvariable gesetzt wird, die qmail-smtpd anweist, die rcpthosts-Datei zu übergehen.

Wenn sie den Installationsanweisungen dieses Dokuments folgen, dann ist selektives Weiterleiten standardmäßig angeschaltet. Um einem Client Weiterleitungszugriff zu geben, fügen sie /etc/tcp.smtp einen Eintrag zu, wie:

IP-Adresse des Clients:allow,RELAYCLIENT=""

Dann erneuern sie die SMTP-Zugriffssdatendank, indem sie folgendes tun:

qmailctl cdb

oder:

tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp*

Wenn die den offziellen Installationsanweisungen gefolgt sind: Chris Johnson hat ein anderes sehr gutes Dokument darüber geschrieben, wie man qmail konfiguriert, um ausgewählten Hosts das Weiterleiten zu erlauben. Siehe http://www.palomine.net/qmail/selectiverelay.html.

3.3. Multiple Hostnamen

Wenn ihr System unter mehr als einem Namen bekannt ist, z.B. wenn alle Adressen der Form benutzer@host1.beispiel.com auch als benutzer@beispiel.com oder benutzer@mail.beispiel.com geschrieben werden können, dann müssen sie qmail das mitteilen, so dass es weiß, welche Adressen es als lokal zustellen und welche Nachrichten es von Remote-Systemen akzeptieren sollte.

Um das zu tun, fügen sie einfach alle diese Namen folgenden zwei Kontrolldateien zu:

Senden sie qmail-send ein HUP-Signal (engl. HUP, hangup: Auflegen; Anm. d. Übers.), um es anzuweisen, locals neu zu lesen. Wenn sie qmailctl haben, dann können sie folgendes tun:

qmailctl reload

3.4. Virtuelle Domains

Virtuelle Domains sind vergleichbar mit den multiplen Hostnamen, die im vorigen Abschnitt diskutiert wurden, aber da gibt es ein paar wichtige Unterschiede. Erstens, wenn beispiel.net die virtuelle Domain virtuelles.beispiel.com hostet, dann ist es normalerweise nicht so, dass Nachrichten, die an schorsch@beispiel.net gesandt werden, in derselben Mailbox enden sollten, wie Nachrichten, die an schorsch@virtuelles.beispiel.com gesandt wurden. Der Namensraum für jede viruelle Domain ist klar abgegrenzt.

Mit qmail werden virtuelle Domains in der virtualdomains-Datei konfiguriert, die aus einem oder mehreren Einträgen in dieser Form besteht:

benutzer@domain:prepend 

qmail konvertiert benutzer@domain in prepend-benutzer@domain und behandelt das Resultat so, als ob domain lokal wäre. Der benutzer@-Teil ist optional. Wenn er ausgelassen wird, dann trifft der Eintrag für alle @domain-Adressen zu.

Um zum obigen Beispielszenario zurückzukehren, wenn der beispiel.net-Mailadministrator die virtuelle Domain virtuelles.beispiel.com unter der administrativen Kontrolle von Benutzer hans erstellen möchte, dann würde der folgende Eintrag in virtualdomains das erledigen:

virtuelles.beispiel.com:hans

Eine hereinkommende Nachricht an schorsch@virtuelles.beispiel.com würde in hans-schorsch@virtuelles.beispiel.com umgeschrieben und lokal zugestellt werden. Lesen sie den .qmail-Abschnitt und den Erweiterungsadressen-Unterabschnitt für mehr Informationen darüber, wie hans seine virtuelle Domain managen kann.

Wie multiple Hostnamen müssen alle virtuellen Domains in rcpthosts aufgelistet sein, so dass qmail-smtpd wissen kann, dass es Nachrichten, die an sie adressiert sind, akzeptieren soll. Jedoch, anders als multiple Hostnamen, dürfen virtuelle Domains nicht locals hinzugefügt werden.

Nach dem Ändern von virtualdomains senden sie qmail-send ein HUP (hangup)-Signal, um es anzuweisen, die Datei neu zu lesen. Wenn sie qmailctl haben, können sie folgendes tun:

qmailctl reload

Vergessen sie nicht, die virtuellen Domains auch rcpthosts hinzuzufügen.


Hinweis: Domainnameserver (DNS)-Mail Exchanger (MX)-Datensätze müssen dafür hergerichtet werden, um Nachrichten für virtuelle Domains an den richtigen Mailserver zu dirigieren. Das ist ein Job für den Nameserveradministrator und jenseits des Themenbereiches dieses Führers.

3.5. Aliase

qmails Standard-Alias-Mechanismus ist ein natürliches Nebenprodukt von qmails lokalem Zustellmechanismus. qmail-local versucht, eine Nachricht, die an lokalerteil@host adressiert ist, an einen lokalen Benutzer namens lokalerteil zuzustellen. Wenn kein passender Benutzer gefunden wurde, wird die Nachricht an den alias-Benutzer, einen Pseudo-Benutzer auf allen qmail-Systemen geschickt, dessen Home-Verzeichnis üblicherweise /var/qmail/alias ist.

Wenn sie beispielsweise ein info@beispiel.com-Alias erzeugen wollen, das Nachrichten an den Benutzer tom weiterleitet, dann tun sie auf beispiel.com als Benutzer root folgendes:

echo \&tom > /var/qmail/alias/.qmail-info

Der .qmail-Abschnitt und der Erweiterungsadressen-Unterabschnitt beschreibt, wie man .qmail-Dateien erzeugt, die spezifizieren, welche Aliase existieren und was mit den Nachrichten geschehen soll, die an sie geschickt wurden.

Der Gotchas-Anhang enthält ein paar schwierige Fälle die Verwendung von Aliasen betreffend--Aliase, die Großbuchstaben und Punkte ('.') enthalten--und man dot-qmail enthält eine komplette Dokumentation der Verwendung von .qmail-Dateien.

Beachten sie, dass, wegen der Art, in der Aliase in qmail implementiert sind, ein Alias sich niemals über die Zustellungen eines gültigen Benutzers hinwegsetzen kann. Wenn beispielsweise rachel eine normale Benutzerin ist, dann wird ~alias/.qmail-rachel nicht benutzt.

Das fastforward-Package bietet einen alternativen Aliasmechanismus, der multiple Aliase in einer einzelnen Datei ablegt, die kompatibel mit Sendmails Aliasdatenbank ist.

Der nächste Abschnitt, qmail-users, beschreibt einen anderen Mechanismus, der benutzt werden kann, um Aliase zu implementieren.

3.6. qmail-users

qmail-users (engl. users: Benutzer; Anm. d. Übers.) ist ein System für das Zuordnen von Adressen zu Benutzern. Eine Reihe von Konfigurationsdateien liegen unter /var/qmail/users. Die assign-Datei (engl. assign: zuordnen; Anm. d. Übers.) ist eine Tabelle von Zuordnungen. Es gibt zwei Arten von Zuordnungen: einfach und Platzhalter.


Hinweis: assign enthält eine Reihe von Zuordnungen, eine pro Zeile, gefolgt von einer Zeile mit einem einzelnen Punkt (.). Wenn sie assign von Hand erstellen, dann vergessen sie die Punkt-Linie nicht.

3.6.1. Einfache Zuordnung

Eine einfache Zuordnung sieht so aus:

=Adresse:Benutzer:uid:gid:Verzeichnis:Bindestrich:Erweiterung:

Das bedeutet, dass Nachrichten, die für Adressw empfangen wurden, als Benutzer Benutzer mit der spezifizierten uid und gid zugestellt werden und die Datei Verzeichnis/.qmailBindestrichErweiterung angibt, wie die Nachrichten zuzustellen sind.

3.6.2. Platzhalterzuordung

Eine Platzhalterzuordung sieht so aus:

+Vorzeichen:Benutzer:uid:gid:Verzeichnis:Bindestrich:Vorsatz:Rest 

Das bedeutet, dass Nachrichten, die für Adressen in der Form VorzeichenRest als Benutzer Benutzer mit der spezifizierten uid und gid zugestellt werden und die Datei Verzeichnis/.qmailBindestrichVorsatzRest angibt, wie die Nachrichten zuzustellen sind.

3.6.3. qmail-user-Programme

qmail-user hat zwei Hilfsprogramme: qmail-newu und qmail-pw2u.

qmail-newu verarbeitet die assign-Datei und generiert eine konstante Datenbank (CDB)-Datei namens cdb in /var/qmail/users. CDB liegt im Binärformat vor, auf das schnell durch qmail-lspawn zugegriffen werden kann, auch wenn es Tausende von Zuordnungen gibt.

qmail-pw2u konvertiert die Systembenutzerdatenbank /etc/passwd in eine Reihe von Zuordnungen, die zu assign passen. qmail-pw2u verwendet ein Set von Dateien, um die Übersetzungsregeln zu modifizieren.


Hinweis: Wenn die qmail-pw2u benutzen, vergessen sie nicht, qmail-pw2u und qmail-newu neu zu starten, wann immer sie Benutzer hinzufügen oder UIDs oder GIDs ändern. Eine typische Sequenz könnte sein:
qmail-pw2u </etc/passwd >/var/qmail/users/assign
qmail-newu

3.7. Spam-Kontrolle

Chris Hardie hat ein exzellentes qmail Anti-Spam HOWTO geschrieben. Es ist verfügbar unter http://www.summersault.com/chris/techno/qmail/qmail-antispam.html.

3.8. Virus-Scannen

Jason Haar hat Qmail-Scanner geschrieben, ein inhaltsscannendes Geschirr für qmail. Siehe http://qmail-scanner.sourceforge.net/ für mehr Informationen.

Qmail-Scanner schließt einen einfachen eingebauten Scanner ein, aber seriöses Scannen erfordert einen separaten Virus-Scanner--entweder einen von den unterstützten kommerziellen Scannern oder Tomasz Kojms freien Clam Antivirus Scanner, der unter http://clamav.elektrapro.com/ verfügbar ist.


4. Benutzung

Dieser Abschnitt behandelt die Benutzung von qmail durch normale Benutzer. Wenn sie Mail auf einem qmail-System lesen oder schreiben, dann ist hier sie Stelle, wo sie Informationen darüber finden, wie das mit qmail geht.

4.1. .qmail-Dateien

Die Zustellung einer Benutzermail wird normalerweise von einer oder mehreren ".qmail" (sprich dot kju meejl)-Dateien--Dateien im Home-Verzeichnis des Benutzers, dessen Namen mit .qmail beginnen. Die dot-qmail-Man Page beschreibt die .qmail-Datei-Benutzung.

.qmail-Bestehen aus einer Liste von Zustellinstruktionen, eine Instruktion pro Zeile. Das erste Zeichen der Zeile bestimmt, welche Art von Zustellung angewandt wird:

Zeichen Zustellungstyp Wert
# leer (Kommentar) wird ignoriert
| program Befehl, der von der Shell ausgeführt werden soll
/ or . mbox (wenn das letzte Zeichen kein / ist) Pfadname der mbox (einschließlich des / oder .)
/ or . maildir (wenn das letzte Zeichen ein / ist) Pfadname der maildir (einschließlich des / oder .)
& forward Adresse, an die die Nachricht weitergeleitet werden soll
Buchstabe oder Zahl forward Adresse, an die die Nachricht weitergeleitet werden soll (einschließlich des ersten Zeichens)

4.1.1. program-Zustellung

Wenn ein program-Zustellungsinstruktion angetroffen wird, startet qmail eine Shell (/bin/sh), um den Befehl auszuführen und führt dem Befehl eine Kopie der hereinkommenden Nachricht auf der Standardeingabe zu. Die qmail-command Man Page dokumentiert die Details dieses Prozesses.

Die program-Zustellung ist sehr mächtig und kann benutzt werden, um ein breites Angebot von Funktionalität, wie Nachrichtenfilterung, automatische Nachrichtenbeantwortung und Zustellung mit Drittanbieteragenten wie procmail zu implementieren.

Beispiel:

|preline /usr/ucb/vacation djb

Das veranlasst qmail preline zu starten, ihm /usr/ucb/vacation und djb als Argumente zu übergeben und eine Kopie der Nachricht auf der Standardausgabe zuzuführen.

4.1.2. mbox-Zustellung

Mbox ist das Standard-UNIX-Mailboxformat, in dem mehrere Nachrichten in einer einzelnen Datei gespeichert und Nachrichten mit einer "Von "-Zeile begonnen werden. Diese Zeile sieht aus wie ein Kopffeld, aber es ist keins; es ist einfach nur etwas, das der Zustellagent anfügt, so dass Mailreader herausfinden können, wo jede Nachricht beginnt.

Beispiel:

./Mailbox

Dies führt dazu, dass Nachrichten der Datei $HOME/Mailbox mit einer vorangestellten "Von "-Zeile angehängt werden. Eine einfache mbox-Mailbox mit einer einzelnen Nachrcht sieht so aus:

From user1@example.net Thu May 13 18:34:50 1999
Received: (qmail 1287205 invoked from network); 13 May 1999 18:34:49 -0000
From: user1@example.net
To: user2@example.com
Subject: hey

What's up?

Die erste Zeile wurde bei Zustellung durch qmail hinzugefügt.

4.1.3. maildir-Zustellung

Maildir ist ein Mailboxformat, dass von Dan Bernstein erfunden wurde, um sich den Nachteilen des mbox-Formates zu widmen. Eine maildir-Mailbox ist ein Verzeichnis, das drei Unterverzeichnisse enthält, new, cur und tmp. Jede Nachricht in einer maildir-Mailbox ist in einer separaten Datei in einer der Unterverzeichnisse gespeichert, abhängig von ihrem Status: new ist für ungelesene Nachrichten, cur ist für Nachrichten, die versandt wurden und tmp ist für Nachrichten, die sich im Prozess des Zugestelltwerdens befinden. Die maildir Man Page beschreibt das Format einer maildir im Detail.

Einer der Vorteile des maildir-Formates ist, dass es zuverlässig ist, obgleich es keinen Sperrmechanismus verwendet, um gleichzeitigen Updates von verschiedenen Zustellagenten vorzubeugen. Das bedeutet, dass maildir-Mailboxen auf NFS-Dateisystemen sicher sind.

Beispiel:

./Maildir/

Dies führt dazu, dass Nachrichten in $HOME/Maildir gespeichert werden, einer maildir-Format-Mailbox.


Hinweis: qmail-local kann Mails an maildir-Mailboxen zustellen, aber es kann sie nicht erstellen. Maildir-Mailboxen sollten mit dem maildirmake-Programm erstellt werden, das mit qmail mitgeliefert wird. Beispiel: "maildirmake ~/Maildir". Stellen sie sicher, dass sie maildirmake als Besitzer von maildir laufen lassen, nicht als root. Ihr useradd oder adduser-Befehl könnte ein "Gerüst"-Verzeichnis unterstützen, beispielsweise /etc/skel, wo sie eine maildir erstellen können, die für alle neuen Benutzer kopiert wird.

4.1.4. forward-Zustellung

Forward-Zustellungen bewirken, dass die Nachricht an die spezifizierte Adresse weitergesandt wird. Adressen, die in .qmail-Dateien spezifiziert sind, dürfen keine Kommentarfelder oder zusätzliche Leerzeichen enthalten.

Folgendes ist falsch:

&<benutzer@beispiel.com>
& benutzer@beispiel.com
&Schorsch Benutzer <benutzer@beispiel.com>

Folgendes ist richtig:

&benutzer@beispiel.com
benutzer@beispiel.com
&benutzer

Die ersten beiden bewirken, dass benutzer@beispiel.com eine Kopie der Nachricht erhält. Das letzte sendet eine Kopie an den lokalen Benutzer benutzer.

4.1.5. extension addresses

qmail unterstützt benutzerkontrollierte Erweiterungsadressen. Zusätzlich zur Basisadresse benutzername@hostname.domain können die Benutzer Mails an benutzername-erweiterung@hostname.domain erhalten. Für den Rest dieses Abschnitts werde ich den "@hostname.domain"-Teil weglassen, weil wir annehmen, das die Aktionen auf dem lokalem System stattfinden.

Die Zustellinstruktionen für benutzername stecken in ~benutzername/.qmail und die Zustellinstruktionen für benutzername-erweiterung in ~benutzername/.qmail-erweiterung.

Beispielsweise wird dave-lwq@sparge.beispiel.com von ~dave/.qmail-lwq auf dem Host sparge kontrolliert.

Erweiterungen können mehrere Felder haben, z.B. wird dave-list-qmail von ~dave/.qmail-list-qmail kontrolliert. In diesem Beispiel ist dave-list-qmail in die qmail-Mailingliste eingeschrieben und ~dave/.qmail-list-qmail-Dateien die Listennachrichten in einer separaten Mailbox.

.qmail-Dateien können mit Platzhaltern versehen sein unter der Benutzung von -default. So könnte dave-list-qmail auch von ~dave/.qmail-list-default bearbeitet werden. Dies würde einer allumfassenden .qmail-Datei erlauben, alle dave-list-wasauchimmer-Adressen zu bearbeiten. Beachten sie, dass dave-list nicht von ~dave/.qmail-list-default bearbeitet würde, weil es nicht dem Muster "-" nach "list" entsprechen würde.

qmail benutzt die beste Übereinstimmung, die es finden kann. Wenn beispielsweise eine Nachricht hereinkommt, die an dave-list-qmail adressiert ist, wird es das Erste von den Folgenden verwenden, das zutrifft:

.qmail-list-qmail
.qmail-list-default
.qmail-default

Wenn keine zutreffende .qmail-Datei gefunden wird, dann schlägt die Zustellung fehl und die Nachricht wird an den Absender zurückgeschickt.

4.2. Nachrichten versenden

Mailbenutzer verwenden normalerweise den MTA nicht direkt, um Nachrichten zu versenden. Typischerweise werden Nachrichten mittels eines Mailbenutzeragenten (Mail User Agent, MUA) wie pine oder mutt erstellt und versandt, die dann den MTA aufrufen, um die Nachricht zuzustellen. Der Prozess des Weiterreichens einer Nachricht an den MTA wird Injektion genannt.

Es gibt zwei Wege, um Nachrichten in die meisten MTAs zu injizieren: mit Hilfe des Einfachen Mailtransferprotokolls (Simple Mail Transfer Protocol, SMTP) oder mittels eines Programms, dass von den MTAs für diesen Zweck angeboten wird.

4.2.1. SMTP

MUAs können einer TCP-Verbindung an Port 25, dem Standard-SMTP-Port, auf dem Localhost oder einem bestimmten Mailserver öffnen. Der MUA und der MTA können dann in einen Dialog treten; dessen Resultat ist dann entweder:

SMTP hat keinen Mechanismus für Authentifizierung, so dass weder Benutzername noch Passwort notwendig sind, um eine Nachricht zu versenden. Wie auch immer, viele MTAs verweigern das Akzeptieren von Nachrichten, die weder von noch für einen lokalen Benutzer zu sein scheinen. Wenn eine wohlformatiert Nachricht abgewiesen wird, dann dine Weiterleitungseinschränkungen der wahrscheinlichste Grund. Lesen sie die Abschnitt über Weiterleitung für mehr Informationen über die Weiterleitungskonfiguration.

4.2.2. /var/qmail/bin/sendmail

Für viele Jahre war Sendmail der UNIX-MTA. Es war so allgegenwärtig, dass viele Programmierer einfach davon ausgingen, dass er der MTA war. Als ein Resultat davon wurde Sendmails lokaler Injektionsmechanismus die standardmäßige Applikationsprogrammierschnittstelle (Application Programmer's Interface, API) für lokale Mailinjektion. qmail und andere nicht-Sendmail-MTAs bieten ein sendmail-Programm, dass für lokale Injektion auf dieselbe Art arbeitet, wie des echten Sendmails sendmail.

Das qmail-sendmail, das normalerweise in /var/qmail/bin/sendmail liegt, ersetzt für gewöhnlich das Sendmail-sendmail auf qmail-Systemen. Typische Aufenthaltsorte des sendmail-Programms sind:

Auf einerm qmail-System sollte "ls -l Pfad-zu-sendmail" zeigen, dass sendmail ein symbolischer Link auf /var/qmail/bin/sendmail ist:

$ ls -l /usr/lib/sendmail
lrwxrwxrwx 1 root root 29 Feb 19 11:04 /usr/lib/sendmail -> /var/qmail/bin/sendmail

4.2.3. qmail-inject

Zusätzlich zum Emulieren der sendmail-API hat qmail sein eigenes Injektionsprogramm: qmail-inject. Tatsächlich ist sendmail nur eine Hülle um qmail-inject.

Als eine API ist sendmail wahrscheinlich besser, weil ist viel breiter verfügbar ist. Die qmail-API, die von qmail-inject angeboten wird, arbeitet nur auf Systemen mit qmail, aber die sendmail-Schnittstelle ist nahezu universal.

Hier wird beispielsweise eine leere Nachricht an schorsch@beispiel.com gesandt:

echo To: schorsch@beispiel.com | /var/qmail/bin/qmail-inject

4.3. Umgebungsvariablen

Einige qmail-Programme setzen oder verwenden Umgebungsvariablen. Die folgende Tabelle listet diese Variablen auf und beschreibt deren Verwendung .

Name Man Page gesetzt oder verwendet Zweck
DATABYTES qmail-smtpd wird verwendet Übergeht control/databytes
DEFAULT qmail-command wird gesetzt Teil der Adresse, die mit "-default" in einem .qmail-Dateinamen übereinstimmt.
DTLINE qmail-command wird gesetzt Gesandt-An-Kopffeld
EXT qmail-command wird gesetzt Die Adresserweiterung
EXT2 qmail-command wird gesetzt Der Teil von EXT, der dem ersten Bindestrich folgt
EXT3 qmail-command wird gesetzt Der Teil von EXT, der dem zweiten Bindestrich folgt
EXT4 qmail-command wird gesetzt Der Teil von EXT, der dem dritten Bindestrich folgt
HOME qmail-command wird gesetzt Das Home-Verzeichnis des Benutzers
HOST qmail-command wird gesetzt Der domain-Teil der Empfängeradresse
HOST2 qmail-command wird gesetzt Der Teil von HOST, der dem letzten Punkt voransteht.
HOST3 qmail-command wird gesetzt Der Teil von HOST, der dem zweitletzten Punkt voransteht.
HOST4 qmail-command wird gesetzt Der Teil von HOST, der dem drittletzten Punkt voransteht.
LOCAL qmail-command wird gesetzt Der local-Teil der Empfängeradresse
LOGNAME qmail-inject wird verwendet Benutzername im Von-Kopffeld (4)
MAILHOST qmail-inject wird verwendet Hostname im Von-Kopffeld (2)
MAILNAME qmail-inject wird verwendet Vollständiger Name im Von-Kopffeld (2)
MAILUSER qmail-inject wird verwendet Benutzername im Vom-Kopffeld (2)
NAME qmail-inject wird verwendet Vollständiger Name im Von-Kopffeld (3)
NEWSENDER qmail-command wird gesetzt Weiterleitende Absenderadresse (siehe "man dot-qmail")
QMAILDEFAULTDOMAIN qmail-inject wird verwendet Übergeht control/defaultdomain
QMAILDEFAULTHOST qmail-inject wird verwendet Übergeht control/defaulthost
QMAILHOST qmail-inject wird verwendet Hostname im Von-Kopffeld (1)
QMAILIDHOST qmail-inject wird verwendet Übergeht control/idhost
QMAILINJECT qmail-inject wird verwendet Spezifiziert verschiedene Optionen (siehe nächste Tabelle)
QMAILMFTFILE qmail-inject wird verwendet Datei, die eine Liste von Mailingslistenadresse zur Erzeugung der "Diese Nachricht ist eine Antwort auf"-Information enthält
QMAILNAME qmail-inject wird verwendet Vollständiger Name im Von-Kopffeld (1)
QMAILPLUSDOMAIN qmail-inject wird verwendet Übergeht control/plusdomain
QMAILSHOST qmail-inject wird verwendet Hostname in der Absenderadresse
QMAILSUSER qmail-inject wird verwendet Benutzername in der Absenderadresse
QMAILUSER qmail-inject wird verwendet Benutzername im Von-Kopffeld (1)
RECIPIENT qmail-command wird gesetzt Empfängeradresse
RELAYCLIENT qmail-smtpd wird verwendet Ignoriere control/rcpthosts und hänge den Wert an die Empfängeradresse an
RPLINE qmail-command wird gesetzt Antwortadresse-Kopffeld
SENDER qmail-command wird gesetzt Absenderadresse
UFLINE qmail-command wird gesetzt UUCP-Stil-"Von "-Zeile
USER qmail-command wird gesetzt Der aktuelle Benutzer
USER qmail-inject wird verwendet Benutzername im Von-Kopffeld (3)
QMAILINJECT Flags
Buchstabe Zweck
c Verwende Adressen-Kommentar-Stil für das Von-Feld
s Achte nicht auf irgendwelche eintreffenden Antwortadresse-Felder
f Lösche jedes eintreffende Von-Feld
i Lösche jedes eintreffende Nachrichten-ID-Feld
r Verwende ein VERP je Empfänger
m Verwende ein VERP je Nachricht

5. Fortgeschrittene Themen

5.1. procmail

procmail ist ein populärer Nachrichtenzustellagent (Message Delivery Agent, MDA). Die Funktion eines MDA ist, eine Nachricht von einem MTA für einen spezifischen Benutzer oder eine spezifische Mailbox zu akzeptieren und die Nachricht entsprechend der Benutzerwünsche zuzustellen. procmail kann verwendet werden, um Nachrichten abhängig vom Inhalt verschiedener Kopffelder oder des Haupttextes einer Nachricht zu "filtern". Beispielsweise können die Nachrichten von einer bestimmten Person in eine Mailbox für gerade diese Peron dirigiert werden.

Es gibt ein paar Tricks, um procmail mit qmail laufen zu lassen. Erstens ist procmail für gewöhnlich eingerichtet, um an eine mbox-Mailbox in /var/spool/mail zuzustellen. Sie können procmail umbauen, um standardmäßig an $HOME zuzustellen oder sie können Benutzer instruieren, sich nicht auf procmail zu verlassen, um den Standard für den Ort der mbox festzulegen. Außer wenn sie es für die Zustellung nach $HOME patchen, wird procmail immer /var/spool/mail für Temporäre Dateien verwenden.

Ein anderes Problem ist, dass qmail-command und procmail keine allgemeine Übereinkunft haben, welche Exitcode was meint. procmail verwendet die Standard-UNIX-Exitcodes: Null bedeutet Erfolg, Nicht-Null bedeutet Fehler und der Grund des Fehlers wird von /usr/include/sys/errno.h angezeigt. qmail-command verwendet bestimmte Nicht-Null-Codes, um permanente Fehler anzuzeigen und die restlichen werden als temporär angesehen. Ein kleiner Kommandozeilenskript-Wrapper kann verwendet werden, um die Exitcodes für qmail-command zu übersetzen. So ein Wrapper wurde an die qmail-Liste geschickt und ist in den Archiven unter http://www.ornl.gov/its/archives/mailing-lists/qmail/1998/04/msg00487.html verfügbar.

Außerdem liefern ältere Versionen von procmail (bis 3.14) nicht direkt an maildir-Format-Mailboxen. Ihre beste Chance ist, auf die aktuelle Version von procmail upzugraden. Ein anderer Lösungsversuch ist safecat, ein Programm, dass eine Nachricht auf der Standardeingabe an eine spezifizierten Maildir schreibt. Benutzer können procmail-Rezepte (Zustellinstruktionen) schreiben, die safecat verwenden, um die Nachricht einzuordnen. Sie können procmail auch völlig übergehen und maildrop verwenden.

Letztendlich erwartet procmail von der Nachricht, die es erhält, dass sie im mbox-Format vorliegt. Normale qmail-Programmzustellungen schließen nur die aktuelle Mailnachricht ein, ohne eine "Von"-Zeile. Der preline-Befehl kann verwendet werden, um die Nachricht so zu formatieren, wie procmail es erwartet. Der Wrapper, dessen Link sie weiter oben gesehen haben, schließt preline ein.

Lassen sie uns zum Beispiel sagen, dass der Benutzer "dave" möchte, dass seine Nachrichten von procmail verarbeitet werden. Sein Systemadministrator hat procmail eingerichtet, um standardmäßig an $HOME zuzustellen und bietet den Exitcode-Wrapper an, der oben erwähnt wurde, und hat ihn /usr/local/bin/qmail-procmail genannt. Seine .qmail-Datei sollte so aussehen:

|/usr/local/bin/qmail-procmail

5.2. POP- und IMAP-Server

qmail schließt einen POP-Server, qmail-pop3d, ein, aber er wird nicht als Teil des qmail-Installationprozesses konfiguriert und installiert. Sie können auch einen der anderen verfügbaren POP- oder IMAP-Server verwenden, obwohl die meisten für Sendmail geschrieben wurden und ein bisschen Aufwand brauchen, um sie mit qmail zu verwenden.

5.2.1. qmail-pop3d

qmail-pop3d ist der POP-Server, der bei qmail dabei ist. Es ist ein ausgezeichneter POP-Server und viele qmail-Sites verwenden ihn. Er ist modular und unterstützt multiple Authentifizierungsschemata mittels alternativer Authentifizierungsmodule.


Hinweis: qmail-pop3d unterstützt nur maildir-Format-Mailboxen, wenn sie also Benutzer haben, die sich beim POP-Server einloggen und MUAs lokal laufen lassen, dann müssen sie maildir unterstützen. Wenn alle ihrer Benutzer Mails mittels POP lesen, dann ist das Mailboxformat auf dem Server kein Thema.

5.2.1.1. Die Architektur von qmail-pop3d

Ein qmail-pop3d-Server besteht aus drei Modulen:

Normalerweise läuft qmail-popup mittels inetd oder tcpserver und wartet an Port 110, dem POP3-Port. Wenn eine Verbindung hergestellt wird, fragt es nach Benutzername und Passwort. Dann ruft es checkpassword auf, das Benutzername/Passwort verifiziert und qmail-pop3d aufruft, wenn sie zutreffen.

5.2.1.2. Installation von qmail-pop3d

1. Installieren und testen sie qmail komplett. Wenn sie für alle Benutzer POPige Mailboxen haben wollen, dann stellen sie sicher, dass defaultdelivery auf ./Maildir/ gesetzt ist. Wenn sie das /var/qmail/rc-Skript aus dem Installationsabschnitt installiert haben, dann ist das in control/defaultdelivery konfiguriert. Wenn nicht, dann ist es vermutlich in /var/qmail/rc in der qmail-start-Befehlszeile.

2. Downloaden sie ein checkpassword-Programm von http://www.qmail.org/top.html#checkpassword. Das Standard-checkpassword, http://cr.yp.to/checkpwd.html, ist eine gute Wahl, wenn sie nichts besonders prächtiges brauchen.

3. Kompilieren und installieren sie checkpassword gemäß den Anweisungen. Stellen sie sicher, dass sie es als /bin/checkpassword installieren.

4. Erstellen sie ein /var/qmail/supervise/qmail-pop3d/run-Skript, das folgendes enthält:

#!/bin/sh
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \
FQDN /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1

wobei FQDN der vollqualifizierte Domainname des POP-Servers, den sie einrichten, ist, z.B., pop.beispiel.net.


Hinweis: Das Speicherlimit, das im softlimit-Befehl spezifiziert ist, könnte angehoben werden müssen, abhängig von ihrem Betriebssystem und ihrer Hardwareplattform. Wenn Versuche, sich mit Port 110 zu verbinden fehlschlagen oder POP3-Verbindungen mysteriöserweise fehlschlagen, versuchen sie es auf 3000000 oder 5000000 anzuheben.

5. Erstellen sie ein /var/qmail/supervise/qmail-pop3d/log/run -Skript, das folgendes enthält:

#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
/var/log/qmail/pop3d

6. Richten sie das Log-Verzeichnis und die Zugriffsrechte auf die run-Skripte ein und verlinken sie den Service nach /service:

chmod +t /var/qmail/supervise/qmail-pop3d # if daemontools < 0.75
mkdir /var/log/qmail/pop3d
chown qmaill /var/log/qmail/pop3d
chmod 755 /var/qmail/supervise/qmail-pop3d/run
chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
ln -s /var/qmail/supervise/qmail-pop3d /service

7. Fügen sie das Folgende qmailctls "start"-Sektion hinzu:

if svok /service/qmail-pop3d ; then
svc -u /service/qmail-pop3d /service/qmail-pop3d/log
else
echo qmail-pop3d supervise not running
fi

8. Fügen sie das Folgende qmailctls "stop"-Sektion hinzu:

echo " qmail-pop3d"
svc -d /service/qmail-pop3d /service/qmail-pop3d/log

9. Fügen sie das Folgende qmailctls "stat"-Sektion hinzu:

svstat /service/qmail-pop3d
svstat /service/qmail-pop3d/log

10. Fügen sie das Folgende qmailctls "pause"-Sektion hinzu:

echo "Pausing qmail-pop3d"
svc -p /service/qmail-pop3d

11. Fügen sie das Folgende qmailctls "cont"-Sektion hinzu:

echo "Continuing qmail-pop3d"
svc -c /service/qmail-pop3d

12. Fügen sie das Folgende qmailctls "restart"-Sektion hinzu:

echo "* Restarting qmail-pop3d."
svc -t /service/qmail-pop3d /service/qmail-pop3d/log

5.2.2. Qpopper

Wenn sie einen POP-Daemon brauchen, der mit mbox-Format-Mailboxen arbeitet, dann können sie Qualcomms Qpopper verwenden. Qpopper ist unter http://www.eudora.com/qpopper_general/ verfügbar.

5.2.3. SolidPOP

Der SolidPOP-POP3-Server unterstützt sowohl maildir- als auch mbox-Mailboxen. Er ist verfügbar unter http://solidpop3d.pld.org.pl/.

5.2.4. Binc IMAP

Andreas Hanssen schrieb den Binc IMAP-Server. Binc IMAP ist entworfen, um den selben Authentifizierungsmechanismus (checkpassword) zu verwenden, denn qmail-pop3d verwendet, so dass es gut für qmail-Server geeignet ist. Wie qmail-pop3d unterstützt es nur Maildir-Mailboxen. Siehe: http://www.bincimap.org/.

5.2.5. Dovecot

Timo Sirainen schrieb Dovecot, einen IMAP- und POP-Server, der sowohl mbox- als auch maildir-Mailboxen unterstützt. Er wurde entworfen, um sicher zu sein. Er ist verfügbar unter http://dovecot.procontrol.fi/.

5.2.6. imap-maildir

David R. Harris hat den Patch, der maildir-Unterstützung zum University of Washington IMAP-Server hinzufügt aufgeräumt und den Installationsprozess dokumentiert. Siehe http://www.davideous.com/imap-maildir/.

5.2.7. Courier-IMAP

Sam Varshavchik schrieb einen IMAP-Server, der ausschließlich maildir-Mailboxen unterstützt. Er ist verfügbar unter http://www.inter7.com/courierimap/.

5.2.8. Cyrus

Das Carnegi Mellon Universitätsprojekt Cyrus schließt einen IMAP-Server ein. Er ist verfügbar unter http://asg.web.cmu.edu/cyrus/imapd/. Rick Updegrove schrieb einen qmail2cyrus-Wrapper für die Zustellung von Nachrichten an einen Cyrus Mail Store. Dieser Wrapper ist verfügbar unter http://msgs.securepoint.com/cgi-bin/get/qmail0308/41/1/1.html.

5.3. POP- und IMAP-Clients

5.3.1. fetchmail

fetchmail ist ein Programm, dass Mail von einem POP- oder IMAP-Server holt und lokal injiziert. fetchmail hat kein Problem damit, Mail von qmail-Servern zu holen, aber es gibt ein paar Tricks, um es korrekt auf einem qmail-Client laufen zu lassen.

Hier ist als Beispiel eine .fetchmailrc für einen Benutzer auf einem qmail-System:

poll mail.example.net proto pop3 nodns
user dsill with password flubgart is dave here
fetchall forcecr

Dies instruiert fetchmail, sich mit mail.beispiel.net mittels POP3 zu verbinden, sich als Benutzer dsill mit dem Passwort flubgart einzuloggen, alle Nachrichten abzuholen und sie an dave@localhost zuzustellen. Das forcecr veranlasst fetchmail jede Zeile mit einem Zeilenvorschub (engl. carriage return, cr; Anm. d. Übers.) zu beenden, wenn die Nachricht auf dem lokalen System mittels SMTP injiziert wird. qmail braucht das so.

5.3.2. getmail

getmail ist ein Programm, dass alle Mails von einem POP-Server abholt und es einer maildir-Mailbox zustellt. Es ist derzeit ein Pythonskript, also müssen sie den Pythoninterpreter installieren, bevor sie getmail verwenden können.

getmail wurde von Charles Cazabon geschrieben, der eine Webseite für es unter http://www.qcc.sk.ca/~charlesc/software/getmail-3.0/ unterhält.

5.4. Mehrfach-RCPT- versus Einzel-RCPT-Zustellung

Sagen wir, sie sind ein MTA und einer ihrer Benutzer sendet eine Nachricht an drei Leute bei hostx.beispiel.com. Da gibt es verschiedene Wege, wie sie das tun könnten.

  1. Sie könnten eine SMTP-Verbindung mit hostx öffnen, eine Kopie der Nachricht an den ersten Benutzer schicken, eine Kopie der Nachricht an den zweiten Benutzer schicken, eine Kopie der Nachricht an den dritten Benutzer schicken und dann die Verbindung schließen.
  2. Sie könnten drei Prozesse starten, von denen jeder eine SMTP-Verbindung mit hostx öffnet, eine Kopie der Nachricht an einen der Benutzer schickt und dann die Verbindung schließt.
  3. Sie könnten eine SMTP-Verbindung mit hostx öffnen, eine Kopie der Nachricht, die an alle drei Benutzer adressiert ist schicken und dann die Verbindung schließen.

Die erste Methode ist klar minderwertig gegenüber der dritten. Auch wenn die Nachricht winzig ist, wird sie mindestens genausolange brauchen. Und wenn die Nachricht riesig ist, dann wird sie viel länger brauchen und viel mehr Bandbreite verwenden.

Also streichen sie sie.

Die zweite und die dritte Methode sind ein bisschen interessanter.

Die dritte Methode öffnet nur eine Verbindung mit hostx und sendet nur eine Kopie der Nachricht. Das führt zu einer effizienten Nutzung von Bandbreite.

Die zweite Methode verwendet mehrere Verbindungen und sendet mehrere Kopien der Nachricht. Das "verschwendet" Bandbreite, benötigt aber aufgrund der Natur des SMTP-Protokolls weniger Round-Trip Verzögerungen und ist schneller als die dritte Methode. Sie auch einfacher als die dritte Methode, so dass der MTA auf eine verständlichere Art programmiert werden kann. Und zuletzt, weil jeder Empfänger seine eigene Kopie der Nachricht erhält, ist es möglich für den MTA VERPs zu implementieren (siehe nächster Abschnitt).

qmail verwendet immer die zweite Methode (Einzel-RCPT). Es gibt keine Patches um die dritte Methode zu implementieren (Mehrfach-RCPT)--es würde einen Haufen Arbeit erforden.

Obgleich es pathologische Fälle geben kann, bei denen es langsamer als Mehrfach-RCPT ist, wiegen die Einfachheit und die VERP-Vorteile das alles auf.

Einzel-RCPT-Zustellung verwendet mehr Bandbreite als die Mehrfach-RCPT-Zustellung, aber der Unterschied wird oft überbetont. Die meisten Nachrichten haben höchstens ein paar Empfänger und die sind normalerweise auf verschiedenen Hosts, so dass Mehrfach-RCPT-Zustellung nichts bringt. Auch auf einem Listenserver, wo Mehrfach-RCPT-Zustellung helfen sollte, sind die potenziellen Vorteile klein, weil SMTP nur einen Bruchteil der Bandbreite verwendet--HTTP kriegt normalerweise den Löwenanteil.

Wenn zum Beispiel 10% ihrer abgehenden Bandbreite an SMTP gehen und ihre SMTP-Bandbreite durch Verwendung von Mehrfach-RCPT-Zustellung um, sagen wir, 25% reduziert werden könnte, dann würde das ihre SMTP-Bandbreite um 7.5% vermindern.

5.5. VERP

Wenn eine Nachricht unzustellbar ist, dann sollte der zuständige MTA versuchen, eine Bounce-Nachricht an die Absenderadresse (engl. envelope return path, ERP; Anm. d. Übers.) zu schicken. Die Bounce-Nachricht sollte die Adresse des Empfängers, den Grund, warum die Nachricht nicht zustellbar ist und die Information, ob der Fehler vorübergehend oder permanent ist, enthalten. Manche MTAs machen es nicht richtig. Sie senden eventuell die Bounce-Nachricht an die Adresse aus dem "Von"-Kopffeld oder die Bounce-Nachricht nennt den Empfänger nicht.

Für die meisten Benutzer-an-Benutzer-Nachrichten sind diese Probleme nicht so schlimm. Man kann normalerweise einiges anhand der Zeitinformation oder anhand des Inhalts herausfinden. Für Mailing-Listen ist das Problem mit schlechten Bounce-Nachrichten schwerwiegender. Abonnenten ziehen um und lassen Mails an ihre neue Adresse weiterleiten. Wenn die neue Adresse anfängt, Zustellprobleme zu haben, kann es unmöglich sein herauszufinden, wes' Abonnenten Mail eine Bounce-Nachricht zurückliefert, wenn die Bounce-Nachricht nur die neue Adresse enthält.

Dan Bernstein hatte die Idee für eine Lösung dieses Problems, die er VERP (Variable Envelope Return Path, Veränderliche Absenderadresse) nannte. Wenn man VERPs verwendet, dann hat jede Nachricht, die an jeden Abonnenten einer Liste gesandt wird, eine einzigartige Antwortadresse. Das erlaubt einer Bounce-Nachrichten-Behandlungsprozedur die problematischen Abonnenten zu identifizieren.

Eine typische nichtgeVERPte Mailing-Liste hat z. B. eine Absenderadresse in der Form listenname-besitzer@domain. Für eine geVERPte Liste würde die Absenderadresse so aussehen: listenname-besitzer-abonnent=sdomain@ldomain, wobei die Abonnentenadresse abonnent@sdomain zwischen dem "besitzer" und dem "@" eingebettet ist. (Das "@" in der Abonnentenadresse wird durch ein "=" ersetzt.)

Der ezmlm-Listenmanager verwendet VERP automatisch, um Bounce-Nachrichten zu behandeln. Es bietet Abonnenten mit zeitweiligen Zustellproblemen sogar eine Liste der Nachrichten, die sie verpasst haben, so dass sie sie aus dem Archiv anfordern können.

Russell Nelson schrieb einen Bounce-Manager für Majordomo unter qmail, aber er pflegt ihn nicht länger. Er ist verfügbar unter http://www.qmail.org/bounceman-0.4.shar.

5.6. Fehlerbeseitung

5.6.1. Prozesse

Eine gut laufende, komplette, aber minimale qmail-Installation sollte immer die folgenden vier Prozesse haben:

Abhängig von ihrer UNIX-Variante, sollte eine der folgenden zwei Befehle diese Prozesse auflisten und vielleicht ein paar mehr:

ps -ef | grep qmail
ps waux | grep qmail

Zum Beispiel:

[dave@sparge dave]$ ps waux|grep qmail
dave 2222 0.0 0.8 836 348 p4 S 10:25 0:00 grep qmail
qmaild 351 0.0 1.0 840 400 ? S N 12:43 0:00 /usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 49491 -g 31314 0 smtp /var/qmail/bin/qmail-smtpd-
qmaild 2220 0.0 1.0 844 420 ? S N 10:25 0:00 /usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 49491 -g 31314 0 smtp /var/qmail/bin/qmail-smtpd-
qmaill 365 0.0 0.8 748 344 ? S N 12:43 0:00 splogger qmail
qmailq 368 0.0 0.7 736 292 ? S N 12:43 0:00 qmail-clean
qmailr 367 0.0 0.6 732 272 ? S N 12:43 0:00 qmail-rspawn
qmails 350 0.0 0.8 776 336 ? S N 12:43 0:00 qmail-send
root 340 0.0 0.6 724 252 ? S N 12:43 0:00 /usr/local/sbin/supervise /var/supervise/qmail-send /var/qmail/rc
root 341 0.0 0.6 724 252 ? S N 12:43 0:00 /usr/local/sbin/supervise /var/supervise/tcpserver-qmail /usr/local/bin/tcpserver -v -x /etc/tcp.smtp
root 366 0.0 0.7 736 276 ? S N 12:43 0:00 qmail-lspawn ./Mailbox
[dave@sparge dave]$

Wenn sie qmail oder qmail-smtpd unter supervise laufen lassen, wie im Beispiel oben, dann sollten sie auch diese Prozesse sehen. Und wenn sie qmail-smtpd unter tcpserver laufen lassen, dann sollten sie einen Elternprozess tcpserver plus einen zusätzlichen tcpserver-Prozess für jede aktive hereinkommende SMTP-Verbindung sehen.

Wenn sie splogger (oder multilog oder cyclog) verwenden, um das Loggin zu behandeln, dann werden sie einen splogger (oder multilog oder cyclog) -Prozess, oder zwei, als Benutzer qmaill laufen haben.

Außerdem, wenn qmail sehr beschäftigt damit ist, Nachrichten lokal oder extern zuzustellen, dann werden sie bis zu concurrencylocal qmail-local-Prozesse und bis zu concurrencyremote qmail-remote-Prozesse sehen.

5.6.2. Logs

5.6.2.1. multilog

multilog, das Teil des daemontools-Packages ist, loggt Nachrichten in eine Reihe von Dateien in einem spezifizierten Verzeichnis.

Das Log-Verzeichnis wird in der multilog-Befehlszeile spezifiziert, so dass sie es finden können, indem sie ihre qmail-Startskripte untersuchen .

Die Anzahl der Dateien im Log-Verzeichnis und die maximale Größe jede dieser Dateien werden durch die multilog-Optionen festgelegt. Die Logdateinamen sind der TAI- (Temps Atomique International) Zeitstempel der Zeit, an der die Datei begonnen wurde. Der tai64nlocal-Befehl, auch von daemontools, konvertiert TAI-Zeitstempel in lokale, menschenlesbare Zeitstempel.

Ein typischer multilog-Logeintrag sieht so aus:

@4000000038c3eeb104a6ecf4 delivery 153: success: did_1+0+0/

"@4000000038c3eeb104a6ecf4" ist der optionale, aber empfohlene TAI-Zeitstempel. "delivery 153: success: did_1+0+0/" ist die Lognachricht selber.

5.6.2.2. splogger

splogger verwendet das syslog-Log-System, um Nachrichten zeitzustempeln und sie an den syslog-Daemon zu senden. Syslog wird in /etc/syslog.conf konfiguriert. Nachrichten, die an syslog gesandt wurden, haben eine facility (engl. facility: Möglichkeit; Anm. d. Übers.) und eine priority (engl. priority: Priorität; Anm. d. Übers.). Einträge in /etc/syslog.conf filtern nach der facility und der priority um die Nachrichten an die gewünschte Logdatei, einen externen Loghost oder die Konsole zu senden. splogger loggt standardmäßig in die mail-facility, so dass das grepen der syslog.conf-Datei nach "mail" die Disposition von qmails Lognachrichten zeigen sollte.

Typische Orte sind:

Ein typischer syslog-Logeintrag sieht so aus:

Jun 3 11:35:23 sparge qmail: 928424123.963558 delivery 153: success: did_1+0+0/

"Jun 3 11:35:23" ist der syslog-Zeitstempel.

"sparge" ist der Name des Systems, das sie Nachricht sandte.

"qmail:" ist der Tag, den splogger in allen qmail-Logeinträgen platziert.

"928424123.963558" ist ein optionaler TAI-Zeitstempel (siehe nächster Abschnitt).

"delivery 153: success: did_1+0+0/" ist die Lognachricht selber.

5.6.2.3. Lognachrichten

Hier ist eine typische Log-Sequenz für eine Nachricht, die an ein externes System von einem lokalen System gesandt wurde:

1 @4000000038c3eeb027f41c7c new msg 93869
2 @4000000038c3eeb027f6b0a4 info msg 93869: bytes 2343 from <dave@sill.org> qp 18695 uid 49491
3 @4000000038c3eeb02877ee94 starting delivery 2392: msg 93869 to remote lwq@w3.to
4 @4000000038c3eeb0287b55ac status: local 0/10 remote 1/20
5 @4000000038c3eeb104a13804 delivery 2392: success: 209.85.127.177_accepted_message.
/Remote_host_said:_250_CAA01516_Message_accepted_for_delivery/
6 @4000000038c3eeb104a4492c status: local 0/10 remote 0/20
7 @4000000038c3eeb104a6ecf4 end msg 93869

Zeile 1 sagt, dass qmail eine neue Nachricht erhalten hat und dass seine Warteschlangen-ID 93869 ist. Die Warteschlangen-ID ist die i-Knotennummer der /var/qmail/queue/mess/NN/-Datei--die Warteschlangendatei, die die Nachricht enthält. Die Warteschlangen-ID ist garantiert einzigartig, so lange, wie die Nachricht in der Warteschlange verbleibt.

Zeile 2 sagt, dass die Nachricht von dave@sill.org ist und dass sie 2343 Bytes groß ist.

Zeile 3 sagt, dass qmail-remote startet, um die Nachricht an lwq@w3.to zuzustellen und dass es der Zustellung die ID 2392 zuordnet.

Zeile 4 sagt, dass 0 lokale Zustellungen und eine externe Zustellung warten.

Zeile 5 sagt, dass die Zustellung 2392 komplett und erfolgreich ist und dass sie die externe Serverantwort zurückgibt, die oft Informationen enthält, die der externe Mail-Administrator hilfreich finden sollte, um die Zustellung nachzuverfolgen. In diesem Fall ist "CAA01516" die Zustell-ID des externen Systems.

Zeile 6 sagt, dass 0 lokale Zustellungen und 0 externe Zustellungen warten, d.h., dass die Zustellung komplett ist.

Zeile 7 sagt, dass die Nachricht komplett zugestellt und aus der Warteschlange entfernt wurde. Von nun an ist die Warteschlangen-ID 93869 für eine andere Zustellung wiederverwendbar.

5.7. Große Server

Siehe auch qmail-ldap.

5.7.1. Skalierbare Parallelität

Verwenden sie einen schnellen NFS-Netzwerkdateiserver, um die Benutzerverzeichnisse zu speichern. Setzen sie mehrere gleichrangige SMTP-Server auf, die an die maildir-Mailboxen auf diesem Dateiserver zustellen.

5.8. Migration von Sendmail nach qmail

Lesen sie Dan Bernsteins Sendmail->qmail Seite unter http://cr.yp.to/qmail/sendmail.html.

5.9. Mailinglistenmanager

Mailinglistenmanager (MLM) sind Systeme, die Listenbesitzern helfen, Mailingslisten laufen zu lassen. Ihre Pflichten fallen in zwei Bereiche: die Liste der Abbonenten zu managen und die Weiterleitung der Nachrichten an die Abonnenten zu kontrollieren.

Die meisten (alle?) UNIX-Mailinglistenmanager können dazu gebracht werden, mit qmail zusammenzuarbeiten.

5.9.1. ezmlm

ezmlm wurde von Dan Bernstein geschrieben, dem Autoren von qmail. Es wurde für die Verwendung mit qmail geschrieben und verlässt sich auf einige Features von qmail. Höchst beachtenswert ist, dass es VERPs verwendet, um Bounce-Nachrichten verlässlich zu behandeln. ezmlm ist ein bisschen einzigartig unter den MLM derart, dass es Befehle, die an eine zentrale MLM-Adresse gesandt wurden, nicht behandelt: es hängt den Befehl an den Namen der Liste an. Um sich, zum Beispiel, in die Liste "irgendeine@liste.beispiel.net"-Liste einzuschreiben, sendet jemand ein Nachricht an "irgendeine-subscribe@liste.beispiel.net" (engl. subscribe: einschreiben; Anm. d. Übers.).

Für mehr Informationen über ezmlm, siehe http://www.ezmlm.org/, die inoffizielle ezmlm-Webseite und die offizielle Homepage von ezmlm-idx, einen sehr guten Add-On, dass viele nützliche Features einschließt.

5.9.2. Majordomo

Majordomo ist einer der populärsten UNIX-MLM. Es arbeitet hervorragend mit einem qmail, an dem ein paar einfachen Veränderungen vorgenommen wurden. Russ Allbery hat eine FAQ über qmail/Majordomo geschrieben, die unter http://www.eyrie.org/~eagle/faqs/mjqmail.html verfügbar ist.

5.10. Patche

Verschiedene Quellcodepatches sind für qmail verfügbar. Um einen Patch zu installieren, downloaden sie ihn, wechseln sie in den qmail-Quellcodepfad und aktivieren sie ihn mit Hilfe des patch-Befehls.

cd /usr/local/src/qmail/qmail-1.03
patch -p0 </tmp/patchfile

Hinweis: Lesen sie die patch-man-Page für mehr Informationen. Das war nur ein einfaches Beispiel. Außerdem könnten sie die aktuelle Version des GNU-Patches verwenden müssen, um einige Patche erfolgreich zu installieren. Siehe http://www.gnu.org/software/patch/patch.html.

Stoppen sie qmail, indem sie qmail-send killen, oder, wenn sie qmailctl-Skript aus dem Installationsabschnitt installiert haben, indem sie folgendes tun:

qmailctl stop

Danach bauen sie die Binärdateien neu und installieren sie sie:

make setup check

Und starten sie qmail neu:

qmailctl start

Zuletzt testen sie qmail--insbesondere den Teil, den sie geändert haben.


Hinweis: Obwohl http://www.qmail.org/ viele Patche für qmail auflistet, ist keiner von ihnen vom Autoren von qmail bestätigt worden. Sie mögen Sicherheits-, Verlässlichkeits-, Effizienz- oder funktionale Probleme herbeiführen, die es in qmail nicht gibt. Die meisten qmail-Installationen brauchen nur einige der empfohlenen Patche. Sie sollten keine Patche installieren, die sie nicht unbedingt brauchen.

5.10.1. Empfohlene Patche

qmail.org führt einen "Empfohlene Patche"-Abschnitt: http://qmail.org/top.html#patches. Diese Patche widmen sich einigen bekannten Bugs in qmail.


Hinweis: Alle empfohlenen Patche sind in der netqmail-Distribution enthalten. Siehe http://www.qmail.org/netqmail/.

5.10.1.1. errno.h-Patche

Dieser Patch beseitigt ein Problem mit fehlenden errno.h-Einschlüssen. Siehe http://news.gmane.org/article.php?id=13960&group=gmane.mail.qmail.general für eine detaillierte Erläuterung und den Patch selber.

Mate Wierdl hat errno.h-Patche für alle Software von Dan Bernstein, einschließlich qmail, daemontools und ucspi-tcp. Diese Patche sind verfügbar unter ftp://moni.csi.hu/pub/glibc-2.3.1/.

5.10.1.2. qmail-local TAB patch

Dieser Patch repariert einen kleinen Bug beim Bestimmen von .qmail-Dateien, die mit einem TAB-Zeichen beginnen. http://www.ornl.gov/its/archives/mailing-lists/qmail/2000/10/msg00696.html

5.10.1.3. IP 0.0.0.0 patch

Dieser Patch verursacht, dass die IP-Adresse 0.0.0.0 als lokal erkannt wird. http://www.suspectclass.com/~sgifford/qmail/qmail-0.0.0.0.patch

5.10.2. DNS

Aus geschichtlichen Gründen sind DNS-Antworten auf 512 Bytes limitiert. Einige große Webseiten haben begonnen, MX-Antworten zurückzuliefern, die länger sind als das. qmail und viele andere Programme haben ein Problem mit Domainnamensserver (Domain Name Server, DNS) -Suchanfragen, die sehr große Ergebnisse zurückliefern. Es gibt zwei Wege, um das in qmail zu beheben und einen Workaround, der für einige Applikationen ausreichend sein könnte.

5.10.2.1. Christopher K. Davis' Patch, http://www.ckdhr.com/ckd/qmail-103.patch

Das ist eine Adaption des Patches von Chuck Foster, die mit jeder Namensauflöserbibliothek, egal wie alt, zusammenarbeiten sollte und ein Wächter-Byte verwendet, um den "Anzahl von Bytes, die im Puffer platziert sind"-Bibliotheksbug zu vermeiden. Es teilt nur einmal bis zu 65536 zu, etwas mehr als die Größe, die notwendig ist, so dass es weniger speichereffizient sein kann als Chucks Patch (obwohl es, wie sein Patch, nur Speicher zuteilt, wenn die Antwort länger als PACKETSZ ist, das standardmäßig auf 512 Bytes gesetzt ist). Nach der Zuteilung erzwingt es eine TCP-Anfrage, anstatt die Namensauflösungsbibliothek aufzufordern, es zu tun (eine Extrarunde zwischen qmail und dem Namensserver vermeidend, obwohl es, wenn sie auf derselben Maschine oder in einem lokalen Netzwerk sind, keine große Sorge ist).

5.10.2.2. Knallen sie die Paketpuffergröße rauf auf 65536

Das funktioniert mit modernen BIND-Namensauflösungsbibliotheken, die automatisch eine TCP-Suche innerhalb des Bibliothekscodes ausführen, wenn die Antwort mit einem gesetzten Kürzungs-Bit zurückkommt. Das ist der einfachste Fix, obwohl es potenziell auch der am meisten speicherverschwendende ist, abhängig davon, wie ihr System das Paging behandelt. Um es zu tun, ersetzen sie einfach PACKETSZ mit 65536 in dns.c und bauen sie qmail neu.

5.10.2.3. Lassen sie dnscache von djbdns laufen

dnscache ist, wie der Name impliziert, ein cachender DNS-Server. Es weiß, wie es große DNS-Antworten behandeln muss und entfernt überflüssige Informationen, so dass die Antwort normalerweise viel kleiner ist als die direkte Antwort. Außerdem verbessert es die DNS-Suchleistung aller Services, die DNS verwenden. Weil es kein Patchen von qmail erfordert, könnte das eine akzeptabler Workaround sein. Unglücklicherweise ist es kein kompletter Fix, weil Antworten immer noch zu lang für qmail sein können. Siehe den djbdns-Abschnitt unter Verwandte Packages.

5.10.3. qmail-ldap

Dieser Patch von André Oppermann, implementiert Lightweight Directory Access Protocol (LDAP) -Unterstützung in qmail. LDAP ist wie ein Netzwerktelefonbuch. Wenn er qmail-ldap verwendet, sollte es für einen POP-Server möglich sein, viele Tausen Benutzer zu bedienen. Siehe http://www.nrg4u.com/.

5.11. QMTP

QMTP ist das Quick Mail Transfer Protocol (engl. Quick Mail Transfer Protocol: Schnelles Mailübertragungsprotokoll; Anm. d. Übers.), ein SMTP-Ersetzungsprotokoll, dass von Dan Bernstein entworfen wurde. Das Protokoll ist definiert unter http://cr.yp.to/proto/qmtp.txt. QMTP ist SMTP ähnlich, aber einfacher, schneller und nicht mit SMTP kompatibel. qmail schließt einen QMTP-Server, qmail-qmtpd, ein, der fast genauso wie qmail-smtpd laufen gelassen wird. QMTP verwendet normalerweise Port 209.

qmail schließt keinen QMTP-Client ein, aber das serialmail-Package tut das. maildirqmtp nimmt eine Maildir-Mailbox und stellt die darin enthaltenenen Nachrichten den jeweiligen QMTP-Servern mittels QMTP zu.

QMTP ist keine Drop-In Ersetzung für SMTP und ist im Internet noch nicht in breiter Verwendung.

Russ Nelson hat einen Patch für qmail-remote, der QMTP unterstützt. Er ist verfügbar unter http://www.qmail.org/qmail-1.03-qmtpc.patch. Er hat außerdem einen Tarball, der in /service entpackt werden kann, um einen QMTP-Service zu ermöglichen. Er ist verfügbar unter http://www.qmail.org/qmtpd-service.tar.gz.


A. Danksagung

Zuerst, Danke an Dan Bernstein für das Entwerfen und das Schreiben solch eines mächtigen und eleganten Systems. Nach fünf Jahren Anwendung beeindruckt qmail mich immer noch.

Ich möchte außerdem den Mitgliedern der qmail-Mailingliste danken. Russell Nelson verdient spezielle Erwähnung als einer der hilfreichsten, geduldigsten, sachkundigsten und lustigsten Beitragsschreiber. Sein Beitrag zur qmail-Gemeinde steht gleich an zweiter Stelle nach DJBs Beitrag.

Danke auch an jeden, der dieses Dokument geprüft oder dazu beigetragen hat, einschließlich:

Speziellen Dank an Henning Brauer für das Stiften der lifewithqmail.org-Domain und dass er sie hostet!

Life with qmail wurde unter der Verwendung des Simple Document Format (SDF) geschrieben, einer sehr coolen, Perl-basierten Markup Language, die HTML, einfachen Text, PostScript, POD und viele andere Formate schreibt. Es machte den Job viel einfacher. Siehe http://search.cpan.org/author/IANC/sdf-2.001/ für mehr Informationen.


B. Verwandte Packages

B.1. dot-forward

Sendmail verwendet .forward-Dateien, ausgesprochen dot forward, um Benutzern zu erlauben, die Zustellung der Nachrichten, die sie erhalten, zu kontrollieren. qmail verwendet einen ähnlichem Mechanismus: .qmail-Dateien. Das dot-forward-Package gibt qmail die Möglichkeit, .forward-Dateien zu verwenden. Systeme mit Sendmail oder irgendeinem anderen MTA, die .forward-Dateien verwenden, könnten in Erwägung ziehen, dot-forward zu verwenden, um zu vermeiden, ihre vorhandenen .forward in ihre .qmail-Äquivalente konvertieren zu müssen--oder einfach um den Wechsel zu qmail weniger sichtbar für ihre Benutzer zu machen.

dot-forward ist ein kleines Package: einfach zu installieren und zu konfigurieren. Der Quellcode ist verfügbar unter ftp://cr.yp.to/software/dot-forward-0.71.tar.gz.

dot-forward wurde von Dan Bernstein geschrieben, der für es eine Webseite unter http://cr.yp.to/dot-forward.html betreibt.

B.2. fastforward

fastforward ist ein anderes Sendmail-Kompatibilitäts-Add-On. Sendmail verwendet eine zentrale Alias-Datenbank, die in einer einzigen Datei vorgehalten wird, normalerweise ist das /etc/aliases. qmail verwendet eine Reihe von dot-qmail-Dateien in /var/qmail/alias, eine Datei pro Alias. Wenn sie zu qmail migrieren und sie haben eine Sendmail-Format-Alias-Datei, die sie nicht konvertieren wollen, dann gibt fastforward qmail die Möglichkeit, die Alias-Datei zu verwenden, so wie sie ist.

Der Quellcode ist verfügbar unter ftp://cr.yp.to/software/fastforward-0.51.tar.gz.

fastforward wurde von Dan Bernstein geschrieben, der für es eine Webseite unter http://cr.yp.to/fastforward.html betreibt.

B.3. ucspi-tcp

qmails SMTP-Server läuft nicht als unabhängiger Daemon. Ein Hilfsprogramm wie inetd, xinetd oder tcpserver lässt es als Daemon laufen. Wenn es eine TCP-Verbindung an Port 25 empfängt, dem SMTP-Port, dann führt es eine Kopie von qmail-smtpd aus.

Inetd ist der Standard-Netzwerkserver "super-server". Es kann mit Hilfe von /etc/inetd.conf konfiguriert werden, qmail-smtpd laufen zu lassen, aber das empfohlene Werkzeug ist tcpserver, das Teil des ucspi-tcp-Packages ist. ucspi-tcp ist ein Acronym für UNIX Client-Server Program Interface for TCP (UNIX-Client-Server-Programmschnittstelle für TCP; Anm. d. Übers.) und es wird uukspi ti ßi pi ausgesprochen.

tcpserver wird inetd vorgezogen, weil:

Der Quellcode ist verfügbar unter ftp://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz.

Gerrit Pape bietet eine Dokumentation für ucspi-tcp als man Page unter http://smarden.org/pape/djb/ an.

ucspi-tcp wurde von Dan Bernstein geschrieben, der für es eine Webseite unter http://cr.yp.to/ucspi-tcp.html betreibt.

B.4. daemontools

Das daemontools-Package enthält ein Set von Werkzeugen für die Kontroll- und Überwachungsservices. Es ist nicht obligatorisch, aber es ist äußerst empfehlenswert, insbesondere für hochbeanspruchte Systeme. Es enthält:

Der Quellcode für daemontools ist verfügbar unter: http://cr.yp.to/daemontools/daemontools-0.76.tar.gz.

Gerrit Pape bietet eine Dokumentation für daemontools als man Pages unter http://smarden.org/pape/djb/ an.

daemontools wurde von Dan Bernstein geschrieben, der für es eine Webseite unter http://cr.yp.to/daemontools.html betreibt.

B.5. qmailanalog

qmailanalog verarbeitet qmails Logdateien und erzeugt eine Reihe von Berichten, die einem sagen, wie viel und welche Art von Arbeit das System tut. Wenn sie Statistiken darüber brauchen, wie viele Nachrichten versandt oder empfangen uwrden, wie groß sie sind und wie schnell sie verarbeitet wurden, dann ist qmailanalog das, was sie brauchen.

Als Zugabe kombiniert das matchup-Programm qmails mehrere Logzeilen pro Zustellung in eine--nicht ganz anders als die vertrauten Sendmail Logs.

Der Quellcode für qmailanalog ist verfügbar unter http://cr.yp.to/software/qmailanalog-0.70.tar.gz.

qmailanalog wurde von Dan Bernstein geschrieben, der für es eine Webseite unter http://cr.yp.to/qmailanalog.html betreibt.


Hinweis: qmailanalog verlässt sich auf Logeintrag-Zeitstempel im fraktionalen Sekundenformat, das von accustamp verwendet wird. Um es mit von multilog erzeugten Logs im TAI64N-Format zu verwenden, werden sie sie in das alte Format übertragen müssen. Ein Programm, dass das tut, ist verfügbar unter http://www.qmail.org/tai64nfrac.

B.6. rblsmtpd

Wenn sie noch nie gespammt wurden, dann können sie sich sehr glücklich schätzen. Die meisten E-Mail-Benutzer sind nur zu vertraut mit Unerwünschter Massen E-Mail (Unsolicited Bulk E-mail, UBE), auch bekannt als "Spam". Das meiste davon ist Werbung für Sexseiten, Kettenbriefe und andere Betrügereien. Früher, bis etwa 1998 oder so, waren die meisten MTAs im Internet offene Relais, d.h., sie akzeptierten Mails von jedem für jeden, egal ob weder der Absender oder der Empfänger lokal waren. Spammer verwenden offene Relais, wenn sie welche finden können, um ihre Spam zu versenden. Es verbirgt ihre Wege, leitet den Rückschlag zur "unschuldigen" Relaisseite um und spart ihnen eine Menge CPU-Zeit und Netzwerkbandbreite.

Solche offenen Relais werden heutzutage als sehr schlecht angesehen und mehrere Anti-Spam Freiwilligengruppen haben eine Mechanismus erschaffen, um offene Relais und andere übliche Quellen für Spam zu identifizieren, so dass sie verhindern können, dass SMTP-Verbindungen von ihnen akzeptiert werden.

rblsmtpd ist ein RBL-SMTP-Daemon. Er sitzt zwischen tcpserver und qmail-smtpd und weist Verbindungen von Systemen ab, die von einer dieser Listen identifiziert wurden.

Um beispielsweise rblsmtpd unter tcpserver laufen zu lassen, versuchen sie sowas wie:

#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -H -l 0 -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd\
-r relays.ordb.org /var/qmail/bin/qmail-smtpd 2>&1

rblsmtpd war vormals als unabhängiges Werkzeug verfügbar, kommt aber nun mit ucspi-tcp mit.

rblsmtpd wurde von Dan Bernstein geschrieben, der für es eine Webseite unter http://cr.yp.to/ucspi-tcp/rblsmtpd.html betreibt.

B.7. serialmail

qmail wurde für Systeme mit Vollzeit-Hochgeschwindigkeits-Verbindung entworfen. serialmail ist ein Satz von Werkzeugen, die qmail besser für periodische Niedriggeschwindigkeitsverbindungen rüstet. Mit serialmail auf so einem System ist qmail konfiguriert, um alle externen Mails einer einzelnen maildir zuzustellen. Der serialmail-maildirsmtp-Befehl wird verwendet, um die Maildir zum Mail-Rechner des ISPs zu schicken, wenn die Verbindung aufgebaut wurde. Wenn der ISP QMTP (siehe QMTP unter Fortgeschrittene Themen) unterstützt, kann auch maildirqmtp verwendet werden.

serialmail kann auf der ISP-Seite der Verbindung verwendet werden, um AutoTURN zu implementieren: Eine SMTP-Verbindung vom Clienten aus animiert den Server, eine Verbindung zurück zum Clienten aufzubauen, um Nachrichten zu senden, die auf dem Server für den Client in eine Warteschlange eingereiht wurden. Das ist vergleichbar mit der ETRN-SMTP-Funktion.

Der Quelltext für serialmail ist verfügbar unter http://cr.yp.to/software/serialmail-0.75.tar.gz.

serialmail wurde von Dan Bernstein geschrieben, der für es eine Webseite unter http://cr.yp.to/serialmail.html betreibt.

B.8. mess822

mess822 ist eine Bibliothek und ein Satz von Anwendungen, um RFC 822-konforme Mailnachrichten syntaktisch zu analysieren. Die Anwendungen schließen ein:

Der Quellcode für mess822 ist verfügbar unter http://cr.yp.to/software/mess822-0.58.tar.gz.

mess822 wurde von Dan Bernstein geschrieben, der für es eine Webseite unter http://cr.yp.to/mess822.html betreibt.

B.9. ezmlm

ezmlm ist ein einfach benutzbarer Hochleistungs-Mailinglisten-Manager (MLM) für qmail. Wenn sie mit LISTSERV oder Majordomo vertraut sind, dann wissen sie, was eine Mailingslisten-Manager tut. Für mehr Informationen über Mailinglisten unter qmail siehe Mailinglisten-Manager unter Fortgeschrittene Themen.

Der Quellcode für ezmlm ist verfügbar unter http://cr.yp.to/software/ezmlm-0.53.tar.gz.

ezmlm wurde von Dan Bernstein geschrieben, der für es eine Webseite unter http://cr.yp.to/ezmlm.html betreibt.

Fred Lindberg und Fred B. Ringel haben eine Erweiterung für ezmlm namens ezmlm-idx entwickelt. Sie fügt eine Menge nützlicher Eigenschaften hinzu und wird stark empfohlen. Es sit verfügbar unter http://www.ezmlm.org/.

B.10. safecat

safecat schreibt eine Datei verlässlich in eine Maildir-Mailbox. Es ist insbesondere nützlich, um Nachrichten mit Hilfe von procmail-Rezepten abzulegen. Das folgende Rezept legt beispielsweise alle Nachrichten in Maildir ab:

:0w
|safecat Maildir/tmp Maildir/new

safecat wurde von Len Budney geschrieben, der für es eine Webseite unter http://www.pobox.com/~lbudney/linux/software/safecat.html betreibt.

B.11. djbdns

djbdns ist ein DNS-Server, der von dem Autoren von qmail geschrieben wurde. Es schließt tinydns, einen DNS-Content-Server und dnscache, einen cachenden DNS-Server, ein.

Die offizielle Webseite für djbdns ist http://cr.yp.to/djbdns.html.

B.12. maildrop

maildrop ist ein Mail-Filter vergleichbar mit procmail.

maildrop wurde von Sam Varshavchik geschrieben, der für es eine Webseite unter http://www.flounder.net/~mrsam/maildrop betreibt.

B.13. syncdir

syncdir ist eine kleine Bibliothek, die die link()-Systemaufrufe synchronisiert. Das ist notwendig, wenn qmail mit der Warteschlange auf einem Dateisystem verwendet wird, das link()-Aufrufe nicht synchron ausführt, wie Linux' ext2fs, Reiserfs, SGIs XFS und BSD FFS mit Softupdates.

syncdir wurde von Bruce Guenter geschrieben und ist verfügbar unter http://untroubled.org/syncdir/. Installationsanweisungen sind verfügbar unter http://www.ornl.gov/its/archives/mailing-lists/qmail/2001/12/msg00949.html.


C. Wie Internet-Mail funktioniert

C.1. Wie eine Nachricht von Punkt A nach Punkt B kommt

Wenn ein Benutzer auf einem Host eine Nachricht an einen Benutzer auf einem anderen Host schickt, passieren viele Dinge hinter den Kulissen, die sie nicht erwarten würden.

Sagen wir Alice, alice@alpha.beispiel.com, möchte eine Nachricht an Bob, bob@beta.beispiel.com, schicken. Hier ist, was passiert:

1. Alice schreibt die Nachricht mit ihrem Mail-User-Agenten (MUA), sowas wie mutt oder pine. Sie gibt den Empfänger in einem An-Feld an, das Betreff der Nachricht in einem Betreff-Feld und den Text der Nachricht selbst. Das sieht dann etwa so aus:

An: bob@beta
Betreff: Mittagessen

Wie wär's mit 'ner Pizza?

2. Wenn sie mit den Nachricht zufrieden ist, weist sie den MUA an, sie abzuschicken.

3. Jetzt kann der MUA zusätzliche Kopffelder wie Datum und Nachrichten-Id hinzufügen und die Eingaben von Alice modifizieren (z.B. bob@beta durch "Bob <bob@beta.beispiel.com>" ersetzen). Als nächstes injiziert der MUA die Nachricht in das Mail-System. Es gibt zwei Wege, um das zu tun: er kann eine Programm laufen lassen, das vom Mail-System für das Mail-Injizieren bereitgestellt wird oder er kann eine Verbindung mit dem Simple Mail Transfer Protocol (SMTP)-Port entweder auf dem lokalen System oder mit einem externen Mail-Server herstellen. In diesem Beispiel wollen wir annehmen, dass der MUA eine lokales Injektionsprogramm verwendet, um Nachrichten an den MTA weiterzureichen. Die Details des Injektionsprozesses variieren je nach MTA, aber auf UNIX-Systemen ist die sendmail-Methode der de facto-Standard. Mit dieser Methode kann der MUA die Kopfzeilen und den Nachrichtentext, getrennt durch eine Leerzeile, in eine Datei tun und die Datei an das sendmail-Programm weiterreichen.

4. Wenn die Injizierung klappt--die Nachricht war syntaktisch korrekt und sendmail wurde vorschriftsgemäß aufgerufen--dann fällt die Nachricht jetzt in der Zuständigkeit des MTA. Die Detail variieren je nach MTA sehr, aber generell untersucht der MTA auf alpha die Kopfzeilen, um herauszufinden, wohin die Nachricht zu senden ist, öffnet eine SMTP-Verbindung mit beta und leitet die Nachricht an den MTA auf dem beta-System weiter. Der SMTP-Dialog erfordert, die Nachrichten in zwei Teilen zu senden: den Umschlag, der die Empfängeradresse (bob@beta.beispiel.com) und die Antwortadresse (alice@alpha.beispiel.com) spezifiziert und die Nachricht selber, die aus Kopfzeilen und Nachrichtentext besteht.

5. Wenn der beta-MTA die Nachricht abweist, vielleicht, weil es keinen Benutzer bob auf dem System gibt, sendet der MTA auf alpha eine bounce-Nachricht an die Antwortadresse, alice@alpha, um sie auf das Problem hinzuweisen.

6. Wenn der beta-MTA die Nachricht akzeptiert, dann schaut er auf die Empfängeradresse, stellt fest, ob sie lokal auf beta oder auf einem externen System ist. In diesem Fall ist sie lokal, so dass der MTA entweder die Nachricht selber zustellt oder an einen mail delivery agent (MDA) wie /bin/mail oder procmail weiterreicht.

7. Wenn die Zustellung fehlschlägt, vielleicht, weil Bob sein Mailboxlimit überschritten hat, sendet der beta-MTA eine Bounce-Nachricht an die Anwortadresse vom Umschlag , alice@alpha.

8. Wenn die Zustellung erfogreich ist, wartet die Nachricht in Bobs Mailbox, bis sein MUA sie liest und anzeigt.

C.2. Mehr Informationen

Für Informationen darüber, wie Internet-Mail funktioniert, lesen eins oder mehr von den folgenden :

C.2.1. Internet RFCs

Die sogenannten "Bitten um Kommentare zum Internet" (Internet Internet Requests for Comment, RFC) sind die offizielle Dokumentation des Internets. Die meisten davon gehen weit über den Kommentarstatus hinaus und definieren Internetprotokolle wie TCP, FTP, Telnet und die verschiedenen Mailstandards und Protokolle.

Eine umfassende Liste von auf Mail bezogenen RFCs ist verfügbar vom Internet-Mail-Konsortium unter http://www.imc.org/mail-standards.html.


D. Architektur

D.1. Modulare Systemarchitektur

Internet MTAs führen eine Vielfalt von Aufgaben aus. Frühe Entwürfe wie Sendmail und smail sind monolitisch. Mit anderen Worten, sie haben ein großes, komplexes Programm, das "die Kostüme wechselt": es zieht ein Kostüm an, um ein SMTP-Server zu sein, ein anderes, um ein SMTP-Client zu sein, ein anderes, um Mails lokal zu injizieren, ein anderes, um die Warteschlange zu verwalten, usw.

qmail ist modular. Jede dieser Funktionen wird von einem separaten Programm ausgeführt. Das Ergebnis ist, dass die Programme kleiner, einfacher und weniger anfällig sind, funktionale oder sicherheitsrelevante Softwarefehler zu enthalten. Um die Sicherheit weiter steigern, laufen qmails Module mit verschiedenen Privilegien und sie "vertrauen" einander nicht: sie nehmen nicht an, dass die anderen Module immer nur das tun, was von ihnen erwartet wird.

Die Basismodule sind:

Modul Funktion
qmail-smtpd akzeptiert/weist Nachrichten mittels SMTP ab
qmail-inject injiziert Nachrichten lokal
qmail-rspawn/qmail-remote bearbeitet externe Zustellungen
qmail-lspawn/qmail-local bearbeitet lokale Zustellungen
qmail-send bearbeitet die Warteschlange
qmail-clean leert die Warteschlange

Es gibt auch eine Kehrseite des modularen Ansatzes. Anders als bei einem monolitischen MTA sind Interaktionen zwischen Modulen fest definiert und die Module tauschen nur das Minimum der notwendigen Informationen untereinander aus. Das ist generell eine gute Sache, aber manchmal macht es es schwer, bestimme Dinge zu erledigen Der sendmail "-v" Parameter weist Sendmail beispielsweise an, eine Mitschrift seiner Aktionen für Debug-Zwecke in den Standard-Output zu schreiben. Weil nur die eine sendmail-Binärdatei Injektion, Warteschlange, Alias-Verarbeitung, .forward-Datei-Verarbeitung und externes Weiterleiten mittels SMTP abhandelt, ist es einfach, den ganzen Zustellprozess zu verfolgen, bis die Nachricht zugestellt ist. Eine gleichwertige Möglichkeit existiert bei qmail nicht und würde substanzielle Quelltextänderungen und zusätzliche Komplexität erfordern, um das Weiterreichen des "debug"-Parameters von Modul zu Modul zu implementieren.

D.2. Dateistruktur

/var/qmail ist das Wurzelverzeichnis der qmail-Dateistruktur. Das kann geändert werden, während qmail kompiliert wird, aber es ist eine gute Idee, es unverändert zu lassen, so dass andere Administratoren wissen, wo sie bestimmte Dinge finden können. Wenn sie wirklich die gesamte oder einiges aus der qmail-Verzeichnisstruktur verschieben wollen, ist es besser, das mittels symbolischer Links zu tun. Siehe den Verzeichnisse erstellen-Abschnitt des Installationsabschnittes für Details.

Die Hauptverzeichnisse sind:

Verzeichnis Inhalt
alias .qmail-Dateien für systemweite Aliase
bin Programmbinärdateien und Skripte
boot Autostartskripte
control Konfigurationsdateien
doc Dokumentation (ohne Man Pages)
man Man Pages
queue Die Warteschlange noch nicht versendeter Nachrichten
users Die qmail-users (qmail-Benutzer; Anm. d. Übers.) -Datenbankdateien

D.3. Warteschlangenstruktur

Die Datei INTERNALS im Kompilierverzeichnis bespricht die Details der Warteschlange gründlicher. Das ist mehr ein Überblick der Struktur einer Warteschlange.

Unterverzeichnis Inhalt
bounce permanente Zustellfehler
info* Absenderadressen
intd Umschläge, die gerade von qmail-queue bearbeitet werden
local* lokale Empfängeradressen
lock Sperrdateien
mess* Nachrichtendateien
pid von qmail-queue verwendet, um eine i-node-Nummer herauszufinden
remote* externe Empfängeradressen
todo fertige Umschläge

Hinweis: Verzeichnisse, die mir einem "*" gekennzeichnet sind, enthalten eine Reihe von aufgeteilten Unterverzeichnissen namens "0", "1", ..., bis (conf-split-1), wobei conf-split eine Einstellung ist, die beim Kompilieren in der Datei conf-split im Kompilierverzeichnis angegeben wird. Der Standardwert ist 23. Der Zweck des Aufteilens dieser Verzeichnisse ist, die Anzahl der Dateien in einem einzelnen Verzeichnis auf stark beanspruchten Servern zu verringern. conf-split muss eine Primzahl sein.

Dateien im mess-Unterverzeichnis sind nach ihrer i-node-Nummer benannt. Was das bedeutet ist, dass sie sie nicht von Hand mit Standard-UNIX-Werkzeugen wie mv, dump/restore und tar bearbeiten können. Es gibt ein paar von Benutzern beigesteuerte Werkzeugen auf http://www.qmail.org/, die Warteschlangendateien korrekt umbenennen können.


Hinweis: Es ist gefährlich, Warteschlangendateien zu bearbeiten, wenn qmail läuft. Wenn sie die Warteschlange bearbeiten wollen, stoppen sie zuerst qmail, spielen sie vorsichtig mit der Warteschlange und starten sie dann qmail neu.

D.4. Bilder

Ese gibt eine Reihe von Dateien in /var/qmail/doc, deren Namen mit PIC beginnen. Das sind "Bilder" in Textform von verschiedenen Situationen, die qmail behandelt. Sie zeigen die Flusskontrolle zwischen den verschiedenen Modulen und sind sehr hilfreich für das Debuggen und die Erstellung komplexer Konfigurationen.

Dateiname Szenario
PIC.local2alias lokal injizierte Nachricht, die an ein lokales Alias zugestellt wird
PIC.local2ext lokal injizierte Nachricht, die an eine Erweiterungsadresse zugestellt wird
PIC.local2local lokal injizierte Nachricht, die an einen lokalen Benutzer zugestellt wird
PIC.local2rem lokal injizierte Nachricht, die an eine externe Adresse zugestellt wird
PIC.local2virt lokal injizierte Nachricht, die an eine lokale Adresse auf einer lokalen virtuellen Domain zugestellt wird
PIC.nullclient eine Nachricht, die in einen Null-Client injiziert wird
PIC.relaybad ein Fehlversuch, den lokalen Host als Relais zu verwenden
PIC.relaygood ein erfolgreicher Versuch, den lokalen Host als Relais zu verwenden
PIC.rem2local eine Nachricht, die mittels SMTP für einen lokalen Benutzer empfangen wurde

Diese Dateien sind auch online verfügbar unter:

Wenn sie echte Bilder von qmail haben wollen, dann lesen sie Andre Oppermans "Großes qmail-Bild" unter http://www.nrg4u.com/.


E. Selten gestellte Fragen

Das sind Fragen, die nicht als oft gestellt eingeordnet werden können, die aber wichtig und nicht leicht zu beantworten sind.

E.1. In welchen Abständen versucht qmail aufgeschobene Nachrichten zu senden?

Jede Nachricht hat ihren eigenen Wiederholungsplan. Je länger eine Nachricht unzustellbar bleibt, desto seltener versucht qmail sie zu versenden. Der Wiederholungsplan ist nicht konfigurierbar. Die folgende Tabelle zeigt den Wiederholungsplan für eine Nachricht, die einem externen Empfänger nicht zugestellt werden kann, bis sie abgewiesen wird. Lokale Nachrichten verwenden einen ähnlichen, aber geraffteren Plan.

Zustellversuch Sekunden D-HH:MM:SS
1 0 0-00:00:00
2 400 0-00:06:40
3 1600 0-00:26:40
4 3600 0-01:00:00
5 6400 0-01:46:40
6 10000 0-02:46:40
7 14400 0-04:00:00
8 19600 0-05:26:40
9 25600 0-07:06:40
10 32400 0-09:00:00
11 40000 0-11:06:40
12 48400 0-13:26:40
13 57600 0-16:00:00
14 67600 0-18:46:40
15 78400 0-21:46:40
16 90000 1-01:00:00
17 102400 1-04:26:40
18 115600 1-08:06:40
19 129600 1-12:00:00
20 144400 1-16:06:40
21 160000 1-20:26:40
22 176400 2-01:00:00
23 193600 2-05:46:40
24 211600 2-10:46:40
25 230400 2-16:00:00
26 250000 2-21:26:40
27 270400 3-03:06:40
28 291600 3-09:00:00
29 313600 3-15:06:40
30 336400 3-21:26:40
31 360000 4-04:00:00
32 384400 4-10:46:40
33 409600 4-17:46:40
34 435600 5-01:00:00
35 462400 5-08:26:40
36 490000 5-16:06:40
37 518400 6-00:00:00
38 547600 6-08:06:40
39 577600 6-16:26:40
40 608400 7-01:00:00

E.2. Warum kann ich keine Mail an einen großen Rechner mit vielen MXs senden?

Wenn sie folgendes erhalten:

deferral: CNAME_lookup_failed_temporarily._(#4.4.3)/

dann kann das Problem sein, dass qmail keine langen Namensserver-Suchantworten verarbeiten kann. Die Lösung ist, einen Patch oder einen Workaround zu installieren. Siehe Patche unter Fortgeschrittenen Themen.

Es bleibt die Fragen, warum einige Leute kein Problem haben, solche Server zu erreichen. Grundsätzlich kann, abhängig von der zeitlichen Abfolge und der Reihenfolge der Suchanfragen, die an ihren lokalen Namensserver gestellt werden, die Größe der Antwort auf eine ANY (IRGENDWER, Anm. d. Übers.) -Suche bei "aol.com" größer sein als das 512 Bytelimit eines UDP-Packetes oder auch nicht.

"Oder auch nicht" wird wahrscheinlich zutreffen, wenn der A und MX-Eintrag die Zeit überschreiten, der NS-Eintrag jedoch nicht. Weil die .COM-Server ein 2-Tages-TTL setzen, AOL jedoch ein 1-Stunden-TTL, wird das öfter auf weniger beschäftigten Namensservern passieren. Beschäftigtere Namensserver werden mit größerer Wahrscheinlichkeit solche Einträge zu irgendeiner Zeit in ihrem Cache haben und damit ein ungepatchtes qmail frustieren, das versucht, CNAMEn herauszufinden.

Ein besserer Test ist, eine Mail an gibtesgarnicht@grosser-mx.ckdhr.com zu senden; wenn das ihre Warteschlange entleert und Bounce-Nachrichten von ckdhr.com auslöst, dann kann ihr MTA Mails an Hosts mit MX-Listen versenden, die die 512 Byte überschreiten. (Wen sie ein einzelnes RRset verwenden, mit einem einzelnen TTL, das 512 Bytes überschreitet, dann kann das Problem untersucht werden, ohne auf das zeitliche Abfolge und die Reihenfolge anderer Suchanfragen abhängig zu sein.)

E.3. Was ist QUEUE_EXTRA?

QUEUE_EXTRA ist eine Konfigurationsvariable für das Kompilieren, die einen zusätzlichen Empfänger angibt, der jeder Zustellung zugefügt wird. Das wird in erster Linie für Logs verwendet. Beispielsweise beschreibt die FAQ, wie man QUEUE_EXTRA verwendet, um Kopien aller hereinkommenden und hinausgehenden Nachrichten aufzubewahren.

Um QUEUE_EXTRA zu verwenden, editieren sie extra.h, wobei sie den zusätzlichen Empfänger im Format "TEmpfänger\0" angeben und geben sie die Länge der QUEUE_EXTRA-Zeichenkette in QUEUE_EXTRALEN an (das "\0" zählt als ein Zeichen). Zum Beispiel:

#define QUEUE_EXTRA "Tlog\0"
#define QUEUE_EXTRALEN 5

Stoppen sie qmail, wenn es läuft. Wenn sie das qmailctl-Skript aus dem Installationsabschnitt installiert haben, dann können sie das tun, indem sie folgendes machen:

qmailctl stop

Wenn sie das qmailctl-Skript nicht haben, sollten sie ihr Start/Stop-Skript verwenden oder qmail-send ein TERM-Signal senden.

Dann kompilieren sie qmail neu, indem sie folgendes verwenden:

make setup check

Bestücken sie ~alias/.qmail-log mit irgend einer Log-Methode. Z.B. um Message-IDs zu loggen, mit:

| awk '/^$/ { exit } /^[mM][eE][sS][sS][aA][gG][eE]-/ { print }'

Zuletzt starten sie qmail neu.


F. Fehlermeldungen

qmail-Fehlermeldungen und was sie bedeuten.

Siehe RFC 1893 für eine Beschreibung der Fehlerkodes im Klammerteil.

Dieser Anhang ist unvollständig.


G. Gotchas

Diese "gotchas" machen qmail-Neulingen oft Schwierigkeiten.

G.1. qmail stellt Superusern keine Mails zu.

Um der Möglichkeit vorzubeugen, dass qmail-local Befehle als privilegierter Benutzer ausführt, ignoriert qmail alle Benutzer, deren UID 0 ist. Das ist in der qmail-getpw-Man Page dokumentiert.

Das bedeutet nicht, dass qmail nicht an root zustellen würde, es bedeutet nur, dass solch eine Zustellung von einem nicht-privilegierten Benutzer vorgenommen werden muss. Normalerweise erstellt man ein Alias für root in ~alias/.qmail-root.

G.2. qmail stellt nicht an Benutzer zu, die kein eigenes Home-Verzeichnis haben.

Ein weiters Sicherheitsmerkmal und einfach gute allgemeine Praxis. Das ist in der qmail-getpw-Man-Page dokumentiert.

G.3. qmail stellt nicht an Benutzer zu, deren Benutzernamen Großbuchstaben enthalten.

qmail konvertiert den gesamten "lokalen Teil"--alles links des "@" in einer Adresse, in Kleinbuchstaben. Die Man-Page verrät das nicht, aber der Code tut es. Der Fakt, dass es Benutzer mit Großbuchstaben ignoriert, ist in der qmail-getpw-Man-Page dokumentiert.

G.4. qmail ersetzt Punkte (.) in Erweiterungsadressen durch Doppelpunkte (:).

Ein weiteres Sicherheitsmerkmal. Der Zweck ist, Erweiterungsadressen davor zu bewahren, die Verzeichnisstruktur mittels ".." hinaufzuwandern. Indem es sie mit Doppelpunkten ersetzt, stellt qmail sicher, dass alle .qmail-Dateien für alle Benutzer im selben Home-Verzeichnis sind. Dokumentiert in der dot-qmail-Man-Page.

G.5. qmail konvertiert Großbuchstaben in Erweiterungsadressen in Kleinbuchstaben.

Das ist ein anderes Resultat des Faktes, dass qmail den ganzen lokalen Teil der Adresse in Kleinbuchstaben umwandelt. Dokumentiert in der dot-qmail-Man-Page.

G.6. qmail verwendet /etc/hosts nicht.

qmail verwendet niemals /etc/hosts, um die IP-Adresse, die mit einem Hostnamen verbunden ist, herauszufinden. Wenn sie Namen in Kontrolldateinen verwenden, muss qmail Zugriff auf einen Namensserver haben.

Es ist trotzdem möglich, qmail auf Systemen laufen zu lassen, die keinen Zugriff auf Namensserver haben. Hosts in Kontrolldateien können anhand ihrer IP-Adresse spezifiert werden, indem man sie in eckige Klammern einschließt ([]), z.B:

[10.1.2.219]

Eigentlich sind die eckigen Klammern nicht immer notwendig--aber es ist eine gute Idee, sie trotzdem zu verwenden.

G.7. qmail loggt SMTP-Aktivitäten nicht mit.

Wegen eine Reihen von Grünnden loggt qmail SMTP-Verbindungen, -Verbindungsabweisungen, falsche Befehle oder richtige Befehle nicht mit. tcpserver kann verwendet werden, um Verbindungen und recordio um den gesamten SMTP-Dialig mitzuloggen. recordio ist Teil des ucspi-tcp-Packages. Die Prozedur ist in der FAQ unter http://cr.yp.to/qmail/faq/servers.html#recordio dokumentiert.

G.8. qmail erzeugt keine Verzögerungshinweise.

Wenn Sendmail eine Nachricht nicht innerhalb von ein paar Stunden zustellen kann, normalerweise vier, dann sendet es eine Verzögerungsmitteilung an den Urheber. Diese Mitteilungen sehen aus wie Bounce-Nachrichten, aber sie zeigen nicht an, dass die Zustellung unwiderruflich fehlgeschlagen ist.

qmail sendet solche Warnungen nicht. Eine unzustellbare Nachricht wird nur an den Urheber zurückgesandt, nachdem sie queuelifetime in der Warteschlange zugebracht hat.

G.9. qmail ist langsam, wenn /var/qmail/queue/lock/trigger abgeschmiert ist/die falschen Rechte hat/eine reguläre Datei ist.

qmail-queue und qmail-send kommunizieren mittels eine benannten Pipe namens /var/qmail/queue/lock/trigger. Wenn diese Pipe verstopft ist, beachtet qmail-send neue Nachrichten für etwa eine halbe Stunde nicht.

Der beste Weg sicherzustellen, das sie richtig eingestellt ist, ist "make check" vom Quellcodeverzeichnis aus zu starten. Wenn das nicht möglich ist, stellen sie sicher, dass sie etwa so aussieht:

# ls -l /var/qmail/queue/lock/trigger
prw--w--w- 1 qmails qmail 0 Jul 5 21:25 /var/qmail/queue/lock/trigger

Beachten sie insbesondere das "p" am Anfang der Zeile (es bedeutet, dass es eine benannte Pipe ist), den Modus (insbesondere dass sie für jedermann schreibbar ist) und den Benutzer/die Benutzergruppe.

G.10. DNS- oder IDENT-Lookups können SMTP langsam machen

Wenn qmail-smtpd langsam bei der Beantwortung von Verbindungsanfragen ist, dann liegt das Problem wahrscheinlich bei DNS-Reverse-Lookups oder IDENT-Lookups. Wenn sie qmail-smtpd mit tcpserver starten, entfernen sie die "-h", "-p" und "-r"-Optionen und fügen sie "-H", "-P", "-R" und "-l Hostname" hinzu.

Siehe die tcpserver-Dokumentation unter http://cr.yp.to/ucspi-tcp/tcpserver.html für eine Erklärung dieser Optionen.

G.11. Wagenvorlauf/Zeilenvorschub-Zeilen (Carriage Return/Linefeed , CRLF) funktionieren nicht

qmail-inject und andere lokale Injektionsmechanismen, wie sendmail, funktionieren nicht richtig, wenn Nachrichten mit DOS-Wagenvorlauf/Zeilenvorschub (CRLF)-Zeilenumbrüchen injiziert werden. Anders als Sendmail verlangt qmail, dass lokal injizierte Nachrichten Unix-Zeilenumbrüche (LF) verwenden. Das ist ein verbreitetes Problem mit PHP-Skripten.

G.12. qmail-send oder tcpserver hören auf zu arbeiten, wenn das Log gesichert wird

Wenn sie mit einem überwachten Log-Service loggen, wie in Abschnitt 2 beschrieben, und der Log-Service aus irgend einem Grund fehlschlägt: Festplatte voll, Rechtschreibfehler im run-Skript, Log-Verzeichnis fehlerhaft konfiguriert, etc., dann wird der Datenverarbeitungskanal eventuell verstopfen, so dass der Service blockiert oder sich aufhängt. Beseitigen sie das Problem (siehe Fehlerbeseitigung) und alles wird in seinen Normalzustand zurückkehren.

G.13. qmail-smtpd überprüft den lokalen Teil einer Adresse nicht.

Wenn beispiel.com in control/rcpthosts aufgelistet ist, werden Mails an irgendwas@beispiel.com während der SMTP-Session akzeptiert werden. Wenn irgendwas weder ein gültiger Benutzer noch ein gültiges Alias ist, wird qmail eine Bounce-Nachricht an die Absenderadresse senden.

Einige schlichte Relais-Test nehmen an, dass wenn eine Adresse akzeptiert wird, sie auch zugestellt wird. Das ist falsch. Wenn irgendwer behauptet, dass ihr System ein offenes Relais ist, verlangen sie eine Kopie der Nachricht, die durch ihn geschleust wurde--einschließlich des kompletten Headers, insbesondere der Empfangen-Felder--und vergleichen sie sie mit ihren Logs.

G.14. Firewalls können einen Externzugriff auf ihren SMTP/POP3/IMAP-Server blockieren.

Wenn sie einen SMTP-, POP3- oder IMAP-Server installiert haben und sie können sich mit ihm vom lokalen Host oder vom lokalen Netzwerk aus verbinden, nicht jedoch von einem externen Host, dann keine eine Firewall das Problem sein.

Die erste Stelle, an der man nachsehen sollte, ist der Server selbst. Red Hat Linux blockiert SMTP beispielsweise in der Standardkonfiguration mittels iptables. Auch andere Paketfiltermechanismen wie ipchains können zuständig sein.

Es ist auch möglich, dass ihr Internet Service Provider (ISP) bestimmte Ports blockiert, um Spamming vorzubeugen oder um ihre Nutzungsbedingungen (Terms of Service, TOS) durchzusetzen. Kontaktieren sie den technischen Support ihres ISPs, nachdem sie sichergestellt haben, dass es nicht an Paketfilterung liegt und dass das Laufenlassen eines Servers nicht gegen ihre TOS verstößt.

G.15. qmail-inject setzt das Von-Feld auf anonymous, wenn USER und LOGNAME nicht gesetzt sind.

Wenn eine Nachricht, die mittels qmail-inject gesendet wird, kein Von-Feld enthält, dann sucht qmail-inject nach einer Umgebungsvariablen, um herauszufinden, welcher Benutzer die NAchricht sendet. Die Variablen, die es sucht, sind, in dieser Reihenfolge: QMAILUSER, MAILUSER, USER und LOGNAME.

Normale Benutzer-Login-Sessions setzen üblicherweise USER und/oder LOGNAME, aber manche Stapeljobs, wie solche, die von cron gestartet werden, haben vielleicht keins von beiden gesetzt.

Um ihre cron-Jobs zu veranlassen, eine gültiges Von-Feld zu setzen, setzten sie eine dieser Umgebungsvariablen, bevor sie irgendwelche Mailnachrichten abschicken.

G.16. qmail-send stoppt nicht immer sofort, wenn es gekillt wurde.

Wenn man qmail-send ein TERM-Signal sendet, beendet es sich nicht sofort, wenn gerade Zustellungen bearbeitet werden. qmail-send wird auf alle qmail-local- und qmail-remote-Prozesse warten, bevor es sich beendet, so dass es die Ergebnisse dieser Zustellungen aufzeichnen kann. Deswegen könnte "qmailctl restart" oder "qmailctl stop" melden, dass qmail-send gestoppt ist, obwohl es noch läuft. Starten sie immer "qmailctl stat", um sicherzustellen, dass das Stoppen oder Neustarten tatsächlich abgeschlossen ist.

Beachten sie auch, dass qmail-send immer die Warteschlange durchsucht, bevor es herunterfährt, so dass das bei sehr großen Warteschlangen eine deutliche Verzögerung hervorrufen kann.


H. Oft gestellte Fragen über Life with qmail

H.1. Welche Version hat Life with qmail?

Dies ist LWQ Version 2004-03-28.

H.2. Wem gehört Life with qmail?

Life with qmail steht unter dem Copyright 1999-2004 David E. Sill

http://Web.InfoAve.Net/~dsill/dave/

H.3. Welcher Lizenz unterliegt Life with qmail?

Life with qmail unterliegt der OpenContent License, Version 1.0. Siehe http://www.opencontent.org/opl.shtml für den kompletten Lizenztext. Grundsätzlich können sie Life with qmail kopieren, weiterverbreiten und modifizieren, vorausgesetzt, dass modifizierte Versionen, wenn sie weiterverbreitet werden, auch der OpenContent License unterliegen.

H.4. Wie kann ich benachrichtigt werden, wenn neue Ausgaben von LWQ zur Verfügung gestellt werden?

Werden sie Mitglied der lwq-announce-Mailingliste, indem sie eine Nachricht an lwq-announce-subscribe@sws1.ctd.ornl.gov senden.

H.5. Wo können LWQ-Mitarbeiter und Fans miteinander kommunizieren?

Werden sie Mitglied der lwq-Mailingliste, indem sie eine Nachricht an lwq-subscribe@sws1.ctd.ornl.gov senden.

H.6. Wurde Life with qmail in die Sprache XYZ übersetzt?

Vielleicht. LWQ wurde in einige Sprachen übersetzt. Siehe http://lifewithqmail.org/trans.html für mehr Informationen über LWQ-Übersetzungen.

H.7. Ist Life with qmail in PostScript, PDF, reinem Text oder irgendeinem anderen Format neben HTML verfügbar?

Ja, alternative Format finden sie unter http://lifewithqmail.org/.

H.8. Ich habe Life with qmail benutzt und habe mein System abstürzen lassen/meine Festplatte gelöscht/meine Liebesleben ruiniert/meinen Hund getötet/etc.

Das tut mir leid. Wirklich. Aber Life with qmail kommt ohne Gewährleistung daher. Siehe die OpenContent License, die oben erwähnt wird. Ich wurde nicht bezahlt, um das hier zu schreiben, ich wollte nur der qmail-Gemeinschaft etwas Nützliches beisteuern.

In Wirklichkeit ist das keine FAQ. Eigentlich hoffe ich, dass es eine NAQ (Never Asked Question = Niemals Gestellte Fragen; Anm.d. Übers.) ist.

H.9. Wie kann ich LWQ unterstützen?

Bitte schicken sie Korrekturen, Vorschläge, Beschwerden, etc. an lwq@sill.org.

Wenn sie einen größeren Beitrag leisten wollen, wie einen neuen Abschnitt oder einen neuen Anhang, dann finde ich das großartig! Bitte schließen sie sich zuerst mit mir kurz, um sicherzusztellen, dass ich das Thema in LWQ haben will und dass niemand sonst gerade daran arbeitet.

Wenn sie Geld spenden wollen, dann ist das natürlich immer willkommen. :-) Kontaktieren sie mich, um das zu arrangieren, oder verwenden sie das PayPal e-Payment-System. Wenn sie PayPal verwenden, dann können sie mir e-Geld an meine E-Mail-Adresse paypal@dave.sill.org in Beträgen ab $0.01 "beamen", ohne Kosten für sie oder mich--auch wenn sie eine Kreditkarte verwenden.

Ein anderer Weg, um LWQ ohne Kosten für sie zu unterstützen ist, in meinem Buchladen, mit Unterstützung von Amazon.com, einzukaufen, indem sie diesen Link verwenden: http://www.amazon.com/exec/obidos/redirect-home/davesill.

Danke für ihre Unterstützung!

H.10. Was hat sich in dieser Version von LWQ geändert?

H.10.1. Was hat sich in Version 2004-03-01 von LWQ geändert?

H.10.2. Was hat sich in Version 2004-01-26 von LWQ geändert?

H.10.3. Was hat sich in Version 2003-11-10 von LWQ geändert?

H.10.4. Was hat sich in Version 2003-1-30 von LWQ geändert?

H.10.5. Was hat sich in Version 2003-08-16 von LWQ geändert?