Include openvpn config skeletons

This commit is contained in:
Jan Philipp Timme 2018-09-03 10:21:39 +02:00
parent ede5d0e37c
commit 8e397050d2
4 changed files with 138 additions and 22 deletions

View File

@ -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 \begin{itemize}
* Integration der eigenen Anleitungen und Konfiguration \item Beschaffung der gewünschten Version von EasyRSA + Verifikation
* Verpacken für Clients/Server und CA selbst \item Integration der eigenen Anleitungen und Konfiguration
\item Verpacken für Clients/Server und CA selbst
\item Installation von easy-rsa
* Installation von easy-rsa \end{itemize}
Voraussetzung: openssl muss bereits installiert sein und im Pfad eingetragen sein. 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. 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. 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 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. \section{Beschaffung/Installation von EasyRSA}
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
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 # Release v3.0.4 beschaffen und den dazu passenden GPG-Key
gpg --recv-keys 6F4056821152F03B6B24F2FCF8489F839D7367F3 gpg --recv-keys 6F4056821152F03B6B24F2FCF8489F839D7367F3
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.4/EasyRSA-3.0.4.tgz 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 gpg --verify EasyRSA-3.0.4.tgz.sig EasyRSA-3.0.4.tgz
tar xzf EasyRSA-3.0.4.tgz tar xzf EasyRSA-3.0.4.tgz
cd EasyRSA-3.0.4 cd EasyRSA-3.0.4
\end{lstlisting}
\section{Initialisierung der CA}
# Initialisierung der CA \begin{lstlisting}
cp vars.example vars cp vars.example vars
vim vars vim vars
# Konfiguration der CA anpassen: # Konfiguration der CA anpassen:
@ -55,9 +62,10 @@ openssl x509 -in pki/issued/timmeja.crt -noout -text
# CRL erzeugen und an OpenVPN-Server übergeben # CRL erzeugen und an OpenVPN-Server übergeben
./easyrsa gen-crl ./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. 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. 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}

View File

@ -314,7 +314,7 @@ Im Folgenden werden mögliche Software-Kandidaten aus den Debian-Paketquellen vo
\paragraph{Strongswan} \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. 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}. 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 * 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. 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 Das Protokoll \enquote{IP Encapsulating Security Payload} (ESP) ist in \cite{RFC4303} definiert und ermöglicht den Versand von vertraulichen Paketen an eine Gegenstelle.
Paketen an eine Gegenstelle.
Nach Empfang werden die Pakete entschlüsselt. Nach Empfang werden die Pakete entschlüsselt.
@ -374,6 +373,7 @@ Benutzer/Passwort:
Gewinner: Zertifikate Gewinner: Zertifikate
\paragraph{Einrichtung einer SSL-CA mit EasyRSA} \paragraph{Einrichtung einer SSL-CA mit EasyRSA}
Kurz: EasyRSA2.2.3 aus Debian vs EasyRSA3.x direkt von Github - Vorteile/Nachteile Kurz: EasyRSA2.2.3 aus Debian vs EasyRSA3.x direkt von Github - Vorteile/Nachteile
Danach: Wie funktioniert die CA mit EasyRSA? 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 ** 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 ** 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? Wie ist es gelaufen, gab es Probleme? Wie macht sich OpenVPN als Lösung?
Gibt es vielleicht Szenarien, in denen sich IPsec doch lohnt? 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} \chapter*{Anhang}
\addcontentsline{toc}{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*} \end{figure*}
\input{Dokumentation-CA.tex}
%%% Ende inhaltlicher Inhalt! %%% %%% Ende inhaltlicher Inhalt! %%%

View File

@ -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

View File

@ -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