[snapshot]
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Tue, 06 May 2014 18:41:42 +0200
changeset 5 5c175e3d9aa6
parent 4 ce986267138d
child 6 53887d94881e
[snapshot]
Makefile
mk2014.tex
routers.conf
--- a/Makefile	Tue May 06 16:09:49 2014 +0200
+++ b/Makefile	Tue May 06 18:41:42 2014 +0200
@@ -7,7 +7,7 @@
 	rubber -d --clean mk2014.tex
 	-rm -f *.vrb $(IMAGES)
 
-mk2014.pdf:	$(IMAGES)
+mk2014.pdf:	$(IMAGES) $(wildcard *.conf)
 
 %.pdf:	%.tex
 	rubber -d $<
--- 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}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/routers.conf	Tue May 06 18:41:42 2014 +0200
@@ -0,0 +1,18 @@
+begin routers
+  remote:
+    driver = dnslookup
+    domains = !+local_domains
+    transport = remote_smtp
+    more = no
+
+  redirect:
+    driver = redirect
+    require_files = /etc/vmail/$domain/aliases
+    data = ${lookup{$local_part}lsearch{/etc/vmail/$domain/aliases}}
+
+  vmail:
+    driver = accept
+    condition = ${lookup{$local_part@$domain}\
+                        lsearch{/etc/vmail/passwd}\
+                        {yes}{no}}
+    transport = dovecot