OpenVPN Update und Umstellung auf easy-rsa 3.x

Seit den Posts zu OpenVPN (Teil 1 und Teil 2) ist einige Zeit vergangen und sowohl OpenVPN, als auch easy-rsa haben grössere Updates bekommen. Anlässlich eines Server-Upgrades habe ich alles auf die aktuellesten Version gehoben und auch die Verschlüsselung gepimpt.

Zuerst die aktuellen Version unter Ubuntu 24.04 installieren:

$> apt-get install openvpn easy-rsa

Da ich die Verschlüsselung ebenfalls auf aktuelle Algorithmen und Schlüssellängen umstellen, muss ich die CA (certificate authority) neu generieren. Dazu wird in einem ersten Schritt das Verzeichnis für die CA angelegt und die PKI (private key infrastructure) initialisiert.

$> make-cadir ~/openvpn-ca
$> cd ~/openvpn-ca

$> ./easyrsa init-pki

Notice
------
'init-pki' complete; you may now create a CA or requests.

Your newly created PKI dir is:
* /home/xxx/tmp/openvpn-ca/pki

Using Easy-RSA configuration:
* /home/xxx/tmp/openvpn-ca/vars

Jetzt kann eine neue CA erstellt werden. Ohne Angabe weiterer Parameter wird die CA mit einem Passwort geschützt. Verliert man dieses Passwort, können keine weiteren Zertifikate mit dieser CA erzeugt werden. Stattdessen muss man einen neue CA erstellen und alle von der alten CA abgeleiteten Server- und Clientzertifikate neu erstellen und verteilen. Möchte man die CA nicht mit einem Passwort schützen, muss noch nopass an den nachfolgenden Befehl angehängt werden.

$> ./easyrsa build-ca
enter password and hostname

Ist die CA einsatzbereit, können die Server- und Client-Zertifikate erstellt werden. Das übliche Vorgehen ist, erst eine Zertifikatsanfrage (certificate request, gen-req) zu erstellen, welche dann an die CA gesendet und von ihr signiert wird (sign-req). Da wir hier sozusagen Mitarbeiter und IT-Abteilung in einem sind, können die beiden Schritte direkt hintereinander ausgeführt werden. Es existiert auch Shortcuts: build-client-full und build-server-full, die alle Schritte in einem ausführen.

Server:

$> ./easyrsa gen-req server nopass
$> ./easyrsa sign-req server server
$> ./easyrsa gen-dh

Client:

$> ./easyrsa gen-req idwrt007 idwrt007 nopass
$> ./easyrsa sign-req client idwrt007

Die erzeugten Zertifikate werden von OpenVPN gebraucht.

$> cp -r /home/xxx/tmp/openvpn-ca/pki /etc/openvpn
  • change references in server.conf of openvpn

Der ta.key ist ein optionales Sicherheitselement, welches den Server vor allzuvielen, feindlichen Anfrage (Denial of service, DoS) und einigen anderen Angriffszsenarien schützen kann (siehe OpenVPN-Dokumentation).

$> cd /etc/openvpn
$> openvpn --genkey secret ta.key

Nun können die Anpassungen an der OpenVPN-Konfiguration gemacht werden.

In /etc/openvpn/server.conf set cipher, data-ciphers and auth to following values:

# Prefer GCM, but allow CBC for older clients if necessary
data-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-192-CBC
cipher AES-256-CBC
auth SHA256

Der Rest der Konfiguration ist identisch zu dem ersten Teil der OpenVPN-Reihe.

Damit OpenVPN beim Booten automatisch startet, wird Systemd entsprechend konfiguriert. In /etc/default/openvpn wird AUTOSTART="all" gesetzt. Danach kann der OpenVPN-Service aktiviert und gestartet werden:

$> systemctl enable openvpn
$> service openvpn start

Schlussendlich muss noch der Router aus Teil 2 umgestellt werden. Konkret sind die neuen Zertifikate und der tls-auth key ta.key zu installieren. Weiterhin muss der Encryption cipher auf AES-256-CBC geändert und in der Custom Configuration der String auth SHA256 eingefügt werden. Letzteres wird auch in allen eventuell vorhandenen ovpn-Profilen für Windows oder Android benötigt.

Viel Erfolg!