mk2014.tex
changeset 2 b2f6ea236243
parent 1 a9c30a9d07e4
child 3 40a385bb9b7e
equal deleted inserted replaced
1:a9c30a9d07e4 2:b2f6ea236243
    66 \end{enumerate}
    66 \end{enumerate}
    67 \end{frame}
    67 \end{frame}
    68 
    68 
    69 \begin{frame}[fragile]{Konfiguration}{Struktur}
    69 \begin{frame}[fragile]{Konfiguration}{Struktur}
    70 \begin{itemize}
    70 \begin{itemize}
    71 	\item Main (global)
    71 	\item Globaler Teil (ca. 240 Direktiven)
    72 	\item Access-Control-Lists für SMTP: \verb=begin acl=
    72 	\item Access-Control-Lists für SMTP: \verb=begin acl=
    73 	\item Routing-Regeln (ACL und Routing): \verb=begin routers=
    73 	\item Routing-Regeln (ACL und Routing): \verb=begin routers=
    74 	\item Transport-Definitionen: \verb=begin transports=
    74 	\item Transport-Definitionen: \verb=begin transports=
    75 	\item Retry-Vorgaben: \verb=begin retry=
    75 	\item Retry-Vorgaben: \verb=begin retry=
    76 	\item Envelope/Header-Rewriting: \verb=begin rewrite=
    76 	\item Envelope/Header-Rewriting: \verb=begin rewrite=
    83 	CF = /etc/exim4/
    83 	CF = /etc/exim4/
    84 	USER_BASE = ou=users,BASE
    84 	USER_BASE = ou=users,BASE
    85 	BASE = dc=example,dc=com
    85 	BASE = dc=example,dc=com
    86 \end{verbatim}\end{exampleblock}
    86 \end{verbatim}\end{exampleblock}
    87 
    87 
    88 \begin{exampleblock}{Direktiven}\scriptsize\begin{verbatim}
       
    89 	primary_hostname = mail.example.com
       
    90 	smtp_active_hostname = ${lookup{$received_ip_address}lsearch{CF/hostnames}}
       
    91 \end{verbatim}\end{exampleblock}
       
    92 
       
    93 \begin{exampleblock}{Listen}\scriptsize\begin{verbatim}
    88 \begin{exampleblock}{Listen}\scriptsize\begin{verbatim}
    94 	domainlist local_domains = example.com : example.org
    89 	domainlist local_domains = example.com : example.org
    95 	domains = +local_domains
    90 	domains = +local_domains
    96 \end{verbatim}\end{exampleblock}
    91 \end{verbatim}\end{exampleblock}
    97 
    92 
    98 \end{frame}
    93 \begin{exampleblock}{Direktiven (ca. 580)}\scriptsize\begin{verbatim}
    99 
    94 	primary_hostname = mail.example.com
   100 \begin{frame}{String-Expansionen / Listen / File- und Datenbank-Lookups}
    95 	smtp_active_hostname = ${lookup{$received_ip_address}lsearch{CF/hostnames}}
       
    96 \end{verbatim}\end{exampleblock}
       
    97 
       
    98 \end{frame}
       
    99 
       
   100 \begin{frame}[fragile]{String-Expansionen / Listen / File- und Datenbank-Lookups}
       
   101 Etwa die Hälfte der Konfigurationsdirektiven erlaubt
       
   102 Variablensubstitution (Expansion)zur Laufzeit.
       
   103 Testen kann man diese sehr einfach mit \verb=exim -be '…'=
       
   104 \scriptsize
       
   105 \begin{verbatim}
       
   106 	exim -be '$primary_hostname'
       
   107 	exim -oMi 1.1.1.1 -oMa 2.2.2.2 -be '$sender_host_address -> $received_ip_address'
       
   108 	exim -be '${lookup{root}lsearch{/etc/aliases}}'
       
   109 	exim -be '${lookup dnsdb{mx=heise.de}}'
       
   110 \end{verbatim}
       
   111 
       
   112 \begin{description}
       
   113 \item[Variablen] \verb=$local_part=, \verb=${local_part}=
       
   114 \item[String-Ops] \verb=${sha1:$local_part}=, \verb=${uc:$domain}=
       
   115 \item[String-Manipulation] \verb=${sg{$local_part}{.laus}{***}}=
       
   116 \item[Conditional] \verb=${if eq{$local_part}{xxx} {~xxx/.mbox}{/var/mail/$local_part}}=
       
   117 \item[Lookup single key] \verb=${lookup{$local_part}lsearch{/etc/aliases}}=
       
   118 \item[Lookup query style] \verb+${lookup dnsdb{mx=heise.de}}+
       
   119 \end{description}
       
   120 \end{frame}
       
   121 
       
   122 \begin{frame}[fragile]{String-Expansion}{Variablen}
       
   123 Es gibt knapp 200 Variablen, Referenzierung als \verb=$<var>= oder
       
   124 \verb=${<var>}=.
       
   125 \begin{itemize}
       
   126 \item Empfänger: \verb=$local_part=, \verb=$domain=, \verb=$local_part_prefix=
       
   127 \item Sender: \verb=$sender_local_part=
       
   128 \item Message: \verb=$message_line_count=, \verb=$message_size=, \verb=$message_headers=
       
   129 \item Content: \verb=$spam_score_int=, \verb=$malware_name=
       
   130 \item Routing: \verb=$original_domain=
       
   131 \item System: \verb=$load_average=, \verb=$log\_space=, \verb=$pid=
       
   132 \item Operation: \verb=$received_interface_address=, \verb=$tls_out_peerdn=, \verb=$tls_out_bits=
       
   133 \end{itemize}
       
   134 \end{frame}
       
   135 
       
   136 % items
       
   137 % <var> ${<op>:<var>} ${<func>[{arg}…]} ${if <cond>[{arg}…] }
       
   138 % operators
       
   139 % 
       
   140 
       
   141 \begin{frame}[fragile]{String-Expansion}{String-Operationen}
       
   142 Einfache Manipulation von Zeichenketten sind möglich:
       
   143 \verb=${<op>:<string>}=
       
   144 \begin{itemize}
       
   145 \item Konvertierung \verb=${uc:$local_part}=, \verb=${sha1:$domain}=, \verb=${time_eval:2d4h}=
       
   146 \item Extraktion \verb=${length_3:$domain}=, \verb=${substr_1_3:$domain}=, \verb=${addresses:$h_from}=
       
   147 \item Arithmetik \verb=${eval:40 + 2}=, \verb=${40 + 2k}=, \verb=${eval:8 << 2}=
       
   148 \item Filesystem \verb=${stat:/etc/hosts}=
       
   149 \end{itemize}
       
   150 \end{frame}
       
   151 
       
   152 \begin{frame}[fragile]{String-Expansion}{Bedingte Expansion}
       
   153 Expansion kann von Bedingungen abhängig gemacht werden:
       
   154 \begin{verbatim}
       
   155 	${if <op>[{arg}…]}
       
   156 	${if <op>[{arg}…] {<value1>}[{<value2>}]}
       
   157 	${if <op>[{arg}…] {<value1>}fail}
       
   158 \end{verbatim}
       
   159 \begin{itemize}
       
   160 \item Definedness \verb=defined:tls_cipher=
       
   161 \item Vergleiche \verb=eq{foo}{bar}=, \verb+=={1}{1}+
       
   162 \item …
       
   163 \end{itemize}
       
   164 \end{frame}
       
   165 
       
   166 \begin{frame}{ACL (SMTP-Phasen, Address-Überprüfung, Rate-Limiting, Content-Scan)}
       
   167 \begin{itemize}
       
   168 \item Eingehende SMTP-Verbindungen (und in Grenzen auch
       
   169 	nicht-SMTP)-Verbindungen müssen ACL überwinden.
       
   170 \item Für jede Phase der SMTP-Kommunikation gibt es einen
       
   171 ACL-Einstiegspunkt, z.B.:\scriptsize\begin{verbatim}
       
   172 	acl_smtp_connect = <name of connect acl>
       
   173 	acl_smtp_rcpt = <name of recipient acl>
       
   174 	acl_smtp_data = <name of recipient acl>
       
   175 \end{verbatim}
       
   176 \item ACL entscheidet: accept, reject, defer, warn (noop)
       
   177 \item ACL Bedingungen: domains, DNS-BL, Verify (Sender/Empfänger), …, 
       
   178  condition
       
   179 \item ACL können die interne Behandlung der Nachricht beeinflussen
       
   180 (queue\_only, submission, …)
       
   181 \item ACL können Variablen setzen, die später (Router, Transports)
       
   182 verwendet werden
       
   183 \end{itemize}
   101 \end{frame}
   184 \end{frame}
   102 
   185 
   103 \begin{frame}{Router (allg. Optionen und die einzelnen Router accept, dnslookup, manualroute, …)}
   186 \begin{frame}{Router (allg. Optionen und die einzelnen Router accept, dnslookup, manualroute, …)}
   104 \end{frame}
   187 \end{frame}
   105 
   188 
   106 \begin{frame}{Transports (allg. Optionen und die einzelnen Transports smtp, appendfile, …)}
   189 \begin{frame}{Transports (allg. Optionen und die einzelnen Transports smtp, appendfile, …)}
   107 \end{frame}
   190 \end{frame}
   108 
   191 
   109 \begin{frame}{ACL (SMTP-Phasen, Address-Überprüfung, Rate-Limiting, Content-Scan)}
       
   110 \end{frame}
       
   111 
       
   112 \begin{frame}{Logging (mainlog, rejectlog, paniclog)}
   192 \begin{frame}{Logging (mainlog, rejectlog, paniclog)}
   113 \end{frame}
   193 \end{frame}
   114 
   194 
   115 \begin{frame}{Test und Betrieb}
   195 \begin{frame}{Test und Betrieb}
   116 \end{frame}
   196 \end{frame}