uniform structure for practical settings: webservers, VPN, IM,
[ach-master.git] / src / practical_settings / im.tex
1 %%\subsection{Instant Messaging Systems}
2 %\subsubsection{XMPP / Jabber}
3
4
5 \subsection{General server configuration recommendations}
6
7 For servers, we mostly recommend to apply what's proposed by the {\it Peter's manifesto}\footnote{https://github.com/stpeter/manifesto}.
8
9 In short:
10 \begin{itemize}
11     \item require the use of TLS for both client-to-server and server-to-server connections
12     \item prefer or require TLS cipher suites that enable forward secrecy
13     \item deploy certificates issued by well-known and widely-deployed certification authorities (CAs)
14 \end{itemize}
15
16 The last point being out-of-scope for this section, we will only cover the first two points.
17
18
19 %%---------------------------------------------------------------------- 
20 \subsection{ejabberd}
21 \subsubsection{Tested with Version}
22 \begin{itemize}
23   \item Debian Wheezy 2.1.10-4+deb7u1
24 \end{itemize}
25
26
27 \subsubsection{Settings}
28 ejabberd is one of the popular Jabber server. In order to be compliant
29 with the manifesto, you should adapt your configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.html}}:
30 \begin{lstlisting}
31 {listen,
32  [
33   {5222, ejabberd_c2s, [
34                         {access, c2s},
35                         {shaper, c2s_shaper},
36                         {max_stanza_size, 65536},
37                         starttls,
38                         starttls_required, 
39                         {certfile, "/etc/ejabberd/ejabberd.pem"}
40                        ]},
41   {5269, ejabberd_s2s_in, [
42                            {shaper, s2s_shaper},
43                            {max_stanza_size, 131072}
44                           ]},
45
46   %%% Other input ports
47 ]}.
48 {s2s_use_starttls, required_trusted}.
49 {s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.
50 \end{lstlisting}
51
52
53 \subsubsection{Additional settings}
54 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.
55
56 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. 
57
58
59 \subsubsection{References}
60
61
62 \subsubsection{How to test}
63 \url{https://xmpp.net} is a practical website to test Jabber Server configurations.
64
65
66 %%---------------------------------------------------------------------- 
67 \subsection{Chat privacy - Off-the-Record Messaging (OTR)}
68
69 The OTR protocol works on top of the Jabber protocol\footnote{\url{https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html}}.  
70 It adds to popular chat clients (Adium, Pidgin...) the following properties for encrypted chats:
71 \begin{itemize}
72     \item Authentication
73     \item Integrity
74     \item Confidentiality
75     \item Forward secrecy
76 \end{itemize}
77
78 It basically uses Diffie-Hellman, AES and SHA1. Communicating over an insecure instant messaging network, OTR can be used for end to end encryption.
79
80 There are no specific configurations required but the protocol itself is worth being mentioned.
81
82
83 %%---------------------------------------------------------------------- 
84 \subsection{Charybdis}
85
86 \todo{Quick draft -- to complete / review / validate}
87
88 There are numerous implementations of IRC servers.  In this section, we choose \emph{Charybdis} which serve as basis for \emph{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}. \emph{Charybdis} is being part of the \emph{Debian} \& \emph{Ubuntu} distributions.
89
90 \begin{lstlisting}
91 /* Extensions */
92 # Some modules 
93 #loadmodule "extensions/chm_sslonly_compat.so";
94 loadmodule "extensions/extb_ssl.so";
95 # Some other modules
96
97 serverinfo {
98   /* Standard piece of information */
99   
100   ssl_private_key = "etc/test.key";
101   ssl_cert = "etc/test.cert";
102   ssl_dh_params = "etc/dh.pem";
103   # set ssld_count as number of cores - 1
104   ssld_count = 1; 
105 };
106
107 listen {
108   /* Standard ports */
109   sslport = 6697;
110
111   /* IPv6 configuration */
112 };
113 \end{lstlisting}
114
115
116 %%---------------------------------------------------------------------- 
117 \subsection{SILC}
118
119 SILC\footnote{\url{http://www.silcnet.org/} and
120 \url{https://en.wikipedia.org/wiki/SILC_(protocol)}} is instant messaging
121 protocol publicly released in 2000. SILC is a per-default secure chat protocol
122 thanks to a generalized usage of symmetric encryption. Keys are generated by
123 the server meaning that if compromised, communication could be compromised.
124
125 The protocol is not really popular anymore.
126
127
128
129