# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1419203740 -3600 # Node ID 8ca8d1b61947421234e0db9b1531074fd95661e8 # Parent 1a57317575cab0ab45486421fcb18c05a5e69a64 [snapshot] diff -r 1a57317575ca -r 8ca8d1b61947 Makefile --- a/Makefile Mon Dec 08 21:15:10 2014 +0100 +++ b/Makefile Mon Dec 22 00:15:40 2014 +0100 @@ -1,4 +1,4 @@ -TXT = exim.txt +TXT = exim.txt operation.txt config.txt appendix.txt PDF = ${TXT:.txt=.pdf} HTML = ${TXT:.txt=.html} diff -r 1a57317575ca -r 8ca8d1b61947 appendix.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/appendix.txt Mon Dec 22 00:15:40 2014 +0100 @@ -0,0 +1,10 @@ += Anhang = + +[[spec-file]] +== Exim Spezifikation + +Die ultimative Exim-Referenz ist das „Spec-File“. Dies finden Sie im +Dokumentationsverzeichnis ihrer Linux-Distribution, oder auch auf der +link:http://www.exim.org/[Exim-Webseite]. + +// vim:ft=asciidoc diff -r 1a57317575ca -r 8ca8d1b61947 config.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config.txt Mon Dec 22 00:15:40 2014 +0100 @@ -0,0 +1,115 @@ += Konfiguration = + +Die Konfigurationsdatei des Exim ist der „magischste“ Teil des Exim. +Viele Einstellungen in der Konfiguration werden erst zur Laufzeit +interpretiert. Ein Test, ob die Konfiguration syntaktisch +korrekt ist, lässt sich ausführen mit: + + > exim -bV + +Syntaktische Korrektheit allein ist jedoch nicht ausreichend. Fehler +können auch später, z.B. durch durch <>, auftreten. + +== Konfigurationsdatei + +Exim sucht beim Start nach genau einer Konfigurationsdatei. +Je nach Build können mehrere Stellen in Frage kommen. Der Name der +verwendeten Konfigurationsdatei läßt sich ermitteln: + + > exim -bP configure_file + +Alternativ kann dem Exim auch der Name einer Konfigurationsdatei auf der +Kommandozeile übergeben werden. Jedoch wird Exim einer solchen +Konfiguration nur bedingt vertrauen und unter Umständen sofort auf seine +setuid-Eigenschaften verzichten. + +Diese eine Konfigurationsdatei kann `.include`-Anweisungen enthalten, um +weitere Teile einzulesen. + +=== Syntax der Konfigurationsdatei + +TIP: Eine leere Datei ist eine gültige Konfigurationsdatei, aber nicht +zwingend eine brauchbare Konfiguration. Für kurze Tests ist dieser Fakt +aber sehr brauchbar. Z.B: `exim -C /dev/null -bP primary_hostname`, um +Exims Vorstellung über den aktuellen Hostnamen zu überprüfen. + +Es gelten folgende einfache Regeln beim Lesen der Konfiguration: + +.Whitespace +Leer- und Tabulatorzeichen am Zeilenanfang und -ende werden ignoriert. + +.Kommentare +Zeilen, die mit `#` beginnen, werden ignoriert. Wird an anderen Stellen +ein `#` verwendet, hat dieses Zeichen *nicht* die Bedeutung eines +Kommentarzeichens. + +.Fortsetzungzeilen +Zeilen, die mit einem `\` enden, werden durch die Folgezeile fortgesetzt, +der Zeilenumbruch wird dabei entfernt. + +.Macrodefinitionen +// spec:6.4 +Macros werden häufig verwendet, um sehr lange Konfigurationsausdrücke zu +vereinfachen. Makros ermöglichen eine einfach Textersetzung beim +*Einlesen* der Konfiguration: + +---- +FOO = foo <1> +FOO == bar <2> +---- +<1> Definition des Macros +<2> Neu-Definition des Macros + +Macros können auf der Kommandozeile mit `-DFOO=foobar` gesetzt werden. + +.Einbettung weiterer Files +In das Hauptkonfigurations-File können weitere Dateien eingebetten +werden: + +---- +.include other/file +---- + +Eine bedingte Einbettung ist mit `.include_if_exists` möglich. + +.Bedingtes Einlesen +// spec:6.9 +In Abhängigkeit von definierten Macros können Teile der +Konfigurationsdatei überprungen werden: + +---- +.ifdef FOO +primary_hostname = foo +.endif +---- + +Verwendbar sind `.ifdef`, `.ifndef`, `.elifdef`, `.elifndef`, +`.else` und `.endif`. Dies Auswertung erfolgt während des Einlesens der +Konfiguration, also noch *vor* dem Start des Exim. + +[[config.structure]] +=== Aufbau der Konfigurationsdatei + +Die Konfiguration ist entsprechend der Funktionsweise des Exim neben dem +globalen Teil in mehrere Abschnitte gegliedert: + +ACL:: + Access Control Lists steuern während einer eingehenden Verbindung + die Akzeptanz der Nachricht + +Routers:: + Router sind Regeln, nach denen die Nachrichten weitergeleitet + werden. + +Transports:: + Im Transports-Abschnit wird festgelegt, wie die Nachrichten + weitergeleitet werden. + +Rewrite:: + In diesem Abschnitt sind die Regeln beschrieben, nach denen + Adress-Umschreibungen vorgenommen werden sollen. + +Authentication:: + Konfiguration der Authentifizierungsparameter als Client und als + Server + diff -r 1a57317575ca -r 8ca8d1b61947 exim.txt --- a/exim.txt Mon Dec 08 21:15:10 2014 +0100 +++ b/exim.txt Mon Dec 22 00:15:40 2014 +0100 @@ -1,84 +1,49 @@ -Exim -==== -Heiko Schlittermann += Exim - Konfiguration und Betrieb = +:Author: Heiko Schlittermann +:Email: hs@schlittermann.de +:Date: 2014-12-21 +:Revision: 0.1 :doctype: book - -Im folgenden nehme ich Bezug auf Exim 4.85. -Ultimative Referenz ist immer das Spec-File, also die -Referenzdokumentation, die den Exim begleitet. Einige Details werden -hier ausgelassen werden. - -== Konfigurationsdatei - -Exim sucht beim Start nach genau einer Konfigurationsdatei. -Diese lässt sich mit - - exim -bP configure_file - -anzeigen. +:toc: - -=== Format der Konfigurationsdatei - -Die Konfigurationsdatei beginnt mit einem globalen Teil, es folgen -Abschnitte für ACL, Router, Transports, Address-Rewriting, -Retry-Verhalten und Authentifizierung. +[[preface]] += Vorwort = -Kommentare sind erlaubt - das sind Zeilen, die mit dem Rautenzeichen (#) -beginnen. Vor der Raute ist lediglich Whitespace erlaubt. Rautenzeichen -an anderen Stellen sind *kein* Kommentar. - -Der Parser der Konfigurationsdatei ist relativ simpel: +SMTP-Server gehören neben Webservern vermutlich zur am häufigsten +genutzen Art von Servern. Sie treten jedoch deutlich selterner in +Erscheinung, jedoch beruht ein Großteil dessen, was wir als _Internet_ +bezeichnen auf der Funktion von SMTP-Servern. -. Kommentarzeilen werden entfernt -. Fortsetzungszeilen werden zusammengesetzt - -Es ist also möglich, auch innerhalb von Fortsetzungszeilen Kommentare zu -verwenden: +Seit etwa 1996 beschäftige ich mich mit dem Betrieb von SMTP-Servern, +seit etwa 1997 ist es der Exim. Durch meine Arbeit konnte ich viel über +die Interna des Exim lernen. ----- - domainlist local_domains = example.com \ - # foo bar comment - : example.org \ - : example.net ----- - +.Für wen ist dieses Buch? +Sie möchten Ihrem Exim konfigurieren und betreiben und Sie möchten dabei +verstehen, was Sie tun. Dieses Buch soll kein Ersatz für die überaus +hervorragende <> sein, sondern eine +Ergänzung. -==== Macros - -In der Konfigurationsdatei dürfen Macros enthalten sein. Macros bestehen -ausschließlich aus Großbuchstaben und Ziffern. +.Referenz +Dieses Buch bezieht sich auf die Exim-Version 4.85. An einigen Stellen +wurden die Darstellungen vereinfacht. Die ultimative Informationsquelle +ist immer das <> ----- - FOOBAR = foo bar - FOO = bar ----- +== Typographische Konventionen + +Folgende Konventionen werden im folgenden verwendet: -Die Macros sind ein sehr einfacher Textersetzungsmechanismus, der -während des Einlesens der der Konfiguration stattfindet. Die Gültigkeit -der Macros beginnt an der Stelle ihrer Definition. Macro-Namen dürfen -nicht in später definierten Macro-Namen enthalten sein. Eine -Neudefinition von Macros ist jederzeit möglich: +'exim.conf':: + verwenden wir für Pfad- und Dateinamen. ----- - FOO = bar - … - FOO == foobar ----- +`ls -l`:: + verwenden wir für Kommandos. -Macros, die auf der Kommandozeile beim Aufruf des Exim gesetzt werden, -haben Vorrang vor denen, die in der Konfiguration definiert sind. Aus -Sicherheitsgründen legt Exim aber seine setuid-Rechte ab, sobald auf der -Kommandozeile Macros definiert sind. -footnote:[Mit Ausnahme von Macros, die in einer zur Build-Zeit -definierten Whitelist stehen.] +*router*:: + verwenden wir für Namen von Exim-Routern, -Transports und -Authenticators - exim -DFOO=bar … - -==== Includes +include::operation.txt[] +include::config.txt[] +include::appendix.txt[] -Die Konfigurationsdatei darf weitere Konfigurationsdateien -referenzieren. Diese werden mit `.include` oder mit -`.include_if_exists` eingelesen. Ebenso ist ein bedingtes Lesen von -Teilen der Konfiguration möglich: `.ifdef` erlaubt hier den Test von -Macros. +// vim:ft=asciidoc diff -r 1a57317575ca -r 8ca8d1b61947 operation.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/operation.txt Mon Dec 22 00:15:40 2014 +0100 @@ -0,0 +1,6 @@ += Funktionsweise = + +In diesem Teil wird der Nachrichtenfluss und die Zusammenarbeit der +einzelnen Exim-Komponenten erklärt. + +// vim:ft=asciidoc: