--- a/mk2014.tex Tue May 06 16:09:49 2014 +0200
+++ b/mk2014.tex Tue May 06 18:41:42 2014 +0200
@@ -1,10 +1,12 @@
%\documentclass[draft]{beamer}
\documentclass[9pt]{beamer}
+\usepackage{verbatim}
\usepackage[ngerman]{babel}
+\usepackage{alltt}
\usepackage[utf8x]{inputenc}
-\usepackage{xmpmulti}
\setbeamercovered{transparent}
-\usetheme{Dresden}
+%\usetheme{Dresden}
+\usepackage{lmodern}
\title[Exim]{Exim - MTA-Framework oder MTA?}
\subtitle{Mailserver-Konferenz Berlin 2014}
\author[H. Schlittermann]{Heiko Schlittermann}
@@ -24,6 +26,7 @@
\tableofcontents
\end{frame}
+\section{Positionierung}
\begin{frame}[<+->][fragile]{Wie positioniert Exim sich gegenüber anderen MTA}
\begin{itemize}
@@ -49,6 +52,8 @@
\end{itemize}
\end{frame}
+\section{Anatomie}
+
\begin{frame}{Arbeitsweise und Anatomie}{Überblick}
\begin{itemize}
\item Binary ist ein ca 1MB großer Universalklumpen
@@ -64,10 +69,6 @@
\includegraphics[width=0.8\textwidth,angle=270]{procs}
\end{frame}
-\begin{frame}{Routing}
-\includegraphics[width=0.8\textwidth,angle=270]{routing}
-\end{frame}
-
\begin{frame}{Arbeitsweise und Anatomie}{IN, OUT, Retry}
Es gibt im wesentlichen 3 Phasen der Verarbeitung
\begin{enumerate}
@@ -86,6 +87,22 @@
\end{enumerate}
\end{frame}
+\section{Konfiguration}
+
+\subsection{File}
+
+\begin{frame}[fragile]{Konfiguration}{File}
+\begin{itemize}
+ \item Debian geht einen sonder(baren) Weg
+ \item \verb=/dev/null= ist eine gültige Konfiguration
+ \item \verb=exim -bV= listet die verwendete Konfigurationsdatei und
+ einkompilierte Features
+ \item Beispiel-Konfig \verb=example.conf.gz= als Ausgangspunkt
+\end{itemize}
+\end{frame}
+
+\subsection{Struktur}
+
\begin{frame}[fragile]{Konfiguration}{Struktur}
Strukturiertes Konfigurationsfile mit mehreren Abschnitten, teilweise
miteinander verlinkt (Router referenziert Tranports, globaler Teil
@@ -102,12 +119,17 @@
\end{description}
\end{frame}
+
+\subsection{Syntax}
+
\begin{frame}[fragile]{Konfiguration}{Syntax}
-\begin{exampleblock}{Macros}\begin{verbatim}
+\begin{exampleblock}{Macros}
+\begin{verbatim}
CF = /etc/exim4/
USER_BASE = ou=users,BASE
BASE = dc=example,dc=com
-\end{verbatim}\end{exampleblock}
+\end{verbatim}
+\end{exampleblock}
\begin{exampleblock}{Bedingte Konfiguration}
\begin{verbatim}
@@ -129,41 +151,52 @@
\begin{frame}[fragile]{Konfiguration}{Options-Typen}
Es existieren ca. 580 Direktiven (Optionen). Exim kennt mehrere Datentypen.
-\begin{exampleblock}{Bool}\begin{verbatim}
+\begin{exampleblock}{Bool}
+\begin{verbatim}
more = yes
more = no
more
no_more
-\end{verbatim}\end{exampleblock}
+\end{verbatim}
+\end{exampleblock}
-\begin{exampleblock}{Numerisch: Integer, Fixed-Point, Zeitintervalle}\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}
+\end{verbatim}
+\end{exampleblock}
+\begin{exampleblock}{Zeichenketten}
+\begin{verbatim}
primary_hostname = mail.example.com
-\end{verbatim}\end{exampleblock}
+\end{verbatim}
+\end{exampleblock}
\end{frame}
\begin{frame}[fragile]{Konfiguration}{Options-Typen 2}
-\begin{exampleblock}{Listen}\begin{verbatim}
+\begin{exampleblock}{Listen}
+\begin{verbatim}
local_parts = hans : fred : detlef
interfaces = <; 192.168.123.123 ; 2001:db8::42
-\end{verbatim}\end{exampleblock}
+\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{verbatim}
+\end{exampleblock}
\end{frame}
+\subsection{Variablen-Expansion}
+
\begin{frame}[fragile]{Konfiguration}{Expansion}
-Etwa die Hälfte der Konfigurationsdirektiven erlaubt
-Variablensubstitution (Expansion) zur Laufzeit.
-Testen kann man diese sehr einfach:
+ Etwa die Hälfte der Konfigurationsdirektiven erlaubt
+ Variablensubstitution (Expansion) zur Laufzeit.
+ Testen kann man diese sehr einfach:
\begin{verbatim}
$ exim -be '$primary_hostname'
jumper.schlittermann.de
@@ -201,7 +234,7 @@
\item[Envelope] \verb=$local_part=, \verb=$domain=, \verb=$local_part_prefix=,
\verb=$sender_local_part=, \verb=$recipients=
\item[Message] \verb=$message_line_count=, \verb=$message_size=,
-\verb=$message_headers=, \verb=$h_subject:=
+ \verb=$message_headers=, \verb=$h_subject:=
\item[Content] \verb=$spam_score_int=, \verb=$malware_name=
\item[Routing] \verb=$original_domain=
\item[Delivery] \verb=$host_address=, \verb=$home=,
@@ -248,12 +281,12 @@
Listen ist „:“, es können aber auch Listen aus Textfiles, DBM-Files und
Directories erstellt werden:
\begin{description}
-\item Literale Liste: \verb=example.com : foo.bar : example.org=,
+\item[Literale] \verb=example.com : foo.bar : example.org=,
\verb=<; 2001:db8::10 ; 2001:db8::12=
-\item Liste aus Datei: \verb=lsearch;/etc/mailnames=,
+\item[Datei] \verb=lsearch;/etc/mailnames=,
\verb=dbm;/etc/mailnames=
-\item Liste aus Verzeichnisinhalt: \verb=dsearch;/etc/vmail/domains=
-\end{itemize}
+\item[Verzeichnis] \verb=dsearch;/etc/vmail/domains=
+\end{description}
\end{frame}
\begin{frame}[fragile]{String-Expansion}{Single-Key Lookups}
@@ -263,12 +296,15 @@
${lookup{<key>}<type>{<arg>}[{<found>}[{<not found}]]}
${lookup{<key>}<type>{<arg>}{<found>}fail}
\end{verbatim}
-\begin{itemize}
-\item Lineares File: \verb+domains = lsearch;/etc/mail/domains+
-\item Lineares File: \verb=${lookup{$local_part}lsearch{/etc/aliases}}=
-\item Lineares File: \verb=${lookup{$local_part}lsearch{/etc/aliases}{${uc:$value}}}=
-\end{itemize}
-
+\begin{description}
+\item[implizit] \verb+domains = lsearch;/etc/mail/domains+
+\item[Lookup] \verb|${lookup{$local_part}lsearch{/etc/aliases}}|
+\item[Lookup] \begin{verbatim}
+ ${lookup{$local_part}lsearch{/etc/aliases}\
+ {$value}\
+ {${lookup{…}}}}
+\end{verbatim}
+\end{description}
\begin{exampleblock}{Lookup-Typen}
lsearch, dsearch, dbm, cdbm, iplsearch, net-iplsearch, wildlsearch, …
\end{exampleblock}
@@ -279,11 +315,13 @@
\begin{verbatim}
${lookup <type>{<arg(s)>}[{<found>}[{<not found>}]]}
\end{verbatim}
-\begin{itemize}
-\item DNS: \verb+${lookup dnsdb{a=foobar.de}}+
-\item LDAP \verb+${lookup ldap{ldap:///o=bar?mailbox?sub?uid=${quote_ldap:$local_part}}}+
-\item PSQL \verb=${lookup pgsql{SELECT mailbox FROM …}}=
-\end{itemize}
+\begin{description}
+\item[DNS] \verb+${lookup dnsdb{a=foobar.de}}+
+\item[LDAP] \begin{verbatim}${lookup ldap{ldap:///o=bar?mailbox
+ ?sub?uid=${quote_ldap:$local_part}}}
+\end{verbatim}
+\item[PSQL] \verb=${lookup pgsql{SELECT mailbox FROM …}}=
+\end{description}
\begin{exampleblock}{Lookup-Typen}
dnsdb, ibase, ldap, mysql, nisplus, oracle, passwd, pgsql, sqlite
\end{exampleblock}
@@ -310,9 +348,44 @@
%\end{itemize}
%\end{frame}
%
-%\begin{frame}{Router (allg. Optionen und die einzelnen Router accept, dnslookup, manualroute, …)}
-%Router entscheiden über den Fortgang der Bearbeitung
-%\end{frame}
+
+\section{Router}
+
+\begin{frame}[fragile]{Routing}{Allgemein}
+\begin{itemize}
+\item Router entscheiden über den Fortgang der Bearbeitung
+\item Router werden in sequentiell „gefragt“, wenn die Vorbedingungen
+ erfüllt sind (\verb=domains=, \verb=local_parts=, …)
+\item Router liefern für eine gegebene Adresse
+ \begin{description}
+ \item[accept] Zuordnung zu Transport oder erzeugung neuer Adressen
+ \item[pass] Weitergabe an anderen Router
+ \item[decline] Verweigerung
+ \item[fail] Bounce wird generiert
+ \item[defer] falscher Augenblick
+ \item[error] Panik
+ \end{description}
+\item werden auch von ACL genutzt (Adressüberpüfung)
+\end{itemize}
+
+\begin{exampleblock}{Router-Test}
+\begin{verbatim}
+ $ exim -bt info@example.com
+ info@example.com
+ router = dnslookup, transport = smtp
+ host example.com [93.184.216.119]
+\end{verbatim}
+\end{exampleblock}
+\end{frame}
+
+\begin{frame}{Routing}{Schema}
+\includegraphics[width=0.8\textwidth,angle=270]{routing}
+\end{frame}
+
+\begin{frame}[fragile]{Routing}{Konfiguration}
+\verbatiminput{routers.conf}
+\end{frame}
+
%
%\begin{frame}{Transports (allg. Optionen und die einzelnen Transports smtp, appendfile, …)}
%\end{frame}