# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1399394502 -7200 # Node ID 5c175e3d9aa629cd1de7127e420f1ca82fbffe6a # Parent ce986267138de94aa45876dfa702eb49cdcd8159 [snapshot] diff -r ce986267138d -r 5c175e3d9aa6 Makefile --- 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 $< diff -r ce986267138d -r 5c175e3d9aa6 mk2014.tex --- 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{}{}[{}[{}{}{}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 {}[{}[{}]]} \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} diff -r ce986267138d -r 5c175e3d9aa6 routers.conf --- /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