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