# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1399798534 -7200 # Node ID a5163d6645bf8129ed02d62c53acf0bba0764aaa # Parent 94cf6ae85bc379aa888d6f9c37c6c91fe2bd7693 [snapshot] diff -r 94cf6ae85bc3 -r a5163d6645bf conf/acl-example.conf --- /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 + + diff -r 94cf6ae85bc3 -r a5163d6645bf conf/acl.conf --- 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 diff -r 94cf6ae85bc3 -r a5163d6645bf frames/acl.tex --- 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} diff -r 94cf6ae85bc3 -r a5163d6645bf frames/logging.tex --- /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} + diff -r 94cf6ae85bc3 -r a5163d6645bf frames/testing.tex --- /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= rejected RCPT : relay not + permitted + <** 550 relay not permitted + -> QUIT + <- 221 jumper.schlittermann.de closing connection +\end{verbatim} +\end{frame} diff -r 94cf6ae85bc3 -r a5163d6645bf mk2014.tex --- 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= rejected RCPT : 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)}