uniform structure for practical settings: webservers, VPN, IM,
authorsebix <szebi@gmx.at>
Wed, 25 Dec 2013 20:05:58 +0000 (21:05 +0100)
committersebix <szebi@gmx.at>
Wed, 25 Dec 2013 20:05:58 +0000 (21:05 +0100)
Database
descriptions replaced by section-hierarchy
Postgres tested on mint/ubuntu

src/practical_settings/DBs.tex
src/practical_settings/im.tex
src/practical_settings/vpn.tex
src/practical_settings/webserver.tex

index 09cb542..ad9e577 100644 (file)
@@ -2,35 +2,31 @@
 % This list is based on : http://en.wikipedia.org/wiki/Relational_database_management_system#Market_share
 
 %% ---------------------------------------------------------------------- 
-\subsubsection{Oracle}
-\begin{description}
-\item[Tested with Version:] not tested
+\subsection{Oracle}
+%\subsubsection{Tested with Version}
+\todo{not tested yet}
 
-\item[References:] (German)
-{\small \url{http://www.telekom.com/static/-/155996/7/technische-sicherheitsanforderungen-si}}
+\subsubsection{References}
+\begin{itemize}
+  \item Technical safety requirements by \emph{Deutsche Telekom AG} (German). Please read section 17.12 or pages 129 and following (Req 396 and Req 397) about SSL and ciphersuites \url{http://www.telekom.com/static/-/155996/7/technische-sicherheitsanforderungen-si}
+\end{itemize}
 
-Please read the following pages about SSL and ciphersuites:\\
-p. 129 -Req 396 and Req 397 \\
-
-\end{description}
 
 %% ---------------------------------------------------------------------- 
-\subsubsection{SQL Server}
+\subsection{SQL Server}
 \todo{write this}
 
 
-
-
 %% ---------------------------------------------------------------------- 
-\subsubsection{MySQL}
-
-\begin{description}
-\item[Tested with Version:] Debian 7.0 and MySQL 5.5
-
-\item[Settings:] \mbox{}
+\subsection{MySQL}
+\subsubsection{Tested with Version}
+\begin{itemize}
+  \item Debian 7.0 and MySQL 5.5
+\end{itemize}
 
-\paragraph*{my.cnf}\mbox{}\\
 
+\subsubsection{Settings}
+\paragraph*{my.cnf}
 \begin{lstlisting}
 [mysqld]
 ssl
@@ -40,39 +36,41 @@ ssl-key=/etc/mysql/ssl/client-key.pem
 ssl-cipher=EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA
 \end{lstlisting}
 
-\item[Additional settings:]
+%\subsubsection{Additional settings}
 
 
-\item[Justification for special settings (if needed):]
-
+%\subsubsection{Justification for special settings (if needed)}
 % in case you have the need for further justifications why you chose this and that setting or if the settings do not fit into the standard Variant A or Variant B schema, please document this here
 
-\item[References:]
-{\small \url{https://dev.mysql.com/doc/refman/5.5/en/ssl-connections.html}}
 
+\subsubsection{References}
+\begin{itemize}
+  \item MySQL Documentation on SSl Connections: \url{https://dev.mysql.com/doc/refman/5.5/en/ssl-connections.html}
+\end{itemize}
 
-\item[How to test:]
 
+\subsubsection{How to test}
 After restarting the server run the following query to see if the ssl settings are correct:
 \begin{lstlisting}
 show variables like '%ssl%';
 \end{lstlisting}
 
 
-\end{description}
-
-
 %% ---------------------------------------------------------------------- 
-\subsubsection{DB2}
-\begin{description}
-\item[Tested with Version:] not tested
+\subsection{DB2}
+\subsubsection{Tested with Version}
+\todo{not tested}
+
 
-\item[References:]
-{\small \url{http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.sec.doc%2Fdoc%2Fc0053544.html}}
+\subsubsection{References}
+\begin{itemize}
+  \item IMB Db2 Documentation on \emph{Supported cipher suites} \url{http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=\%2Fcom.ibm.db2.luw.admin.sec.doc\%2Fdoc\%2Fc0053544.html}
+\end{itemize}
 
 
-\paragraph*{ssl\_cipherspecs}\mbox{}\\
-In the link above the whole SSL-configuration is described in-depth. The following command shows only how to set the recommended ciphersuites.
+\subsubsection{Settings}
+\paragraph*{ssl\_cipherspecs}
+In the link above the whole SSL-configuration is described in-depth. The following command shows only how to set the recommended ciphersuites:
 \begin{lstlisting}
 # recommended and supported ciphersuites 
 
@@ -95,31 +93,29 @@ TLS_RSA_WITH_AES_256_CBC_SHA,
 TLS_RSA_WITH_AES_128_CBC_SHA,
 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
-
 \end{lstlisting}
 
-\end{description}
 
 %% ---------------------------------------------------------------------- 
+\subsection{PostgreSQL}
+\subsubsection{Tested with Versions}
+\begin{itemize}
+  \item Debian 7.0 and PostgreSQL 9.1
+  \item Linux Mint 14 nadia / Ubuntu 12.10 quantal with PostgreSQL 9.1+136 and OpenSSL 1.0.1c
+\end{itemize}
 
-\subsubsection{PostgreSQL}
-
-\begin{description}
-\item[Tested with Version:] Debian 7.0 and PostgreSQL 9.1
-
-\item[References:]
-
-It's recommended to read 
-
-{\small \url{http://www.postgresql.org/docs/X.X/interactive/runtime-config-connection.html\#RUNTIME-CONFIG-CONNECTION-SECURITY}}
-(please change X.X with your preferred version e.g. 9.1).
 
-\item[Settings:] \mbox{}
+\subsubsection{References}
+\begin{itemize}
+  \item It's recommended to read {\small \url{http://www.postgresql.org/docs/9.1/interactive/runtime-config-connection.html\#RUNTIME-CONFIG-CONNECTION-SECURITY}} (please edit the version with your preferred one).
+  \item PostgreSQL Documentation on \emph{Secure TCP/IP Connections with SSL}: \url{http://www.postgresql.org/docs/9.1/static/ssl-tcp.html}
+\end{itemize}
 
 
-To start in SSL mode the server.crt and server.key must exist in the server's data directory \$PGDATA. 
+\subsubsection{Settings}
+To start in SSL mode the server.crt and server.key must exist in the server's data directory \$PGDATA.
 
-Starting with version 9.2, you have the possibility to set the path.
+Starting with version 9.2, you have the possibility to set the path manually.
 
 \begin{lstlisting}
 ssl_key_file = '/your/path/server.key'
@@ -127,8 +123,8 @@ ssl_cert_file = '/your/path/server.crt'
 ssl_ca_file = '/your/path/root.crt'
 \end{lstlisting}
 
-\paragraph*{postgresql.conf}\mbox{}\\
 
+\paragraph*{postgresql.conf}\mbox{}\\
 \begin{lstlisting}
 #>=8.3
 ssl = on 
@@ -136,12 +132,9 @@ ssl_ciphers = 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLI
 \end{lstlisting}
 
 
-
-\item[How to test:]
+\subsubsection{How to test}
 To test your ssl settings, run psql with the sslmode parameter:
 \begin{lstlisting}
 psql "sslmode=require host=postgres-server dbname=database" your-username
 \end{lstlisting}
 
-\end{description}
-
index fe46e3b..7e798a2 100644 (file)
@@ -1,8 +1,8 @@
 %%\subsection{Instant Messaging Systems}
-\subsubsection{XMPP / Jabber}
+%\subsubsection{XMPP / Jabber}
 
 
-\subsubsection{General server configuration recommendations}
+\subsection{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}.
 
@@ -15,17 +15,18 @@ In short:
 
 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{}
+%%---------------------------------------------------------------------- 
+\subsection{ejabberd}
+\subsubsection{Tested with Version}
+\begin{itemize}
+  \item Debian Wheezy 2.1.10-4+deb7u1
+\end{itemize}
 
 
-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{Settings}
+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}
 {listen,
  [
@@ -48,21 +49,22 @@ configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.ht
 {s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.
 \end{lstlisting}
 
-\item[Additional settings:]
 
+\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 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. 
 
 
-\item[References:] 
+\subsubsection{References}
 
-\item[How to test:] \url{https://xmpp.net} is a practical website to test Jabber Server configurations.
 
-\end{description}
+\subsubsection{How to test}
+\url{https://xmpp.net} is a practical website to test Jabber Server configurations.
 
 
-\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:
@@ -75,13 +77,15 @@ It adds to popular chat clients (Adium, Pidgin...) the following properties for
 
 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.
+There are no specific configurations required but the protocol itself is worth being mentioned.
+
 
-\subsubsection{IRC}
+%%---------------------------------------------------------------------- 
+\subsection{Charybdis}
 
 \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.
+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.
 
 \begin{lstlisting}
 /* Extensions */
@@ -109,7 +113,8 @@ listen {
 \end{lstlisting}
 
 
-\subsubsection{SILC}
+%%---------------------------------------------------------------------- 
+\subsection{SILC}
 
 SILC\footnote{\url{http://www.silcnet.org/} and
 \url{https://en.wikipedia.org/wiki/SILC_(protocol)}} is instant messaging
index 1605208..f8b5f89 100644 (file)
 \subsubsection{Settings}
 
 \paragraph*{Assumptions}\mbox{}\\
-
 We assume the use of IKE (v1 or v2) and ESP for this document.
 
 \paragraph*{Authentication}\mbox{}\\
-
 IPSEC authentication should optimally be performed via RSA signatures,
 with a key size of 2048 bits or more. Configuring only the trusted CA
 that issued the peer certificate provides for additional protection
@@ -54,7 +52,6 @@ table~\ref{tab:IPSEC_psk_len} gives the minimum lengths in characters.
 \end{table}
 
 \paragraph*{Cryptographic Suites}\mbox{}\\
-
 IPSEC Cryptographic Suites are pre-defined settings for all the items
 of a configuration; they try to provide a balanced security level and
 make setting up VPNs easier.
@@ -150,16 +147,15 @@ parameters are shown in table \ref{tab:IPSEC_ph2_params}.
 
 %---------------------------------------------------------------------- 
 \subsection{Check Point FireWall-1}
-   
-\begin{description}
-\item[Tested with Version:] \mbox{}
 
+
+\subsubsection{Tested with Version}
 \begin{itemize}
-\item R77 (should work with any currently supported version)
+  \item R77 (should work with any currently supported version)
 \end{itemize}
 
-\item[Settings:] \mbox{}
 
+\subsubsection{Settings}
 Please see section \ref{section:IPSECgeneral} for guidance on
 parameter choice. In this section, we will configure a strong setup
 according to ``Configuration A''.
@@ -198,8 +194,8 @@ found under ``Advanced Settings'' / ``Advanced VPN Properties''
   \label{fig:checkpoint_3}
 \end{figure}
 
-\item[Additional settings:] \mbox{}
 
+\subsubsection{Additional settings}
 For remote Dynamic IP Gateways, the settings are not taken from the
 community, but set in the ``Global Properties'' dialog under ``Remote
 Access'' / ``VPN Authentication and Encryption''. Via the ``Edit...''
@@ -216,45 +212,34 @@ button, you can configure sets of algorithms that all gateways support
 Please note that these settings restrict the available algorithms for
 \textbf{all} gateways, and also influence the VPN client connections.
 
-%\item[Justification for special settings (if needed):]
+%\subsubsection{Justification for special settings (if needed)}
 
-%\item[Limitations:]
-
-\item[References:]\mbox{}
+%\subsubsectionLimitations}
 
+\subsubsection{References}
 \begin{itemize}
-
 \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)
-
+  \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)
 \end{itemize}
 
-% \item[How to test:]
-
-\end{description}
+% \subsubsection{How to test}
 
 
 %% cipherstrings current 2013-12-09
 % ---------------------------------------------------------------------- 
 \subsection{OpenVPN}
 
-\begin{description}
-
-\item[Tested with Version:] \mbox{}\\
 
+\subsubsection{Tested with Version}
 \begin{itemize}
-\item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
-\item OpenVPN 2.2.1 from Debian 7.0 linked against openssl
-    (libssl.so.1.0.0) 
-\item OpenVPN 2.3.2 for Windows
+  \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
+  \item OpenVPN 2.2.1 from Debian 7.0 linked against openssl (libssl.so.1.0.0) 
+  \item OpenVPN 2.3.2 for Windows
 \end{itemize}
 
-\item[Settings:] \mbox{}
-
-\paragraph{General}\mbox{}
 
+\subsubsection{Settings}
+\paragraph{General}\mbox{}\\
 We describe a configuration with certificate-based authentication; see
 below for details on the \verb|easyrsa| tool to help you with that.
 
@@ -267,8 +252,7 @@ that is then negotiated as usual with TLS, the \verb|cipher|
 and \verb|auth| options both take a single argument that must match on
 client and server.
 
-\paragraph{Server Configuration}\mbox{}
-
+\paragraph{Server Configuration}\mbox{}\\
 % this is only a DoS-protection, out of scope:
 % # TLS Authentication
 % tls-auth ta.key
@@ -284,8 +268,7 @@ cipher AES-256-CBC
 auth SHA384
 \end{lstlisting}
 
-\paragraph{Client Configuration}\mbox{}
-
+\paragraph{Client Configuration}\mbox{}\\
 Client and server have to use compatible configurations, otherwise they can't communicate.
 The \verb|cipher| and \verb|auth| directives have to be identical.
 
@@ -301,8 +284,7 @@ remote-cert-tls server
 tls-remote server.example.com
 \end{lstlisting}
 
-\item[Justification for special settings (if needed):] \mbox{}\\
-
+\subsubsection{Justification for special settings}
 OpenVPN 2.3.1 changed the values that the \verb|tls-cipher| option
 expects from OpenSSL to IANA cipher names. That means from that
 version on you will get ``Deprecated TLS cipher name'' warnings for
@@ -316,25 +298,25 @@ ECDHE suites.
 
 The configuration shown above is compatible with all tested versions.
 
-\item[References:] \mbox{}\\
 
-\url{http://openvpn.net/index.php/open-source/documentation/security-overview.html}
-
-%\item[How to test:]
+\subsubsection{References}
+\begin{itemize}
+  \item OpenVPN Documentation: \emph{Security Overview} \url{http://openvpn.net/index.php/open-source/documentation/security-overview.html}
+\end{itemize}
 
+%\subsubsection{How to test}
 
-\item[Additional settings:] \mbox{}
 
-\paragraph{Key renegotiation interval}\mbox{}
+\subsubsection{Additional settings}
 
+\paragraph{Key renegotiation interval}\mbox{}\\
 The default for renegotiation of encryption keys is one hour
 (\verb|reneg-sec 3600|). If you
 transfer huge amounts of data over your tunnel, you might consider
 configuring a shorter interval, or switch to a byte- or packet-based
 interval (\verb|reneg-bytes| or \verb|reneg-pkts|).
 
-\paragraph{Fixing ``easy-rsa''}\mbox{}
-
+\paragraph{Fixing ``easy-rsa''}\mbox{}\\
 When installing an OpenVPN server instance, you are probably using
 {\it easy-rsa} to generate keys and certificates.
 The file \verb|vars| in the easyrsa installation directory has a
@@ -354,8 +336,8 @@ In addition, edit the \verb|pkitool| script and replace all occurences
 of \verb|sha1| with \verb|sha256|, to sign the certificates with
 SHA256.
 
-\item[Limitations:] \mbox{}
 
+\subsubsection{Limitations}
 Note that the ciphersuites shown by \verb|openvpn --show-tls| are {\it
 known}, but not necessarily {\it
 supported} \footnote{\url{https://community.openvpn.net/openvpn/ticket/304}}.
@@ -364,8 +346,6 @@ Which cipher suite is actually used can be seen in the logs:
 
 \verb|Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-CAMELLIA256-SHA, 2048 bit RSA|
 
-\end{description}
-
 
 % ---------------------------------------------------------------------- 
 \subsection{PPTP}
index 0d0693a..76168a8 100644 (file)
@@ -6,7 +6,7 @@ Please note, that any cipher suite starting with ECDHE can be omitted, if in dou
 
 \subsubsection{Tested with Versions}
 \begin{itemize}
-  \item Apache2/2.2.22-13 with OpenSSL 1.0.1e on Debian Wheezy (Forward Secrecy does not work on Windows!)
+  \item Apache2/2.2.22-13 with OpenSSL 1.0.1e on Debian Wheezy (ciphers with Forward Secrecy are not chosen with Internet Explorer on Windows)
 \end{itemize}
 
 
@@ -150,7 +150,6 @@ If you absolutely want to specify your own DH parameters, you can specify them v
 However, we advise you to read section \ref{section:DH} and stay with the standard IKE/IETF parameters (as long as they are \textgreater 1024 bits).
 
 
-\vspace{0.5em} % tempoary workaround
 \subsubsection{Additional settings}
 If you decide to trust NIST's ECC curve recommendation, you can add the following line to nginx's configuration file to select special curves:
 
@@ -158,7 +157,7 @@ If you decide to trust NIST's ECC curve recommendation, you can add the followin
   ssl_ecdh_curve          secp384r1;
 \end{lstlisting}
 
-You might want to redirect everything to httpS:// if possible. In Nginx you can do this with the following setting:
+You might want to redirect everything to \emph{https://} if possible. In Nginx you can do this with the following setting:
 
 \begin{lstlisting}
   rewrite     ^(.*)   https://$host$1 permanent;