# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1399385389 -7200 # Node ID ce986267138de94aa45876dfa702eb49cdcd8159 # Parent 40a385bb9b7ef03451dbd4feb2a0f0e826ff44c7 [snapshot] diff -r 40a385bb9b7e -r ce986267138d Makefile --- a/Makefile Mon May 05 22:48:21 2014 +0200 +++ b/Makefile Tue May 06 16:09:49 2014 +0200 @@ -1,7 +1,12 @@ IMAGES = procs.pdf routing.pdf ALL = mk2014.pdf +.PHONY: clean all: $(ALL) +clean: + rubber -d --clean mk2014.tex + -rm -f *.vrb $(IMAGES) + mk2014.pdf: $(IMAGES) %.pdf: %.tex diff -r 40a385bb9b7e -r ce986267138d mk2014.tex --- a/mk2014.tex Mon May 05 22:48:21 2014 +0200 +++ b/mk2014.tex Tue May 06 16:09:49 2014 +0200 @@ -1,5 +1,5 @@ %\documentclass[draft]{beamer} -\documentclass{beamer} +\documentclass[9pt]{beamer} \usepackage[ngerman]{babel} \usepackage[utf8x]{inputenc} \usepackage{xmpmulti} @@ -10,6 +10,7 @@ \author[H. Schlittermann]{Heiko Schlittermann} \institute{schlittermann - internet \& unix support, Dresden} + \begin{document} % sicheres logging @@ -32,7 +33,6 @@ \item Flexibilität \item Sicherheit (sicher und zuverlässig) \item mehr als 90\% der Nachrichten werden sofort weitergeleitet bzw. ausgeliefert - \scriptsize{ \begin{verbatim} Time spent on the queue: messages with at least one remote delivery ------------------------------------------------------------------- @@ -44,7 +44,6 @@ 6h 2 0.0% 100.0% Over 1d 1 0.0% 100.0% \end{verbatim} - } \item Saubere Dokumentation (spec.txt) \item Dokumentiertes Protokollformat \end{itemize} @@ -104,20 +103,59 @@ \end{frame} \begin{frame}[fragile]{Konfiguration}{Syntax} -\begin{exampleblock}{Macros}\scriptsize\begin{verbatim} +\begin{exampleblock}{Macros}\begin{verbatim} CF = /etc/exim4/ USER_BASE = ou=users,BASE BASE = dc=example,dc=com \end{verbatim}\end{exampleblock} -\begin{exampleblock}{Listen}\scriptsize\begin{verbatim} - domainlist local_domains = example.com : example.org - domains = +local_domains +\begin{exampleblock}{Bedingte Konfiguration} +\begin{verbatim} + .ifdef SMALL_MEM + message_size_limit = 50M + .else + message_size_limit = 500M + .endif +\end{verbatim} +\end{exampleblock} + +\begin{exampleblock}{Versteckte Optionen} +Wegen \verb=exim -bP …=: +\begin{verbatim} + hide mysql_servers = localhost/mail/exim/secret +\end{verbatim} +\end{exampleblock} +\end{frame} + +\begin{frame}[fragile]{Konfiguration}{Options-Typen} +Es existieren ca. 580 Direktiven (Optionen). Exim kennt mehrere Datentypen. +\begin{exampleblock}{Bool}\begin{verbatim} + more = yes + more = no + more + no_more \end{verbatim}\end{exampleblock} -\begin{exampleblock}{Direktiven (ca. 580)}\scriptsize\begin{verbatim} +\begin{exampleblock}{Numerisch: Integer, Fixed-Point, Zeitintervalle}\begin{verbatim} + message_size_limit = 100k + queue_only_load = 1.5 + retry_data_expire = 4d2h +\end{verbatim}\end{exampleblock} +\begin{exampleblock}{Zeichenketten}\begin{verbatim} primary_hostname = mail.example.com - smtp_active_hostname = ${lookup{$received_ip_address}lsearch{CF/hostnames}} +\end{verbatim}\end{exampleblock} +\end{frame} + +\begin{frame}[fragile]{Konfiguration}{Options-Typen 2} +\begin{exampleblock}{Listen}\begin{verbatim} + local_parts = hans : fred : detlef + interfaces = <; 192.168.123.123 ; 2001:db8::42 +\end{verbatim}\end{exampleblock} + +\begin{exampleblock}{Frei definierte Listen} +\begin{verbatim} + domainlist local_domains = example.com : example.org + hostlist relay_from_hosts = 127.0.0.1 : fred.example.com \end{verbatim}\end{exampleblock} \end{frame} @@ -126,7 +164,7 @@ Etwa die Hälfte der Konfigurationsdirektiven erlaubt Variablensubstitution (Expansion) zur Laufzeit. Testen kann man diese sehr einfach: -\begin{scriptsize}\begin{verbatim} +\begin{verbatim} $ exim -be '$primary_hostname' jumper.schlittermann.de $ exim -be -oMi 1.1.1.1 -oMa 2.2.2.2 '$sender_host_address $received_ip_address' @@ -137,12 +175,11 @@ heiko $ exim -be '${lookup dnsdb{mx=heise.de}}' 10 relay.heise.de -\end{verbatim}\end{scriptsize} +\end{verbatim} \end{frame} \begin{frame}[fragile]{Expansion}{Übersicht} Expansion als „working horse“ der Flexibilität -\begin{scriptsize} \begin{description} \item[Variablen] \verb=$local_part=, \verb=${local_part}= \item[Operatoren] \verb=${sha1:$local_part}=, \verb=${uc:$domain}= @@ -151,13 +188,15 @@ \item[Lookup/Key] \verb=${lookup{$local_part}lsearch{/etc/aliases}}= \item[Lookup/Query] \verb+${lookup dnsdb{mx=heise.de}}+ \end{description} -\end{scriptsize} \end{frame} \begin{frame}[fragile]{Expansion}{Variablen} -Es gibt knapp 200 Variablen, Referenzierung als \verb=$= oder -\verb=${}=. -\begin{scriptsize} +Es gibt knapp 200 Variablen, die Information über Zustände, Limits, … +enthalten: +\begin{verbatim} + … = $ + … = ${} +\end{verbatim} \begin{description} \item[Envelope] \verb=$local_part=, \verb=$domain=, \verb=$local_part_prefix=, \verb=$sender_local_part=, \verb=$recipients= @@ -165,51 +204,54 @@ \verb=$message_headers=, \verb=$h_subject:= \item[Content] \verb=$spam_score_int=, \verb=$malware_name= \item[Routing] \verb=$original_domain= -\item[System] \verb=$load_average=, \verb=$log_space=, \verb=$pid= -\item[Operation] \verb=$received_interface_address=, \verb=$tls_out_peerdn=, \verb=$tls_out_bits= +\item[Delivery] \verb=$host_address=, \verb=$home=, + \verb=$qualify_recipient= +\item[Operation] \verb=$load_average=, \verb=$log_space=, \verb=$pid= + \verb=$received_interface_address=, \verb=$tls_out_peerdn=, + \verb=$message_age= \end{description} -\end{scriptsize} \end{frame} -\begin{frame}[fragile]{String-Expansion}{String-Operationen} -Einfache Manipulation von Zeichenketten sind möglich: -\verb=${:}= -\begin{scriptsize} +\begin{frame}[fragile]{Expansion}{String-Operationen} +Einfache Operationen auf Zeichenketten sind möglich: +\begin{verbatim} + … = ${:} +\end{verbatim} \begin{description} \item[Konvertierung] \verb=${uc:$local_part}=, \verb=${sha1:$domain}=, \verb=${time_eval:2d4h}= \item[Extraktion] \verb=${length_3:$domain}=, \verb=${substr_1_3:$domain}=, \verb=${addresses:$h_from}= \item[Arithmetik] \verb=${eval:40 + 2}=, \verb=${eval:40 + 2k}=, \verb=${eval:8 << 2}= \item[Filesystem] \verb=${stat:/etc/hosts}= \end{description} -\end{scriptsize} \end{frame} -\begin{frame}[fragile]{String-Expansion}{Bedingte Expansion} -Expansion kann von Bedingungen abhängig gemacht werden: +\begin{frame}[fragile]{Expansion}{Bedingte Expansion} +Expansion kann von Bedingungen abhängig gemacht werden. \begin{verbatim} - ${if [{arg}…]} + ${if :} ${if [{arg}…] {}[{}]} ${if [{arg}…] {}fail} \end{verbatim} -\begin{itemize} -\item Definiert? \verb=def:tls_cipher= -\item Vergleiche \verb=eq{foo}{bar}=, \verb+=={1}{1}+ -\item Matching \verb=match{$local_part}{^h\d+}= -\item Authentication \verb=pam{$user:$pass}= -\item Status \verb=first_delivery= -\item Verknüpfungen \verb=and{{…}{…}{…}}= -\end{itemize} +\begin{description} +\item[Negation] \verb=! = +\item[Verknüpfungen] \verb=and{{…}{…}{…}}= +\item[Definiert] \verb=def:tls_cipher= +\item[Vergleiche] \verb=eq{foo}{bar}=, \verb+=={1}{2}+ +\item[Matching] \verb=match{$local_part}{^h\d+}= +\item[Authentication] \verb=pam{$user:$pass}= +\item[Status] \verb=first_delivery= +\end{description} \end{frame} \begin{frame}[fragile]{String-Expansion}{Listen} An vielen Stellen werden Listen verwendet, Trenner in literalen Listen ist „:“, es können aber auch Listen aus Textfiles, DBM-Files und Directories erstellt werden: -\begin{itemize} +\begin{description} \item Literale Liste: \verb=example.com : foo.bar : example.org=, \verb=<; 2001:db8::10 ; 2001:db8::12= \item Liste aus Datei: \verb=lsearch;/etc/mailnames=, - \verb=dbm:/etc/mailnames= + \verb=dbm;/etc/mailnames= \item Liste aus Verzeichnisinhalt: \verb=dsearch;/etc/vmail/domains= \end{itemize} \end{frame} @@ -253,7 +295,7 @@ %\item Eingehende SMTP-Verbindungen (und in Grenzen auch % nicht-SMTP)-Verbindungen müssen ACL überwinden. %\item Für jede Phase der SMTP-Kommunikation gibt es einen -%ACL-Einstiegspunkt, z.B.:\scriptsize\begin{verbatim} +%ACL-Einstiegspunkt, z.B.:\begin{verbatim} % acl_smtp_connect = % acl_smtp_rcpt = % acl_smtp_data =