abstract.txt
changeset 12 86e315be5b57
parent 11 6fa8b31d1c12
equal deleted inserted replaced
11:6fa8b31d1c12 12:86e315be5b57
     3 :Author: Heiko Schlittermann
     3 :Author: Heiko Schlittermann
     4 :toc:
     4 :toc:
     5 :data-uri:
     5 :data-uri:
     6 :icons:
     6 :icons:
     7 :numbered:
     7 :numbered:
       
     8 :ascii-ids:
     8 
     9 
     9 _italic_::
    10 _italic_::
    10     Namen von Dateien, Programmen, Hosts, Domains, Mail-Header, URLS: _example.com_, _From:_
    11     Namen von Dateien, Programmen, Hosts, Domains, Mail-Header, URLS: _example.com_, _From:_
    11 *bold*::
    12 *bold*::
    12     Namen von Exim-Routern, Transports, Authenticators: *dnslookup*-Router
    13     Namen von Exim-Routern, Transports, Authenticators: *dnslookup*-Router
    13 +fixed+::
    14 +fixed+::
    14     Kommandos, Code-Beispiele, Exim-Konfigurations-Optionen: +primary_hostname+
    15     Kommandos, Code-Beispiele, Exim-Konfigurations-Optionen: +primary_hostname+
    15 +*fixed bold*+::
    16 
    16     Hervorhebung von Kommandos, Nutzereingaben: +*exim -bV*+
    17 *+fixed bold+*::
    17 +_slanted_+::
    18     Hervorhebung von Kommandos, Nutzereingaben: *+exim -bV+*
    18     Exim-Variablen im Text: $local_part oder $sender_address
    19 
       
    20 '+slanted+'::
       
    21     Exim-Variablen im Text: '+$local_part+' oder '+$sender_address+'
    19 
    22 
    20 == Konfiguration
    23 == Konfiguration
    21 
    24 
    22 === File
    25 === File
    23 
    26 
   155 
   158 
   156 === ACL und Rewrite-Regeln
   159 === ACL und Rewrite-Regeln
   157 
   160 
   158 Diese beiden Teile der Konfiguration haben ihre eigene Syntax.
   161 Diese beiden Teile der Konfiguration haben ihre eigene Syntax.
   159 
   162 
   160 == Werte
   163 [[types]]
       
   164 == Werte und ihre Typen
   161 
   165 
   162 ALle Optionen der Konfigurationsdatei haben einen spezifischen Werte-Typ.
   166 ALle Optionen der Konfigurationsdatei haben einen spezifischen Werte-Typ.
   163 
   167 
   164 * _bool_, _integer_, _fixed-point_, _time_ und _string_
   168 * _bool_, _integer_, _fixed-point_, _time_ und _string_
   165 * Listen sind immer String-Listen
   169 * Listen sind immer String-Listen
   269  senders = : <2>
   273  senders = : <2>
   270 
   274 
   271 <1> leere Liste
   275 <1> leere Liste
   272 <2> Liste mit einem leeren Element
   276 <2> Liste mit einem leeren Element
   273 
   277 
   274 ////
   278 .Debugging
   275 > exim -be '${map{:a:b:c,}{<$item>}}'
   279  exim -be '${map{:a:b:c,}{<$item>}}'
   276 > exim -be '${map{<,,a,b,c,}{<$item>}}'
   280  exim -be '${map{<,,a,b,c,}{<$item>}}'
   277 > exim -C <(echo domainlist local_domains = 'a:b::c:d') -be '${listnamed:local_domains}'
   281  exim -C <(echo domainlist local_domains = 'a:b::c:d') -be '${listnamed:local_domains}'
   278 ////
       
   279 
   282 
   280 === Reguläre Ausdrücke
   283 === Reguläre Ausdrücke
   281 
   284 
   282 Reguläre Ausdrücke werden durch 'libpcre' ausgewertet, sie sind also kompatibel
   285 Reguläre Ausdrücke werden durch 'libpcre' ausgewertet, sie sind also kompatibel
   283 mit den von Perl bekannten regulären Ausdrücken. Reguläre Ausdrücke werden immer
   286 mit den von Perl bekannten regulären Ausdrücken. Reguläre Ausdrücke werden immer
   303 binding“). 
   306 binding“). 
   304 
   307 
   305 CAUTION: Es stehen aber nicht in jeder Phase alle Items zur Verfügung. (z.B.
   308 CAUTION: Es stehen aber nicht in jeder Phase alle Items zur Verfügung. (z.B.
   306 wird der Wert der globalen Option +message_size_limit+ expandiert, aber bereits
   309 wird der Wert der globalen Option +message_size_limit+ expandiert, aber bereits
   307 während der Antwort auf das SMTP-HELO, in dieser Phase gibt es noch keinen
   310 während der Antwort auf das SMTP-HELO, in dieser Phase gibt es noch keinen
   308 $local_part).
   311 '+$local_part+').
   309 
   312 
   310 
   313 .Debugging
   311 ////
   314  exim -be [<string>]
   312     > exim -be [<string>]
   315  exim -bem <message-file> [<string>]
   313     > exim -bem <message-file> [<string>]
   316  exim -be -Mset <spool-id> [<string>]
   314     > exim -be -Mset <spool-id> [<string>]
   317  
   315 
   318  eg: exim -be '$primary_hostname'
   316     eg: exim -be '$primary_hostname'
   319      exim -be '$tod_full'
   317         exim -be '$tod_full'
   320      exim -bem <(echo 'Subject: Hi') '$h_subject:'
   318         exim -bem <(echo 'Subject: Hi') '$h_subject:'
       
   319 
       
   320     Expansionen liefern neuen Text zurück oder können „forced expansion failure“
       
   321     bewirken
       
   322 ////
       
   323 
   321 
   324 === Expansions-Items
   322 === Expansions-Items
   325 
   323 
   326 Aus Sicht des Expanders ist alles, was mit einem '\$' beginnt, ein
   324 Aus Sicht des Expanders ist alles, was mit einem '\$' beginnt, ein
   327 Expansions-Item.
   325 Expansions-Item.
   502 _warn_::
   500 _warn_::
   503     Keine finale Entscheidung, NOOP
   501     Keine finale Entscheidung, NOOP
   504 _require_::
   502 _require_::
   505     Wenn eine der Bedingungen *nicht* erfüllt ist, Abbruch mit 5xx, 
   503     Wenn eine der Bedingungen *nicht* erfüllt ist, Abbruch mit 5xx, 
   506     andernfalls weiter zum nächsten Block
   504     andernfalls weiter zum nächsten Block
       
   505 _discard_::
       
   506     Wie _accept_, aber Empfänger, bzw. Nachricht wird verworfen!
   507 
   507 
   508 .Häufige ACL-Bedingungen
   508 .Häufige ACL-Bedingungen
   509 +hosts+::
   509 +hosts+::
   510     Sender-Host-IP wird geprüft
   510     Sender-Host-IP wird geprüft
       
   511 
       
   512  hosts = +trusted_hosts
       
   513 
   511 +domains+::
   514 +domains+::
   512     Empfänger-Domain wird geprüft
   515     Empfänger-Domain wird geprüft
       
   516 
       
   517  domains = +local_domains
       
   518 
   513 +senders+::
   519 +senders+::
   514     Absender-Mailadresse wird geprüft
   520     Absender-Mailadresse wird geprüft
       
   521 
       
   522  senders = postmaster@example.com : hans@foo.bar
       
   523 
   515 +malware+::
   524 +malware+::
   516     Malware-Content-Scan liefert einen Treffer
   525     Malware-Content-Scan liefert einen Treffer
       
   526 
       
   527  malware = *
       
   528 
   517 +spam+::
   529 +spam+::
   518     SPAM-Content-Scan (_SpamAssassin_)
   530     SPAM-Content-Scan (_SpamAssassin_)
       
   531 
       
   532  spam = nobody/true
       
   533 
   519 +verify+::
   534 +verify+::
   520     Empfänger- oder Absenderüberprüfung, eventuell auch mit _callout_.
   535     Empfänger- oder Absenderüberprüfung, eventuell auch mit _callout_.
       
   536 
       
   537  verify = recipient/callout=use_sender,defer_ok
       
   538 
   521 +ratelimit+::
   539 +ratelimit+::
   522     Limitierungen aller Art (Menge, Größe, …)
   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
   523 
   581 
   524 Ziel der ACL-Operations sollte es sein, möglichst viele Dinge zur SMTP-Zeit zu
   582 Ziel der ACL-Operations sollte es sein, möglichst viele Dinge zur SMTP-Zeit zu
   525 entscheiden und dann die SMTP-Verbindung mit 5xx zu beenden. Damit bleibt die
   583 entscheiden und dann die SMTP-Verbindung mit 5xx zu beenden. Damit bleibt die
   526 Verantwortung für die Bounce beim Absender.
   584 Verantwortung für die Bounce beim Absender.
   527 
   585 
   528 == Router
   586 == Router
   529 
   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 
   530 == Transports
   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
   531 
   630 
   532 == Filter
   631 == Filter
   533 
   632 
   534 Es gibt das _System_-Filter und _User_-Filter. Das System-Filter wird *vor* dem 
   633 Es gibt das _System_-Filter und _User_-Filter. Das System-Filter wird *vor* dem 
   535 Routing der Nachricht aktiv. Das User-Filter dann, wenn ein Router für diesen
   634 Routing der Nachricht aktiv. Das User-Filter dann, wenn ein Router für diesen
   570 
   669 
   571 === Filter-Kommandos
   670 === Filter-Kommandos
   572 
   671 
   573 +add+::
   672 +add+::
   574     Nutzer-Variable inkrementieren. Diese Variablen stehen dann später als
   673     Nutzer-Variable inkrementieren. Diese Variablen stehen dann später als
   575     $sn1 - $sn9 in den Routern und Transports zur Verfügung
   674     '+$sn1+' - '+$sn9+' in den Routern und Transports zur Verfügung
   576 
   675 
   577  add 27 to to n3
   676  add 27 to to n3
   578 
   677 
   579 +deliver+::
   678 +deliver+::
   580     Mail weiterleiten, Vorsicht mit den Absendern (SPF). Signifikant.
   679     Mail weiterleiten, Vorsicht mit den Absendern (SPF). Signifikant.
   798 === Fake-SMTP-Session zum ACL-Test
   897 === Fake-SMTP-Session zum ACL-Test
   799 
   898 
   800 Exim kann SMTP-Sessions zum Test über STDIN/STDOUT abwickeln.
   899 Exim kann SMTP-Sessions zum Test über STDIN/STDOUT abwickeln.
   801 
   900 
   802  exim -bh <sender-ip>
   901  exim -bh <sender-ip>
       
   902  exim -bhc <sender-ip> <1>
       
   903 
       
   904 <1> Callouts werden durchgeführt
   803 
   905 
   804 Dabei schaltet er automatisch in den Debug-Modus für ACL.
   906 Dabei schaltet er automatisch in den Debug-Modus für ACL.
   805 
   907 
   806 .Beispiel
   908 .Beispiel
   807  swaks -f hs@schlittermann.de -t fred@example.com \
   909  swaks -f hs@schlittermann.de -t fred@example.com \
   832 
   934 
   833 .Beispiel
   935 .Beispiel
   834  exim -be '${lookup{root}lsearch{/etc/aliases}}'
   936  exim -be '${lookup{root}lsearch{/etc/aliases}}'
   835 
   937 
   836 ////
   938 ////
   837 # Hint-Databases
   939 
   838   
       
   839   liegen in $spool_directory/db
       
   840   - retry
       
   841   - wait-<transport>
       
   842   - callout
       
   843   - ratelimit
       
   844   - misc
       
   845 
       
   846   Sind verzichtbar!
       
   847 
       
   848 ## Wartung
       
   849 
       
   850 ### Ansehen
       
   851 
       
   852   > exim_dumpdb <spool_dir> <db>
       
   853   eg: exim_dumpdb /var/spool/exim4 
       
   854 
       
   855   Je nach DB unterschiedliches Format
       
   856 
       
   857 ### Verändern
       
   858 
       
   859   Aufräumen
       
   860   > exim_tidyb <spool_dir> <db> (Cronjob)
       
   861 
       
   862   Reparieren
       
   863   > exim_fixdb <spool_dir> <db>
       
   864 
       
   865   … that's it …
       
   866 
       
   867 ### Retry
       
   868 
       
   869     exinext - Route:     Adressproblem
       
   870               Transport: Hostproblem
       
   871 
       
   872 # Acess Control Lists
       
   873 
       
   874     acl_not_smtp       ACL for non-SMTP messages
       
   875     acl_not_smtp_mime  ACL for non-SMTP MIME parts
       
   876     acl_not_smtp_start ACL at start of non-SMTP message
       
   877     acl_smtp_auth      ACL for AUTH
       
   878     acl_smtp_connect   ACL for start of SMTP connection
       
   879     acl_smtp_data      ACL after DATA is complete
       
   880     acl_smtp_data_prdr ACL for each recipient, after DATA is complete
       
   881     acl_smtp_etrn      ACL for ETRN
       
   882     acl_smtp_expn      ACL for EXPN
       
   883     acl_smtp_helo      ACL for HELO or EHLO
       
   884     acl_smtp_mail      ACL for MAIL
       
   885     acl_smtp_mailauth  ACL for the AUTH parameter of MAIL
       
   886     acl_smtp_mime      ACL for content-scanning MIME parts
       
   887     acl_smtp_notquit   ACL for non-QUIT terminations
       
   888     acl_smtp_predata   ACL at start of DATA command
       
   889     acl_smtp_quit      ACL for QUIT
       
   890     acl_smtp_rcpt      ACL for RCPT
       
   891     acl_smtp_starttls  ACL for STARTTLS
       
   892     acl_smtp_vrfy      ACL for VRFY
       
   893 
       
   894     acl_<hook> = <aclverb> | <filename> | <acl-name>
       
   895                  
       
   896     eg: acl_smtp_rcpt = acl_check_rcpt
       
   897         acl_smtp_rcpt = acl_check_rcpt_${primary_hostname}
       
   898 
       
   899 ## Policies
       
   900 
       
   901 ### acl_smtp_rcpt
       
   902  
       
   903     Abweisung einzelner Empfänger, noch kein Content!
       
   904 
       
   905 ### acl_smtp_data
       
   906 
       
   907     Content-Scan. Nicht mehr für einzelne Empfänger,
       
   908     $local_part, $domain steht nicht mehr zur Verfügung,
       
   909     aber $recpients, $rcpt_count, …
       
   910 
       
   911 ## Return-Values
       
   912 
       
   913     - accept
       
   914     - defer
       
   915     - deny
       
   916     - discard
       
   917 
       
   918     default: "accept", ausser bei acl_smtp_rcpt, dort ist es "deny"
       
   919     implizit "deny" am Ende jeder ACL!
   940     implizit "deny" am Ende jeder ACL!
   920 
   941 
   921 
   942 
   922 ## Test
   943 ## Test
   923 
   944