Implement change requests by @sebix
[ach-master.git] / src / practical_settings / im.tex
index fe46e3b..19da329 100644 (file)
-%%\subsection{Instant Messaging Systems}
-\subsubsection{XMPP / Jabber}
+% hack.
+\gdef\currentsectionname{IM}
+%%---------------------------------------------------------------------- 
+\subsection{General server configuration recommendations}
 
-
-\subsubsection{General server configuration recommendations}
-
-For servers, we mostly recommend to apply what's proposed by the {\it Peter's manifesto}\footnote{https://github.com/stpeter/manifesto}.
+For servers, we mostly recommend to apply what's proposed by the \emph{Peter's manifesto}\footnote{\url{https://github.com/stpeter/manifesto}}.
 
 In short:
-\begin{itemize}
+\begin{itemize*}
     \item require the use of TLS for both client-to-server and server-to-server connections
     \item prefer or require TLS cipher suites that enable forward secrecy
     \item deploy certificates issued by well-known and widely-deployed certification authorities (CAs)
-\end{itemize}
+\end{itemize*}
 
 The last point being out-of-scope for this section, we will only cover the first two points.
 
-\paragraph{ejabberd}
+%%---------------------------------------------------------------------- 
+
+\subsection{Prosody}
+\subsubsection{Settings}
+Prosody is a Jabber server which is written in Lua. 
+The following configuration is suggested to disable SSLv2 and SSLv3 and require a TLS connection. It is compliant with the OpenSSL string in 3.2.3 configuration B.
+
+\configfile{prosody.cfg.lua}{90-98,103-104}{% 
+  TLS setup for Prosody}
 
-\begin{description}
-\item[Tested with Version:] Debian Wheezy 2.1.10-4+deb7u1
+%%---------------------------------------------------------------------- 
 
-\item[Settings:] \mbox{}
 
+\subsection{ejabberd}
 
-ejabberd is one of the popular Jabber server.  In order to be compliant
-with the manifesto, you should adapt your
-configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.html}}:
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item ejabberd 14.12, Debian 7 Wheezy
+  \item ejabberd 14.12, Ubuntu 14.04 Trusty
+  \item ejabberd 15.03, Ubuntu 14.04 Trusty
+\end{itemize*}
+
+\subsubsection{Settings}
+ejabberd is one of the popular Jabber servers. In order to be compliant
+with the manifesto, you should adapt your configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.html}}:
+
+\configfile{14.12/ejabberd.yml}{104-107,113-114,119-119,123-123,125-125,127-127,134-135,138-140,144-146,195-195,203-203,207-207,210-213}{%
+  TLS setup for ejabberd}
+% 
+\subsubsection{Additional settings}
+It is possible to explicitly specify a cipher string for TLS connections.
+\configfile{14.12/ejabberd.yml}{104-107,113-114,119-119,123-123,125-125,127-127,134-135,138-138,142-142,144-146,195-195,203-203,207-207,210-213,217-217}{Specifying a cipher order and enforcing it}
+
+Note that we are setting the SSL option \texttt{cipher\_server\_preference}. This enforces our cipher order when negotiating which ciphers are used, as the cipher order of some clients chooses weak ciphers over stronger ciphers.\footnote{\url{https://blog.thijsalkema.de/me/blog//blog/2013/09/02/the-state-of-tls-on-xmpp-3/}}
+
+Starting with version 15.03, it is possible to use custom Diffie-Hellman-Parameters. This allows us to negotiate stronger Diffie-Hellman-keys, and also helps us avoid problems with using common Diffie-Hellman-Parameters.\footnote{\url{https://weakdh.org}} You can generate your own parameter file by running:
 \begin{lstlisting}
-{listen,
- [
-  {5222, ejabberd_c2s, [
-                        {access, c2s},
-                        {shaper, c2s_shaper},
-                        {max_stanza_size, 65536},
-                        starttls,
-                        starttls_required, 
-                        {certfile, "/etc/ejabberd/ejabberd.pem"}
-                       ]},
-  {5269, ejabberd_s2s_in, [
-                           {shaper, s2s_shaper},
-                           {max_stanza_size, 131072}
-                          ]},
-
-  %%% Other input ports
-]}.
-{s2s_use_starttls, required_trusted}.
-{s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.
+openssl dhparam -out dhparams.pem 4096
 \end{lstlisting}
 
-\item[Additional settings:]
+By default, ejabberd provides an administration website (look for the ejabberd\_http module). Enable TLS protection for it like this:
 
-Older Versions of ejabberd ($ < $ 2.0.0) need to be patched\footnote{\url{http://hyperstruct.net/2007/06/20/installing-the-startcom-ssl-certificate-in-ejabberd/}} to be able to parse all of the certificates in the CA chain.
+\configfile{14.12/ejabberd.yml}{177-178,181-183,185-185,187-188}{Adding TLS to the web interface}
 
-Newer versions of ejabberd now support specifying the cipher string in the config file. See the commit message: \url{https://github.com/processone/ejabberd/commit/1dd94ac0d06822daa8c394ea2da20d91c8209124}. However, this change did not yet make it into the stable release at the time of this writing. 
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+\item Debian Wheezy 2.1.10-4+deb7u1
+\end{itemize*}
+\subsubsection{Settings}
+ejabberd is one of the popular Jabber servers. In order to be compliant
+with the manifesto, you should adapt your configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.html}}:
+\configfile{2.1.10/ejabberd.cfg}{108-109,111-111,120-126,172-172,179-179,184-184}{
+TLS setup for ejabberd}
+%
+\subsubsection{Additional settings}
+Older versions of ejabberd ($ < $ 2.0.0) need to be patched\footnote{\url{http://hyperstruct.net/2007/06/20/installing-the-startcom-ssl-certificate-in-ejabberd/}} to be able to parse all of the certificates in the CA chain.
+Newer versions of ejabberd now support specifying the cipher string in the config file (see configuration for version 14.12 above).
 
+\subsubsection{References}
 
-\item[References:] 
+\begin{itemize}
+\item \href{http://www.process-one.net/en/ejabberd/docs/}{The ejabberd documentation: http://www.process-one.net/en/ejabberd/docs/}
+\end{itemize}
 
-\item[How to test:] \url{https://xmpp.net} is a practical website to test Jabber Server configurations.
 
-\end{description}
+\subsubsection{How to test}
+\begin{itemize*}
+  \item \url{https://xmpp.net} is a useful website to test Jabber server configurations.
+\end{itemize*}
 
 
-\subsubsection{Chat privacy - Off-the-Record Messaging (OTR)}
+%%---------------------------------------------------------------------- 
+\subsection{Chat privacy - Off-the-Record Messaging (OTR)}
 
 The OTR protocol works on top of the Jabber protocol\footnote{\url{https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html}}.  
 It adds to popular chat clients (Adium, Pidgin...) the following properties for encrypted chats:
-\begin{itemize}
-    \item Authentication
-    \item Integrity
-    \item Confidentiality
-    \item Forward secrecy
-\end{itemize}
+\begin{itemize*}
+  \item Authentication
+  \item Integrity
+  \item Confidentiality
+  \item Forward secrecy
+\end{itemize*}
 
 It basically uses Diffie-Hellman, AES and SHA1. Communicating over an insecure instant messaging network, OTR can be used for end to end encryption.
 
 There are no specific configurations required but the protocol itself is worth to be mentioned.
 
-\subsubsection{IRC}
-
-\todo{Quick draft -- to complete / review / validate}
-
-There are numerous implementations of IRC servers.  In this section, we choose {\it Charybdis} which serve as basis for {\it ircd-seven}\footnote{https://dev.freenode.net/redmine/projects/ircd-seven}, developed and used by freenode. Freenode is actually the biggest IRC network\footnote{http://irc.netsplit.de/networks/top10.php}.  {\it Charybdis} is being part of the {\it Debian} \& {\it Ubuntu} distributions.
 
-\begin{lstlisting}
-/* Extensions */
-# Some modules 
-#loadmodule "extensions/chm_sslonly_compat.so";
-loadmodule "extensions/extb_ssl.so";
-# Some other modules
-
-serverinfo {
-  /* Standard piece of information */
-  
-  ssl_private_key = "etc/test.key";
-  ssl_cert = "etc/test.cert";
-  ssl_dh_params = "etc/dh.pem";
-  # set ssld_count as number of cores - 1
-  ssld_count = 1; 
-};
-
-listen {
-  /* Standard ports */
-  sslport = 6697;
-
-  /* IPv6 configuration */
-};
-\end{lstlisting}
+%%---------------------------------------------------------------------- 
+\subsection{Charybdis}
+There are numerous implementations of IRC servers.  In this section, we choose \emph{Charybdis} which serves as basis for \emph{ircd-seven}\footnote{\url{https://dev.freenode.net/redmine/projects/ircd-seven}}, developed and used by freenode. Freenode is actually the biggest IRC network\footnote{\url{http://irc.netsplit.de/networks/top10.php}}. \emph{Charybdis} is part of the \emph{Debian} \& \emph{Ubuntu} distributions.
+\configfile{ircd.conf}{12-12,15-15,24-24,44-44,60-60,63-63,66-66,74-75,83-83,132-132,138-138,144-144}{SSL relevant configuration for Charybdis/ircd-seven}
 
 
-\subsubsection{SILC}
+%%---------------------------------------------------------------------- 
+\subsection{SILC}
 
 SILC\footnote{\url{http://www.silcnet.org/} and
 \url{https://en.wikipedia.org/wiki/SILC_(protocol)}} is instant messaging
@@ -119,6 +119,3 @@ the server meaning that if compromised, communication could be compromised.
 
 The protocol is not really popular anymore.
 
-
-
-