Dovecot: added ssl_dh_parameters_length, ssl_prefer_server_ciphers and Test using...
[ach-master.git] / src / practical_settings / mailserver.tex
1 % hack.
2 \gdef\currentsectionname{MailServers}
3 This section documents the most common mail (SMTP) and IMAPs/POPs servers. Another option to secure IMAPs/POPs servers is to place them behind an stunnel server.
4
5
6 %% ----------------------------------------------------------------------
7 \subsection{SMTP in general}
8 \label{subsection:smtp_general}
9 SMTP usually makes use of opportunistic TLS. This means that an MTA will accept TLS connections when asked for it during handshake but will not require it. One should always support incoming opportunistic TLS and always try TLS handshake outgoing.
10
11 Furthermore a mailserver can operate in three modes:
12 \begin{itemize*}
13   \item As MSA (Mail Submission Agent) your mailserver receives mail from your clients MUAs (Mail User Agent).
14   \item As receiving MTA (Mail Transmission Agent, MX)
15   \item As sending MTA (SMTP client)
16 \end{itemize*}
17 We recommend the following basic setup for all modes:
18 \begin{itemize*}
19   \item correctly setup MX, A and PTR RRs without using CNAMEs at all.
20   \item enable encryption (opportunistic TLS)
21   \item do not use self signed certificates
22 \end{itemize*}
23
24 For SMTP client mode we additionally recommend:
25 \begin{itemize*}
26   \item the hostname used as HELO must match the PTR RR
27   \item setup a client certificate (most server certificates are client certificates as well)
28   \item either the common name or at least an alternate subject name of your certificate must match the PTR RR
29   \item do not modify the cipher suite for client mode
30 \end{itemize*}
31
32 For MSA operation we recommend:
33 \begin{itemize*}
34   \item listen on submission port 587
35   \item enforce SMTP AUTH even for local networks
36   \item do not allow SMTP AUTH on unencrypted connections
37   \item optionally use the recommended cipher suites if (and only if) all your connecting MUAs support them
38 \end{itemize*}
39
40
41 % Note that (with the exception of MSA mode), it might be better to allow any cipher suite -- since any encryption is better than no encryption when it comes to opportunistic TLS.
42
43 We strongly recommend to allow all cipher suites for anything but MSA
44 mode, because the alternative is plain text transmission.
45
46 %% ----------------------------------------------------------------------
47 \subsection{Dovecot}
48
49
50 \subsubsection{Tested with Version}
51 \begin{itemize*}
52   \item Dovecot 2.1.7, Debian Wheezy (without: ``\texttt{ssl\_prefer\_server\_ciphers}``)
53   \item Dovecot 2.2.9, Debian Jessie
54   \item Dovecot 2.2.13, Debian 8.2 Jessie
55   \item Dovecot 2.0.19apple1 on OS X Server 10.8.5 (without: ``\texttt{ssl\_prefer\_server\_ciphers}``)
56   \item Dovecot 2.2.9 on Ubuntu 14.04 trusty
57 \end{itemize*}
58
59 \subsubsection{Settings}
60 % Example: http://dovecot.org/list/dovecot/2013-October/092999.html
61
62 \configfile{10-ssl.conf}{48-64}{Dovecot SSL configuration}
63
64 \subsubsection{Additional info}
65 Dovecot 2.0, 2.1: Almost as good as dovecot 2.2. Dovecot does not ignore unknown configuration parameters. Does not support
66 ssl\_prefer\_server\_ciphers
67
68 \subsubsection{Limitations}
69 \begin{itemize}
70         \item Dovecot <2.2.14 does not support disabling TLS compression.\\ 
71                 {\(\geq\)2.2.14}\footnote{\url{http://www.dovecot.org/doc/NEWS-2.2}} 
72                 use: \texttt{ssl\_options = no\_compression}
73         \item Dovecot <2.2.7 uses fixed DH parameters.\\
74                 {\(\geq\)2.2.7}\footnote{\url{http://hg.dovecot.org/dovecot-2.2/rev/43ab5abeb8f0}} 
75                 greater DH-Parameters are supported: \texttt{ssl\_dh\_parameters\_length = 2048}. 
76 \end{itemize}
77
78 %\subsubsection{Justification for special settings (if needed)}
79
80 % in case you have the need for further justifications why you chose this and that setting or if the settings do not fit into the standard Variant A or Variant B schema, please document this here
81
82 \subsubsection{References}
83 \begin{itemize*}
84   \item \url{http://wiki2.dovecot.org/SSL}
85 \end{itemize*}
86
87 % add any further references or best practice documents here
88
89 \subsubsection{How to test}
90 % describe here or point the admin to tools (can be a simple footnote or \ref{} to  the tools section) which help the admin to test his settings.
91 \begin{lstlisting}
92 openssl s_client -crlf -connect SERVER.TLD:993
93 openssl s_client -crlf -connect SERVER.TLD:995
94 openssl s_client -crlf -starttls imap -connect SERVER.TLD:143
95 openssl s_client -crlf -starttls pop3 -connect SERVER.TLD:110
96 \end{lstlisting}
97
98 SSLyze\footnote{\url{https://github.com/nabla-c0d3/sslyze/releases}} offers scanning for common vulnerabilities and displays Protocols and Cipher-Suites.
99 \begin{lstlisting}
100 sslyze.exe --regular SERVER.TLD:993
101 sslyze.exe --regular SERVER.TLD:995
102 sslyze.exe --regular --starttls=imap SERVER.TLD:143
103 sslyze.exe --regular --starttls=pop3 SERVER.TLD:110
104 \end{lstlisting}
105
106
107
108 %% ----------------------------------------------------------------------
109 \subsection{cyrus-imapd}
110 \subsubsection{Tested with Versions}
111 \begin{itemize*}
112   \item 2.4.17
113 \end{itemize*}
114
115 \subsubsection{Settings}
116
117 To activate SSL/TLS configure your certificate with
118 \configfile{imapd.conf}{206-206,209-209}{Activating TLS in cyrus}
119
120 Do not forget to add necessary intermediate certificates to the .pem file.
121
122 Limiting the ciphers provided may force (especially older) clients to connect without encryption at all! Sticking to the defaults is recommended.
123
124 If you still want to force strong encryption use
125 \configfile{imapd.conf}{263-263}{TLS cipher selection in cyrus}
126
127 cyrus-imapd loads hardcoded 1024 bit DH parameters using get\_rfc2409\_prime\_1024() by default. If you want to load your own DH parameters add them PEM encoded to the certificate file given in tls\_cert\_file. Do not forget to re-add them after updating your certificate.
128
129 To prevent unencrypted connections on the STARTTLS ports you can set
130 \configfile{imapd.conf}{131-131}{Force encrypted connections in cyrus}
131 This way MUAs can only authenticate with plain text authentication schemes after issuing the STARTTLS command. Providing CRAM-MD5 or DIGEST-MD5 methods is not recommended.
132
133 To support POP3/IMAP on ports 110/143 with STARTTLS and POP3S/IMAPS on ports
134 995/993 check the SERVICES section in \texttt{cyrus.conf}
135 \configfile{cyrus.conf}{28-28,31-34,71-71}{STARTTLS for POP3/IMAP and POP3S/IMAPS in cyrus}
136
137
138 \subsubsection{Limitations}
139 cyrus-imapd currently (2.4.17, trunk) does not support elliptic curve cryptography. Hence, ECDHE will not work even if defined in your cipher list.
140
141 Currently there is no way to prefer server ciphers or to disable compression.
142
143 There is a working patch for all three features:
144 \url{https://bugzilla.cyrusimap.org/show_bug.cgi?id=3823}
145
146 \subsubsection{How to test}
147 \begin{lstlisting}
148 openssl s_client -crlf -connect SERVER.TLD:993
149 \end{lstlisting}
150
151 % XXX config von Adi?
152 % sslVersion = TLSv1
153 % ciphers = EDH+CAMELLIA256:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:-AES128:!CAMELLIA128:!ECDSA:AES256-SHA:EDH+AES128;
154 % options = CIPHER_SERVER_PREFERENCE
155 % TIMEOUTclose = 1
156
157
158 %% ----------------------------------------------------------------------
159 \subsection{Postfix}
160
161 \subsubsection{Tested with Versions}
162 \begin{itemize*}
163   \item Postfix 2.9.6, Debian Wheezy with OpenSSL 1.0.1e
164   \item Postfix 2.11.0 on Ubuntu 14.04.02 with OpenSSL 1.0.1f
165 \end{itemize*}
166
167
168 \subsubsection{Settings}
169
170 Postfix has five internal lists of ciphers, and the possibility to switch
171 between those with \emph{smtpd\_tls\_ciphers}. However, we leave this at its
172 default value for server to server connections, as many mail servers only
173 support outdated protocols and ciphers. We consider bad encryption still better
174 than plain text transmission. For connections to MUAs, TLS is mandatory and the
175 ciphersuite is modified.
176
177 %% I (cm) consider the generation of own DH parameters to be voodoo until
178 %% someone can explain the contrary. They are, after all, public, and
179 %% I found no research that would show that long-term use of a
180 %% parameter set would weaken the DH exchange. Also notice that IPSEC
181 %% uses fixed parameter sets only.
182 %&
183 %% also notice the following comment from  src/tls/tls_dh.c:
184 %% * Compiled-in EDH primes (the compiled-in generator is always 2). These are
185 %% * used when no parameters are explicitly loaded from a site-specific file.
186 %% *
187 %% * 512-bit parameters are used for export ciphers, and 1024-bit parameters are
188 %% * used for non-export ciphers. An ~80-bit strong EDH key exchange is really
189 %% * too weak to protect 128+ bit keys, but larger DH primes are
190 %% * computationally expensive. When greater security is required, use EECDH.
191
192 %% First, you need to generate Diffie Hellman parameters (please first take a look at the section \ref{section:RNGs}):
193
194 %% \todo{FIXME: this is a really weak setting! See also: http://postfix.1071664.n5.nabble.com/postfix-hardening-what-can-we-do-td61874.html}
195 %% \begin{lstlisting}
196 %%   % openssl gendh -out /etc/postfix/dh_param_512.pem -2 512
197 %%   % openssl gendh -out /etc/postfix/dh_param_1024.pem -2 1024
198 %% \end{lstlisting}
199
200 %% Next, we specify these DH parameters in \verb|main.cf|:
201
202 %% \begin{lstlisting}
203 %%   smtpd_tls_dh512_param_file = /etc/postfix/dh_param_512.pem
204 %%   smtpd_tls_dh1024_param_file = /etc/postfix/dh_param_1024.pem
205 %% \end{lstlisting}
206
207 \paragraph{MX and SMTP client configuration:}
208 As discussed in section \ref{subsection:smtp_general}, because of opportunistic
209 encryption we do not restrict the list of ciphers or protocols for communication
210 with other mail servers to avoid transmission in plain text. There are still
211 some steps needed to enable TLS, all in \verb|main.cf|:
212
213 \configfile{main.cf}{22-33}{Opportunistic TLS in Postfix}
214
215 \paragraph{MSA:}
216 For the MSA \verb|smtpd| process which communicates with mail clients, we first
217 define the ciphers that are acceptable for the ``mandatory'' security level,
218 again in \verb|main.cf|:
219
220 \configfile{main.cf}{35-37}{MSA TLS configuration in Postfix}
221
222 Then, we configure the MSA smtpd in \verb|master.cf| with two
223 additional options that are only used for this instance of smtpd:
224
225 \configfile{master.cf}{12-14}{MSA smtpd service configuration in Postfix}
226
227 For those users who want to use EECDH key exchange, it is possible to customize this via:
228 \configfile{main.cf}{38-38}{EECDH customization in Postfix}
229 The default value since Postfix 2.8 is ``strong''.
230
231 \subsubsection{Limitations}
232 tls\_ssl\_options is supported from Postfix 2.11 onwards. You can
233 leave the statement in the configuration for older versions, it will
234 be ignored.
235
236 tls\_preempt\_cipherlist is supported from Postfix 2.8 onwards. Again,
237 you can leave the statement in for older versions.
238
239 \subsubsection{References}
240 Refer to \url{http://www.postfix.org/TLS_README.html} for an in-depth
241 discussion.
242
243 \subsubsection{Additional settings}
244 Postfix has two sets of built-in DH parameters that can be overridden
245 with the \verb|smtpd_tls_dh512_param_file|
246 and \verb|smtpd_tls_dh1024_param_file| options. The ``dh512''
247 parameters are used for export ciphers, while the ``dh1024'' ones are
248 used for all other ciphers.
249
250 The ``bit length'' in those parameter names is just a name, so one
251 could use stronger parameter sets; it should be possible to e.g. use the
252 IKE Group14 parameters (see section \ref{section:DH}) without much
253 interoperability risk, but we have not tested this yet.
254
255 % \subsubsection{Justification for special settings (if needed)}
256 % no special settings
257
258
259 \subsubsection{How to test}
260 You can check the effect of the settings with the following command:
261 \begin{lstlisting}
262 $ zegrep "TLS connection established from.*with cipher" /var/log/mail.log | awk '{printf("%s %s %s %s\n", $12, $13, $14, $15)}' | sort | uniq -c | sort -n
263       1 SSLv3 with cipher DHE-RSA-AES256-SHA
264      23 TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384
265      60 TLSv1 with cipher ECDHE-RSA-AES256-SHA
266     270 TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384
267     335 TLSv1 with cipher DHE-RSA-AES256-SHA
268 \end{lstlisting}
269
270 \begin{lstlisting}
271 openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
272 \end{lstlisting}
273
274 %% ----------------------------------------------------------------------
275
276 \subsection{Exim}
277
278 \subsubsection{Tested with Versions}
279 \begin{itemize*}
280   \item Exim 4.82, Debian Jessie
281   \item Exim 4.82, Ubuntu 14.04.2 with OpenSSL 1.0.1e
282 \end{itemize*}
283
284
285 It is highly recommended to read
286 \url{http://exim.org/exim-html-current/doc/html/spec_html/ch-encrypted_smtp_connections_using_tlsssl.html}
287 first.
288
289 \paragraph{MSA mode (submission):}
290 In the main config section of Exim add:
291 \configfile{configure.msa}{153-154}{Certificate selection in Exim (MSA)}
292 Don't forget to add intermediate certificates to the .pem file if needed.
293
294 Tell Exim to advertise STARTTLS in the EHLO answer to everyone:
295 \configfile{configure.msa}{145-145}{TLS advertise in Exim (MSA)}
296
297 If you want to support legacy SMTPS on port 465, and STARTTLS on smtp(25)/submission(587) ports set
298 \configfile{configure.msa}{165-166}{STARTTLS and SMTPS in Exim (MSA)}
299
300 It is highly recommended to limit SMTP AUTH to SSL connections only. To do so add
301 \configfile{configure.msa}{813-813}{SSL-only authentication in Exim (MSA)}
302 to every authenticator defined.
303
304 Add the following rules on top of your acl\_smtp\_mail:
305 \configfile{configure.msa}{111-111,501-505}{Submission mode in Exim (MSA)}
306 This switches Exim to submission mode and allows addition of missing ``Message-ID'' and ``Date'' headers.
307
308 It is not advisable to restrict the default cipher list for MSA mode if you don't know all connecting MUAs. If you still want to define one please consult the Exim documentation or ask on the exim-users mailinglist.
309 % Exim maintainers do not recommend to change default ciphers
310 % I think we shouldn't, too
311 %use:
312 %\begin{lstlisting}
313 %  tls_require_ciphers = <...recommended ciphersuite...>
314 %\end{lstlisting}
315
316 The cipher used is written to the logfiles by default. You may want to add
317 \begin{lstlisting}
318 log_selector = <whatever your log_selector already contains> +tls_certificate_verified +tls_peerdn +tls_sni
319 \end{lstlisting}
320 to get even more TLS information logged.
321
322
323 \paragraph{Server mode (incoming):}
324 In the main config section of Exim add:
325 \configfile{configure.server}{152-153}{Certificate selection in Exim (Server)}
326 don't forget to add intermediate certificates to the .pem file if needed.
327
328 Tell Exim to advertise STARTTLS in the EHLO answer to everyone:
329 \configfile{configure.server}{144-144}{TLS advertise in Exim (Server)}
330
331 Listen on smtp(25) port only
332 \configfile{configure.server}{166-166}{STARTTLS on SMTP in Exim (Server)}
333
334 It is not advisable to restrict the default cipher list for opportunistic encryption as used by SMTP. Do not use cipher lists recommended for HTTPS! If you still want to define one please consult the Exim documentation or ask on the exim-users mailinglist.
335 % Exim maintainers do not recommend to change default ciphers
336 % We shouldn't, too
337 %use:
338 %\begin{lstlisting}
339 %  tls_require_ciphers = <...recommended ciphersuite...>
340 %\end{lstlisting}
341
342 If you want to request and verify client certificates from sending hosts set
343 \configfile{configure.server}{154-155}{TLS certificate verifiaction in Exim (Server)}
344
345 tls\_try\_verify\_hosts only reports the result to your logfile. If you want to disconnect such clients you have to use
346 \begin{lstlisting}
347 tls_verify_hosts = *
348 \end{lstlisting}
349
350 The cipher used is written to the logfiles by default. You may want to add
351 \begin{lstlisting}
352 log_selector = <whatever your log_selector already contains> +tls_certificate_verified +tls_peerdn +tls_sni
353 \end{lstlisting}
354 to get even more TLS information logged.
355
356 \paragraph{Client mode (outgoing):}
357 Exim uses opportunistic encryption in the SMTP transport by default.
358
359 Client mode settings have to be done in the configuration section of the smtp transport (driver = smtp).
360
361 If you want to use a client certificate (most server certificates can be used as client certificate, too) set
362 \configfile{configure.client}{152-153}{Certificate selection in Exim (Client)}
363 This is recommended for MTA-MTA traffic.
364
365 %If you want to limit used ciphers set
366 %\begin{lstlisting}
367 %  tls_require_ciphers = <...recommended ciphersuite...>
368 %\end{lstlisting}
369 % Exim Maintainers do not recommend ciphers. We shouldn't do so, too.
370 Do not limit ciphers without a very good reason. In the worst case you end up without encryption at all instead of some weak encryption. Please consult the Exim documentation if you really need to define ciphers.
371
372 \paragraph{OpenSSL:}
373 Exim already disables SSLv2 by default. We recommend to add
374 \begin{lstlisting}
375 openssl_options = +all +no_sslv2 +no_compression +cipher_server_preference
376 \end{lstlisting}
377 to the main configuration.
378
379 Note: +all is misleading here since OpenSSL only activates the most common workarounds. But that's how SSL\_OP\_ALL is defined.
380
381 You do not need to set dh\_parameters. Exim with OpenSSL by default uses parameter initialization with the "2048-bit MODP Group with 224-bit Prime Order Subgroup" defined in section 2.2 of RFC 5114~\cite{rfc5114} (ike23).
382 If you want to set your own DH parameters please read the TLS documentation of exim.
383
384
385 \paragraph{GnuTLS:}
386 GnuTLS is different in only some respects to OpenSSL:
387 \begin{itemize*}
388   \item tls\_require\_ciphers needs a GnuTLS priority string instead of a cipher list. It is recommended to use the defaults by not defining this option. It highly depends on the version of GnuTLS used. Therefore it is not advisable to change the defaults.
389   \item There is no option like openssl\_options
390 \end{itemize*}
391
392 \paragraph{Exim string expansion:}
393 Note that most of the options accept expansion strings. This way you can e.g. set cipher lists or STARTTLS advertisement conditionally. Please follow the link to the official Exim documentation to get more information.
394
395 \paragraph{Limitations:}
396 Exim currently (4.82) does not support elliptic curves with OpenSSL. This means that ECDHE is not used even if defined in your cipher list.
397 There already is a working patch to provide support:
398 \url{http://bugs.exim.org/show_bug.cgi?id=1397}
399
400 \subsubsection{How to test}
401 \begin{lstlisting}
402 openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
403 \end{lstlisting}
404
405
406 %% ----------------------------------------------------------------------
407 %\subsection{Exchange}
408
409 %\todo{FIXME: write this section}
410
411 %% ----------------------------------------------------------------------
412 \subsection{Cicso ESA/IronPort}
413 \subsubsection{Tested with Version}
414 \begin{itemize*}
415   \item AsyncOS 7.6.1
416   \item AsyncOS 8.5.6
417   \item AsyncOS 9.0.0 and 9.1.0
418 \end{itemize*}
419
420 \subsubsection{Settings}
421 Import your certificate(s) using the WEBUI (Network -> Certificates).
422
423 From AsyncOS 9.0 and up, SSL parameters for inbound SMTP, outbound SMTP and GUI access can be configured in one step via the WEBUI (System Administration -> SSL Configuration, see figure \ref{fig:ach_ironport_ssl_settings} on page \pageref{fig:ach_ironport_ssl_settings}). \\
424 For all versions prior to 9.0, you have to connect to the CLI and configure the SSL parameters separately, as shown below using inbound SMTP as example.
425 \begin{lstlisting}{foo}
426 ironport.example.com> sslconfig
427 sslconfig settings:
428   GUI HTTPS method:  sslv3tlsv1
429   GUI HTTPS ciphers: RC4-SHA:RC4-MD5:ALL
430   Inbound SMTP method:  sslv3tlsv1
431   Inbound SMTP ciphers: RC4-SHA:RC4-MD5:ALL
432   Outbound SMTP method:  sslv3tlsv1
433   Outbound SMTP ciphers: RC4-SHA:RC4-MD5:ALL
434         
435 Choose the operation you want to perform:
436 - GUI - Edit GUI HTTPS ssl settings.
437 - INBOUND - Edit Inbound SMTP ssl settings.
438 - OUTBOUND - Edit Outbound SMTP ssl settings.
439 - VERIFY - Verify and show ssl cipher list.
440 []> inbound
441
442 Enter the inbound SMTP ssl method you want to use.
443 1. SSL v2.
444 2. SSL v3
445 3. TLS v1
446 4. SSL v2 and v3
447 5. SSL v3 and TLS v1
448 6. SSL v2, v3 and TLS v1
449 [5]> 3
450
451 Enter the inbound SMTP ssl cipher you want to use.
452 [RC4-SHA:RC4-MD5:ALL]> EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA
453
454 sslconfig settings:
455   GUI HTTPS method:  sslv3tlsv1
456   GUI HTTPS ciphers: RC4-SHA:RC4-MD5:ALL
457   Inbound SMTP method:  tlsv1
458   Inbound SMTP ciphers: EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
459   Outbound SMTP method:  sslv3tlsv1
460   Outbound SMTP ciphers: RC4-SHA:RC4-MD5:ALL
461 \end{lstlisting}
462 Note that starting with AsyncOS 9.0 SSLv3 is disabled by default, whereas the default cipher set is still \texttt{RC4-SHA:RC4-MD5:ALL} (see figure \ref{fig:ach_ironport_ssl_settings} on page \pageref{fig:ach_ironport_ssl_settings}). 
463
464 \begin{figure}[p]
465   \centering
466   \includegraphics[width=0.8\textwidth]{img/ach_ironport_ssl_settings.png}
467   \caption{Default SSL Settings}
468   \label{fig:ach_ironport_ssl_settings}
469 \end{figure}
470
471 After committing these changes in the CLI, you have to activate the use of TLS in several locations. 
472
473 For inbound connections, first select the appropriate certificate in the settings of each listener you want to have TLS enabled on (Network -> Listeners, see figure \ref{fig:ach_ironport_listener_cert} on page \pageref{fig:ach_ironport_listener_cert}). Afterwards, for each listener, configure all Mail Flow Policies which have their Connection Behavior set to ``Accept'' or ``Relay'' to at least prefer TLS (Mail Policies -> Mail Flow Policies, see figure \ref{fig:ach_ironport_mail_flow_tls} on page \pageref{fig:ach_ironport_mail_flow_tls}). \\
474 It is recommended to also enable TLS in the default Mail Flow Policy, because these settings will be inherited by newly created policies, unless specifically overwritten. \\
475 TLS can be enforced by creating a new Mail Flow Policy with TLS set to ``required'', creating a new Sender Group defining the addresses of the sending mail servers for which you want to enforce encryption (Mail Policies -> HAT Overview) and using this new Sender Group in conjunction with the newly created Mail Flow Policy. 
476
477 \begin{figure}[p]
478   \centering
479   \includegraphics[width=0.8\textwidth]{img/ach_ironport_listener_cert.png}
480   \caption{Listener Settings}
481   \label{fig:ach_ironport_listener_cert}
482 \end{figure}
483
484 \begin{figure}[p]
485   \centering
486   \includegraphics[width=0.8\textwidth]{img/ach_ironport_mail_flow_tls.png}
487   \caption{Mail Flow Policy Security Features}
488   \label{fig:ach_ironport_mail_flow_tls}
489 \end{figure}
490
491 TLS settings for outbound connections have to be configured within the Destination Controls (Mail Policies -> Destination Controls). Chose the appropriate SSL certificate within the global settings and configure TLS to be preferred in the default profile to enable it for all outbound connections. After these two steps the Destination Control overview page should look like figure \ref{fig:ach_ironport_dest_control} on page \pageref{fig:ach_ironport_dest_control}. 
492 To enforce TLS for a specific destination domain, add an entry to the Destination Control Table and set ``TLS Support'' to ``required''.
493
494 \begin{figure}[p]
495   \centering
496   \includegraphics[width=0.8\textwidth]{img/ach_ironport_dest_control.png}
497   \caption{Destination Control overview}
498   \label{fig:ach_ironport_dest_control}
499 \end{figure}
500
501 \subsubsection{Limitations}
502 All current General Deployment AsyncOS releases use OpenSSL 0.9.8. Therefore TLS 1.2 is not supported and some of the suggested ciphers won't work. Starting with AsyncOS 9.5, which is available as Limited Deployment Release as of June 2015, TLS 1.2 is supported.\footnote{\url{http://www.cisco.com/c/dam/en/us/td/docs/security/esa/esa9-5/ESA_9-5_Release_Notes.pdf}, Changed Behaviour, page 4} You can check the supported ciphers on the CLI by using the option \texttt{verify} from within the \texttt{sslconfig} command:
503 \begin{lstlisting}{foo}
504 []> verify
505
506 Enter the ssl cipher you want to verify.
507 []> EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA256:EECDH:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!IDEA:!ECDSA:kEDH:CAMELLIA128-SHA:AES128-SHA
508
509 DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(256) Mac=SHA1
510 DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(128) Mac=SHA1
511 DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
512 DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1
513 CAMELLIA128-SHA         SSLv3 Kx=RSA      Au=RSA  Enc=Camellia(128) Mac=SHA1
514 AES128-SHA              SSLv3 Kx=RSA      Au=RSA  Enc=AES(128)  Mac=SHA1
515 \end{lstlisting}
516
517 \subsubsection{How to test}
518 \begin{lstlisting}
519 openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
520 \end{lstlisting}
521
522 \FloatBarrier % the preceding section has several figures. Floating them too far away might get confusing for readers.