diff -r 6fa8b31d1c12 -r 86e315be5b57 abstract.txt --- 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 [] - > exim -bem [] - > exim -be -Mset [] +'+$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 [] + exim -bem [] + exim -be -Mset [] + + 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 + exim -bhc <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- - - callout - - ratelimit - - misc - Sind verzichtbar! - -## Wartung - -### Ansehen - - > exim_dumpdb - eg: exim_dumpdb /var/spool/exim4 - - Je nach DB unterschiedliches Format - -### Verändern - - Aufräumen - > exim_tidyb (Cronjob) - - Reparieren - > exim_fixdb - - … 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_ = | | - - 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!