Include openvpn config skeletons
This commit is contained in:
parent
ede5d0e37c
commit
8e397050d2
|
@ -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}
|
||||||
|
|
|
@ -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! %%%
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue