|
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 //// |