--- 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=$<var>= oder
-\verb=${<var>}=.
-\begin{scriptsize}
+Es gibt knapp 200 Variablen, die Information über Zustände, Limits, …
+enthalten:
+\begin{verbatim}
+ … = $<var>
+ … = ${<var>}
+\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=${<op>:<string>}=
-\begin{scriptsize}
+\begin{frame}[fragile]{Expansion}{String-Operationen}
+Einfache Operationen auf Zeichenketten sind möglich:
+\begin{verbatim}
+ … = ${<op>:<string>}
+\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 <op>[{arg}…]}
+ ${if <op>:<arg>}
${if <op>[{arg}…] {<value1>}[{<value2>}]}
${if <op>[{arg}…] {<value1>}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=! <op>=
+\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 = <name of connect acl>
% acl_smtp_rcpt = <name of recipient acl>
% acl_smtp_data = <name of recipient acl>