diff --git a/Dokumentation CA b/Dokumentation-CA.tex similarity index 65% rename from Dokumentation CA rename to Dokumentation-CA.tex index 624389a..19ce3b8 100644 --- a/Dokumentation CA +++ b/Dokumentation-CA.tex @@ -1,23 +1,28 @@ -Aufbau einer CA für den VPN-Dienst +\section{Aufbau einer CA für den VPN-Dienst} -* Beschaffung der gewünschten Version von EasyRSA + Verifikation -* Integration der eigenen Anleitungen und Konfiguration -* Verpacken für Clients/Server und CA selbst - - -* Installation von easy-rsa +\begin{itemize} +\item Beschaffung der gewünschten Version von EasyRSA + Verifikation +\item Integration der eigenen Anleitungen und Konfiguration +\item Verpacken für Clients/Server und CA selbst +\item Installation von easy-rsa +\end{itemize} Voraussetzung: openssl muss bereits installiert sein und im Pfad eingetragen sein. Unter Windows kann das von OpenVPN mitgebrachte openssl verwendet werden - dazu kann der Ordner "bin" einfach in den Pfad eingetragen werden. Ein Neustart des Computers ist notwendig, um die Änderung zu übernehmen. Mehr dazu unter https://github.com/OpenVPN/easy-rsa/blob/v3.0.4/distro/windows/README-Windows.txt -# Beschaffung/Installation von EasyRSA-3.0.4 +OpenSSL setzt eine Konfigurationsdatei voraus - unter Windows fehlt diese. +Daher muss durch die CA mindestens diese Datei bereitgestellt werden. +In dem Zug kann man auch gleich ein vorkonfiguriertes Paket mit EasyRSA bereitstellen. -Aktuelle Releases sind unter https://github.com/OpenVPN/easy-rsa/releases zu finden. -GPG-Schlüssel zur Authentisierung der Releases sind im easy-rsa Repository unterhalb von ./release-keys/README.md aufgeführt. -https://github.com/OpenVPN/easy-rsa/tree/master/release-keys +\section{Beschaffung/Installation von EasyRSA} +Aktuelle Releases sind unter \url{https://github.com/OpenVPN/easy-rsa/releases} zu finden. +GPG-Schlüssel zur Authentisierung der Releases sind im easy-rsa Repository unterhalb von \texttt{./release-keys/README.md} aufgeführt. +\url{https://github.com/OpenVPN/easy-rsa/tree/master/release-keys} + +\begin{lstlisting} # Release v3.0.4 beschaffen und den dazu passenden GPG-Key gpg --recv-keys 6F4056821152F03B6B24F2FCF8489F839D7367F3 wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz @@ -25,9 +30,11 @@ wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4. gpg --verify EasyRSA-3.0.4.tgz.sig EasyRSA-3.0.4.tgz tar xzf EasyRSA-3.0.4.tgz cd EasyRSA-3.0.4 +\end{lstlisting} +\section{Initialisierung der CA} -# Initialisierung der CA +\begin{lstlisting} cp vars.example vars vim vars # Konfiguration der CA anpassen: @@ -55,9 +62,10 @@ openssl x509 -in pki/issued/timmeja.crt -noout -text # CRL erzeugen und an OpenVPN-Server übergeben ./easyrsa gen-crl +\end{lstlisting} -Achtung: Wenn die CRL ausgelaufen ist, muss sie neu generiert werden. Das kann den VPN-Server im Betrieb blockieren. +\textbf{Achtung:} Wenn die CRL ausgelaufen ist, muss sie neu generiert werden. Das kann den VPN-Server im Betrieb blockieren. Daher ist eine hohe Gültigkeitsdauer mit on-demand-replacement eine Option. Ansonsten empfiehlt es sich, diesen Kram zu automatisieren. Regelmäßig eine neue CRL durch CA bereitstellen, von dieser beziehen und den VPN-Server ggf. neustarten. -In der Serverkonfiguration: verify-crl /path/to/crl.pem +In der Serverkonfiguration: \texttt{verify-crl /path/to/crl.pem} diff --git a/Masterarbeit.tex b/Masterarbeit.tex index c4efc01..311d10e 100644 --- a/Masterarbeit.tex +++ b/Masterarbeit.tex @@ -314,7 +314,7 @@ Im Folgenden werden mögliche Software-Kandidaten aus den Debian-Paketquellen vo \paragraph{Strongswan} Strongswan\footnote{\url{https://wiki.strongswan.org/projects/strongswan/wiki/IntroductionTostrongSwan},\\zuletzt abgerufen am 18.07.2018} ist eine modular aufgebaute Software, die unter den in \ref{req:serveros} und \ref{req:clientos} genannten Betriebsystemen lauffähig ist. -Sie kann verwendet werden, um in Kombination mit einem IPsec-fähigen Betriebsystem-Kernel ein VPN auf Basis von IPsec einzurichten. +Sie kann verwendet werden, um in Kombination mit IPsec-fähigen Betriebsystem-Kerneln ein VPN zwischen zwei Computern auf Basis von IPsec einzurichten. Mit IPsec können Richtlinien definiert werden, die den Datenverkehr von einem Host zu einem anderen Host betreffen\cite{RFC4301}. @@ -330,11 +330,10 @@ Transportmodus vs Tunnelmodus? * Security Association Database (stateful) enthält die einzelnen Security Associations (SA), quasi die einzelnen Verbindungen -Das Protokoll \enquote{IP Authentication Header} (AH) wird in \cite{RFC4302} definiert und ermöglicht den Versand von authentisierbaren Paketen an eine Gegenstelle. +Das Protokoll \enquote{IP Authentication Header} (AH) ist in \cite{RFC4302} definiert und ermöglicht den Versand von authentisierbaren Paketen an eine Gegenstelle. Bestimmte Felder ... werden dabei signiert und können so nach Empfang authentisiert werden. -Das Protokoll \enquote{IP Encapsulating Security Payload} (ESP) wird in \cite{RFC4303} definiert und ermöglicht den Versand von vertraulichen -Paketen an eine Gegenstelle. +Das Protokoll \enquote{IP Encapsulating Security Payload} (ESP) ist in \cite{RFC4303} definiert und ermöglicht den Versand von vertraulichen Paketen an eine Gegenstelle. Nach Empfang werden die Pakete entschlüsselt. @@ -374,6 +373,7 @@ Benutzer/Passwort: Gewinner: Zertifikate + \paragraph{Einrichtung einer SSL-CA mit EasyRSA} Kurz: EasyRSA2.2.3 aus Debian vs EasyRSA3.x direkt von Github - Vorteile/Nachteile Danach: Wie funktioniert die CA mit EasyRSA? @@ -392,14 +392,21 @@ Danach: Wie funktioniert die CA mit EasyRSA? ** IPv6-Bereich für VPN-Clients wird an virtuelle IPv6-Adresse des VPN-Dienstes geroutet -> manuelles Failover möglich ** IPv4: VPN-Clients bekommen IP-Adressen aus 10.2.0.0/16 Block, für IPv4 wird auf NAT zurückgegriffen -\paragraph{Erstellung eines Betriebskonzept} -\paragraph{Fazit} +\paragraph{Erstellung eines Betriebskonzept} +TODO + +\chapter{Fazit} Wie ist es gelaufen, gab es Probleme? Wie macht sich OpenVPN als Lösung? Gibt es vielleicht Szenarien, in denen sich IPsec doch lohnt? +Ja - eventuell. Sehr große Enterprise-Umgebungen, in denen die personellen Ressourcen für die korrekte Konfiguration vorhanden sind. +Da kann man in homogenen Umgebungen sinnvolle IPsec-Konfigurationen auf hunderten oder tausenden Geräte einrichten. + + +\section{Ausblick} +Es gibt da noch etwas mit dem schönen Namen Wireguard. Mit gewollt geringer Komplexität und einem aktuellen Umfang von ca. 4000 Zeilen Code ist es eine würdige Alternative zu IPsec. +Auch OpenVPN in Version 3 ist schon in der Beta - das könnte man auch im Auge behalten. -\paragraph{Ausblick} -Es gibt da noch etwas mit dem schönen Namen Wireguard. Das könnte ein richtig nettes Ding werden \dots \chapter*{Anhang} \addcontentsline{toc}{chapter}{Anhang} @@ -412,6 +419,9 @@ Es gibt da noch etwas mit dem schönen Namen Wireguard. Das könnte ein richtig \end{figure*} +\input{Dokumentation-CA.tex} + + %%% Ende inhaltlicher Inhalt! %%% diff --git a/openvpn-config/vpnclient.conf b/openvpn-config/vpnclient.conf new file mode 100644 index 0000000..fc345e0 --- /dev/null +++ b/openvpn-config/vpnclient.conf @@ -0,0 +1,40 @@ +# This is the client configuration +client + +# No need to bind on specific interfaces, just send udp packets to the openvpn server +nobind + +# Send udp packets to port 1194 +port 1194 +proto udp + +# We're using the layer 3 tunnel device +dev tun + +# Specify multiple remotes for dualstack connectivity +remote 2003:d7:b70f:e387::5 1194 +remote 172.16.20.5 1194 + +# Certificates +ca /etc/openvpn/vpnclient/ca.crt +cert /etc/openvpn/vpnclient/vpnclient0.crt +key /etc/openvpn/vpnclient/vpnclient0.key +dh /etc/openvpn/vpnclient/dh2048.pem + +# Make sure the server presents a certificate with "server role" +remote-cert-tls server + +# Make sure to detect broken sessions +keepalive 10 30 + +# These are needed for reduced privileges? Probably yes. +persist-key +persist-tun + +# Reduced privileges if possible (uncomment and adapt on unix/linux system) +user nobody +group nobody + +# Logging settings +verb 3 +mute 5 diff --git a/openvpn-config/vpnserver.conf b/openvpn-config/vpnserver.conf new file mode 100644 index 0000000..1b2352c --- /dev/null +++ b/openvpn-config/vpnserver.conf @@ -0,0 +1,58 @@ +# Listen on 1194 for both IPv4 and IPv6 +port 1194 +proto udp +proto udp6 + +# We're using the layer 3 tunnel device +dev tun + +# Certificates +ca /etc/openvpn/vpnserver/ca.crt +cert /etc/openvpn/vpnserver/vpnserver.crt +key /etc/openvpn/vpnserver/vpnserver.key +dh /etc/openvpn/vpnserver/dh2048.pem + +# Make sure the client presents a certificate with "client role" +remote-cert-tls client + +# Allow multiple connections using the same certificate? +#duplicate-cn + +# net30 is point-to-point, compatible with windows +topology net30 + +# Use this IPv4 range for clients (/16, so we can cope with all possible clients) +server 10.183.0.0 255.255.0.0 + +# Use this IPv6 network for clients +server-ipv6 2001:638:614:1750::/64 + +# Do we need persistence here? +ifconfig-pool-persist /etc/openvpn/vpnserver/ipp.txt + +# Make sure the client can still reach the OpenVPN server via its default gateway +push "route remote_host 255.255.255.255 net_gateway" + +# Push routes for local networks +push "route 172.16.20.0 255.255.255.0 vpn_gateway" + +# Push the whole /56 block for IPv6 +push "route-ipv6 2003:638:614:1700::/56" + +# Make sure to detect broken sessions +keepalive 10 60 + +# These are needed for reduced privileges? Probably yes. +persist-key +persist-tun + +# Reduced privileges +user nobody +group nobody + +# Logging settings +verb 3 +mute 5 + +# Have a status log +status /etc/openvpn/vpnserver/status.log \ No newline at end of file