short.txt
changeset 13 95ecb62b93e6
parent 12 86e315be5b57
child 15 f0138e72be4e
equal deleted inserted replaced
12:86e315be5b57 13:95ecb62b93e6
       
     1 Kurzer Konfigurationsritt
       
     2 =========================
       
     3 :Author: Heiko Schlittermann
       
     4 :toc:
       
     5 :data-uri:
       
     6 :icons:
       
     7 :numbered:
       
     8 :ascii-ids:
       
     9 
       
    10 _italic_::
       
    11     Namen von Dateien, Programmen, Hosts, Domains, Mail-Header, URLS: _example.com_, _From:_
       
    12 *bold*::
       
    13     Namen von Exim-Routern, Transports, Authenticators: *dnslookup*-Router
       
    14 +fixed+::
       
    15     Kommandos, Code-Beispiele, Exim-Konfigurations-Optionen: +primary_hostname+
       
    16 
       
    17 *+fixed bold+*::
       
    18     Hervorhebung von Kommandos, Nutzereingaben: *+exim -bV+*
       
    19 
       
    20 '+slanted+'::
       
    21     Exim-Variablen im Text: '+$local_part+' oder '+$sender_address+'
       
    22 
       
    23 == Konfiguration
       
    24 
       
    25 === File
       
    26 
       
    27 Das Konfigurationsfile wird in der Build-Konfiguration (_EDITME_) festgelegt.
       
    28 Es ist auch eine Liste von Konfigurationsfiles möglich, der erste Treffer gewinnt.
       
    29 Das verwendete File läßt sich ermitteln mit
       
    30 
       
    31  exim -bP configure_file
       
    32 
       
    33 Das aktive Konfigurationsfile kann auch auf der Kommandozeile festgelegt
       
    34 werden. Für einige Operationen muss der Pfad ein absoluter sein.  Auch
       
    35 _/dev/null_ ist eine gültige Konfiguration.
       
    36 
       
    37  exim -C <Pfadname> …
       
    38 
       
    39 Die Konfiguration wird öfter gelesen als vielleicht erwartet:
       
    40 
       
    41 * Beim Start
       
    42 * Aber - wann wird gestartet?
       
    43     ** Start des Daemon
       
    44     ** Signal _HUP_ 
       
    45     ** re-exec for verschiedene Zwecke
       
    46 
       
    47 CAUTION: Inhalt der Datei _exim.conf_ footnote:[Debian verwendet häufig exim4 an
       
    48 stelle von exim.]
       
    49 und eventuell über +.include+ eingelesener Files
       
    50 ist statisch. Dynamisch sind dann Expansionen, Lookups.
       
    51 
       
    52 === Syntax
       
    53 
       
    54 Der Parser der Konfigurationsdatei ist ziemlich einfach.
       
    55 
       
    56 . Kommentarzeilen werden entfernt
       
    57 . Führende und anhängige Leerzeichen werden entfernt
       
    58 . Forsetzungszeilen („\“ am Zeilenende) werden zusammengefasst
       
    59 . einfache Syntax-Checks
       
    60 
       
    61 Die Konfiguration besteht aus mehreren Abschnitten. Nicht alle Abschnitte
       
    62 sind identisch aufgebaut.
       
    63 
       
    64 Globale Optionen::
       
    65     Allgemeine Parameter wir Listendefinitionen, Optionen für den Mailempfang,
       
    66     Datenbank-Verbindungsparameter
       
    67 Access Control Lists::
       
    68     Kontrolle der Nachrichtenannahme
       
    69 Router::
       
    70     Steuerung des Nachrichten-Routings (Ermittlung des Zielhosts und des
       
    71     Transportmechanismus)
       
    72 Transports::
       
    73     Konfiguration der Transportmechanismen
       
    74 Rewrite::
       
    75     Umschreiben von Envelope und Kopfzeilen
       
    76 Authentifizierung::
       
    77     Parameter für die SMTP-Authentifizierung (sowohl Client als auch Server)
       
    78 
       
    79 == Syntax der Konfiguration
       
    80 
       
    81 === Kommentare
       
    82 Alle Zeilen, die mit einem „#“ beginnen (nach optionalem Whitespace), sind Kommentarzeilen.
       
    83 An anderen Stellen der Konfiguration hat das „#“-Zeichen keine besondere Bedeutung.
       
    84 
       
    85 === Macros
       
    86 Macros sind für einen einfachen statischen Textersetzungsmechanismus und für das
       
    87 bedingte Parsen von Konfigurationsteilen. Macros können in der Konfiguration definiert werden, aber
       
    88 auch auf der Kommandozeile. (Auf der Kommandozeile gibt es jedoch wegen eventueller Sicherheitsimplikationen
       
    89 einige Besonderheiten zu beachten.) Macros werden generell groß geschrieben.
       
    90 
       
    91  LDAP_BASE = ou=ousers,o=acme
       
    92  LDAP = ldap:///LDAPBASE
       
    93
       
    94  data = ${lookup ldap{LDAP?mail?sub?uid=${quote_ldap:$local_part}}}
       
    95
       
    96  .ifdef TESTING
       
    97  testrouter:
       
    98     driver = dnslookup
       
    99
       
   100  .endif
       
   101 
       
   102 Und beim Aufruf:
       
   103 
       
   104  exim -DTESTING …
       
   105  exim -DFOO=bar …
       
   106 
       
   107 Macros können neu definiert werden („==“ statt „=“). Macros von der Kommandozeile haben Vorrang.
       
   108 
       
   109 === Optionen
       
   110 Es gibt ca. 250 globale Optionen, hinzu kommen noch weitere Optionen für Router, Transports, …
       
   111 Optionen haben einen bestimmten <<types,Datentyp>>. Optionen werden generell klein geschrieben.
       
   112 
       
   113  primary_hostname = foo.example.com
       
   114 
       
   115 === Listen
       
   116 Listen bestehen aus der Angabe des Listentypes, eines Namens und dem Listeninhalt.
       
   117 Es gibt 4 verschiedenen Listentypen. 
       
   118 
       
   119 Domains::
       
   120   Liste von Domain-Namen. Es gibt einige spezielle Tokens, die in einer solchen
       
   121   Liste auftauchen dürfen.
       
   122 
       
   123  domainlist local_domains = @ : schlittermann.de : @mx_primary
       
   124 
       
   125 Hosts::
       
   126     Hosts oder IP-Adressen, z.B. für vertrauenswürdige Absender-Netze
       
   127 
       
   128  hostlist trusted_hosts = 192.168.0.0/24 : 127.0.0.1
       
   129 
       
   130 Mail-Adressen::
       
   131     Mailadressen
       
   132 
       
   133  addresslist blocked_senders = ad@bestholiday.de : *@mailgun.com
       
   134 
       
   135 Local Parts::
       
   136     Local Parts von Mail-Adressen, z.B. von ACL-Checks ausgenommene lokale Empfänger 
       
   137 
       
   138  localpartlist rfc = postmaster : abuse
       
   139 
       
   140 Listen-Lookups werden nur gecacht, wenn die Liste keine Expansions-Items entält
       
   141 (also kein '\$'). Um ein Caching zu erwzingen, kann dem Listentyp ein +_cache+
       
   142 nachgesetzt werden:
       
   143 
       
   144  domainlist_cache local_domain = ${lookup …}
       
   145 
       
   146 === Instanzen von Routern, Transports, Authentificators
       
   147 
       
   148 Router, Transports und Authenificators werden in einzelnen „Funktionsblöcken“
       
   149 definiert.  Diese Blöcke haben selbstgewählte Namen und eine Liste von
       
   150 Optionen, die das Verhalten des jeweiligen Routers, Transports oder
       
   151 Authenicators bestimmen.
       
   152 
       
   153  begin transports
       
   154
       
   155  remote_smtp:
       
   156     driver = smtp
       
   157     command_timeout = 20s
       
   158 
       
   159 === ACL und Rewrite-Regeln
       
   160 
       
   161 Diese beiden Teile der Konfiguration haben ihre eigene Syntax.
       
   162 
       
   163 [[types]]
       
   164 == Werte und ihre Typen
       
   165 
       
   166 ALle Optionen der Konfigurationsdatei haben einen spezifischen Werte-Typ.
       
   167 
       
   168 * _bool_, _integer_, _fixed-point_, _time_ und _string_
       
   169 * Listen sind immer String-Listen
       
   170 * Werte, die der Expansion unterliegen, sind immer vom Typ _string_
       
   171 
       
   172 
       
   173 === Bool
       
   174 
       
   175 Werte vom Typ _bool_ sind einfache Schalter.
       
   176 
       
   177 .Format 
       
   178  <option> = true
       
   179  <option> = false
       
   180  <option>
       
   181  no_<option>
       
   182  not_<option>
       
   183 
       
   184 .Beispiel
       
   185  split_spool_directory
       
   186  not_split_spool_directory
       
   187  split_spool_directory = true
       
   188  split_spool_directory = no
       
   189 
       
   190 === Integer
       
   191 
       
   192 Zahlen. Ganze Zahlen.
       
   193 
       
   194 .Format
       
   195   … = <digits>[<suffix>]
       
   196         = 0<oct digts>[<suffix>]
       
   197         = 0x<hex digts>[<suffix>]
       
   198 
       
   199 Erlaubte Suffixe sind 'k' (2^10^) und 'm' (2^20^).
       
   200 
       
   201 .Beipiel
       
   202  check_spool_space = 10M
       
   203 
       
   204 === Fixed-Point
       
   205 
       
   206 Fixkomma-Zahlen, maximal 3 Nachkommastellen
       
   207 
       
   208 .Format
       
   209  … = <digits>[.<max 3 digits>]
       
   210 
       
   211 Diese Werte erlauben *keine* Einheitensuffixe.
       
   212 
       
   213 .Beispiel
       
   214  deliver_queue_load_max = 2.5
       
   215 
       
   216 === Zeitintervalle
       
   217 
       
   218 Zeitintervalle sind Zeitintervalle.
       
   219 
       
   220 .Format: 
       
   221  … = <digits><suffix>[<digits><suffix>]…
       
   222 
       
   223 Erlaubte Suffixe sind 's', 'm', 'h', 'd', 'w', also für
       
   224 Intervalle, die sich zweifelsfrei in Sekunden umrechnen lassen.
       
   225 
       
   226 .Beispiel
       
   227  auto_thaw = 3d12h
       
   228 
       
   229 CAUTION: Bei der Ausgabe von Intervall-Optionen werden die Zeiten normalisiert.
       
   230 
       
   231 === Zeichenketten
       
   232 
       
   233 Zeichenketten gibt es in zwei Formen: Literale Zeichenketten und gequotet.
       
   234 Zeichenketten, die später noch expandiert werden, werden _immer_ als gequotete
       
   235 Zeichenketten behandelt.
       
   236 
       
   237 .Format
       
   238  … = <string>
       
   239  … = <"string">
       
   240 
       
   241 Die gequotete Form ist notwendig, wenn die Zeichenkette mit Leerzeichen enden
       
   242 oder beginnen soll, oder wenn eine der folgenden Sequenzen interpretiert
       
   243 werden soll: '\\', '\n', '\r', '\t', '\ddd' (oktaler Zeichenwert), '\xdd'
       
   244 (hexadezimaler Zeichenwert).
       
   245 
       
   246 .Beispiel
       
   247  bounce_message_file = /etc/exim/bounce-message.txt
       
   248  bounce_message_text = "Sorry.\nI'm really sorry.\n"
       
   249  message = User $local_part does not exist.
       
   250 
       
   251 CAUTION: Bei der Ausgabe von String-Optionen werden eventuell vorhandene Steuerzeichen
       
   252 durch korrenspondierende Escape-Sequenzen ersetzt.
       
   253 
       
   254 === Listen
       
   255 
       
   256 Listen sind immer Listen zuerst eine _einzige_ Zeichenkette, unterliegen also
       
   257 den Zeichenketten-Interpretationsregeln.  Der Feldtrenner ist standardmäßig
       
   258 ein ':'. Wird der Feldtrenner als Teil eines Listenelements benötigt, muss er
       
   259 verdoppelt werden (oder es wird ein anderer Trenner gewält.)
       
   260 Umschließender Leerraum an den einzelnen Elementen wird ignoriert. Leere
       
   261 Elemente in der Liste und am _Ende_ der Liste werden ignoriert.
       
   262 
       
   263 .Format
       
   264  … = <item> : <item> …
       
   265  … = <item> : <i::tem> …
       
   266  … = <<separator> <item> ; <item> …
       
   267 
       
   268 .Beispiel
       
   269  local_interfaces = 127.0.0.1 : ::::1
       
   270  local_interfaces = <; 127.0.0.1 ; ::1
       
   271  domains = <\n ${lookup mysql{…}}
       
   272  senders =   <1>
       
   273  senders = : <2>
       
   274 
       
   275 <1> leere Liste
       
   276 <2> Liste mit einem leeren Element
       
   277 
       
   278 .Debugging
       
   279  exim -be '${map{:a:b:c,}{<$item>}}'
       
   280  exim -be '${map{<,,a,b,c,}{<$item>}}'
       
   281  exim -C <(echo domainlist local_domains = 'a:b::c:d') -be '${listnamed:local_domains}'
       
   282 
       
   283 === Reguläre Ausdrücke
       
   284 
       
   285 Reguläre Ausdrücke werden durch 'libpcre' ausgewertet, sie sind also kompatibel
       
   286 mit den von Perl bekannten regulären Ausdrücken. Reguläre Ausdrücke werden immer
       
   287 zuerst als String evaluiert, eventuelle Backslash-Sequenzen müssen also ggf. geschützt
       
   288 werden.
       
   289 
       
   290 .Format
       
   291  … = ^<regexp>
       
   292 
       
   293 .Beispiel
       
   294  domains = example.com : ^\\d{3}
       
   295  domains = example.com : \N^\d{3}\N
       
   296 
       
   297 Im Beispiel wird der Backslash verdoppelt, da die +domains+ Option zuerst
       
   298 expandiert wird.
       
   299 
       
   300 == Expansion von Zeichenketten
       
   301 
       
   302 Viele Stellen der Konfiguration verwenden String-Expansion (Typ 'string*' im
       
   303 _spec.txt_). String-Expansion wird von '\$' getriggert.  Das Ergebnis ist dann
       
   304 ein neuer String oder 'forced failure'. 
       
   305 Die Expansion der Strings erfolgt in der Regel erst im Bedarfsfall („late
       
   306 binding“). 
       
   307 
       
   308 CAUTION: Es stehen aber nicht in jeder Phase alle Items zur Verfügung. (z.B.
       
   309 wird der Wert der globalen Option +message_size_limit+ expandiert, aber bereits
       
   310 während der Antwort auf das SMTP-HELO, in dieser Phase gibt es noch keinen
       
   311 '+$local_part+').
       
   312 
       
   313 .Debugging
       
   314  exim -be [<string>]
       
   315  exim -bem <message-file> [<string>]
       
   316  exim -be -Mset <spool-id> [<string>]
       
   317  
       
   318  eg: exim -be '$primary_hostname'
       
   319      exim -be '$tod_full'
       
   320      exim -bem <(echo 'Subject: Hi') '$h_subject:'
       
   321 
       
   322 === Expansions-Items
       
   323 
       
   324 Aus Sicht des Expanders ist alles, was mit einem '\$' beginnt, ein
       
   325 Expansions-Item.
       
   326 
       
   327 Variablen::
       
   328     Das sind operative Parameter, Information über die aktuelle Nachricht,
       
   329     den aktuellen Systemzustand, Rückgabewerte.
       
   330     http://www.exim.org/exim-html-current/doc/html/spec_html/ch-string_expansions.html#SECTexpvar[spec]
       
   331 
       
   332  $local_part
       
   333  ${local_part}
       
   334 
       
   335 Operatoren::
       
   336     Einfache Funktionen wie die Transformation einer Zeichenkette von Klein- auf
       
   337     Großbuchstaben.
       
   338     http://www.exim.org/exim-html-current/doc/html/spec_html/ch-string_expansions.html#SECTexpop[spec]
       
   339 
       
   340  ${hex2b64:<string>}
       
   341 
       
   342 Bedingungen::
       
   343     Fluss-Steuerung
       
   344     http://www.exim.org/exim-html-current/doc/html/spec_html/ch-string_expansions.html#SECTexpcond[spec]
       
   345 
       
   346  ${if <condition>…}
       
   347 
       
   348 Funktionen::
       
   349     Komplexere Umwandlungen mit mehreren Eingangsparametern
       
   350     http://www.exim.org/exim-html-current/doc/html/spec_html/ch-string_expansions.html#SECTexpansionitems[spec]
       
   351 
       
   352  ${readsocket{<socket>}}
       
   353 
       
   354 Lookups::
       
   355     Informationsgewinnung aus externen Quellen (Files, Datenbanken)
       
   356     http://www.exim.org/exim-html-current/doc/html/spec_html/ch-file_and_database_lookups.html[spec]
       
   357 
       
   358  ${lookup{<item>}lsearch{<file>}}
       
   359  lsearch;<file>
       
   360 
       
   361 == Lookups
       
   362 
       
   363 Mit Lookups werden Daten aus externen Quellen gewonnen. Lookups gibt es in zwei
       
   364 Syntaxvarianten und in zwei Stilen.
       
   365 
       
   366 * Syntax
       
   367 ** implizit
       
   368 ** explizit
       
   369 * Stil
       
   370 ** Single-Key 
       
   371 ** Query-Style
       
   372 
       
   373 
       
   374 === Syntax
       
   375 
       
   376 ==== explizit
       
   377 
       
   378 Der Key oder die Frage wird ausdrücklich formuliert, es ist eine gewöhnliche
       
   379 String-Expansion. Als Resultat wird das Ergebnis des Lookups zurückgeliefert.
       
   380 
       
   381 .Format
       
   382  … = ${lookup{<key>}<type>{<file>}}
       
   383  … = ${lookup <type>{<query>}}
       
   384 
       
   385 .Beispiel
       
   386  domainlist local_domains = ${lookup{$domain}dsearch{/etc/vmail/domains}}
       
   387  local_parts = ${lookup ldap{ldap:///o=foo?uid?sub?uid=${quote_ldap:$local_part}}}
       
   388 
       
   389 Im Beispiel wird der Umstand genutzt, dass in vielen Fällen lediglich 
       
   390 die aktuell behandelte Adresse in der Liste vorhanden sein muss. 
       
   391 
       
   392 Die explizite Syntax kann natürlich auch eine komplette Liste zurückliefern,
       
   393 diese muss dann eventuell massiert werden, damit die Feldtrenner den Erwartungen 
       
   394 von Exim entsprechen.
       
   395 
       
   396 ==== implizit
       
   397 
       
   398 Der Key ergibt sich aus dem Kontext, das Lookup wird dennoch durch den
       
   399 String-Expander behandelt. Wenn das Lookup erfolgreich ist, wird als Resultat
       
   400 der Key zurückgeliefert, nicht ein eventuell vorhandener Wert!
       
   401 
       
   402 .Format
       
   403  … = <type>;<file> 
       
   404  … = <type>;<query>
       
   405 
       
   406 .Beispiel
       
   407  domains = lsearch;/etc/vmail/domainlist
       
   408  domains = mysql;SELECT COUNT(*) FROM domains WHERE domain = ${quote_mysql:$domain}
       
   409 
       
   410 === Style
       
   411 
       
   412 ==== Single Key
       
   413 
       
   414 Single-Key Lookups beziehen sich auf einfach (und meist schnelle) Key/Value
       
   415 Daten. Das sind Dateien im Format der _/etc/aliases_, das sind Verzeichnisse und
       
   416 DBM-Files.
       
   417 http://www.exim.org/exim-html-current/doc/html/spec_html/ch-file_and_database_lookups.html#SECTsinglekeylookups[spec]
       
   418 
       
   419 .Wichtige Single Key Lookups
       
   420 _lsearch_::
       
   421     Lineare Suche in einer Datei. Suche nach einem Default-Wert mit _lsearch*_,
       
   422     Suche nach Teilzeichenketten (Domain) mit _partial-lsearch_.
       
   423 _dsearch_::
       
   424     Verzeichnis-Lookup: Suche nach einem spezifischen Verzeichniseintrag
       
   425 _iplsearch::
       
   426     Suche nach IP-Adressen oder Netzen unter Beachtung von Netzmasken
       
   427 _dbm_::
       
   428     Suche in Berkeley-DBM Files
       
   429 
       
   430 .Beispiel
       
   431  data = ${lookup{$local_part}lsearch*{/etc/aliases}}
       
   432 
       
   433 ==== Query Style
       
   434 
       
   435 Komplexe Anfragen im Sinne einer „Query“.
       
   436 http://www.exim.org/exim-html-current/doc/html/spec_html/ch-file_and_database_lookups.html#SECTquerystylelookups[spec]
       
   437 
       
   438 .Wichtige Query-Style Lookups
       
   439 _mysql_::
       
   440     Eben MySQL…
       
   441 
       
   442  ${lookup mysql{SELECT … WHERE … like ${quote_mysql:$local_part}}
       
   443 
       
   444 _dnsdb_::
       
   445     Pseudo-Queries
       
   446 
       
   447  ${lookup dnsdb{a=$sender_host}}
       
   448  dnsdb;mxh=example.com
       
   449 
       
   450 _ldap_::
       
   451     Anfragen an LDAP. Erwartet wird ein Object (_ldap_) oder mehrere Objekte
       
   452     (_ldap_)
       
   453 
       
   454  ${lookup ldap{ldap:///ou=foo?mail?sub?uid=${quote_ldap:$local_part}}}
       
   455 
       
   456 
       
   457 === Überblick
       
   458 
       
   459 Es gibt also vier Möglichkeiten, Daten aus externen Quellen zu gewinnen.
       
   460 
       
   461 [cols="h,m,m",options="header"]
       
   462 |=======================================================================
       
   463 |            |  single key                    | query style
       
   464 |  explizit  |  ${lookup{<key>}<type>{<file>} | ${lookup <type> {<query>}}
       
   465 |  implizit  |  <type>;<file>                 | <type>;<query>
       
   466 |=======================================================================
       
   467 
       
   468 == Acess Control Lists
       
   469 
       
   470 ACL wirken für alle Phasen der SMTP-Session. Im globalen Teil werden die
       
   471 Einstiegspunkte mit +acl_smtp_connect+ usw. definiert. Im ACL-Abschnitt der
       
   472 Konfiguration muss dann ein entsprechend genannter Block existieren.
       
   473 
       
   474 Die häufigsten Einstiegspunkte sind
       
   475 
       
   476 +acl_smtp_rcpt+::
       
   477     Überprüfung beim +RCPT TO+ Kommando.
       
   478 
       
   479 +acl_smtp_data+::
       
   480     Überprüfung am Ende der +DATA+ Phase, also Content-Scan.
       
   481 
       
   482 Eine ACL ist eine Folge von Bedingungsblöcken. Sind _alle_ Bedingungen eines
       
   483 Blocks erfüllt, gilt die für diesen Block festgelegte Aktion.
       
   484 Die Bedingungen werden in der Reihenfolge ihres Auftretens bearbeitet. Sobald
       
   485 eine nicht zutrifft, wird der nächste Block untersucht.
       
   486 
       
   487 .Beispiel
       
   488  accept  domains = +local_domains
       
   489          local_parts = postmaster : abuse
       
   490 
       
   491 .Mögliche ACL-Aktionen
       
   492 _accept_::
       
   493     Alles ist ok. Es geht zur nächsten Phase der Verbindung
       
   494 _deny_::
       
   495     Fehler 5xx wird zurückgeliefert (nicht zwingend ein Ende der Verbindung!)
       
   496 _defer_::
       
   497     Fehler 4xx wird zurückgeliefert
       
   498 _drop_::
       
   499     Fehler 5xx wird generiert und Verbindung wird abgebrochen
       
   500 _warn_::
       
   501     Keine finale Entscheidung, NOOP
       
   502 _require_::
       
   503     Wenn eine der Bedingungen *nicht* erfüllt ist, Abbruch mit 5xx, 
       
   504     andernfalls weiter zum nächsten Block
       
   505 _discard_::
       
   506     Wie _accept_, aber Empfänger, bzw. Nachricht wird verworfen!
       
   507 
       
   508 .Häufige ACL-Bedingungen
       
   509 +hosts+::
       
   510     Sender-Host-IP wird geprüft
       
   511 
       
   512  hosts = +trusted_hosts
       
   513 
       
   514 +domains+::
       
   515     Empfänger-Domain wird geprüft
       
   516 
       
   517  domains = +local_domains
       
   518 
       
   519 +senders+::
       
   520     Absender-Mailadresse wird geprüft
       
   521 
       
   522  senders = postmaster@example.com : hans@foo.bar
       
   523 
       
   524 +malware+::
       
   525     Malware-Content-Scan liefert einen Treffer
       
   526 
       
   527  malware = *
       
   528 
       
   529 +spam+::
       
   530     SPAM-Content-Scan (_SpamAssassin_)
       
   531 
       
   532  spam = nobody/true
       
   533 
       
   534 +verify+::
       
   535     Empfänger- oder Absenderüberprüfung, eventuell auch mit _callout_.
       
   536 
       
   537  verify = recipient/callout=use_sender,defer_ok
       
   538 
       
   539 +ratelimit+::
       
   540     Limitierungen aller Art (Menge, Größe, …)
       
   541 
       
   542  ratelimit = 10/1h/$sender_address
       
   543 
       
   544 +condition+::
       
   545     Sonstige Bedingungen aller Art
       
   546 
       
   547  condition = ${run{perl}{graylist}{$sender_address/$local_part@$domain}}
       
   548 
       
   549 .ACL-Modifier
       
   550 +message+::
       
   551     Der Nachrichtenpuffer wird mit einem Text gefüllt.
       
   552 
       
   553  message = 550 Sorry
       
   554 
       
   555 +log_message+::
       
   556     Der Nachritenpuffer für das Protokoll wird mit einem Text gefüllt.
       
   557     Sonst identisch zu +message+.
       
   558 
       
   559 +logwrite+:: 
       
   560     Sofort einen Log-Eintrag
       
   561 
       
   562 +control+::
       
   563     Steuert das weitere Verhalten
       
   564 
       
   565  control = submission
       
   566 
       
   567 +set+:: 
       
   568     ACL-Variablen setzen
       
   569 
       
   570  set acl_m_domain = $domain
       
   571  set acl_c_host = $sender_host_address
       
   572 
       
   573 +add_header+::
       
   574     Header zum Hinzufügen vormerken    
       
   575 
       
   576 +remove_header+::
       
   577     Header zum Entfernen vormerken
       
   578     
       
   579 +delay+::
       
   580     Fügt eine kurze Verarbeitungspause ein
       
   581 
       
   582 Ziel der ACL-Operations sollte es sein, möglichst viele Dinge zur SMTP-Zeit zu
       
   583 entscheiden und dann die SMTP-Verbindung mit 5xx zu beenden. Damit bleibt die
       
   584 Verantwortung für die Bounce beim Absender.
       
   585 
       
   586 == Router
       
   587 
       
   588 Im Router-Abschnitt wird durch einzelne Blöcke das Routing-Verhalten gesteuert.
       
   589 Die Reihenfolge der Blöcke ist wichtig. Das Verhalten eines jeden Blocks wird
       
   590 durch den Treiber bestimmt.
       
   591 
       
   592 .Routing als Pseudoprogramm
       
   593 
       
   594  if (check preconditions == FAIL) goto NEXT ROUTER
       
   595 
       
   596  switch route($address) 
       
   597     case ACCEPT:      schedule $address for transport
       
   598     case NEW ADDRESS: goto FIRST ROUTER
       
   599     case PASS:        goto NEXT ROUTER
       
   600     case FAIL:        generate bounce
       
   601     case DEFER:       back to queue
       
   602     case DECLINE:     if (more?) goto NEXT ROUTER
       
   603                       generate bounce
       
   604 
       
   605 .Beispiel
       
   606  external:
       
   607     driver = dnslookup
       
   608     domains = !+local_domains
       
   609     transport = remote_smtp
       
   610     ignore_target_hosts = <; 127.0.0.1 : ::1
       
   611 
       
   612 Eine Liste der konfigurierten Router erhält man mit:
       
   613 
       
   614  exim -bP router_list
       
   615 
       
   616 == Transports
       
   617 
       
   618 Die Transport-Blöcke werden von den Routern referenziert, ihre Reihenfolge ist
       
   619 egal. Auch hier wird das grundlegende Verhalten eins Blocks durch den Treiber
       
   620 bestimmt. 
       
   621 
       
   622 .Beispiel
       
   623  remote_smtp
       
   624    driver = smtp
       
   625    command_timeout = 10s
       
   626 
       
   627 Die Liste der konfigurierten Transports:
       
   628  
       
   629  exim -bP transport_list
       
   630 
       
   631 == Filter
       
   632 
       
   633 Es gibt das _System_-Filter und _User_-Filter. Das System-Filter wird *vor* dem 
       
   634 Routing der Nachricht aktiv. Das User-Filter dann, wenn ein Router für diesen
       
   635 Nutzer aktiv wird und das User-Filter auswertet.
       
   636 
       
   637 Wenn eine Nachricht nicht zugestellt werden kann, dann wird bei einem späteren
       
   638 Queue-Run der Filter-Prozess wiederholt! (Es gibt aber einen +first_delivery+
       
   639 Test, mit dem man das behandeln kann.)
       
   640 
       
   641 
       
   642 System-Filter verwenden immer
       
   643 http://www.exim.org/exim-html-current/doc/html/spec_html/filter_ch-exim_filter_files.html[Exim-Filter-Syntax].
       
   644 User-Filter können Exim-Filter-Syntax verwenden, oder eine Teilmenge der
       
   645 http://www.exim.org/exim-html-current/doc/html/spec_html/filter_ch-sieve_filter_files.html[Sieve-Filter-Syntax].
       
   646 
       
   647 Dem Filter steht die Nachricht schon zur Verfügung, es kann also auf Variablen
       
   648 aus den ACL und auf die Header der Nachricht zugreifen..
       
   649 
       
   650 === Exim-Filter-Syntax
       
   651 
       
   652 * 1. Zeile
       
   653 
       
   654  # Exim filter
       
   655 
       
   656 * Keyword/Value, separiert durch Whitespace oder an einigen Stellen durch
       
   657   '('/')'
       
   658 * Zeilenumbrüche haben keine Sonderbedeutung
       
   659 * Kommentare von '<separator>#' bis zum Zeilenende
       
   660 * Data-Values
       
   661 ** verbatim, wenn sie keine Separatoren enthalten
       
   662 ** quoted mit '"'
       
   663 *** Leerzeichen und die Zeichen '\n', '\r', '\t',
       
   664 *** '\ddd' oder '\xdd'
       
   665 *** alle anderen Backspace-Squenzen werden daruch das
       
   666    dem Backspace folgende Zeichen ersetzt
       
   667 ** Strings-Expansion wie in der Exim-Konfiguration
       
   668 ** max 1024 Zeichen *vor* der Expansion
       
   669 
       
   670 === Filter-Kommandos
       
   671 
       
   672 +add+::
       
   673     Nutzer-Variable inkrementieren. Diese Variablen stehen dann später als
       
   674     '+$sn1+' - '+$sn9+' in den Routern und Transports zur Verfügung
       
   675 
       
   676  add 27 to to n3
       
   677 
       
   678 +deliver+::
       
   679     Mail weiterleiten, Vorsicht mit den Absendern (SPF). Signifikant.
       
   680 
       
   681  deliver "Fred <fred@example.com>"
       
   682 
       
   683 +fail+::
       
   684     Mail abweisen
       
   685 +finish+::
       
   686     Keine weitere Bearbeitung
       
   687 +freeze+::
       
   688     Mail einfrieren
       
   689 +headers+::
       
   690     Header-Verarbeitung konfigurieren (Zeichensatz)
       
   691 
       
   692  headers charset UTF-8
       
   693 
       
   694 +if+::
       
   695     Bedingte Verarbeitung mit +if+, +then+, +elif+, +else+, +endif+.
       
   696     * String-Conditions sind +begins+, +contains+, +ends+, +matches+, bzw. +does not …+. 
       
   697     * Numerische Bedingungen sind +is above+, +is below+ bzw. +is not …+
       
   698     * Andere Bedingunge: +is_delivered+, +error_message+, +personal+,
       
   699       +first_delivery+
       
   700     * Listen: +forany+
       
   701 
       
   702 +logfile+::
       
   703     Logfile definieren
       
   704 +logwrite+::
       
   705     Schreiben ins Logfile
       
   706 +mail+::
       
   707     Antwort-Nachricht erzeugen
       
   708 
       
   709  mail text "Danke für Ihre Nachricht mit $h_subject:"
       
   710 
       
   711 +pipe+::
       
   712     Nachricht per Pipeline weiterverarbeiten. Signifikant.
       
   713 
       
   714  pipe "/usr/bin/mailstat"
       
   715 
       
   716 +save+::
       
   717     Nachricht in File/Mailbox sichern, das Format der Sicherung hängt vom
       
   718     +filter_file_transport+ in der Konfiguration ab. Signifikant.
       
   719 
       
   720  save bcc
       
   721 
       
   722 +testprint+::
       
   723     Testausgabe im Filter-Test-Modus
       
   724 +vacation+::
       
   725     Urlaubsnachricht erzeugen. Sonderform von +mail+.
       
   726 
       
   727 
       
   728 == Operating
       
   729 
       
   730 Exim legt alle wichtigen Daten in Text-Dateien ab. Trotzdem sind einige Optionen
       
   731 und Tools hilfreich im Umgang mit den operativen Daten des Exim.
       
   732 
       
   733 === Prozesse
       
   734 
       
   735 Mit
       
   736 
       
   737  exiwhat
       
   738 
       
   739 erhält man eine gute Übersicht über die aktuellen Aktivitäten des Exim.
       
   740 
       
   741 === Queue
       
   742 
       
   743 Alle operativen Daten liegen unter dem Spool-Directory:
       
   744 
       
   745  exim -bP spool_directory
       
   746 
       
   747 'input'::
       
   748     Message-Spool. Wichtig! Je Message 2 Dateien.
       
   749 'db'::
       
   750     Hint-Files, nicht wichtig. 
       
   751 'msglog'::
       
   752     Nachrichten-Logs, solange die Nachricht noch nicht 'completed' ist.
       
   753 
       
   754 Mit dem klassischen 'mailq' lässt sich die aktuelle Queue anzeichen. Oder auch
       
   755 mit
       
   756 
       
   757  exim -bp
       
   758  exim -bpc
       
   759 
       
   760 Besser ist 'exipick', das verfügt über viele Möglichkeiten, Queue-Inhalte zu
       
   761 selektieren:
       
   762 
       
   763  exipick
       
   764  exipick -c
       
   765  exipick -zi
       
   766  exipick -f foo
       
   767 
       
   768 .Einzelne Nachrichten untersuchen
       
   769  exim -Mvh <queue-id>
       
   770  exim -Mvb <queue-id>
       
   771  exim -Mvc <queue-id>
       
   772 
       
   773 .Löschen von Nachrichten
       
   774  exim -Mrm <queue-id>
       
   775 
       
   776 
       
   777 === Protokolle
       
   778 
       
   779 Protokolle liegen in
       
   780  
       
   781  exim -bP log_file_path
       
   782 
       
   783 'mainlog'::
       
   784     Logfile über alle Transaktionen, dokumentiertes und maschinenlesbares Format
       
   785 'rejectlog'::
       
   786     Etwas mehr Details bei 5xx/4xx (Headerzeilen)
       
   787 'paniclog'::
       
   788     ... wenn nichts mehr geht.
       
   789 
       
   790 Zum Suchen und Zusammenfassen dieser Informationen eignet sich 'exigrep' am besten.
       
   791 
       
   792 .Beispiel
       
   793  exigrep 'hannes@example.com' /var/log/exim/mainlog
       
   794  exigrep 'fred@foobar.de' $(ls -tr /var/log/exim/mainlog*)
       
   795 
       
   796 Solange die Nachricht noch in der Queue ist:
       
   797 
       
   798  exim -Mvl <spool-id>
       
   799 
       
   800 === Hint-Data
       
   801 
       
   802 Die Hint-Data-Files sind Berkeley-DB-Files. Die dafür vorhandenen Werkzeuge sind
       
   803 eher spartanisch. Im Zweifelsfall können diese Files auch gelöscht werden.
       
   804 
       
   805 'exim_dumpdb'::
       
   806     Textdump der jeweiligen Datenbank, Ausgabeformat ist je nach DB-Format
       
   807     leicht unterschiedlich
       
   808 
       
   809 .Beispiel
       
   810  exim_dumpdb /var/spool/exim retry
       
   811 
       
   812 'exim_fixdb'::
       
   813     Mit diesem Werkzeug können gezielt einzelne Datensätze einer Hint-DB
       
   814     gelöscht werden
       
   815 
       
   816 .Beispiel
       
   817  # exim_fixdb /var/spool/exim4 retry
       
   818  Modifying Exim hints database /var/spool/exim4/db/retry
       
   819  > T:mx1.bmw.c3s2.iphmx.com:2620:101:200a:d100::e
       
   820  13-Apr-2015 08:16:36
       
   821  0 error number: 101 Network is unreachable
       
   822  1 extra data:   77
       
   823  2 first failed: 12-Apr-2015 18:09:35
       
   824  3 last try:     13-Apr-2015 08:16:36
       
   825  4 next try:     13-Apr-2015 10:16:36
       
   826  5 expired:      no
       
   827  > d
       
   828  deleted
       
   829 
       
   830 'exim_tidydb'::
       
   831     Wird regelmäßig über Cron aufgerufen um die Inhalte der Datenbankfiles
       
   832     aufzuräumen. Die Files werden dabei nicht zwangsläufig kleiner!
       
   833 
       
   834 
       
   835 == Debugging
       
   836 
       
   837 === Konfiguration 
       
   838 
       
   839 Die syntaktische Korrektheit der Konfiguration wird mit 
       
   840 
       
   841  exim -bV
       
   842 
       
   843 geprüft.
       
   844 In Routern und Transports kann die +debug_print+ Option verwendet werden, um
       
   845 während der Test-Sessions noch angepasste Ausgaben zu erhalten.
       
   846 
       
   847 CAUTION: Viele Fehler treten erst später bei der Expansion auf!
       
   848 
       
   849 Teile der Konfiguration können mit:
       
   850 
       
   851  exim -bP <option>
       
   852  exim -bP 
       
   853  exim -bP transports
       
   854  exim -bP routers
       
   855 
       
   856 ausgelesen werden.
       
   857 
       
   858 === Routing im Trockentest
       
   859 
       
   860 Das nützlichste Werkzeug ist sicher der Routing-Trockentest.
       
   861 Mit
       
   862 
       
   863  exim -bt <address> 
       
   864 
       
   865 wird ein Address-Test gemacht. Das entspricht dem Routing-Vorgang. Im
       
   866 Unterschied zum echten Routing-Vorgang stehen diesem Test aber keine
       
   867 Header-Daten zur Verfügung. Die Absender-Adresse kann mit _-f <sender>_
       
   868 eingesetzt werden:
       
   869 
       
   870  exim -f <sender> -bt <address>
       
   871 
       
   872 Mit 
       
   873 
       
   874  exim -bv <address>
       
   875 
       
   876 findet eine Adress-Verification statt. Das ist normalerweise identisch zum
       
   877 Adresstest. Aber Router können so konfiguriert sein, dass sie nur zum
       
   878 Adress-Test oder nur zur Verification verwendet werden. Adress-Verification
       
   879 findet u.a. über das ACL-Statement  +verify = recipient+ statt.
       
   880 
       
   881 .Beispiel
       
   882  exim -bt postmaster@schlittermann.de  <1>
       
   883  exim -bts postmaster@schlittermann.de <2>
       
   884 
       
   885 <1> Recipient-Test
       
   886 <2> Sender-Test 
       
   887 
       
   888 === Fake-Delivery für Filter/Router/Rewriting
       
   889 
       
   890 Bei Fake-Deliveries werden alle Schritte vom Routing über Filter und Rewriting
       
   891 ausgeführt, aber es findet keine Delivery statt. 
       
   892 
       
   893 .Beispiel
       
   894  exim -N 1Yk9s3-00048G-4a
       
   895  exim -N <message.eml
       
   896 
       
   897 === Fake-SMTP-Session zum ACL-Test
       
   898 
       
   899 Exim kann SMTP-Sessions zum Test über STDIN/STDOUT abwickeln.
       
   900 
       
   901  exim -bh <sender-ip>
       
   902  exim -bhc <sender-ip> <1>
       
   903 
       
   904 <1> Callouts werden durchgeführt
       
   905 
       
   906 Dabei schaltet er automatisch in den Debug-Modus für ACL.
       
   907 
       
   908 .Beispiel
       
   909  swaks -f hs@schlittermann.de -t fred@example.com \
       
   910        --pipe 'exim -bh 1.2.3.4' 
       
   911 
       
   912 === Filter-Tests
       
   913 
       
   914 Mit +exim -bf+ bzw. +exim -bF+ lassen sich die Filter-Scripte debuggen.
       
   915 
       
   916 .Beispiel
       
   917 
       
   918  exim -f sender@example.com .de -bf ./filter <message
       
   919  exim -bfd <domain> -bfl <local_part> … -bf
       
   920 
       
   921 === Rewrite-Tests
       
   922 
       
   923 Wenn Rewrite-Regeln verwendet werden, dann können diese mit
       
   924 
       
   925  exim -brw <address>
       
   926 
       
   927 getestet werden.
       
   928 
       
   929 === String-Expansion
       
   930 
       
   931 Der String-Expander steht auf der Kommandozeile zur Verfügung:
       
   932 
       
   933  exim -be <string>
       
   934 
       
   935 .Beispiel
       
   936  exim -be '${lookup{root}lsearch{/etc/aliases}}'
       
   937 
       
   938 ////
       
   939 
       
   940     implizit "deny" am Ende jeder ACL!
       
   941 
       
   942 
       
   943 ## Test
       
   944 
       
   945    > exim -bh <ip>  # ohne callouts
       
   946    > exim -bhc <ip> # mit callouts
       
   947    > swaks --pipe 'exim -bh <ip> -C <config>' -f <sender> -t <rcpt>
       
   948 
       
   949    exim -N hilft nicht, ist nicht für die SMTP acl
       
   950    relevant!
       
   951 
       
   952 ## Format
       
   953 
       
   954    <aclverb>    [<condition>]
       
   955
       
   956                 [<modifier]
       
   957 
       
   958    Bedingungen müssen erfüllt sein, Order matters, Abbruch
       
   959    bei nicht erfüllter Bedingung! Modifier sind immer "true"
       
   960 
       
   961 ### Verb
       
   962 
       
   963    accept, defer, deny, discard, drop, require, warn
       
   964 
       
   965 ### Modifier
       
   966 
       
   967     message = [code] text
       
   968     log_message = text
       
   969 
       
   970     Immediate:
       
   971         logwrite      = …
       
   972         control       = …
       
   973         set           = …
       
   974         add_header    = …
       
   975         remove_header = …
       
   976         delay         = …
       
   977 
       
   978 ### Conditions
       
   979 
       
   980     <condition> = <value>
       
   981 
       
   982         eg: deny  hosts = !192.168.3.8  # neg. Liste
       
   983             deny !hosts = 192.168.3.8   # neg. Resultat
       
   984 
       
   985         vs: deny !verify = recipient    # works
       
   986             deny  verify = !recipient   # FALSCH
       
   987 
       
   988 
       
   989     Wert der Condition und von Modifiern wird expandiert.
       
   990     Force Failure bedeutet: Condition war nicht anwesend!
       
   991 
       
   992     Reihenfolge ist wichtig! Short Circuit.
       
   993     Position der Modifier ist wichtig!
       
   994 
       
   995 
       
   996 
       
   997 # DNS Lookups
       
   998 
       
   999 ## DNSSEC
       
  1000   dns_dnssec_ok = 1
       
  1001 
       
  1002   dnslookup.dnssec_require_domains =        # leider noch falsche Syntax
       
  1003        smtp.dnssec_require_domains =        # leider noch falsche Syntax
       
  1004   dnslookup.dnssec_request_domains =        # leider noch falsche Syntax
       
  1005        smtp.dnssec_request_domains =        # leider noch falsche Syntax
       
  1006 
       
  1007 # Anhang
       
  1008 
       
  1009 ## Misc
       
  1010 
       
  1011     Spec.txt durchsuchen (less):
       
  1012     - Option         /^.<option>         eg: |exim_user|
       
  1013     - Variable       /^\$<variable       eg: $localhost_number
       
  1014     - Operators:     /^\$\{<operator>:   eg: ${hash:<string>} …
       
  1015     - Condition:     /^<condition> \{    eg: eq {<string1>}{<string2>} …
       
  1016     - Functions:     /^\$\{<function\{   eg: ${map{<string1>}{<string2>}} …
       
  1017     - ACL conditions /^<condition> =     eg: malware = …
       
  1018 
       
  1019 // Die folgenden Listen sind durch einfaches Greppen im Spec-File bzw. 
       
  1020 // im spec.xfpt enstanden, also weder vollständig noch zwingend korrekt!
       
  1021 
       
  1022 ## Liste globaler Optionen {{{
       
  1023 
       
  1024     accept_8bitmime
       
  1025     acl_not_smtp
       
  1026     acl_not_smtp_mime
       
  1027     acl_not_smtp_start
       
  1028     acl_smtp_auth
       
  1029     acl_smtp_connect
       
  1030     acl_smtp_data
       
  1031     acl_smtp_data_prdr
       
  1032     acl_smtp_etrn
       
  1033     acl_smtp_expn
       
  1034     acl_smtp_helo
       
  1035     acl_smtp_mail
       
  1036     acl_smtp_mailauth
       
  1037     acl_smtp_mime
       
  1038     acl_smtp_predata
       
  1039     acl_smtp_quit
       
  1040     acl_smtp_rcpt
       
  1041     acl_smtp_starttls
       
  1042     acl_smtp_vrfy
       
  1043     admin_groups
       
  1044     allow_domain_literals
       
  1045     allow_mx_to_ip
       
  1046     allow_utf8_domains
       
  1047     auth_advertise_hosts
       
  1048     auto_thaw
       
  1049     av_scanner
       
  1050     bi_command
       
  1051     bounce_message_file
       
  1052     bounce_message_text
       
  1053     bounce_return_body
       
  1054     bounce_return_message
       
  1055     bounce_return_size_limit
       
  1056     bounce_sender_authentication
       
  1057     callout_domain_negative_expire
       
  1058     callout_domain_positive_expire
       
  1059     callout_negative_expire
       
  1060     callout_positive_expire
       
  1061     callout_random_local_part
       
  1062     check_log_inodes
       
  1063     check_log_space
       
  1064     check_rfc2047_length
       
  1065     check_spool_inodes
       
  1066     check_spool_space
       
  1067     daemon_smtp_ports
       
  1068     daemon_startup_retries
       
  1069     daemon_startup_sleep
       
  1070     delay_warning
       
  1071     delay_warning_condition
       
  1072     deliver_drop_privilege
       
  1073     deliver_queue_load_max
       
  1074     delivery_date_remove
       
  1075     disable_fsync
       
  1076     disable_ipv6
       
  1077     dns_again_means_nonexist
       
  1078     dns_check_names_pattern
       
  1079     dns_csa_search_limit
       
  1080     dns_csa_use_reverse
       
  1081     dns_dnssec_ok
       
  1082     dns_ipv4_lookup
       
  1083     dns_retrans
       
  1084     dns_retry
       
  1085     dns_use_edns0
       
  1086     drop_cr
       
  1087     dsn_from
       
  1088     envelope_to_remove
       
  1089     errors_copy
       
  1090     errors_reply_to
       
  1091     exim_group
       
  1092     exim_path
       
  1093     exim_user
       
  1094     extra_local_interfaces
       
  1095     finduser_retries
       
  1096     freeze_tell
       
  1097     gecos_name
       
  1098     gecos_pattern
       
  1099     gnutls_compat_mode
       
  1100     header_line_maxsize
       
  1101     header_maxsize
       
  1102     headers_charset
       
  1103     helo_accept_junk_hosts
       
  1104     helo_allow_chars
       
  1105     helo_lookup_domains
       
  1106     helo_try_verify_hosts
       
  1107     helo_verify_hosts
       
  1108     hold_domains
       
  1109     host_lookup
       
  1110     host_lookup_order
       
  1111     host_reject_connection
       
  1112     hosts_connection_nolog
       
  1113     hosts_treat_as_local
       
  1114     ibase_servers
       
  1115     ignore_bounce_errors_after
       
  1116     ignore_fromline_hosts
       
  1117     ignore_fromline_local
       
  1118     keep_malformed
       
  1119     ldap_ca_cert_dir
       
  1120     ldap_ca_cert_file
       
  1121     ldap_cert_file
       
  1122     ldap_cert_key
       
  1123     ldap_cipher_suite
       
  1124     ldap_default_servers
       
  1125     ldap_require_cert
       
  1126     ldap_start_tls
       
  1127     ldap_version
       
  1128     local_from_check
       
  1129     local_from_prefix
       
  1130     local_from_suffix
       
  1131     local_interfaces
       
  1132     local_scan_timeout
       
  1133     local_sender_retain
       
  1134     localhost_number
       
  1135     log_file_path
       
  1136     log_selector
       
  1137     log_timezone
       
  1138     lookup_open_max
       
  1139     max_username_length
       
  1140     message_body_newlines
       
  1141     message_body_visible
       
  1142     message_id_header_domain
       
  1143     message_id_header_text
       
  1144     message_logs
       
  1145     message_size_limit
       
  1146     move_frozen_messages
       
  1147     mua_wrapper
       
  1148     mysql_servers
       
  1149     never_users
       
  1150     openssl_options
       
  1151     oracle_servers
       
  1152     percent_hack_domains
       
  1153     perl_at_start
       
  1154     perl_startup
       
  1155     pgsql_servers
       
  1156     pid_file_path
       
  1157     pipelining_advertise_hosts
       
  1158     prdr_enable
       
  1159     preserve_message_logs
       
  1160     primary_hostname
       
  1161     print_topbitchars
       
  1162     process_log_path
       
  1163     prod_requires_admin
       
  1164     qualify_domain
       
  1165     qualify_recipient
       
  1166     queue_domains
       
  1167     queue_list_requires_admin
       
  1168     queue_only
       
  1169     queue_only_file
       
  1170     queue_only_load
       
  1171     queue_only_load_latch
       
  1172     queue_only_override
       
  1173     queue_run_in_order
       
  1174     queue_run_max
       
  1175     queue_smtp_domains
       
  1176     receive_timeout
       
  1177     received_header_text
       
  1178     received_headers_max
       
  1179     recipient_unqualified_hosts
       
  1180     recipients_max
       
  1181     recipients_max_reject
       
  1182     remote_max_parallel
       
  1183     remote_sort_domains
       
  1184     retry_data_expire
       
  1185     retry_interval_max
       
  1186     return_path_remove
       
  1187     return_size_limit
       
  1188     rfc1413_hosts
       
  1189     rfc1413_query_timeout
       
  1190     sender_unqualified_hosts
       
  1191     smtp_accept_keepalive
       
  1192     smtp_accept_max
       
  1193     smtp_accept_max_nonmail
       
  1194     smtp_accept_max_nonmail_hosts
       
  1195     smtp_accept_max_per_connection
       
  1196     smtp_accept_max_per_host
       
  1197     smtp_accept_queue
       
  1198     smtp_accept_queue_per_connection
       
  1199     smtp_accept_reserve
       
  1200     smtp_active_hostname
       
  1201     smtp_banner
       
  1202     smtp_check_spool_space
       
  1203     smtp_connect_backlog
       
  1204     smtp_enforce_sync
       
  1205     smtp_etrn_command
       
  1206     smtp_etrn_serialize
       
  1207     smtp_load_reserve
       
  1208     smtp_max_synprot_errors
       
  1209     smtp_max_unknown_commands
       
  1210     smtp_ratelimit_hosts
       
  1211     smtp_ratelimit_mail
       
  1212     smtp_ratelimit_rcpt
       
  1213     smtp_receive_timeout
       
  1214     smtp_reserve_hosts
       
  1215     smtp_return_error_details
       
  1216     spamd_address
       
  1217     split_spool_directory
       
  1218     spool_directory
       
  1219     sqlite_lock_timeout
       
  1220     strict_acl_vars
       
  1221     strip_excess_angle_brackets
       
  1222     strip_trailing_dot
       
  1223     syslog_duplication
       
  1224     syslog_facility
       
  1225     syslog_processname
       
  1226     syslog_timestamp
       
  1227     system_filter
       
  1228     system_filter_directory_transport
       
  1229     system_filter_file_transport
       
  1230     system_filter_group
       
  1231     system_filter_pipe_transport
       
  1232     system_filter_reply_transport
       
  1233     system_filter_user
       
  1234     tcp_nodelay
       
  1235     timeout_frozen_after
       
  1236     timezone
       
  1237     tls_advertise_hosts
       
  1238     tls_certificate
       
  1239     tls_crl
       
  1240     tls_dh_max_bits
       
  1241     tls_dhparam
       
  1242     tls_ocsp_file
       
  1243     tls_on_connect_ports
       
  1244     tls_privatekey
       
  1245     tls_remember_esmtp
       
  1246     tls_require_ciphers
       
  1247     tls_try_verify_hosts
       
  1248     tls_verify_certificates
       
  1249     tls_verify_hosts
       
  1250     trusted_groups
       
  1251     trusted_users
       
  1252     unknown_login
       
  1253     unknown_username
       
  1254     untrusted_set_sender
       
  1255     uucp_from_pattern
       
  1256     uucp_from_sender
       
  1257     warn_message_file
       
  1258     write_rejectlog
       
  1259 
       
  1260 
       
  1261     }}}
       
  1262 
       
  1263 ## Liste von Expansionsvariablen {{{
       
  1264 
       
  1265     $acl_narg
       
  1266     $acl_verify_message
       
  1267     $address_data
       
  1268     $address_file
       
  1269     $address_pipe
       
  1270     $authenticated_fail_id
       
  1271     $authenticated_id
       
  1272     $authenticated_sender
       
  1273     $authentication_failed
       
  1274     $av_failed
       
  1275     $body_linecount
       
  1276     $body_zerocount
       
  1277     $bounce_recipient
       
  1278     $bounce_return_size_limit
       
  1279     $caller_gid
       
  1280     $caller_uid
       
  1281     $compile_date
       
  1282     $compile_number
       
  1283     $demime_errorlevel
       
  1284     $demime_errorlevel
       
  1285     $demime_reason
       
  1286     $demime_reason
       
  1287     $dnslist_domain
       
  1288     $domain
       
  1289     $domain_data
       
  1290     $exim_gid
       
  1291     $exim_path
       
  1292     $exim_uid
       
  1293     $found_extension
       
  1294     $found_extension
       
  1295     $header_
       
  1296     $headers_added
       
  1297     $home
       
  1298     $host
       
  1299     $host_address
       
  1300     $host_data
       
  1301     $host_lookup_deferred
       
  1302     $host_lookup_failed
       
  1303     $host_port
       
  1304     $inode
       
  1305     $interface_address
       
  1306     $interface_port
       
  1307     $item
       
  1308     $ldap_dn
       
  1309     $load_average
       
  1310     $local_part
       
  1311     $local_part_data
       
  1312     $local_part_prefix
       
  1313     $local_part_suffix
       
  1314     $local_scan_data
       
  1315     $local_user_gid
       
  1316     $local_user_uid
       
  1317     $localhost_number
       
  1318     $log_inodes
       
  1319     $log_space
       
  1320     $lookup_dnssec_authenticated
       
  1321     $mailstore_basename
       
  1322     $malware_name
       
  1323     $max_received_linelength
       
  1324     $message_age
       
  1325     $message_body
       
  1326     $message_body_end
       
  1327     $message_body_size
       
  1328     $message_exim_id
       
  1329     $message_headers
       
  1330     $message_headers_raw
       
  1331     $message_id
       
  1332     $message_linecount
       
  1333     $message_size
       
  1334     $mime_
       
  1335     $mime_boundary
       
  1336     $mime_charset
       
  1337     $mime_content_description
       
  1338     $mime_content_disposition
       
  1339     $mime_content_id
       
  1340     $mime_content_size
       
  1341     $mime_content_transfer_encoding
       
  1342     $mime_content_type
       
  1343     $mime_decoded_filename
       
  1344     $mime_filename
       
  1345     $mime_is_coverletter
       
  1346     $mime_is_multipart
       
  1347     $mime_is_rfc822
       
  1348     $mime_part_count
       
  1349     $original_domain
       
  1350     $original_local_part
       
  1351     $originator_gid
       
  1352     $originator_uid
       
  1353     $parent_domain
       
  1354     $parent_local_part
       
  1355     $pid
       
  1356     $pipe_addresses
       
  1357     $primary_hostname
       
  1358     $prvscheck_address
       
  1359     $prvscheck_keynum
       
  1360     $prvscheck_result
       
  1361     $qualify_domain
       
  1362     $qualify_recipient
       
  1363     $rcpt_count
       
  1364     $rcpt_defer_count
       
  1365     $rcpt_fail_count
       
  1366     $received_count
       
  1367     $received_for
       
  1368     $received_ip_address
       
  1369     $received_port
       
  1370     $received_protocol
       
  1371     $received_time
       
  1372     $recipient_data
       
  1373     $recipient_verify_failure
       
  1374     $recipients
       
  1375     $recipients_count
       
  1376     $regex_match_string
       
  1377     $reply_address
       
  1378     $return_path
       
  1379     $return_size_limit
       
  1380     $router_name
       
  1381     $runrc
       
  1382     $self_hostname
       
  1383     $sender_address
       
  1384     $sender_address_data
       
  1385     $sender_address_domain
       
  1386     $sender_address_local_part
       
  1387     $sender_data
       
  1388     $sender_fullhost
       
  1389     $sender_helo_name
       
  1390     $sender_host_address
       
  1391     $sender_host_authenticated
       
  1392     $sender_host_dnssec
       
  1393     $sender_host_name
       
  1394     $sender_host_port
       
  1395     $sender_ident
       
  1396     $sender_rate_
       
  1397     $sender_rcvhost
       
  1398     $sender_verify_failure
       
  1399     $sending_ip_address
       
  1400     $sending_port
       
  1401     $smtp_active_hostname
       
  1402     $smtp_command
       
  1403     $smtp_command_argument
       
  1404     $smtp_count_at_connection_start
       
  1405     $spam_
       
  1406     $spam_bar
       
  1407     $spam_report
       
  1408     $spam_score
       
  1409     $spam_score_int
       
  1410     $spool_directory
       
  1411     $spool_inodes
       
  1412     $spool_space
       
  1413     $thisaddress
       
  1414     $tls_in_bits
       
  1415     $tls_in_certificate_verified
       
  1416     $tls_in_cipher
       
  1417     $tls_in_ocsp
       
  1418     $tls_in_ourcert
       
  1419     $tls_in_peercert
       
  1420     $tls_in_peerdn
       
  1421     $tls_in_sni
       
  1422     $tls_out_bits
       
  1423     $tls_out_certificate_verified
       
  1424     $tls_out_cipher
       
  1425     $tls_out_ocsp
       
  1426     $tls_out_ourcert
       
  1427     $tls_out_peercert
       
  1428     $tls_out_peerdn
       
  1429     $tls_out_sni
       
  1430     $tod_bsdinbox
       
  1431     $tod_epoch
       
  1432     $tod_epoch_l
       
  1433     $tod_full
       
  1434     $tod_log
       
  1435     $tod_logfile
       
  1436     $tod_zone
       
  1437     $tod_zulu
       
  1438     $transport_name
       
  1439     $value
       
  1440     $verify_mode
       
  1441     $version_number
       
  1442     $warn_message_delay
       
  1443     $warn_message_recipients
       
  1444 
       
  1445     }}}
       
  1446 
       
  1447 ## Liste von Operatoren {{{
       
  1448 
       
  1449     ${address:
       
  1450     ${addresses:
       
  1451     ${base62:
       
  1452     ${base62d:
       
  1453     ${domain:
       
  1454     ${escape:
       
  1455     ${eval:
       
  1456     ${expand:
       
  1457     ${from_utf8:
       
  1458     ${hex2b64:
       
  1459     ${hexquote:
       
  1460     ${lc:
       
  1461     ${listcount:
       
  1462     ${listnamed:
       
  1463     ${local_part:
       
  1464     ${mask:
       
  1465     ${md5:
       
  1466     ${quote:
       
  1467     ${quote_local_part:
       
  1468     ${randint:
       
  1469     ${reverse_ip:
       
  1470     ${rfc2047:
       
  1471     ${rfc2047d:
       
  1472     ${rxquote:
       
  1473     ${sha1:
       
  1474     ${sha256:
       
  1475     ${stat:
       
  1476     ${str2b64:
       
  1477     ${strlen:
       
  1478     ${time_eval:
       
  1479     ${time_interval:
       
  1480     ${uc:
       
  1481     ${utf8clean:
       
  1482 
       
  1483     }}}
       
  1484 
       
  1485 ## List of Conditions {{{
       
  1486 
       
  1487     acl
       
  1488     and
       
  1489     bool
       
  1490     bool_lax
       
  1491     crypteq
       
  1492     eq
       
  1493     exists
       
  1494     ge
       
  1495     gt
       
  1496     inlist
       
  1497     isip
       
  1498     ldapauth
       
  1499     le
       
  1500     lt
       
  1501     match
       
  1502     match_address
       
  1503     match_domain
       
  1504     match_ip
       
  1505     match_local_part
       
  1506     or
       
  1507     pam
       
  1508     pwcheck
       
  1509     radius
       
  1510 
       
  1511     }}}
       
  1512 
       
  1513 ## List of Functions {{{
       
  1514 
       
  1515     ${acl
       
  1516     ${certextract
       
  1517     ${dlfunc
       
  1518     ${extract
       
  1519     ${extract
       
  1520     ${filter
       
  1521     ${hash
       
  1522     ${hmac
       
  1523     ${length
       
  1524     ${listextract
       
  1525     ${lookup
       
  1526     ${map
       
  1527     ${nhash
       
  1528     ${perl
       
  1529     ${prvs
       
  1530     ${prvscheck
       
  1531     ${readfile
       
  1532     ${readsocket
       
  1533     ${reduce
       
  1534     ${run
       
  1535     ${sg
       
  1536     ${sort
       
  1537     ${substr
       
  1538     ${tr
       
  1539 
       
  1540         }}}
       
  1541 
       
  1542 ## Routing Pre-Conditions {{{
       
  1543 
       
  1544     address_test
       
  1545     check_local_user
       
  1546     condition
       
  1547     domains
       
  1548     expn
       
  1549     local_part_prefix
       
  1550     local_part_suffix
       
  1551     local_parts
       
  1552     require_files
       
  1553     senders
       
  1554     verify
       
  1555     verify_only
       
  1556     verify_recipient
       
  1557     verify_sender
       
  1558 
       
  1559     }}}
       
  1560 
       
  1561 
       
  1562 Cheat sheet: http://www.datadisk.co.uk/html_docs/exim/exim_cs.htm
       
  1563 
       
  1564 # vim:tw=80:et:ts=4:sw=4:et:fdm=marker:ft=asciidoc:
       
  1565 ////