[snapshot]
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Fri, 09 May 2014 13:26:43 +0200
changeset 12 e3ac4157aae4
parent 11 3d9bb718ac1c
child 13 234207b61f7c
[snapshot]
.hgsubstate
frames/acl.tex
frames/anatomie.tex
frames/emil.tex
frames/exim.tex
frames/routing.tex
frames/smarthost.tex
frames/transport.tex
mk2014.tex
routingremote.tt
--- a/.hgsubstate	Fri May 09 10:38:05 2014 +0200
+++ b/.hgsubstate	Fri May 09 13:26:43 2014 +0200
@@ -1,2 +1,2 @@
 5654b1c30b86960fc8880f449dd99d9ff016c1a5 emig
-be6f040666503da5318cea099adf5fbe190577a8 smart-config
+327049f04783e46ded8c8cc5ad62fd6927aba594 smart-config
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frames/acl.tex	Fri May 09 13:26:43 2014 +0200
@@ -0,0 +1,46 @@
+\section{Access Control Lists}
+\subsection{Konfiguration}
+
+\begin{frame}[<+->][fragile]{Acess Control Lists}
+Für jede Phase der SMTP-Kommunikation gibt es einen ACL-Einstiegspunkt. 
+Abarbeitung der Regeln bis zur Entscheidung.
+\pause
+\begin{description}
+\item[accept] alles gut, keine weiteren Regeln
+\item[deny] permanenter Fehler und passender Text dazu
+\item[require] permanenter Fehler oder nächste Regel
+\item[warn] Protokollierung und nächste Regel
+\item[defer] temporärer Fehler
+\end{description}
+\pause
+Verweis auf Blöcke im ACL-Abschnitt der Konfiguration
+\begin{verbatim}
+	acl_smtp_connect = acl_check_connect
+	acl_smtp_rcpt = acl_check_rcpt
+	acl_smtp_data = acl_check_data
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]{Access Control Lists}{Konfiguration}
+\tiny
+\verbatiminput{acl.conf}
+\end{frame}
+
+\subsection{Features}
+
+\begin{frame}[<+->][fragile]{Access Control Lists}{Features}
+\begin{itemize}
+	\item Zugriff auf alles, was an Information verfügbar ist
+	\item Ratelimit mit beliebigen Keys
+	\item Überprüfung von Adressen \verb+verify = recipient+
+	\item Callout zur Überprüfung \verb+verify = recipient/callout=use_sender,defer_ok+
+	\item DNS-Blacklists \verb+dnslists = sbl.spamhaus.org+
+	\item Verschlüsselte Verbindung \verb+encrypted = *+
+	\item Content-Scan \verb+malware = *+, \verb+spam = …+
+	\item Header-Syntax \verb+verify = header_syntax+
+	\item Reverse-DNS \verb+verify = reverse_host_lookup+
+	\item ACL-Variablen für spätere Verarbeitung \verb+set acl_m_foo = bar+
+	\item Sub-ACL \verb+acl = foo_acl+
+	\item Generische Bedingung \verb+condition =+
+\end{itemize}
+\end{frame}
--- a/frames/anatomie.tex	Fri May 09 10:38:05 2014 +0200
+++ b/frames/anatomie.tex	Fri May 09 13:26:43 2014 +0200
@@ -1,3 +1,5 @@
+\section{Arbeitsweise und Anatomie}
+
 \begin{frame}[<+->]{Arbeitsweise und Anatomie}{Überblick}
 	\begin{itemize}
 		\item Binary ist ein ca 1\,MB großer Universalklumpen
--- a/frames/exim.tex	Fri May 09 10:38:05 2014 +0200
+++ b/frames/exim.tex	Fri May 09 13:26:43 2014 +0200
@@ -1,4 +1,5 @@
 
+\section{Exim - Entwicklung und Positionierung}
 
 \begin{frame}[<+->][fragile]{Exim}{Entwicklung}
 \begin{itemize}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frames/routing.tex	Fri May 09 13:26:43 2014 +0200
@@ -0,0 +1,43 @@
+\section{Routing}
+\subsection{Ablauf und Konfiguration}
+
+\begin{frame}[<+->][fragile]{Routing}{Allgemein}
+\begin{itemize}
+\item Routing - zentrale Rolle
+\item Routing bereits in den ACL für Adresstests
+\item Konfiguration enthält eine Kette von Router-Blöcken
+\item Vorbedingungen entscheiden, ob ein Block aktiv wird
+\item Router liefern für eine gegebene Adresse:
+	\begin{description}
+		\item[accept] Zuordnung zu Transport oder Erzeugung neuer Adressen
+		\item[decline] Verweigerung
+		\item[fail] Bounce wird generiert
+		\item[defer] falscher Augenblick
+	\end{description}
+\item Routerblock
+\begin{verbatim}
+	  dnslookup:
+	    driver = dnslookup
+	    domains = ! +local_domains
+	    transport = remote_smtp
+	    ignore_target_hosts = 127.0.0.0/8
+\end{verbatim}
+	\item Treiber dnslookup, manualroute, queryprogram, redirect, accept
+\end{itemize}
+\end{frame}
+
+\subsection{Test}
+
+\begin{frame}[fragile]{Routing}{Test}
+\begin{alltt}
+	$ exim -bt hans@example.com
+	hans@example.com
+	  router = remote, transport = remote_smtp
+	  host example.com [2606:2800:220:6d:26bf:1447:1097:aa7] 
+	  host example.com [93.184.216.119]
+\pause
+\begin{scriptsize}
+\input{routingremote.tt}
+\end{scriptsize}
+\end{alltt}
+\end{frame}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frames/smarthost.tex	Fri May 09 13:26:43 2014 +0200
@@ -0,0 +1,65 @@
+\section{Beispiel}
+\subsection{Viele Smarthosts}
+
+\begin{frame}{Beispiel}{Smarthost}
+\begin{block}{Aufgabe}
+Wir haben mehrere Smarthosts und müssen je nach Sender-Adresse über
+einen anderen Smarthost versenden.
+\end{block}
+\begin{scriptsize}
+\verbatiminput{smart-config/smarthosts.example}
+\end{scriptsize}
+
+\begin{block}{Routing}
+Wir müssen beim Routing die Sender-Adresse als Kriterium
+verwenden, nicht die Zieladresse!
+\end{block}
+\end{frame}
+
+
+# some macros to ease the understanding
+ADDRESS_DATA = ${sg{${lookup{$sender_address}lsearch*@{SMARTHOSTS}}}{\\s+}{\t}}
+SMARTHOST    = ${extract{1}{\t}{$address_data}}
+USER         = ${extract{2}{\t}{$address_data}}
+PASS         = ${extract{3}{\t}{$address_data}}
+
+domainlist local_domains = @
+
+begin router
+
+# the first router routes according the sender_address
+smarthosts:
+	driver = manualroute
+	address_data = ADDRESS_DATA
+	route_data = SMARTHOST
+	transport = smtp_auth
+
+# in case you don't have a '*' line in your smarthosts file
+
+dnslookup:
+	driver = dnslookup
+	domains = !+local_domains
+	transport = smtp
+	no_more
+
+begin transport
+
+smtp_auth:
+	driver = smtp
+	port = submission
+	hosts_require_auth = *
+
+smtp:
+	driver = smtp
+
+begin authenticators
+
+plain:
+	driver = plaintext
+	public_name = PLAIN
+	client_send = ^USER^PASS
+	
+login:
+	driver = plaintext
+	public_name = LOGIN	
+	client_send = :USER:PASS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frames/transport.tex	Fri May 09 13:26:43 2014 +0200
@@ -0,0 +1,23 @@
+\section{Transport}
+
+\begin{frame}[<+->][fragile]{Transports}
+\begin{itemize}
+\item Router referenzieren ggf. einen Transport-Block, der
+mindestens einen Treiber und ggf. noch weitere Optionen spezifiziert.
+\begin{verbatim}
+	remote_smtp:
+	  driver = smtp
+
+	local_mailbox:
+	  driver = appendfile
+	  file = /var/mail/$local_part
+	  group = mail
+\end{verbatim}
+\item Treiber
+\begin{description}
+	\item[smtp] SMTP, TLS, LMTP
+	\item[appendfile] Mailbox, Maildir
+	\item[pipe] Kommando-Pipelinee (z.B. UUCP)
+\end{description}
+\end{itemize}
+\end{frame}
--- a/mk2014.tex	Fri May 09 10:38:05 2014 +0200
+++ b/mk2014.tex	Fri May 09 13:26:43 2014 +0200
@@ -29,163 +29,30 @@
 	\tableofcontents
 \end{frame}
 
-\section{Exim - Entwicklung und Positionierung}
+% --
 \input{frames/exim.tex}
 
-\section{Arbeitsweise und Anatomie}
+% --
 \input{frames/anatomie.tex}
 
-% --
+% -- Config
 \input{frames/konfiguration.tex}
 
-\section{Routing}
-\subsection{Ablauf}
-
-\begin{frame}[fragile]{Routing}{Allgemein}
-\begin{itemize}
-\item Adresse wird an eine Kette von Routern übergeben (Reihenfolge!)
-\item Router entscheiden über den Fortgang der Bearbeitung
-\item Vorbedingungen entscheiden, ob der Router „befragt“ wird
-\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)
-\item Router: dnslookup, manualroute, queryprogram, redirect, accept
-\item einfache Tests sind möglich mit \verb=exim -bt= (Adresstest -
-	Routing) bzw. \verb=exim -bv= (Adressüberprüfung - ACL)
-\end{itemize}
-\end{frame}
-
-\subsection{Konfiguration}
+% -- Routing
+\input{frames/routing.tex}
 
-\begin{frame}[fragile]{Routing}{Konfiguration}
-Für jeden Router-Block
-\begin{itemize}
-\item Treiber
-\item Vorbedingungen (\verb=check_local_user=, \verb=domains=, \verb=condition=, …)
-\item Generische Optionen (\verb=caseful_local_part=, \verb=local_part_prefix=, …)
-\end{itemize}
-%\scriptsize
-\verbatiminput{routers.conf}
-\end{frame}
-
-\begin{frame}{Routing}{Schema}
-\includegraphics[width=0.8\textwidth,angle=270]{routing}
-\end{frame}
-
-\subsection{Test}
-
-\begin{frame}[fragile]{Routing}{Test}
-\begin{verbatim}
-	$ exim -bt hans@example.com
-	hans@example.com
-	  router = remote, transport = remote_smtp
-	  host example.com [2606:2800:220:6d:26bf:1447:1097:aa7] 
-	  host example.com [93.184.216.119]
-
-	$ exim -bt hans@localhost
-	hans@example.com
-	  <-- hans@localhost
-	  router = remote, transport = remote_smtp
-	  host example.com [2606:2800:220:6d:26bf:1447:1097:aa7] 
-	  host example.com [93.184.216.119]     
-
-	$ exim -bt heiko@localhost
-	heiko@localhost
-	  router = mbox, transport = local_mbox
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]{Routing}{Remote}
-\scriptsize
-\begin{alltt}
-\input{routingremote.tt}
-\end{alltt}
-\end{frame}
+% -- Transport
+\input{frames/transport.tex}
 
-\begin{frame}[fragile]{Routing}{Alias}
-\scriptsize
-\begin{alltt}
-\input{routingalias.tt}
-\end{alltt}
-\end{frame}
-
-\begin{frame}[fragile]{Routing}{Local}
-\scriptsize
-\begin{alltt}
-\input{routinglocal.tt}
-\end{alltt}
-\end{frame}
-
-\section{Transport}
-
-\begin{frame}[fragile]{Transports}
-Die Router referenzieren ggf. einen „transport“.
-\begin{itemize}
-\item Reihenfolge egal
-\item Generische Optionen: \verb=headers_remove=,
-\verb=envelope_to_add=, \verb=transport_filter=, \verb=user=
-\item Treiber hat weitere Optionen
-\item Transports: appendfile, autoreply, lmtp, pipe, smtp
-\item Default TLS, wenn STARTTLS geboten wird
-\end{itemize}
-\begin{alltt}
-\input{transports.conf}
-\end{alltt}
-\end{frame}
-
-\section{Access Control Lists}
-\subsection{Konfiguration}
+% -- ACL
+% \input{frames/acl.tex}
 
-\begin{frame}[<+->][fragile]{Acess Control Lists}
-Für jede Phase der SMTP-Kommunikation gibt es einen ACL-Einstiegspunkt. 
-Abarbeitung der Regeln bis zur Entscheidung.
-\pause
-\begin{description}
-\item[accept] alles gut, keine weiteren Regeln
-\item[deny] permanenter Fehler und passender Text dazu
-\item[require] permanenter Fehler oder nächste Regel
-\item[warn] Protokollierung und nächste Regel
-\item[defer] temporärer Fehler
-\end{description}
-\pause
-Verweis auf Blöcke im ACL-Abschnitt der Konfiguration
-\begin{verbatim}
-	acl_smtp_connect = acl_check_connect
-	acl_smtp_rcpt = acl_check_rcpt
-	acl_smtp_data = acl_check_data
-\end{verbatim}
-\end{frame}
+% -- Example Emil
+\input{frames/emil.tex}
 
-\begin{frame}[fragile]{Access Control Lists}{Konfiguration}
-\tiny
-\verbatiminput{acl.conf}
-\end{frame}
-
-\subsection{Features}
+% -- Example multiple smarthosts
+% \input{frames/smarthost.tex}
 
-\begin{frame}[<+->][fragile]{Access Control Lists}{Features}
-\begin{itemize}
-	\item Zugriff auf alles, was an Information verfügbar ist
-	\item Ratelimit mit beliebigen Keys
-	\item Überprüfung von Adressen \verb+verify = recipient+
-	\item Callout zur Überprüfung \verb+verify = recipient/callout=use_sender,defer_ok+
-	\item DNS-Blacklists \verb+dnslists = sbl.spamhaus.org+
-	\item Verschlüsselte Verbindung \verb+encrypted = *+
-	\item Content-Scan \verb+malware = *+, \verb+spam = …+
-	\item Header-Syntax \verb+verify = header_syntax+
-	\item Reverse-DNS \verb+verify = reverse_host_lookup+
-	\item ACL-Variablen für spätere Verarbeitung \verb+set acl_m_foo = bar+
-	\item Sub-ACL \verb+acl = foo_acl+
-	\item Generische Bedingung \verb+condition =+
-\end{itemize}
-\end{frame}
 
 \section{Logging}
 
--- a/routingremote.tt	Fri May 09 10:38:05 2014 +0200
+++ b/routingremote.tt	Fri May 09 13:26:43 2014 +0200
@@ -1,24 +1,20 @@
-$ exim -d-all+route -bt hans@example.com
+$ exim -d-all+dns+route -bt hans@example.com
 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 routing hans@example.com
 --------> remote router <--------
 local_part=hans domain=example.com
 checking domains
-calling remote router
-remote router called for hans@example.com
+calling remote router for hans@example.com
   domain = example.com
+DNS lookup of example.com (MX) gave NO_DATA
+returning DNS_NODATA
+DNS lookup of example.com (AAAA) succeeded
+DNS lookup of example.com (A) succeeded
 set transport remote_smtp
 queued for remote_smtp transport: local_part = hans
-domain = example.com
-  errors_to=NULL
-  domain_data=NULL localpart_data=NULL
 routed by remote router
   envelope to: hans@example.com
   transport: remote_smtp
   host example.com [2606:2800:220:6d:26bf:1447:1097:aa7]
   host example.com [93.184.216.119]
->>>>>>>>>>>>>>>> Exim pid=9434 terminating with rc=0 >>>>>>>>>>>>>>>>
-hans@example.com
-  router = remote, transport = remote_smtp
-  host example.com [2606:2800:220:6d:26bf:1447:1097:aa7] 
-  host example.com [93.184.216.119]                      
+>>>>>>>>>>>>>>>> Exim pid=24870 terminating with rc=0 >>>>>>>>>>>>>>>>