comment-out OpenVPN, see GitHub #91
[ach-master.git] / src / practical_settings / vpn.tex
1 % ---------------------------------------------------------------------- 
2 \subsection{IPsec}
3 \label{section:IPSECgeneral}
4
5 % ciphersuites current 2013-12-09
6
7 \subsubsection{Settings}
8
9 \paragraph{Assumptions:}
10 We assume the use of IKE (v1 or v2) and ESP for this document.
11
12 \paragraph{Authentication:}
13 IPSEC authentication should optimally be performed via RSA signatures,
14 with a key size of 2048 bits or more. Configuring only the trusted CA
15 that issued the peer certificate provides for additional protection
16 against fake certificates.
17
18 If you need to use Pre-Shared Key authentication:
19
20 \begin{enumerate}
21   \item Choose a \textbf{random}, \textbf{long enough} PSK (see below)
22   \item Use a \textbf{separate} PSK for any IPSEC connection
23   \item Change the PSKs regularly
24 \end{enumerate}
25
26 The size of the PSK should not be shorter than the output size of
27 the hash algorithm used in IKE\footnote{It is used in a HMAC, see
28 RFC2104~\cite{rfc2104} and the discussion starting
29 in \url{http://www.vpnc.org/ietf-ipsec/02.ipsec/msg00268.html}.}.
30
31 For a key composed of upper- and lowercase letters, numbers, and two
32 additional symbols\footnote{64 possible values = 6 bits},
33 table~\ref{tab:IPSEC_psk_len} gives the minimum lengths in characters.
34
35
36 \ctable[%
37 pos=ht,
38 caption={PSK lengths},
39 label=tab:IPSEC_psk_len,
40 ]{lc}{}{
41 \FL    IKE Hash & PSK length (chars)
42 \ML    SHA256 & 43
43 \NN    SHA384 & 64
44 \NN    SHA512 & 86
45 \LL}
46
47 \paragraph{Cryptographic Suites:}
48 IPSEC Cryptographic Suites are pre-defined settings for all the items
49 of a configuration; they try to provide a balanced security level and
50 make setting up VPNs easier.
51 \footnote{RFC6379~\cite{rfc6379}, RFC4308~\cite{rfc4308}}
52
53 When using any of those suites, make sure to enable ``Perfect Forward
54 Secrecy`` for Phase 2, as this is not specified in the suites. The
55 equivalents to the recommended ciphers suites in section
56 \ref{section:recommendedciphers} are shown in
57 table~\ref{tab:IPSEC_suites}.
58
59 \ctable[%
60 caption={IPSEC Cryptographic Suites},
61 label=tab:IPSEC_suites,
62 ]{>{\raggedright}p{3cm}>{\raggedright}p{3cm}l}{}{
63 \FL    Configuration A & Configuration B & Notes
64 \ML
65     \texttt{Suite-B-GCM-256} &
66     \texttt{Suite-B-GCM-128} \newline \texttt{VPN-B} &
67     All Suite-B variants use NIST elliptic curves
68 \LL}
69 \paragraph{Phase 1:}
70
71 Alternatively to the pre-defined cipher suites, you can define your
72 own, as described in this and the next section.
73
74 Phase 1 is the mutual authentication and key exchange phase;
75 table~\ref{tab:IPSEC_ph1_params} shows the parameters.
76
77 Use only ``main mode``, as ``aggressive mode`` has known security
78 vulnerabilities \footnote{\url{http://ikecrack.sourceforge.net/}}.
79
80 \ctable[%
81 caption={IPSEC Phase 1 parameters},
82 label=tab:IPSEC_ph1_params,
83 ]{lll}{}{%
84 \FL    & Configuration A & Configuration B
85 \ML    Mode & Main Mode & Main Mode
86 \NN    Encryption & AES-256 & AES, CAMELLIA (-256 or -128)
87 \NN    Hash & SHA2-* & SHA2-*, SHA1
88 \NN    DH Group & Group 14-18 & Group 14-18
89 %\NN    Lifetime & \todo{need recommendations; 1 day seems to be common practice} &
90 \LL}
91
92 \paragraph{Phase 2:}
93 Phase 2 is where the parameters that protect the actual data are negotiated; recommended
94 parameters are shown in table \ref{tab:IPSEC_ph2_params}.
95
96 \ctable[%
97 caption={IPSEC Phase 2 parameters},
98 label=tab:IPSEC_ph2_params,
99 ]{l>{\raggedright}p{4.5cm}>{\raggedright}p{6cm}}{}{%
100 \FL    & Configuration A & Configuration B
101 \ML    Perfect Forward Secrecy & \yes & \yes
102 \NN    Encryption & %
103     \mbox{AES-GCM-16}, \mbox{AES-CTR}, \mbox{AES-CCM-16}, \mbox{AES-256} &%
104     \mbox{AES-GCM-16}, \mbox{AES-CTR}, \mbox{AES-CCM-16}, \mbox{AES-256}, \mbox{CAMELLIA-256}, \mbox{AES-128}, \mbox{CAMELLIA-128}
105 \NN    Hash & SHA2-* (or none for AEAD) & SHA2-*, SHA1 (or none for AEAD)
106 \NN    DH Group & Same as Phase 1 & Same as Phase 1
107 %\NN    Lifetime & \todo{need recommendations; 1-8 hours is common} &
108 \LL}
109
110 \subsubsection{References}
111 \begin{itemize*}
112   \item ``A Cryptographic Evaluation of IPsec'', Niels Ferguson and Bruce
113     Schneier: \url{https://www.schneier.com/paper-ipsec.pdf}
114 \end{itemize*}
115
116
117 %----------------------------------------------------------------------
118 \subsection{Check Point FireWall-1}
119
120 % Attention, only example...
121 %Checkpoint firewall is a \gls{firewall} that ....
122
123 \subsubsection{Tested with Versions}
124 \begin{itemize*}
125   \item R77 (should work with any currently supported version)
126 \end{itemize*}
127
128 \subsubsection{Settings}
129 Please see section \ref{section:IPSECgeneral} for guidance on
130 parameter choice. In this section, we will configure a strong setup
131 according to ``Configuration A''.
132
133 This is based on the concept of a ``VPN Community'', which has all the
134 settings for the gateways that are included in that community.
135 Communities can be found in the ``IPSEC VPN'' tab of SmartDashboard.
136
137 \begin{figure}[p]
138   \centering
139   \includegraphics[width=0.592\textwidth]{img/checkpoint_1.png}
140   \caption{VPN Community encryption properties}
141   \label{fig:checkpoint_1}
142 \end{figure}
143
144 Either chose one of the encryption suites in the properties dialog
145 (figure \ref{fig:checkpoint_1}), or proceed to
146 ``Custom Encryption...'', where you can set encryption and hash for
147 Phase 1 and 2 (figure \ref{fig:checkpoint_2}).
148
149 \begin{figure}[p]
150   \centering
151   \includegraphics[width=0.411\textwidth]{img/checkpoint_2.png}
152   \caption{Custom Encryption Suite Properties}
153   \label{fig:checkpoint_2}
154 \end{figure}
155
156 The Diffie-Hellman groups and Perfect Forward Secrecy Settings can be
157 found under ``Advanced Settings'' / ``Advanced VPN Properties''
158 (figure \ref{fig:checkpoint_3}).
159
160 \begin{figure}[p]
161   \centering
162   \includegraphics[width=0.589\textwidth]{img/checkpoint_3.png}
163   \caption{Advanced VPN Properties}
164   \label{fig:checkpoint_3}
165 \end{figure}
166
167
168 \subsubsection{Additional settings}
169 For remote Dynamic IP Gateways, the settings are not taken from the
170 community, but set in the ``Global Properties'' dialog under ``Remote
171 Access'' / ``VPN Authentication and Encryption''. Via the ``Edit...''
172 button, you can configure sets of algorithms that all gateways support
173 (figure \ref{fig:checkpoint_4}).
174
175 \begin{figure}[p]
176   \centering
177   \includegraphics[width=0.474\textwidth]{img/checkpoint_4.png}
178   \caption{Remote Access Encryption Properties}
179   \label{fig:checkpoint_4}
180 \end{figure}
181
182 Please note that these settings restrict the available algorithms for
183 \textbf{all} gateways, and also influence the VPN client connections.
184
185 %\subsubsection{Justification for special settings (if needed)}
186
187 %\subsubsection{Limitations}
188
189 \subsubsection{References}
190 \begin{itemize*}
191   \item Check Point \href{https://sc1.checkpoint.com/documents/R77/CP_R77_VPN_AdminGuide/html_frameset.htm}{VPN R77 Administration Guide} (may require a UserCenter account to access)
192 \end{itemize*}
193
194 %\subsubsection{How to test}
195
196 %% cipherstrings current 2013-12-09
197 % ---------------------------------------------------------------------- 
198
199 %
200 % atm openvpn only supports cbc mode, removed by azet 18/2/2015
201 %
202
203 %\subsection{OpenVPN}
204 %
205 %\subsubsection{Tested with Versions}
206 %\begin{itemize*}
207 %  \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
208 %  \item OpenVPN 2.2.1 from Debian Wheezy linked against openssl
209 %    (libssl.so.1.0.0) 
210 %  \item OpenVPN 2.3.2 for Windows
211 %\end{itemize*}
212 %
213 %\subsubsection{Settings}
214 %
215 %\paragraph{General}
216 %We describe a configuration with certificate-based authentication; see
217 %below for details on the \verb|easyrsa| tool to help you with that.
218 %
219 %OpenVPN uses TLS only for authentication and key exchange. The
220 %bulk traffic is then encrypted and authenticated with the OpenVPN
221 %protocol using those keys.
222 %
223 %Note that while the \verb|tls-cipher| option takes a list of ciphers
224 %that is then negotiated as usual with TLS, the \verb|cipher|
225 %and \verb|auth| options both take a single argument that must match on
226 %client and server.
227 %
228 %\paragraph{Server Configuration}
229 %%~\\
230 %% the cipherlist here is config B without the ECDHE strings, because
231 %% it must fit in 256 bytes...
232 %% DO NOT CHANGE TO THE CIPHERSTRING MACRO!
233 %\configfile{server.conf}{248-250}{Cipher configuration for OpenVPN (Server)}
234 %
235 %\paragraph{Client Configuration}
236 %Client and server have to use compatible configurations, otherwise they can't communicate.
237 %The \verb|cipher| and \verb|auth| directives have to be identical.
238 %
239 %% the cipherlist here is config B without the ECDHE strings, because
240 %% it must fit in 256 bytes...
241 %% DO NOT CHANGE TO THE CIPHERSTRING MACRO!
242 %\configfile{client.conf}{44-45,115-121}{Cipher and TLS configuration for OpenVPN (Server)}
243 %
244 %\subsubsection{Justification for special settings}
245 %OpenVPN 2.3.1 changed the values that the \verb|tls-cipher| option
246 %expects from OpenSSL to IANA cipher names. That means from that
247 %version on you will get ``Deprecated TLS cipher name'' warnings for
248 %the configurations above. You cannot use the selection strings from
249 %section \ref{section:recommendedciphers} directly from 2.3.1 on, which
250 %is why we give an explicit cipher list here.
251 %
252 %In addition, there is a 256 character limit on configuration file line
253 %lengths; that limits the size of cipher suites, so we dropped all
254 %ECDHE suites.
255 %
256 %The configuration shown above is compatible with all tested versions.
257 %
258 %
259 %\subsubsection{References}
260 %\begin{itemize*}
261 %  \item OpenVPN Documentation: \emph{Security Overview} \url{https://openvpn.net/index.php/open-source/documentation/security-overview.html}
262 %\end{itemize*}
263 %
264 %%\subsubsection{How to test}
265 %
266 %
267 %\subsubsection{Additional settings}
268 %
269 %\paragraph{Key renegotiation interval}
270 %The default for renegotiation of encryption keys is one hour
271 %(\verb|reneg-sec 3600|). If you
272 %transfer huge amounts of data over your tunnel, you might consider
273 %configuring a shorter interval, or switch to a byte- or packet-based
274 %interval (\verb|reneg-bytes| or \verb|reneg-pkts|).
275 %
276 %\paragraph{Fixing ``easy-rsa''}
277 %When installing an OpenVPN server instance, you are probably using
278 %\emph{easy-rsa} to generate keys and certificates.
279 %The file \verb|vars| in the easyrsa installation directory has a
280 %number of settings that should be changed to secure values:
281 %
282 %\configfile{vars}{53-53,56-56,59-59}{Sane default values for OpenVPN (easy-rsa)}
283 %
284 %
285 %This will enhance the security of the key generation by using RSA keys
286 %with a length of 4096 bits, and set a lifetime of one year for the
287 %server/client certificates and five years for the CA certificate. \textbf{NOTE: 4096 bits is only an example of how to do this with easy-rsa.} See also section \ref{section:keylengths} for a discussion on keylengths.
288 %
289 %In addition, edit the \verb|pkitool| script and replace all occurrences
290 %of \verb|sha1| with \verb|sha256|, to sign the certificates with
291 %SHA256.
292 %
293 %\subsubsection{Limitations}
294 %Note that the ciphersuites shown by \verb|openvpn --show-tls| are \emph{known}, but not necessarily \emph{supported} \footnote{\url{https://community.openvpn.net/openvpn/ticket/304}}.
295 %
296 %Which cipher suite is actually used can be seen in the logs:
297 %
298 %\verb|Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-CAMELLIA256-SHA, 2048 bit RSA|
299 %
300
301 % ---------------------------------------------------------------------- 
302 \subsection{PPTP}
303
304 PPTP is considered insecure, Microsoft recommends to ``use a more secure VPN
305 tunnel''\footnote{\url{http://technet.microsoft.com/en-us/security/advisory/2743314}}.
306
307 There is a cloud service that cracks the underlying MS-CHAPv2
308 authentication protocol for the price of USD~200\footnote{\url{https://www.cloudcracker.com/blog/2012/07/29/cracking-ms-chap-v2/}},
309 and given the resulting MD4 hash, all PPTP traffic for a user can
310 be decrypted.
311
312 % ---------------------------------------------------------------------- 
313 \subsection{Cisco ASA}
314 The following settings reflect our recommendations as best as possible on the Cisco ASA platform. These are - of course - just settings regarding SSL/TLS (i.e. Cisco AnyConnect) and IPsec. For further security settings regarding this platform the appropriate Cisco guides should be followed.
315
316
317 \subsubsection{Tested with Versions}
318 \begin{itemize*}
319   \item 9.1(3) - X-series model
320 \end{itemize*}
321
322 \subsubsection{Settings}
323 \begin{lstlisting}
324 crypto ipsec ikev2 ipsec-proposal AES-Fallback
325  protocol esp encryption aes-256 aes-192 aes
326  protocol esp integrity sha-512 sha-384 sha-256
327 crypto ipsec ikev2 ipsec-proposal AES-GCM-Fallback
328  protocol esp encryption aes-gcm-256 aes-gcm-192 aes-gcm
329  protocol esp integrity sha-512 sha-384 sha-256
330 crypto ipsec ikev2 ipsec-proposal AES128-GCM
331  protocol esp encryption aes-gcm
332  protocol esp integrity sha-512
333 crypto ipsec ikev2 ipsec-proposal AES192-GCM
334  protocol esp encryption aes-gcm-192
335  protocol esp integrity sha-512
336 crypto ipsec ikev2 ipsec-proposal AES256-GCM
337  protocol esp encryption aes-gcm-256
338  protocol esp integrity sha-512
339 crypto ipsec ikev2 ipsec-proposal AES
340  protocol esp encryption aes
341  protocol esp integrity sha-1 md5
342 crypto ipsec ikev2 ipsec-proposal AES192
343  protocol esp encryption aes-192
344  protocol esp integrity sha-1 md5
345 crypto ipsec ikev2 ipsec-proposal AES256
346  protocol esp encryption aes-256
347  protocol esp integrity sha-1 md5
348 crypto ipsec ikev2 sa-strength-enforcement
349 crypto ipsec security-association pmtu-aging infinite
350 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set pfs group14
351 crypto dynamic-map SYSTEM_DEFAULT_CRYPTO_MAP 65535 set ikev2 ipsec-proposal AES256-GCM AES192-GCM AES128-GCM AES-GCM-Fallback AES-Fallback
352 crypto map Outside-DMZ_map 65535 ipsec-isakmp dynamic SYSTEM_DEFAULT_CRYPTO_MAP
353 crypto map Outside-DMZ_map interface Outside-DMZ
354
355 crypto ikev2 policy 1
356  encryption aes-gcm-256
357  integrity null
358  group 14
359  prf sha512 sha384 sha256 sha
360  lifetime seconds 86400
361 crypto ikev2 policy 2
362  encryption aes-gcm-256 aes-gcm-192 aes-gcm
363  integrity null
364  group 14
365  prf sha512 sha384 sha256 sha
366  lifetime seconds 86400
367 crypto ikev2 policy 3
368  encryption aes-256 aes-192 aes
369  integrity sha512 sha384 sha256
370  group 14
371  prf sha512 sha384 sha256 sha
372  lifetime seconds 86400
373 crypto ikev2 policy 4
374  encryption aes-256 aes-192 aes
375  integrity sha512 sha384 sha256 sha
376  group 14
377  prf sha512 sha384 sha256 sha
378  lifetime seconds 86400
379 crypto ikev2 enable Outside-DMZ client-services port 443
380 crypto ikev2 remote-access trustpoint ASDM_TrustPoint0
381
382 ssl server-version tlsv1-only
383 ssl client-version tlsv1-only
384 ssl encryption dhe-aes256-sha1 dhe-aes128-sha1 aes256-sha1 aes128-sha1
385 ssl trust-point ASDM_TrustPoint0 Outside-DMZ
386 \end{lstlisting}
387
388 \subsubsection{Justification for special settings}
389 New IPsec policies have been defined which do not make use of ciphers that may be cause for concern. Policies have a "Fallback" option to support legacy devices.
390
391 3DES has been completely disabled as such Windows XP AnyConnect Clients will no longer be able to connect.
392
393 The Cisco ASA platform does not currently support RSA Keys above 2048bits.
394
395 Legacy ASA models (e.g. 5505, 5510, 5520, 5540, 5550) do not offer the possibility to configure for SHA256/SHA384/SHA512 nor AES-GCM for IKEv2 proposals.
396
397 \subsubsection{References}
398 \begin{itemize*}
399   \item \url{http://www.cisco.com/en/US/docs/security/asa/roadmap/asaroadmap.html}
400   \item \url{http://www.cisco.com/web/about/security/intelligence/nextgen_crypto.html}
401 \end{itemize*}
402
403 % add any further references or best practice documents here
404
405 %%\subsubsection{How to test}
406 % 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.
407
408
409 % ---------------------------------------------------------------------- 
410 \subsection{Openswan}
411
412
413 \subsubsection{Tested with Version}
414 \begin{itemize*}
415   \item Openswan 2.6.39 (Gentoo)
416 \end{itemize*}
417
418 \subsubsection{Settings}
419 Note: the available algorithms depend on your kernel configuration (when using protostack=netkey) and/or build-time options.
420
421 To list the supported algorithms
422 \begin{lstlisting}
423 $ ipsec auto --status | less
424 \end{lstlisting}
425 and look for 'algorithm ESP/IKE' at the beginning.
426
427 \begin{lstlisting}
428 aggrmode=no
429 # ike format: cipher-hash;dhgroup
430 # recommended ciphers:
431 # - aes
432 # recommended hashes:
433 # - sha2_256 with at least 43 byte PSK
434 # - sha2_512 with at least 86 byte PSK
435 # recommended dhgroups:
436 # - modp2048 = DH14
437 # - modp3072 = DH15
438 # - modp4096 = DH16
439 # - modp6144 = DH17
440 # - modp8192 = DH18
441 ike=aes-sha2_256;modp2048
442 type=tunnel
443 phase2=esp
444 # esp format: cipher-hash;dhgroup
445 # recommended ciphers configuration A:
446 # - aes_gcm_c-256 = AES_GCM_16
447 # - aes_ctr-256
448 # - aes_ccm_c-256 = AES_CCM_16
449 # - aes-256 
450 # additional ciphers configuration B:
451 # - camellia-256
452 # - aes-128
453 # - camellia-128
454 # recommended hashes configuration A:
455 # - sha2-256
456 # - sha2-384
457 # - sha2-512
458 # - null (only with GCM/CCM ciphers)
459 # additional hashes configuration B:
460 # - sha1
461 # recommended dhgroups: same as above
462 phase2alg=aes_gcm_c-256-sha2_256;modp2048
463 salifetime=8h
464 pfs=yes
465 auto=ignore
466 \end{lstlisting}
467
468 \subsubsection{How to test}
469 Start the vpn and using
470 \begin{lstlisting}
471 $ ipsec auto --status | less
472 \end{lstlisting}
473 and look for 'IKE algorithms wanted/found' and 'ESP algorithms wanted/loaded'.
474
475 \subsubsection{References}
476 %\todo{more specific References??}
477 \begin{itemize*}
478   \item \url{https://www.openswan.org/}
479 \end{itemize*}
480
481
482 \subsection{tinc}
483 \subsubsection{Tested with Version}
484 \begin{itemize*}
485   \item tinc 1.0.23 from Gentoo linked against OpenSSL 1.0.1e
486   \item tinc 1.0.23 from Sabayon linked against OpenSSL 1.0.1e
487 \end{itemize*}
488
489 \paragraph*{Defaults}\mbox{}\\
490 tinc uses 2048 bit RSA keys, Blowfish-CBC, and SHA1 as default settings and suggests the usage of CBC mode ciphers.
491 Any key length up to 8196 is supported and it does not need to be a power of two. OpenSSL Ciphers and Digests are supported by tinc.
492
493 \paragraph*{Settings}\mbox{}\\
494 Generate keys with
495 \begin{lstlisting}[breaklines]
496 tincd -n NETNAME -K8196
497 \end{lstlisting}
498 Old keys will not be deleted (but disabled), you have to delete them manually. Add the following lines to your tinc.conf on all machines
499 \configfile{tinc.conf}{3-4}{Cipher and digest selection in tinc}
500
501 \paragraph*{References}\mbox{}\\
502 \begin{itemize}
503 \item tincd(8) man page
504 \item tinc.conf(5) man page
505 \item \href{http://www.tinc-vpn.org/pipermail/tinc/2014-January/003538.html}{tinc mailinglist: http://www.tinc-vpn.org/pipermail/tinc/2014-January/003538.html}
506 \end{itemize}
507
508
509 % ---------------------------------------------------------------------- 
510 %%\subsection{Juniper VPN}
511 %%\todo{write this subsubsection. AK: ask Hannes}
512
513
514
515
516 % ---------------------------------------------------------------------- 
517 %\subsection{L2TP over IPSec}
518 %\todo{write this subsubsection}
519
520
521
522
523 % ---------------------------------------------------------------------- 
524 %\subsection{Racoon}
525 %\todo{write this subsubsection}
526
527