Merge branch 'master' of https://git.bettercrypto.org/ach-master
[ach-master.git] / src / practical_settings / mailserver.tex
index 2a6b66b..7e281c2 100644 (file)
@@ -5,8 +5,10 @@ This section documents the most common mail (SMTP) and IMAPs/POPs servers. Anoth
 \subsubsection{Dovecot}
 
 
-Dovecot 2.2:
+\begin{description}
+\item[Tested with Version:] Dovecot 2.2:
 
+\item[Settings:] \mbox{}
 % Example: http://dovecot.org/list/dovecot/2013-October/092999.html
 
 \begin{lstlisting}[breaklines]
@@ -14,15 +16,35 @@ Dovecot 2.2:
   ssl_prefer_server_ciphers = yes
 \end{lstlisting}
 
-Dovecot 2.1: Almost as good as dovecot 2.2. Does not support ssl\_prefer\_server\_ciphers
+\item[Additional info:] \mbox{}
 
-\paragraph*{Limitations}\mbox{}\\
+Dovecot 2.1: Almost as good as dovecot 2.2. Does not support
+ssl\_prefer\_server\_ciphers
 
-Dovecot currently does not support disabling TLS compression. Furthermore, DH parameters
-greater than 1024bit are not supported. The most recent version 2.2.7 of Dovecot implements
-configurable DH parameter length
+\item[Limitations:] \mbox{}
+
+Dovecot currently does not support disabling TLS compression. Furthermore, DH
+parameters greater than 1024bit are not supported. The most recent version
+2.2.7 of Dovecot implements configurable DH parameter length
 \footnote{\url{http://hg.dovecot.org/dovecot-2.2/rev/43ab5abeb8f0}}.
 
+%\item[Justification for special settings (if needed):] \mbox{}
+
+% 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
+
+\item[References:] \url{http://wiki2.dovecot.org/SSL}
+
+% add any further references or best practice documents here
+
+\item[How to test:]
+% 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.
+
+\todo{FIXME}
+
+\end{description}
+
+%% ---------------------------------------------------------------------- 
+
 \subsubsection{cyrus-imapd (based on 2.4.17)}
 
 \paragraph*{imapd.conf}\mbox{}\\
@@ -85,7 +107,10 @@ There is a working patch for all three features:
 % options = CIPHER_SERVER_PREFERENCE
 % TIMEOUTclose = 1
 
+%% ---------------------------------------------------------------------- 
+
 \subsubsection{SMTP in general}
+\label{subsection:smtp_general}
 
 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.\\
 
@@ -126,6 +151,8 @@ For MSA operation we recommend:
 We strongly recommend to allow all cipher suites for anything but MSA
 mode, because the alternative is plain text transmission.
 
+%% ---------------------------------------------------------------------- 
+
 \subsubsection{Postfix}
 
 \begin{description}
@@ -137,25 +164,40 @@ mode, because the alternative is plain text transmission.
 
 \item[Settings:] \mbox{}
 
-First, you need to generate Diffie Hellman parameters (please first take a look at the section \ref{section:PRNG}):
-
-\todo{FIXME: this is a really weak setting! See also: http://postfix.1071664.n5.nabble.com/postfix-hardening-what-can-we-do-td61874.html}
-\begin{lstlisting}[breaklines]
-  % openssl gendh -out /etc/postfix/dh_param_512.pem -2 512
-  % openssl gendh -out /etc/postfix/dh_param_1024.pem -2 1024
-\end{lstlisting}
-
-Next, we specify these DH parameters in \verb|main.cf|:
-
-\begin{lstlisting}[breaklines]
-  smtpd_tls_dh512_param_file = /etc/postfix/dh_param_512.pem
-  smtpd_tls_dh1024_param_file = /etc/postfix/dh_param_1024.pem
-\end{lstlisting}
+%% I (cm) consider the generation of own DH parameters to be voodoo until
+%% someone can explain the contrary. They are, after all, public, and
+%% I found no research that would show that long-term use of a
+%% parameter set would weaken the DH exchange. Also notice that IPSEC
+%% uses fixed parameter sets only.
+%& 
+%% also notice the following comment from  src/tls/tls_dh.c:
+%% * Compiled-in EDH primes (the compiled-in generator is always 2). These are
+%% * used when no parameters are explicitly loaded from a site-specific file.
+%% * 
+%% * 512-bit parameters are used for export ciphers, and 1024-bit parameters are
+%% * used for non-export ciphers. An ~80-bit strong EDH key exchange is really
+%% * too weak to protect 128+ bit keys, but larger DH primes are
+%% * computationally expensive. When greater security is required, use EECDH.
+
+%% First, you need to generate Diffie Hellman parameters (please first take a look at the section \ref{section:RNGs}):
+
+%% \todo{FIXME: this is a really weak setting! See also: http://postfix.1071664.n5.nabble.com/postfix-hardening-what-can-we-do-td61874.html}
+%% \begin{lstlisting}[breaklines]
+%%   % openssl gendh -out /etc/postfix/dh_param_512.pem -2 512
+%%   % openssl gendh -out /etc/postfix/dh_param_1024.pem -2 1024
+%% \end{lstlisting}
+
+%% Next, we specify these DH parameters in \verb|main.cf|:
+
+%% \begin{lstlisting}[breaklines]
+%%   smtpd_tls_dh512_param_file = /etc/postfix/dh_param_512.pem
+%%   smtpd_tls_dh1024_param_file = /etc/postfix/dh_param_1024.pem
+%% \end{lstlisting}
 
 \paragraph*{MX and SMTP client configuration}\mbox{}\\
 
-As discussed above, because of opportunistic encryption we do not
-restrict the list of ciphers. There's still some steps needed to
+As discussed in section \ref{subsection:smtp_general}, because of opportunistic encryption we do not
+restrict the list of ciphers. There are still some steps needed to
 enable TLS, all in \verb|main.cf|:
 
 \begin{lstlisting}[breaklines]
@@ -168,8 +210,7 @@ enable TLS, all in \verb|main.cf|:
   smtp_tls_security_level = may
   # if you have authentication enabled, only offer it after STARTTLS
   smtpd_tls_auth_only = yes
-  tls_ssl_options=NO_COMPRESSION
-  tls_random_source = dev:/dev/urandom         
+  tls_ssl_options = NO_COMPRESSION
 \end{lstlisting}
 
 \paragraph*{MSA}\mbox{}\\
@@ -181,7 +222,7 @@ acceptable for the ``mandatory'' security level, again in
 \begin{lstlisting}[breaklines]
   smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
   smtpd_tls_mandatory_ciphers=high
-  tls_high_cipherlist=EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA
+  tls_high_cipherlist=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
 \end{lstlisting}
 
 Then, we configure the MSA smtpd in \verb|master.cf| with two
@@ -211,8 +252,18 @@ you can leave the statement in for older versions.
 Refer to \url{http://www.postfix.org/TLS_README.html} for an in-depth
 discussion.
 
-% \item[Additional settings:]
-% no additional settings
+\item[Additional settings:]
+
+Postfix has two sets of built-in DH parameters that can be overridden
+with the \verb|smtpd_tls_dh512_param_file|
+and \verb|smtpd_tls_dh1024_param_file| options. The ``dh512''
+parameters are used for export ciphers, while the ``dh1024'' ones are
+used for all other ciphers.
+
+The ``bit lenght'' in those parameter names is just a name, so one
+could use stronger parameter sets; it should be possible to e.g. use the
+IKE Group14 parameters (see section \ref{section:DH}) without much
+interoperability risk, but we have not tested this yet.
 
 % \item[Justification for special settings (if needed):]
 % no special settings
@@ -231,6 +282,9 @@ $ zegrep "TLS connection established from.*with cipher" | /var/log/mail.log | aw
 
 \end{description}
 
+
+%% ---------------------------------------------------------------------- 
+
 \subsubsection{Exim (based on 4.82)}
 
 It is highly recommended to read
@@ -378,7 +432,7 @@ GnuTLS is different in only some respects to OpenSSL:
 
 \paragraph*{Exim string expansion}\mbox{}\\
 
-Note that most of the options accept expansion strings. This way you can eg. set cipher lists or STARTTLS advertisment conditionally. Please follow the link to the official Exim documentation to get more information.
+Note that most of the options accept expansion strings. This way you can eg. set cipher lists or STARTTLS advertisement conditionally. Please follow the link to the official Exim documentation to get more information.
 
 \paragraph*{Limitations}\mbox{}\\
 
@@ -390,3 +444,38 @@ There already is a working patch to provide support:\\
 % do we need to documment starttls in detail?
 %\subsubsection{starttls?}
 
+%% ----------------------------------------------------------------------
+\subsubsection{Exchange}
+
+\todo{FIXME: write this section}
+
+\begin{description}
+\item[Tested with Version:] \todo{version?}
+
+\item[Settings:] \mbox{}
+
+\begin{lstlisting}[breaklines]
+    %Here goes your setting string
+\end{lstlisting}
+
+\item[Additional settings:] \mbox{}
+
+%Here you can add additional settings
+
+\begin{lstlisting}[breaklines]
+    %copy \& paste additional settings
+\end{lstlisting}
+
+\item[Justification for special settings (if needed):] \mbox{}
+
+% 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
+
+\item[References:] \todo{add references}
+
+% add any further references or best practice documents here
+
+\item[How to test:]
+% 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.
+
+\end{description}
+