e985be4b246fff437c3f387078c844285da5f559
[ach-master.git] / src / practical_settings / im.tex
1 % hack.
2 \gdef\currentsectionname{IM}
3 %%---------------------------------------------------------------------- 
4 \subsection{General server configuration recommendations}
5
6 For servers, we mostly recommend to apply what's proposed by the \emph{Peter's manifesto}\footnote{\url{https://github.com/stpeter/manifesto}}.
7
8 In short:
9 \begin{itemize*}
10     \item require the use of TLS for both client-to-server and server-to-server connections
11     \item prefer or require TLS cipher suites that enable forward secrecy
12     \item deploy certificates issued by well-known and widely-deployed certification authorities (CAs)
13 \end{itemize*}
14
15 The last point being out-of-scope for this section, we will only cover the first two points.
16
17 %%---------------------------------------------------------------------- 
18
19 \subsection{Prosody}
20 \subsubsection{Settings}
21 Prosody is a Jabber server which is written in Lua. 
22 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.
23
24 \configfile{prosody.cfg.lua}{90-98,103-104}{% 
25   TLS setup for Prosody}
26
27 %%---------------------------------------------------------------------- 
28
29
30 \subsection{ejabberd}
31
32 \subsubsection{Tested with Versions}
33 \begin{itemize*}
34   \item 13.6 - 14.12
35 \end{itemize*}
36
37 \subsubsection{Settings}
38 ejabberd is one of the popular Jabber servers. In order to be compliant
39 with the manifesto, you should adapt your configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.html}}:
40
41 \configfile{ejabberd.yml}{104-107,113-113,114-114,119-119,123-123,125-125,127-127,135-137,141-143,192-192,200-200,204-206}{%
42   TLS setup for ejabberd}
43
44 \subsubsection{Additional settings}
45 It is possible to explicitly specify a cipher string for TLS connections.
46 \configfile{ejabberd.yml}{104-107,113-114,119-119,123-123,125-125,127-127,134-137,139-139,141-143,192-192,200-200,204-207,211-211}{Specifying a cipher order and enforcing it}
47
48 Note that we are setting the SSL option 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/}}
49
50 Other options you may want to take a look at are:
51 \begin{itemize}
52 \item The log level logs all login, including username and IP address, by default. Change the \texttt{loglevel} setting to avoid this:\\
53 \configfile{ejabberd.yml}{31-39}{Changing the logging behaviour}
54 \item By default, ejabberd provides an administration website (look for the ejabberd\_http module). Consider disabling it or adding TLS protection:\\
55 \configfile{ejabberd.yml}{174-175,178-180,182-182,184-185}{Adding TLS to the web interface}
56 \item By default, registration is open to everyone. Look for the \texttt{register} setting:\\
57 \configfile{ejabberd.yml}{474-474,514-517}{Changing registration settings}
58 \item By default, passwords are stored in plain text. Change this to hashed using the setting:\\
59 \configfile{ejabberd.yml}{251-251,255-256}{Changing password storage to hashed}
60
61 Alternatively, you can use a database backend to store authentication data, the details of which are out of the scope of this document.
62 \end{itemize}
63
64 \subsubsection{References}
65
66 \begin{itemize}
67 \item \href{http://www.process-one.net/en/ejabberd/docs/}{The ejabberd documentation: http://www.process-one.net/en/ejabberd/docs/}
68 \end{itemize}
69
70
71 \subsubsection{How to test}
72 \begin{itemize*}
73   \item \url{https://xmpp.net} is a useful website to test Jabber server configurations.
74 \end{itemize*}
75
76
77 %%---------------------------------------------------------------------- 
78 \subsection{Chat privacy - Off-the-Record Messaging (OTR)}
79
80 The OTR protocol works on top of the Jabber protocol\footnote{\url{https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html}}.  
81 It adds to popular chat clients (Adium, Pidgin...) the following properties for encrypted chats:
82 \begin{itemize*}
83   \item Authentication
84   \item Integrity
85   \item Confidentiality
86   \item Forward secrecy
87 \end{itemize*}
88
89 It basically uses Diffie-Hellman, AES and SHA1. Communicating over an insecure instant messaging network, OTR can be used for end to end encryption.
90
91 There are no specific configurations required but the protocol itself is worth to be mentioned.
92
93
94 %%---------------------------------------------------------------------- 
95 \subsection{Charybdis}
96 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.
97 \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}
98
99
100 %%---------------------------------------------------------------------- 
101 \subsection{SILC}
102
103 SILC\footnote{\url{http://www.silcnet.org/} and
104 \url{https://en.wikipedia.org/wiki/SILC_(protocol)}} is instant messaging
105 protocol publicly released in 2000. SILC is a per-default secure chat protocol
106 thanks to a generalized usage of symmetric encryption. Keys are generated by
107 the server meaning that if compromised, communication could be compromised.
108
109 The protocol is not really popular anymore.
110