--- a/short.txt Mon Apr 20 23:08:26 2015 +0200
+++ b/short.txt Mon Apr 20 23:49:11 2015 +0200
@@ -1,5 +1,5 @@
-Kurzer Konfigurationsritt
-=========================
+Exim - Kurzer Konfigurationsüberblick
+=====================================
:Author: Heiko Schlittermann
:toc:
:data-uri:
@@ -7,26 +7,27 @@
:numbered:
:ascii-ids:
+////
_italic_::
Namen von Dateien, Programmen, Hosts, Domains, Mail-Header, URLS: _example.com_, _From:_
*bold*::
Namen von Exim-Routern, Transports, Authenticators: *dnslookup*-Router
+fixed+::
Kommandos, Code-Beispiele, Exim-Konfigurations-Optionen: +primary_hostname+
-
*+fixed bold+*::
Hervorhebung von Kommandos, Nutzereingaben: *+exim -bV+*
-
'+slanted+'::
Exim-Variablen im Text: '+$local_part+' oder '+$sender_address+'
+////
== Konfiguration
=== File
-Das Konfigurationsfile wird in der Build-Konfiguration (_EDITME_) festgelegt.
-Es ist auch eine Liste von Konfigurationsfiles möglich, der erste Treffer gewinnt.
-Das verwendete File läßt sich ermitteln mit
+* Das Konfigurationsfile wird in der Build-Konfiguration (_EDITME_) festgelegt.
+* Es ist auch eine Liste von Konfigurationsfiles möglich, der erste Treffer gewinnt.
+
+Das verwendete File läßt sich ermitteln mit:
exim -bP configure_file
@@ -38,14 +39,11 @@
Die Konfiguration wird öfter gelesen als vielleicht erwartet:
-* Beim Start
-* Aber - wann wird gestartet?
- ** Start des Daemon
- ** Signal _HUP_
- ** re-exec for verschiedene Zwecke
+* Start des Daemon
+* Signal _HUP_
+* re-exec for verschiedene Zwecke
-CAUTION: Inhalt der Datei _exim.conf_ footnote:[Debian verwendet häufig exim4 an
-stelle von exim.]
+CAUTION: Inhalt der Datei _exim.conf_
und eventuell über +.include+ eingelesener Files
ist statisch. Dynamisch sind dann Expansionen, Lookups.
@@ -65,29 +63,37 @@
Allgemeine Parameter wir Listendefinitionen, Optionen für den Mailempfang,
Datenbank-Verbindungsparameter
Access Control Lists::
- Kontrolle der Nachrichtenannahme
+ Kontrolle des Nachrichten-Empfangs
Router::
Steuerung des Nachrichten-Routings (Ermittlung des Zielhosts und des
Transportmechanismus)
Transports::
- Konfiguration der Transportmechanismen
+ Konfiguration der Transportmechanismen (SMTP, LMTP, o.a.)
Rewrite::
Umschreiben von Envelope und Kopfzeilen
+Retry::
+ Regeln für Wiederholungsversuche bei der Zustellung
Authentifizierung::
Parameter für die SMTP-Authentifizierung (sowohl Client als auch Server)
== Syntax der Konfiguration
=== Kommentare
-Alle Zeilen, die mit einem „#“ beginnen (nach optionalem Whitespace), sind Kommentarzeilen.
-An anderen Stellen der Konfiguration hat das „#“-Zeichen keine besondere Bedeutung.
+
+* Alle Zeilen, die mit einem „#“ beginnen (nach optionalem Whitespace), sind Kommentarzeilen.
+* An anderen Stellen der Konfiguration hat das „#“-Zeichen keine besondere Bedeutung.
=== Macros
-Macros sind für einen einfachen statischen Textersetzungsmechanismus und für das
-bedingte Parsen von Konfigurationsteilen. Macros können in der Konfiguration definiert werden, aber
-auch auf der Kommandozeile. (Auf der Kommandozeile gibt es jedoch wegen eventueller Sicherheitsimplikationen
-einige Besonderheiten zu beachten.) Macros werden generell groß geschrieben.
+* Macros werden generell groß geschrieben.
+* Macros sind ein einfache statischer Textersetzungsmechanismus (im Sinne
+* globaler „Konstanten“) und für das
+ bedingte Parsen von Konfigurationsteilen.
+* Macros können in der Konfiguration definiert werden, aber
+ auch auf der Kommandozeile. (Auf der Kommandozeile gibt es jedoch wegen eventueller Sicherheitsimplikationen
+ einige Besonderheiten zu beachten.)
+
+.Beispiel
LDAP_BASE = ou=ousers,o=acme
LDAP = ldap:///LDAPBASE
…
@@ -96,23 +102,28 @@
.ifdef TESTING
testrouter:
driver = dnslookup
+ transport = TRANSPORT
…
.endif
Und beim Aufruf:
- exim -DTESTING …
- exim -DFOO=bar …
+ exim -DTESTING -DTRANSPORT=foo …
Macros können neu definiert werden („==“ statt „=“). Macros von der Kommandozeile haben Vorrang.
=== Optionen
-Es gibt ca. 250 globale Optionen, hinzu kommen noch weitere Optionen für Router, Transports, …
-Optionen haben einen bestimmten <<types,Datentyp>>. Optionen werden generell klein geschrieben.
+* Optionen werden generell klein geschrieben.
+* Es gibt ca. 250 globale Optionen, hinzu kommen noch weitere Optionen für Router,
+Transports, Authenticators, usw.
+* Optionen haben einen bestimmten <<types,Datentyp>>.
+
+.Beispiel
primary_hostname = foo.example.com
=== Listen
+
Listen bestehen aus der Angabe des Listentypes, eines Namens und dem Listeninhalt.
Es gibt 4 verschiedenen Listentypen.
@@ -143,12 +154,15 @@
domainlist_cache local_domain = ${lookup …}
+.Beispiel Debugging
+ exim -bP +local_domains
+
=== Instanzen von Routern, Transports, Authentificators
-Router, Transports und Authenificators werden in einzelnen „Funktionsblöcken“
-definiert. Diese Blöcke haben selbstgewählte Namen und eine Liste von
+* Router, Transports und Authenificators werden in einzelnen „Funktionsblöcken“ definiert.
+* Diese Blöcke haben selbstgewählte Namen und eine Liste von
Optionen, die das Verhalten des jeweiligen Routers, Transports oder
-Authenicators bestimmen.
+Authenticators bestimmen.
begin transports
…
@@ -163,7 +177,7 @@
[[types]]
== Werte und ihre Typen
-ALle Optionen der Konfigurationsdatei haben einen spezifischen Werte-Typ.
+ALle Optionen der Konfigurationsdatei haben einen spezifischen Daten-Typ.
* _bool_, _integer_, _fixed-point_, _time_ und _string_
* Listen sind immer String-Listen
@@ -220,8 +234,8 @@
.Format:
… = <digits><suffix>[<digits><suffix>]…
-Erlaubte Suffixe sind 's', 'm', 'h', 'd', 'w', also für
-Intervalle, die sich zweifelsfrei in Sekunden umrechnen lassen.
+Erlaubte Suffixe sind 's', 'm', 'h', 'd', 'w', also Intervalle, die sich
+zweifelsfrei in Sekunden umrechnen lassen.
.Beispiel
auto_thaw = 3d12h
@@ -230,9 +244,10 @@
=== Zeichenketten
-Zeichenketten gibt es in zwei Formen: Literale Zeichenketten und gequotet.
-Zeichenketten, die später noch expandiert werden, werden _immer_ als gequotete
-Zeichenketten behandelt.
+* Zeichenketten gibt es in zwei Formen: Literale Zeichenketten und gequotete
+ Zeichenketten..
+* Zeichenketten, die später noch expandiert werden, werden _immer_ als gequotete
+ Zeichenketten behandelt.
.Format
… = <string>
@@ -253,12 +268,13 @@
=== Listen
-Listen sind immer Listen zuerst eine _einzige_ Zeichenkette, unterliegen also
-den Zeichenketten-Interpretationsregeln. Der Feldtrenner ist standardmäßig
+* Listen sind immer zuerst eine _einzige_ Zeichenkette, unterliegen also
+den Zeichenketten-Interpretationsregeln.
+* Der Feldtrenner ist standardmäßig
ein ':'. Wird der Feldtrenner als Teil eines Listenelements benötigt, muss er
verdoppelt werden (oder es wird ein anderer Trenner gewält.)
-Umschließender Leerraum an den einzelnen Elementen wird ignoriert. Leere
-Elemente in der Liste und am _Ende_ der Liste werden ignoriert.
+* Umschließender Leerraum an den einzelnen Elementen wird ignoriert.
+* Leere Elemente in der Liste und am _Ende_ der Liste werden ignoriert.
.Format
… = <item> : <item> …
@@ -275,16 +291,17 @@
<1> leere Liste
<2> Liste mit einem leeren Element
-.Debugging
+.Beispiel Debugging
exim -be '${map{:a:b:c,}{<$item>}}'
exim -be '${map{<,,a,b,c,}{<$item>}}'
exim -C <(echo domainlist local_domains = 'a:b::c:d') -be '${listnamed:local_domains}'
+ exim -bP +local_domains
=== Reguläre Ausdrücke
-Reguläre Ausdrücke werden durch 'libpcre' ausgewertet, sie sind also kompatibel
-mit den von Perl bekannten regulären Ausdrücken. Reguläre Ausdrücke werden immer
-zuerst als String evaluiert, eventuelle Backslash-Sequenzen müssen also ggf. geschützt
+* Reguläre Ausdrücke werden durch 'libpcre' ausgewertet, sie sind also kompatibel
+mit den von Perl bekannten regulären Ausdrücken.
+* Reguläre Ausdrücke werden immer zuerst als String evaluiert, eventuelle Backslash-Sequenzen müssen also ggf. geschützt
werden.
.Format
@@ -299,15 +316,15 @@
== Expansion von Zeichenketten
-Viele Stellen der Konfiguration verwenden String-Expansion (Typ 'string*' im
-_spec.txt_). String-Expansion wird von '\$' getriggert. Das Ergebnis ist dann
+* Viele Stellen der Konfiguration verwenden String-Expansion (Typ 'string*' im
+_spec.txt_). String-Expansion wird von '$' getriggert. Das Ergebnis ist dann
ein neuer String oder 'forced failure'.
-Die Expansion der Strings erfolgt in der Regel erst im Bedarfsfall („late
+* Die Expansion der Strings erfolgt in der Regel erst im Bedarfsfall („late
binding“).
-CAUTION: Es stehen aber nicht in jeder Phase alle Items zur Verfügung. (z.B.
+CAUTION: Es stehen aber nicht in jeder Phase alle Expansions-Items zur Verfügung. (z.B.
wird der Wert der globalen Option +message_size_limit+ expandiert, aber bereits
-während der Antwort auf das SMTP-HELO, in dieser Phase gibt es noch keinen
+während der Antwort auf das SMTP-HELO. In dieser Phase gibt es noch keinen
'+$local_part+').
.Debugging
@@ -315,13 +332,14 @@
exim -bem <message-file> [<string>]
exim -be -Mset <spool-id> [<string>]
- eg: exim -be '$primary_hostname'
- exim -be '$tod_full'
- exim -bem <(echo 'Subject: Hi') '$h_subject:'
+.Beispiel Debugging
+ exim -be '$primary_hostname'
+ exim -be '$tod_full'
+ exim -bem <(echo 'Subject: Hi') '$h_subject:'
=== Expansions-Items
-Aus Sicht des Expanders ist alles, was mit einem '\$' beginnt, ein
+* Aus Sicht des Expanders ist alles, was mit einem '$' beginnt, ein
Expansions-Item.
Variablen::
@@ -360,22 +378,19 @@
== Lookups
-Mit Lookups werden Daten aus externen Quellen gewonnen. Lookups gibt es in zwei
-Syntaxvarianten und in zwei Stilen.
+* Mit Lookups werden Daten aus externen Quellen gewonnen.
+* Lookups gibt es in zwei Syntaxvarianten und in zwei Stilen.
-* Syntax
-** implizit
-** explizit
-* Stil
-** Single-Key
-** Query-Style
-
+Syntax::
+ Es gibt implizite und explizite Loookups.
+Stil:::
+ Es gibt Single-Key und Query-Style Lookups.
=== Syntax
-==== explizit
+==== explizite Syntax
-Der Key oder die Frage wird ausdrücklich formuliert, es ist eine gewöhnliche
+* Der Key oder die Frage wird ausdrücklich formuliert, es ist eine gewöhnliche
String-Expansion. Als Resultat wird das Ergebnis des Lookups zurückgeliefert.
.Format
@@ -383,17 +398,20 @@
… = ${lookup <type>{<query>}}
.Beispiel
- domainlist local_domains = ${lookup{$domain}dsearch{/etc/vmail/domains}}
- local_parts = ${lookup ldap{ldap:///o=foo?uid?sub?uid=${quote_ldap:$local_part}}}
+ domainlist local_domains = ${lookup{$domain}dsearch{/etc/vmail/domains}} <1>
+ localpartlist users = ${lookup ldap{ldap:///o=foo?uid?sub?uid=${quote_ldap:$local_part}}}
+ data = ${lookup{$local_part}lsearch{/etc/aliases}{$value}{root@localhost}}
+ data = ${lookup{$local_part}lsearch{/etc/aliases}{$value}\
+ {${lookup{…}}}}
-Im Beispiel wird der Umstand genutzt, dass in vielen Fällen lediglich
+<1> Im Beispiel wird der Umstand genutzt, dass in vielen Fällen lediglich
die aktuell behandelte Adresse in der Liste vorhanden sein muss.
Die explizite Syntax kann natürlich auch eine komplette Liste zurückliefern,
diese muss dann eventuell massiert werden, damit die Feldtrenner den Erwartungen
von Exim entsprechen.
-==== implizit
+==== implizite Syntax
Der Key ergibt sich aus dem Kontext, das Lookup wird dennoch durch den
String-Expander behandelt. Wenn das Lookup erfolgreich ist, wird als Resultat
@@ -422,7 +440,7 @@
Suche nach Teilzeichenketten (Domain) mit _partial-lsearch_.
_dsearch_::
Verzeichnis-Lookup: Suche nach einem spezifischen Verzeichniseintrag
-_iplsearch::
+_iplsearch_::
Suche nach IP-Adressen oder Netzen unter Beachtung von Netzmasken
_dbm_::
Suche in Berkeley-DBM Files
@@ -449,7 +467,7 @@
_ldap_::
Anfragen an LDAP. Erwartet wird ein Object (_ldap_) oder mehrere Objekte
- (_ldap_)
+ (_ldapm_).
${lookup ldap{ldap:///ou=foo?mail?sub?uid=${quote_ldap:$local_part}}}
@@ -482,7 +500,7 @@
Eine ACL ist eine Folge von Bedingungsblöcken. Sind _alle_ Bedingungen eines
Blocks erfüllt, gilt die für diesen Block festgelegte Aktion.
Die Bedingungen werden in der Reihenfolge ihres Auftretens bearbeitet. Sobald
-eine nicht zutrifft, wird der nächste Block untersucht.
+eine Bedingung nicht zutrifft, wird der nächste Block untersucht.
.Beispiel
accept domains = +local_domains
@@ -560,7 +578,7 @@
Sofort einen Log-Eintrag
+control+::
- Steuert das weitere Verhalten
+ Steuert das weitere Verhalten der Nachrichtenverarbeitung
control = submission
@@ -603,10 +621,10 @@
generate bounce
.Beispiel
- external:
+ external:
driver = dnslookup
- domains = !+local_domains
- transport = remote_smtp
+ domains = !+local_domains
+ transport = remote_smtp
ignore_target_hosts = <; 127.0.0.1 : ::1
Eine Liste der konfigurierten Router erhält man mit:
@@ -745,13 +763,13 @@
exim -bP spool_directory
'input'::
- Message-Spool. Wichtig! Je Message 2 Dateien.
+ Message-Spool. Je Message 2 Dateien.
'db'::
- Hint-Files, nicht wichtig.
+ Hint-Files, Cache.
'msglog'::
Nachrichten-Logs, solange die Nachricht noch nicht 'completed' ist.
-Mit dem klassischen 'mailq' lässt sich die aktuelle Queue anzeichen. Oder auch
+Mit dem klassischen 'mailq' lässt sich die aktuelle Queue auflisten. Oder auch
mit
exim -bp
@@ -785,7 +803,7 @@
'rejectlog'::
Etwas mehr Details bei 5xx/4xx (Headerzeilen)
'paniclog'::
- ... wenn nichts mehr geht.
+ Wenn nichts mehr geht.
Zum Suchen und Zusammenfassen dieser Informationen eignet sich 'exigrep' am besten.
@@ -805,14 +823,14 @@
'exim_dumpdb'::
Textdump der jeweiligen Datenbank, Ausgabeformat ist je nach DB-Format
leicht unterschiedlich
-
++
.Beispiel
exim_dumpdb /var/spool/exim retry
'exim_fixdb'::
Mit diesem Werkzeug können gezielt einzelne Datensätze einer Hint-DB
gelöscht werden
-
++
.Beispiel
# exim_fixdb /var/spool/exim4 retry
Modifying Exim hints database /var/spool/exim4/db/retry
@@ -935,6 +953,9 @@
.Beispiel
exim -be '${lookup{root}lsearch{/etc/aliases}}'
+
+[index]
+
////
implizit "deny" am Ende jeder ACL!