This commit is contained in:
Jan Philipp Timme 2018-09-20 15:02:17 +02:00
parent f46f0f6298
commit 18f10f8cdb
1 changed files with 40 additions and 33 deletions

View File

@ -22,12 +22,12 @@ Folgende Parameter wurden für die Konfiguration des Servers in Absprache mit de
\item \texttt{141.71.38.7}
\item \texttt{2001:638:614:1780::7}
\end{itemize}
\item IP-Adressbereich für VPN-Clients
\item IP-Adressbereiche für VPN-Clients
\begin{itemize}
\item \texttt{10.2.0.0/16}
\item \texttt{2001:638:614:1750::/64}
\end{itemize}
\item DNS-Server für Server in der DMZ: \texttt{141.71.38.1}
\item Zu verwendender DNS-Server: \texttt{141.71.38.1}
\end{itemize}
@ -92,10 +92,10 @@ Anschließend können die Pakete über \texttt{apt-get} installiert werden
Als nächstes werden die IP-Adressen der Maschine und des Dienstes in \texttt{/etc/network/interfaces} konfiguriert.
Die IP-Adressen der Maschine werden direkt für die Netzwerkkarte des Servers konfiguriert.
Die IP-Adressen für den VPN-Dienst werden als Alias konfiguriert.
Durch die Verwendung des Alias ist ein manueller Failover im Betrieb möglich, indem das Alias-Interface dem defekten Server deaktiviert wird und auf einem bereitstehenden Server aktiviert wird.
Effektiv \enquote{wandert} die Dienst-IP somit vom defekten Server auf den bereitstehenden Server.
Benutzer des VPN-Dienst bekommen abgesehen von einer Verbindungsunterbrechung nichts von dem defekten Server mit.
Die IP-Adressen für den VPN-Dienst werden als zusätzliche IP-Adressen konfiguriert.
Durch die Verwendung von separaten Dienst-Adressen ist es möglich, einen Server im laufenden Betrieb durch einen zweiten, identisch konfigurierten Server zu ersetzen.
Dazu müssen lediglich die zusätzlichen IP-Adressen von dem einen Server entfernt werden, und anschließend auf dem zweiten Server hinzugefügt werden.
VPN-Benutzer bekommen davon nur eine kurze Unterbrechung der VPN-Sitzung mit.
Die resultierende Konfiguration für die IP-Adressen der Maschine sieht so aus:
\begin{lstlisting}
@ -117,16 +117,17 @@ iface eno1 inet6 static
\end{lstlisting}
\paragraph{DNS}
\texttt{141.71.38.1} ist der DNS-Resolver in der DMZ.
In der DMZ soll der DNS-Resolver mit der IP-Adresse \texttt{141.71.38.1} verwendet werden.
\begin{lstlisting}
echo "nameserver 141.71.38.1" > /etc/resolv.conf
\end{lstlisting}
\paragraph{IP-FORWARD einschalten}
Da die Benutzer des VPN in der Lage sein sollen, das Netzwerk der Abteilung Informatik zu erreichen, muss IP-FORWARD auf dem VPN-Server aktiviert werden:
\paragraph{Paketweiterleitung einschalten}
Mit dem VPN-Server verbundene Clients befinden sich in einem eigenen IPv4- beziehungsweise IPv6-Netz.
Damit die VPN-Clients trotzdem über die Grenze ihres eigenen Netzes hinaus Kontakt zum Netz der Abteilung Informatik aufnehmen können, ist es notwendig für IPv4 und IPv6 die Paketweiterleitung einzuschalten.
\begin{lstlisting}
# echo "net.ipv4.conf.all.FORWARD = 1" > /etc/sysctl.d/04-enable-ipv4-FORWARD.conf
# echo "net.ipv6.conf.all.FORWARD = 1" > /etc/sysctl.d/06-enable-ipv6-FORWARD.conf
# echo "net.ipv4.conf.all.forwarding = 1" > /etc/sysctl.d/04-enable-ipv4-forwarding.conf
# echo "net.ipv6.conf.all.forwarding = 1" > /etc/sysctl.d/06-enable-ipv6-forwarding.conf
\end{lstlisting}
Anschließend werden die vorgenommenen Einstellungen aktiviert.
\begin{lstlisting}
@ -134,8 +135,8 @@ Anschließend werden die vorgenommenen Einstellungen aktiviert.
\end{lstlisting}
\paragraph{Firewallregeln}
Es wurde definiert, welcher Datenverkehr für den VPN-Server und VPN-Clients erlaubt ist.
Diese werden jetzt über Filterregeln mit \texttt{iptables} beziehungsweise \texttt{ip6tables} umgesetzt.
Welcher Datenverkehr für VPN-Clients erlaubt oder verboten ist, wurde im Rahmen der Masterarbeit bereits festgelegt.
Diese Vorgaben werden jetzt über Filterregeln mit \texttt{iptables} und \texttt{ip6tables} umgesetzt.
Als Standardpolicy wird \texttt{DROP} gewählt.
\begin{lstlisting}
@ -225,47 +226,53 @@ ip6tables -A FORWARD -d 2001:638:614:1750::/64 -m state --state ESTABLISHED,RELA
\end{lstlisting}
\paragraph{Persistente Firewallregeln}
Um die mit \texttt{iptables} erstellten Regeln auch über Neustarts hinweg zu behalten, wird das Paket \texttt{iptables-persistent} installiert.
Um die mit \texttt{iptables} und \texttt{ip6tables} umgesetzten Regeln auch über Neustarts hinweg zu behalten, wird das Paket \texttt{iptables-persistent} installiert.
\begin{lstlisting}
apt-get install iptables-persistent
\end{lstlisting}
Anschließend können die aktuell aktiven Regeln abgespeichert werden, damit sie bei einem Neustart wieder geladen werden können.
Anschließend können die aktuell aktiven Regeln in Dateien abgelegt werden, aus denen sie nach einem Neustart durch die von \texttt{iptables-persistent} installierten Skripte wieder geladen werden.
\begin{lstlisting}
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6
\end{lstlisting}
\paragraph{Zertifikate}
\todo{Hier gibt es noch zu tun.}
Beschaffung eines Serverzertifikats und des CA-Wurzelzertifikats
Erzeugung der DH-Parameter
Regelmäßige Beschaffung der CRL
\paragraph{OpenVPN}
Nun wird OpenVPN installiert und konfiguriert.
\begin{lstlisting}
# apt-get install openvpn
\end{lstlisting}
\todo{Zertifikate beantragen und lokal ablegen}
Zertifikate, CRL und co werden unter \texttt{/etc/openvpn/inform/} abgelegt.
Anhand des separaten Dokuments \enquote{Dokumentation der Zertifizierungsstelle für den IPv6-VPN-Dienst} wird ein neues Serverzertifikat für den VPN-Server beantragt und anschließend durch die Zertifizierungsstelle ausgestellt.
Zusätzlich werden auf dem lokalen Server die Diffie-Hellman-Parameter generiert.
Die folgende Serverkonfiguration wird als Datei unter \texttt{/etc/openvpn/inform.conf} abgelegt.
Außerdem wird das Wurzelzertifikat der Zertifizierungsstelle, sowie eine aktuelle \textit{Certificate Revocation List} (CRL) benötigt.
In diesem Szenario wird davon ausgegangen, dass beide Dateien in aktueller Version über einen HTTP-Server von der CA angeboten werden:
\begin{lstlisting}
wget http://vmvpnca.inform.hs-hannover.de/ca.crt
wget http://vmvpnca.inform.hs-hannover.de/crl.pem
\end{lstlisting}
Die beschafften Dateien werden nun wie folgt auf dem VPN-Server abgelegt:
\begin{itemize}
\item Wurzelzertifikat: \texttt{/etc/openvpn/inform/ca.crt}
\item Serverzertifikat: \texttt{/etc/openvpn/inform/aither.inform.hs-hannover.de.crt}
\item Privatern Schlüssel: \texttt{/etc/openvpn/inform/aither.inform.hs-hannover.de.key}
\item Diffie-Hellman-Parameter: \texttt{/etc/openvpn/inform/dh.pem}
\item Certificate Revocation List: \texttt{/etc/openvpn/inform/crl.pem}
\end{itemize}
Dann wird die folgende Serverkonfiguration wird als Datei unter \texttt{/etc/openvpn/inform.conf} abgelegt.
\lstinputlisting[]{./openvpn-config/vpnserver.conf}
CRL beschaffen
Da die CRL durch die Zertifizierungsstelle jederzeit aktualisiert werden kann, ist es sinnvoll diese täglich mit einem Cronjob zu erneuern.
Dafür wird dieser Eintrag als \texttt{root} mittels \texttt{crontab -e} angelegt:
\begin{lstlisting}
curl http://vmvpnca.inform.hs-hannover.de/crl.pem > /etc/openvpn/vpnserver/crl.pem
15 2 * * * bash -c 'curl http://vmvpnca.inform.hs-hannover.de/crl.pem > /etc/openvpn/inform/crl.pem; systemctl restart openvpn@vpnserver.service'
\end{lstlisting}
Cronjob via \texttt{crontab -e} erzeugen:
\begin{lstlisting}
15 2 * * * bash -c 'curl http://vmvpnca.inform.hs-hannover.de/crl.pem > /etc/openvpn/vpnserver/crl.pem; systemctl restart openvpn@vpnserver.service'
\end{lstlisting}
Ein \texttt{systemctl reload} ist aufgrund der Abgabe von Berechtigungen nach dem Start nicht möglich.
\textbf{Anmerkung}: Ein \texttt{systemctl reload} ist aufgrund der Abgabe von Berechtigungen nach dem Start nicht möglich.
Deshalb muss auf \texttt{systemctl restart} zurückgegriffen werden.
Nun wird der OpenVPN-Dienst aktiviert und gestartet.
Nun wird der OpenVPN-Dienst aktiviert und gestartet:
\begin{lstlisting}
# systemctl enable openvpn@vpnserver.service
# systemctl start openvpn@vpnserver.service