Implement change requests by @sebix
[ach-master.git] / src / practical_settings / im.tex
index 48d7921..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}
-
-\begin{description}
-\item[Tested with Version:] Debian Wheezy 2.1.10-4+deb7u1
-
-\item[Settings:] \mbox{}
-
-
-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}}:
-\begin{lstlisting}[breaklines]
-{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"}.
-\end{lstlisting}
+%%---------------------------------------------------------------------- 
+
+\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.
 
-\item[Additional settings:]
+\configfile{prosody.cfg.lua}{90-98,103-104}{% 
+  TLS setup for Prosody}
 
-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.
+%%---------------------------------------------------------------------- 
 
 
-\item[References:] 
+\subsection{ejabberd}
 
-\item[How to test:] \url{https://xmpp.net} is a practical website to test Jabber Server configurations.
+\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*}
 
-\end{description}
+\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}
 
-\subsubsection{Chat privacy - Off-the-Record Messaging (OTR)}
+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}
+openssl dhparam -out dhparams.pem 4096
+\end{lstlisting}
+
+By default, ejabberd provides an administration website (look for the ejabberd\_http module). Enable TLS protection for it like this:
+
+\configfile{14.12/ejabberd.yml}{177-178,181-183,185-185,187-188}{Adding TLS to the web interface}
+
+\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}
 
-The OTR protocol works on top of the Jabber protocol(\footnote{\url{https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html}}).  
-It add to popular chat clients (Adium, Pidgin...) the following propoerties for chiffered chats:
 \begin{itemize}
-    \item Authentification
-    \item Integrity
-    \item Confidentiality
-    \item Forward privacy
+\item \href{http://www.process-one.net/en/ejabberd/docs/}{The ejabberd documentation: http://www.process-one.net/en/ejabberd/docs/}
 \end{itemize}
 
-It bascially uses Diffie-Helleman, AES and SHA1. 
 
-There are no specific configuration required but the protocol itself worth to be mentionned.
+\subsubsection{How to test}
+\begin{itemize*}
+  \item \url{https://xmpp.net} is a useful website to test Jabber server configurations.
+\end{itemize*}
 
-\subsubsection{IRC}
 
-\todo{Quick draft -- to complete / review / validate}
+%%---------------------------------------------------------------------- 
+\subsection{Chat privacy - Off-the-Record Messaging (OTR)}
 
-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}, developped 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.
+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{lstlisting}[breaklines]
-/* Extensions */
-# Some modules 
-#loadmodule "extensions/chm_sslonly_compat.so";
-loadmodule "extensions/extb_ssl.so";
-# Some other modules
+It basically uses Diffie-Hellman, AES and SHA1. Communicating over an insecure instant messaging network, OTR can be used for end to end encryption.
 
-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; 
-};
+There are no specific configurations required but the protocol itself is worth to be mentioned.
 
-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
+protocol publicly released in 2000. SILC is a per-default secure chat protocol
+thanks to a generalized usage of symmetric encryption. Keys are generated by
+the server meaning that if compromised, communication could be compromised.
 
+The protocol is not really popular anymore.