diff -r a9c30a9d07e4 -r b2f6ea236243 mk2014.tex --- a/mk2014.tex Fri May 02 13:01:50 2014 +0200 +++ b/mk2014.tex Fri May 02 17:03:05 2014 +0200 @@ -68,7 +68,7 @@ \begin{frame}[fragile]{Konfiguration}{Struktur} \begin{itemize} - \item Main (global) + \item Globaler Teil (ca. 240 Direktiven) \item Access-Control-Lists für SMTP: \verb=begin acl= \item Routing-Regeln (ACL und Routing): \verb=begin routers= \item Transport-Definitionen: \verb=begin transports= @@ -85,19 +85,102 @@ BASE = dc=example,dc=com \end{verbatim}\end{exampleblock} -\begin{exampleblock}{Direktiven}\scriptsize\begin{verbatim} - primary_hostname = mail.example.com - smtp_active_hostname = ${lookup{$received_ip_address}lsearch{CF/hostnames}} -\end{verbatim}\end{exampleblock} - \begin{exampleblock}{Listen}\scriptsize\begin{verbatim} domainlist local_domains = example.com : example.org domains = +local_domains \end{verbatim}\end{exampleblock} +\begin{exampleblock}{Direktiven (ca. 580)}\scriptsize\begin{verbatim} + primary_hostname = mail.example.com + smtp_active_hostname = ${lookup{$received_ip_address}lsearch{CF/hostnames}} +\end{verbatim}\end{exampleblock} + +\end{frame} + +\begin{frame}[fragile]{String-Expansionen / Listen / File- und Datenbank-Lookups} +Etwa die Hälfte der Konfigurationsdirektiven erlaubt +Variablensubstitution (Expansion)zur Laufzeit. +Testen kann man diese sehr einfach mit \verb=exim -be '…'= +\scriptsize +\begin{verbatim} + exim -be '$primary_hostname' + exim -oMi 1.1.1.1 -oMa 2.2.2.2 -be '$sender_host_address -> $received_ip_address' + exim -be '${lookup{root}lsearch{/etc/aliases}}' + exim -be '${lookup dnsdb{mx=heise.de}}' +\end{verbatim} + +\begin{description} +\item[Variablen] \verb=$local_part=, \verb=${local_part}= +\item[String-Ops] \verb=${sha1:$local_part}=, \verb=${uc:$domain}= +\item[String-Manipulation] \verb=${sg{$local_part}{.laus}{***}}= +\item[Conditional] \verb=${if eq{$local_part}{xxx} {~xxx/.mbox}{/var/mail/$local_part}}= +\item[Lookup single key] \verb=${lookup{$local_part}lsearch{/etc/aliases}}= +\item[Lookup query style] \verb+${lookup dnsdb{mx=heise.de}}+ +\end{description} +\end{frame} + +\begin{frame}[fragile]{String-Expansion}{Variablen} +Es gibt knapp 200 Variablen, Referenzierung als \verb=$= oder +\verb=${}=. +\begin{itemize} +\item Empfänger: \verb=$local_part=, \verb=$domain=, \verb=$local_part_prefix= +\item Sender: \verb=$sender_local_part= +\item Message: \verb=$message_line_count=, \verb=$message_size=, \verb=$message_headers= +\item Content: \verb=$spam_score_int=, \verb=$malware_name= +\item Routing: \verb=$original_domain= +\item System: \verb=$load_average=, \verb=$log\_space=, \verb=$pid= +\item Operation: \verb=$received_interface_address=, \verb=$tls_out_peerdn=, \verb=$tls_out_bits= +\end{itemize} \end{frame} -\begin{frame}{String-Expansionen / Listen / File- und Datenbank-Lookups} +% items +% ${:} ${[{arg}…]} ${if [{arg}…] } +% operators +% + +\begin{frame}[fragile]{String-Expansion}{String-Operationen} +Einfache Manipulation von Zeichenketten sind möglich: +\verb=${:}= +\begin{itemize} +\item Konvertierung \verb=${uc:$local_part}=, \verb=${sha1:$domain}=, \verb=${time_eval:2d4h}= +\item Extraktion \verb=${length_3:$domain}=, \verb=${substr_1_3:$domain}=, \verb=${addresses:$h_from}= +\item Arithmetik \verb=${eval:40 + 2}=, \verb=${40 + 2k}=, \verb=${eval:8 << 2}= +\item Filesystem \verb=${stat:/etc/hosts}= +\end{itemize} +\end{frame} + +\begin{frame}[fragile]{String-Expansion}{Bedingte Expansion} +Expansion kann von Bedingungen abhängig gemacht werden: +\begin{verbatim} + ${if [{arg}…]} + ${if [{arg}…] {}[{}]} + ${if [{arg}…] {}fail} +\end{verbatim} +\begin{itemize} +\item Definedness \verb=defined:tls_cipher= +\item Vergleiche \verb=eq{foo}{bar}=, \verb+=={1}{1}+ +\item … +\end{itemize} +\end{frame} + +\begin{frame}{ACL (SMTP-Phasen, Address-Überprüfung, Rate-Limiting, Content-Scan)} +\begin{itemize} +\item Eingehende SMTP-Verbindungen (und in Grenzen auch + nicht-SMTP)-Verbindungen müssen ACL überwinden. +\item Für jede Phase der SMTP-Kommunikation gibt es einen +ACL-Einstiegspunkt, z.B.:\scriptsize\begin{verbatim} + acl_smtp_connect = + acl_smtp_rcpt = + acl_smtp_data = +\end{verbatim} +\item ACL entscheidet: accept, reject, defer, warn (noop) +\item ACL Bedingungen: domains, DNS-BL, Verify (Sender/Empfänger), …, + condition +\item ACL können die interne Behandlung der Nachricht beeinflussen +(queue\_only, submission, …) +\item ACL können Variablen setzen, die später (Router, Transports) +verwendet werden +\end{itemize} \end{frame} \begin{frame}{Router (allg. Optionen und die einzelnen Router accept, dnslookup, manualroute, …)} @@ -106,9 +189,6 @@ \begin{frame}{Transports (allg. Optionen und die einzelnen Transports smtp, appendfile, …)} \end{frame} -\begin{frame}{ACL (SMTP-Phasen, Address-Überprüfung, Rate-Limiting, Content-Scan)} -\end{frame} - \begin{frame}{Logging (mainlog, rejectlog, paniclog)} \end{frame}