--- a/abstract.txt Mon Apr 20 16:01:28 2015 +0200
+++ b/abstract.txt Mon Apr 20 23:07:09 2015 +0200
@@ -5,6 +5,7 @@
:data-uri:
:icons:
:numbered:
+:ascii-ids:
_italic_::
Namen von Dateien, Programmen, Hosts, Domains, Mail-Header, URLS: _example.com_, _From:_
@@ -12,10 +13,12 @@
Namen von Exim-Routern, Transports, Authenticators: *dnslookup*-Router
+fixed+::
Kommandos, Code-Beispiele, Exim-Konfigurations-Optionen: +primary_hostname+
-+*fixed bold*+::
- Hervorhebung von Kommandos, Nutzereingaben: +*exim -bV*+
-+_slanted_+::
- Exim-Variablen im Text: $local_part oder $sender_address
+
+*+fixed bold+*::
+ Hervorhebung von Kommandos, Nutzereingaben: *+exim -bV+*
+
+'+slanted+'::
+ Exim-Variablen im Text: '+$local_part+' oder '+$sender_address+'
== Konfiguration
@@ -157,7 +160,8 @@
Diese beiden Teile der Konfiguration haben ihre eigene Syntax.
-== Werte
+[[types]]
+== Werte und ihre Typen
ALle Optionen der Konfigurationsdatei haben einen spezifischen Werte-Typ.
@@ -271,11 +275,10 @@
<1> leere Liste
<2> Liste mit einem leeren Element
-////
-> exim -be '${map{:a:b:c,}{<$item>}}'
-> exim -be '${map{<,,a,b,c,}{<$item>}}'
-> exim -C <(echo domainlist local_domains = 'a:b::c:d') -be '${listnamed:local_domains}'
-////
+.Debugging
+ exim -be '${map{:a:b:c,}{<$item>}}'
+ exim -be '${map{<,,a,b,c,}{<$item>}}'
+ exim -C <(echo domainlist local_domains = 'a:b::c:d') -be '${listnamed:local_domains}'
=== Reguläre Ausdrücke
@@ -305,21 +308,16 @@
CAUTION: Es stehen aber nicht in jeder Phase alle Items zur Verfügung. (z.B.
wird der Wert der globalen Option +message_size_limit+ expandiert, aber bereits
während der Antwort auf das SMTP-HELO, in dieser Phase gibt es noch keinen
-$local_part).
-
-
-////
- > exim -be [<string>]
- > exim -bem <message-file> [<string>]
- > exim -be -Mset <spool-id> [<string>]
+'+$local_part+').
- eg: exim -be '$primary_hostname'
- exim -be '$tod_full'
- exim -bem <(echo 'Subject: Hi') '$h_subject:'
-
- Expansionen liefern neuen Text zurück oder können „forced expansion failure“
- bewirken
-////
+.Debugging
+ exim -be [<string>]
+ exim -bem <message-file> [<string>]
+ exim -be -Mset <spool-id> [<string>]
+
+ eg: exim -be '$primary_hostname'
+ exim -be '$tod_full'
+ exim -bem <(echo 'Subject: Hi') '$h_subject:'
=== Expansions-Items
@@ -504,31 +502,132 @@
_require_::
Wenn eine der Bedingungen *nicht* erfüllt ist, Abbruch mit 5xx,
andernfalls weiter zum nächsten Block
+_discard_::
+ Wie _accept_, aber Empfänger, bzw. Nachricht wird verworfen!
.Häufige ACL-Bedingungen
+hosts+::
Sender-Host-IP wird geprüft
+
+ hosts = +trusted_hosts
+
+domains+::
Empfänger-Domain wird geprüft
+
+ domains = +local_domains
+
+senders+::
Absender-Mailadresse wird geprüft
+
+ senders = postmaster@example.com : hans@foo.bar
+
+malware+::
Malware-Content-Scan liefert einen Treffer
+
+ malware = *
+
+spam+::
SPAM-Content-Scan (_SpamAssassin_)
+
+ spam = nobody/true
+
+verify+::
Empfänger- oder Absenderüberprüfung, eventuell auch mit _callout_.
+
+ verify = recipient/callout=use_sender,defer_ok
+
+ratelimit+::
Limitierungen aller Art (Menge, Größe, …)
+ ratelimit = 10/1h/$sender_address
+
++condition+::
+ Sonstige Bedingungen aller Art
+
+ condition = ${run{perl}{graylist}{$sender_address/$local_part@$domain}}
+
+.ACL-Modifier
++message+::
+ Der Nachrichtenpuffer wird mit einem Text gefüllt.
+
+ message = 550 Sorry
+
++log_message+::
+ Der Nachritenpuffer für das Protokoll wird mit einem Text gefüllt.
+ Sonst identisch zu +message+.
+
++logwrite+::
+ Sofort einen Log-Eintrag
+
++control+::
+ Steuert das weitere Verhalten
+
+ control = submission
+
++set+::
+ ACL-Variablen setzen
+
+ set acl_m_domain = $domain
+ set acl_c_host = $sender_host_address
+
++add_header+::
+ Header zum Hinzufügen vormerken
+
++remove_header+::
+ Header zum Entfernen vormerken
+
++delay+::
+ Fügt eine kurze Verarbeitungspause ein
+
Ziel der ACL-Operations sollte es sein, möglichst viele Dinge zur SMTP-Zeit zu
entscheiden und dann die SMTP-Verbindung mit 5xx zu beenden. Damit bleibt die
Verantwortung für die Bounce beim Absender.
== Router
+Im Router-Abschnitt wird durch einzelne Blöcke das Routing-Verhalten gesteuert.
+Die Reihenfolge der Blöcke ist wichtig. Das Verhalten eines jeden Blocks wird
+durch den Treiber bestimmt.
+
+.Routing als Pseudoprogramm
+
+ if (check preconditions == FAIL) goto NEXT ROUTER
+
+ switch route($address)
+ case ACCEPT: schedule $address for transport
+ case NEW ADDRESS: goto FIRST ROUTER
+ case PASS: goto NEXT ROUTER
+ case FAIL: generate bounce
+ case DEFER: back to queue
+ case DECLINE: if (more?) goto NEXT ROUTER
+ generate bounce
+
+.Beispiel
+ external:
+ driver = dnslookup
+ domains = !+local_domains
+ transport = remote_smtp
+ ignore_target_hosts = <; 127.0.0.1 : ::1
+
+Eine Liste der konfigurierten Router erhält man mit:
+
+ exim -bP router_list
+
== Transports
+Die Transport-Blöcke werden von den Routern referenziert, ihre Reihenfolge ist
+egal. Auch hier wird das grundlegende Verhalten eins Blocks durch den Treiber
+bestimmt.
+
+.Beispiel
+ remote_smtp
+ driver = smtp
+ command_timeout = 10s
+
+Die Liste der konfigurierten Transports:
+
+ exim -bP transport_list
+
== Filter
Es gibt das _System_-Filter und _User_-Filter. Das System-Filter wird *vor* dem
@@ -572,7 +671,7 @@
+add+::
Nutzer-Variable inkrementieren. Diese Variablen stehen dann später als
- $sn1 - $sn9 in den Routern und Transports zur Verfügung
+ '+$sn1+' - '+$sn9+' in den Routern und Transports zur Verfügung
add 27 to to n3
@@ -800,6 +899,9 @@
Exim kann SMTP-Sessions zum Test über STDIN/STDOUT abwickeln.
exim -bh <sender-ip>
+ exim -bhc <sender-ip> <1>
+
+<1> Callouts werden durchgeführt
Dabei schaltet er automatisch in den Debug-Modus für ACL.
@@ -834,88 +936,7 @@
exim -be '${lookup{root}lsearch{/etc/aliases}}'
////
-# Hint-Databases
-
- liegen in $spool_directory/db
- - retry
- - wait-<transport>
- - callout
- - ratelimit
- - misc
- Sind verzichtbar!
-
-## Wartung
-
-### Ansehen
-
- > exim_dumpdb <spool_dir> <db>
- eg: exim_dumpdb /var/spool/exim4
-
- Je nach DB unterschiedliches Format
-
-### Verändern
-
- Aufräumen
- > exim_tidyb <spool_dir> <db> (Cronjob)
-
- Reparieren
- > exim_fixdb <spool_dir> <db>
-
- … that's it …
-
-### Retry
-
- exinext - Route: Adressproblem
- Transport: Hostproblem
-
-# Acess Control Lists
-
- acl_not_smtp ACL for non-SMTP messages
- acl_not_smtp_mime ACL for non-SMTP MIME parts
- acl_not_smtp_start ACL at start of non-SMTP message
- acl_smtp_auth ACL for AUTH
- acl_smtp_connect ACL for start of SMTP connection
- acl_smtp_data ACL after DATA is complete
- acl_smtp_data_prdr ACL for each recipient, after DATA is complete
- acl_smtp_etrn ACL for ETRN
- acl_smtp_expn ACL for EXPN
- acl_smtp_helo ACL for HELO or EHLO
- acl_smtp_mail ACL for MAIL
- acl_smtp_mailauth ACL for the AUTH parameter of MAIL
- acl_smtp_mime ACL for content-scanning MIME parts
- acl_smtp_notquit ACL for non-QUIT terminations
- acl_smtp_predata ACL at start of DATA command
- acl_smtp_quit ACL for QUIT
- acl_smtp_rcpt ACL for RCPT
- acl_smtp_starttls ACL for STARTTLS
- acl_smtp_vrfy ACL for VRFY
-
- acl_<hook> = <aclverb> | <filename> | <acl-name>
-
- eg: acl_smtp_rcpt = acl_check_rcpt
- acl_smtp_rcpt = acl_check_rcpt_${primary_hostname}
-
-## Policies
-
-### acl_smtp_rcpt
-
- Abweisung einzelner Empfänger, noch kein Content!
-
-### acl_smtp_data
-
- Content-Scan. Nicht mehr für einzelne Empfänger,
- $local_part, $domain steht nicht mehr zur Verfügung,
- aber $recpients, $rcpt_count, …
-
-## Return-Values
-
- - accept
- - defer
- - deny
- - discard
-
- default: "accept", ausser bei acl_smtp_rcpt, dort ist es "deny"
implizit "deny" am Ende jeder ACL!