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} |