--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/conf/acl-example.conf Sun May 11 10:55:34 2014 +0200
@@ -0,0 +1,33 @@
+begin acl
+
+
+ acl_check_rcpt:
+
+ accept domains = +local_domains
+ local_parts = postmaster
+
+ require message = sender verification failed
+ verify = sender
+
+ accept authenticated = *
+
+ require message = relaying denied
+ domains = +local_domains
+
+ require message = recipient verification failed
+ verify = recipient
+
+ accept
+
+ acl_check_data:
+
+ deny message = malware: $malware_name
+ malware = *
+
+ deny message = spam score: $spam_score
+ spam = nobody
+ condition = ${if >={$spam_score_int}{60}}
+
+ accept
+
+
--- a/conf/acl.conf Sun May 11 10:55:24 2014 +0200
+++ b/conf/acl.conf Sun May 11 10:55:34 2014 +0200
@@ -1,39 +1,21 @@
begin acl
- acl_check_connect:
-
- deny ratelimit = 10/1m
- log_message = $sender_rate/$sender_rate_period > $sender_rate_limit
-
- accept
+ acl_check_connect:
+ …
- acl_check_rcpt:
-
- accept domains = +local_domains
- local_parts = postmaster
-
- require message = sender verification failed
- verify = sender
-
- accept authenticated = *
+ acl_check_rcpt:
- require message = relaying denied
- domains = +local_domains
-
- require message = recipient verification failed
- verify = recipient
-
- accept
-
- acl_check_data:
+ accept domains = +local_domains
+ local_parts = postmaster
+ ….
+ require message = relaying denied
+ domains = +local_domains
+ …
+ accept
- deny message = sorry, $malware_name
- malware = *
+ acl_check_data:
- deny message = sorry, filtered
- spam = nobody
- condition = ${if >={$spam_score_int}{60}}
-
- accept
-
-
+ accept hosts = +relay_from_hosts
+ deny message = sorry, size matters
+ condition = ${if >{$message_size}{20M}
+ accept
--- a/frames/acl.tex Sun May 11 10:55:24 2014 +0200
+++ b/frames/acl.tex Sun May 11 10:55:34 2014 +0200
@@ -2,28 +2,29 @@
\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.
+Für jede Phase der SMTP-Kommunikation gibt es einen ACL-Block
+mit Regeln. Abarbeitung der Regeln erfolgt 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[accept] alles gut, weitermachen
+\item[deny] permanenter Fehler
+\item[require] „deny“ oder weitermachen
\item[defer] temporärer Fehler
\end{description}
\pause
-Verweis auf Blöcke im ACL-Abschnitt der Konfiguration
+Die Zuordnung der SMTP-Phasen zu den ACL-Blöcken ist frei.
\begin{verbatim}
- acl_smtp_connect = acl_check_connect
+ acl_smtp_connect = …
+ …
acl_smtp_rcpt = acl_check_rcpt
- acl_smtp_data = acl_check_data
+ acl_smtp_data = …
+ …
\end{verbatim}
\end{frame}
\begin{frame}[fragile]{Access Control Lists}{Konfiguration}
\tiny
-\verbatiminput{acl.conf}
+\verbatiminput{conf/acl.conf}
\end{frame}
\subsection{Features}
@@ -35,12 +36,11 @@
\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 Authentifizierte Verbindung \verb+authenticated = *+
\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}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/frames/logging.tex Sun May 11 10:55:34 2014 +0200
@@ -0,0 +1,30 @@
+\section{Logging}
+
+\begin{frame}[fragile]{Logging}
+Sicherheit heißt auch Logging. Auskunft über das Verarbeiten der
+Nachricht. Gesteuert wird u.a. über \verb=log_selector=, \verb=log_write=,
+\verb=debug_print=.
+\begin{description}
+\item[mainlog] alle relevanten Transaktionen, dokumentiertes,
+ maschinenlesbares Format
+\item[rejectlog] Details zu abgewiesenen Nachrichten
+\item[paniclog] Konfigurationsfehler, schwere Probleme
+\item[messagelog] Transaktionen zu einer spezifischen Nachricht
+\item[syslog] Fallback, wenn nicht mal mehr paniclog geht
+\end{description}
+\scriptsize
+\begin{alltt}
+\input{msglog.tt}
+\end{alltt}
+\end{frame}
+
+\begin{frame}[fragile]{Logging}{mainlog}
+\scriptsize
+\verbatiminput{mainlog.tt}
+\end{frame}
+
+\begin{frame}[fragile]{Logging}{rejectlog}
+\scriptsize
+\verbatiminput{rejectlog.tt}
+\end{frame}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/frames/testing.tex Sun May 11 10:55:34 2014 +0200
@@ -0,0 +1,57 @@
+\section{Test und Betrieb}
+\subsection{Konfiguration}
+
+\begin{frame}[fragile]{Test und Betrieb}{Konfiguration}
+Viele Möglichkeiten, die bestehende Konfiguration zu überprüfen:
+\begin{alltt}
+ $ exim -bV -C test.conf
+ Configuration file is test.conf
+ $ exim -bP primary\_hostname
+ mail.example.com
+ $ exim -bP routers
+ … (ca 200 Zeilen)
+\end{alltt}
+\end{frame}
+
+\begin{frame}[fragile]{Test und Betrieb}{Routing, Expansion}
+\begin{verbatim}
+ $ exim -d-all+route -bt hans@example.com
+ …
+ $ exim -d-all+expand -be '$lookup{root}lsearch{/etc/aliases}}'
+ search_open: lsearch "/etc/aliases"
+ search_find: file="/etc/aliases"
+ key="root" partial=-1 affix=NULL starflags=0
+ LRU list:
+ :/etc/aliases
+ End
+ internal_search_find: file="/etc/aliases"
+ type=lsearch key="root"
+ file lookup required for root
+ in /etc/aliases
+ lookup yielded: heiko
+ heiko
+\end{verbatim}
+\end{frame}
+
+\begin{frame}[fragile]{Test und Betrieb}{ACL}
+Fake-SMTP-Session mit \verb=exim -bh 1.1.1.1=, aber einfacher noch mit swaks.
+\scriptsize
+\begin{verbatim}
+ $ swaks --pipe 'exim -bh 1.1.1.1' --from … --to …
+ === Trying pipe to exim -bh 1.1.1.1…
+ === Connected to exim -bh 1.1.1.1.
+ >>> looking up host name for 1.1.1.1
+ …
+ <- **** SMTP testing session as if from host 1.1.1.1
+ <- **** This is not for real!
+ …
+ >>> processing "deny"
+ >>> deny: condition test succeeded in ACL "acl_check_rcpt"
+ LOG: [1967] H=(jumper.schlittermann.de) [1.1.1.1]
+ F=<hs@schlittermann.de> rejected RCPT <hans@example.com>: relay not
+ permitted
+ <** 550 relay not permitted
+ -> QUIT
+ <- 221 jumper.schlittermann.de closing connection
+\end{verbatim}
+\end{frame}
--- a/mk2014.tex Sun May 11 10:55:24 2014 +0200
+++ b/mk2014.tex Sun May 11 10:55:34 2014 +0200
@@ -45,105 +45,20 @@
% -- Transport
\input{frames/transport.tex}
-% -- ACL
-% \input{frames/acl.tex}
-
-% -- Example Emil
+% -- Example Emig
\section{Beispiele}
\input{frames/emig.tex}
+% -- Example Smarthosts
\input{frames/smart.tex}
-% -- Example multiple smarthosts
-% \input{frames/smarthost.tex}
-
-
-\section{Logging}
-
-\begin{frame}[fragile]{Logging}
-Sicherheit heißt auch Logging. Auskunft über das Verarbeiten der
-Nachricht. Gesteuert wird u.a. über \verb=log_selector=, \verb=log_write=,
-\verb=debug_print=.
-\begin{description}
-\item[mainlog] alle relevanten Transaktionen, dokumentiertes,
- maschinenlesbares Format
-\item[rejectlog] Details zu abgewiesenen Nachrichten
-\item[paniclog] Konfigurationsfehler, schwere Probleme
-\item[messagelog] Transaktionen zu einer spezifischen Nachricht
-\item[syslog] Fallback, wenn nicht mal mehr paniclog geht
-\end{description}
-\scriptsize
-\begin{alltt}
-\input{msglog.tt}
-\end{alltt}
-\end{frame}
-
-\begin{frame}[fragile]{Logging}{mainlog}
-\scriptsize
-\verbatiminput{mainlog.tt}
-\end{frame}
-
-\begin{frame}[fragile]{Logging}{rejectlog}
-\scriptsize
-\verbatiminput{rejectlog.tt}
-\end{frame}
-
-\section{Test und Betrieb}
-\subsection{Konfiguration}
+% -- ACL
+\input{frames/acl.tex}
-\begin{frame}[fragile]{Test und Betrieb}{Konfiguration}
-Viele Möglichkeiten, die bestehende Konfiguration zu überprüfen:
-\begin{alltt}
- $ exim -bV -C test.conf
- Configuration file is test.conf
- $ exim -bP primary\_hostname
- mail.example.com
- $ exim -bP routers
- … (ca 200 Zeilen)
-\end{alltt}
-\end{frame}
+% -- logging
+\input{frames/logging.tex}
-\begin{frame}[fragile]{Test und Betrieb}{Routing, Expansion}
-\begin{verbatim}
- $ exim -d-all+route -bt hans@example.com
- …
- $ exim -d-all+expand -be '$lookup{root}lsearch{/etc/aliases}}'
- search_open: lsearch "/etc/aliases"
- search_find: file="/etc/aliases"
- key="root" partial=-1 affix=NULL starflags=0
- LRU list:
- :/etc/aliases
- End
- internal_search_find: file="/etc/aliases"
- type=lsearch key="root"
- file lookup required for root
- in /etc/aliases
- lookup yielded: heiko
- heiko
-\end{verbatim}
-\end{frame}
-
-\begin{frame}[fragile]{Test und Betrieb}{ACL}
-Fake-SMTP-Session mit \verb=exim -bh 1.1.1.1=, aber einfacher noch mit swaks.
-\scriptsize
-\begin{verbatim}
- $ swaks --pipe 'exim -bh 1.1.1.1' --from … --to …
- === Trying pipe to exim -bh 1.1.1.1…
- === Connected to exim -bh 1.1.1.1.
- >>> looking up host name for 1.1.1.1
- …
- <- **** SMTP testing session as if from host 1.1.1.1
- <- **** This is not for real!
- …
- >>> processing "deny"
- >>> deny: condition test succeeded in ACL "acl_check_rcpt"
- LOG: [1967] H=(jumper.schlittermann.de) [1.1.1.1]
- F=<hs@schlittermann.de> rejected RCPT <hans@example.com>: relay not
- permitted
- <** 550 relay not permitted
- -> QUIT
- <- 221 jumper.schlittermann.de closing connection
-\end{verbatim}
-\end{frame}
+% -- Test und Betrieb
+\input{frames/testing.tex}
\section{Ausblick}
@@ -153,13 +68,18 @@
\item TLS
\item Header-Rewriting
\item Retry-Rules
- \item SMTP-Authentication
- \item Cut-Through-Routing, PRDR, DANE, Enhanced Status Codes
+ \item SMTP-Authentifizierung (Client/Server)
+ \item Cut-Through-Routing, PRDR, DNSSEC, DANE, Enhanced Status Codes
\end{itemize}
\end{frame}
\begin{frame}{DANKE}
-DANKE
+Fragen?
+\pause
+Ach so - ja, es ist ein MTA-Framework. Mit einem Minimum an Annahmen
+über das zu lösende Problem und über die Art der Lösung.
+\pause
+
\end{frame}
%\begin{frame}{Möglichkeiten zur Leistungsverbesserung (Warteschlange, Parallelisierung, Blockierung, Ratelimit)}