diff --git a/SRV-DOC-Inhalt.tex b/SRV-DOC-Inhalt.tex index 494ef51..9cc0a88 100644 --- a/SRV-DOC-Inhalt.tex +++ b/SRV-DOC-Inhalt.tex @@ -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