[snapshot]
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Mon, 20 Apr 2015 23:07:09 +0200
changeset 12 86e315be5b57
parent 11 6fa8b31d1c12
child 13 95ecb62b93e6
[snapshot]
Makefile
abstract.conf
abstract.txt
--- a/Makefile	Mon Apr 20 16:01:28 2015 +0200
+++ b/Makefile	Mon Apr 20 23:07:09 2015 +0200
@@ -1,16 +1,27 @@
 TXT = abstract.txt
 HTML = out/abstract.html
+PDF = out/abstract.pdf
 
 #REVISION = ${shell hg id -tibB}
 REVISION = ${shell hg log -r . --template '{latesttag}-{latesttagdistance}-{node|short}'}
 DATE = ${shell date -I}
 
+AOPTS = -a revision="${REVISION}" -a date="${DATE}"
 
-.PHONY:	all clean
+.PHONY:	all clean pdf html
+
 
-all:	${HTML}
-clean:	; rm -f ${HTML}
+all:	html pdf
+clean:	; rm -f ${HTML} ${PDF}
+
+pdf:	${PDF}
+html:	${HTML}
+
+out/%.pdf:		%.txt
+		@mkdir -p ${dir $@}
+		a2x --asciidoc-opts="${AOPTS}" -D ${dir $@} $<
 
 out/%.html:		%.txt
 		@mkdir -p ${dir $@}
-		asciidoc -a revision="${REVISION}" -a date="${DATE}" -o $@ $<
+#		asciidoc -a revision="${REVISION}" -a date="${DATE}" -o $@ $<
+		asciidoc ${AOPTS} -o $@ $<
--- a/abstract.conf	Mon Apr 20 16:01:28 2015 +0200
+++ b/abstract.conf	Mon Apr 20 23:07:09 2015 +0200
@@ -1,11 +1,9 @@
 [blockdef-listing]
-subs=verbatim,quotes
+#subs=verbatim,quotes
 
 
 [quotes]
-$|=vars
-
-[paradef-literal]
+#$|=vars
 
 [tags]
-vars=<code><em>$|</em></code>
+#vars=<code><em>$|</em></code>
--- 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!