Standardmäßig läuft OpenVPN auf Port 1194. Das ist zwar recht nett, aber oftmals ist in einem Unternehmen dieser Port nicht freigeschaltet. Somit kann ich meinen OpenVPN Server nicht erreichen. Es hat auch seine Vorteile wenn SSH auf dem Port 443 läuft. Nur wenige suchen ihn dort und somit hat man weniger Fake Logins auf seinem SSH Server. Zudem ist auch der Port 22, geschweige denn irgendein Custom Port wie 2020 oder ähnliches von einer Firewall blockiert. Legt man nun einfach alles auf den Port 443, funktioniert das ggf. nicht, da dort schon Apache für die SSL Webseiten aktiv ist. Und hier kommt nun SSLH ins Spiel.

SSLH bezeichnet sich selbst als SSL - SSH Multiplexer, kann aber noch einiges mehr, wie zum Beispiel unsere gewünschte OpenVPN Verbindung erkennen. Nun zur Einrichtung im laufendem System.

1. Installation von SSLH
2. Konfiguration SSLH
3. Konfiguration Apache
4. Konfiguration OpenVPN
5. Konfiguration SSH

Zunächst einmal installieren wir SSLH:

sudo apt install sslh

Nach der Installation öffnen wir die Konfigurationsdatei: 

sudo nano /etc/default/sslh

Diese sieht wie folgt aus:

# Default options for sslh initscript
# sourced by /etc/init.d/sslh

# binary to use: forked (sslh) or single-thread (sslh-select) version
# systemd users: don't forget to modify /lib/systemd/system/sslh.service
DAEMON=/usr/sbin/sslh

DAEMON_OPTS="--user sslh --listen <change-me>:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"

Wir kopieren die Zeile und kommentieren sie aus (so können wir einfach den alten Stand wieder herstellen). Anschließend ersetzen wir <change-me> durch 0.0.0.0. Damit hört SSLH auf allen IP Adressen. Die Einstellungen für --ssh und --ssl sind normalerweise in Ordnung. Solltet Ihr für SSH einen anderen Port vergeben haben, tragt ihn dann dementsprechend ein. Für OpenVPN müssen wir noch die Option --openvpn 127.0.0.1:1194 und --timeout 5 zufügen. Der Parameter --ssl muss durch --tls ersetzt werden. Nun sollte die Datei so aussehen

# Default options for sslh initscript
# sourced by /etc/init.d/sslh

# binary to use: forked (sslh) or single-thread (sslh-select) version
# systemd users: don't forget to modify /lib/systemd/system/sslh.service
DAEMON=/usr/sbin/sslh

# DAEMON_OPTS="--user sslh --listen <change-me>:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:4443 --openvpn 127.0.0.1:1194 --timeout 5 --pidfile /var/run/sslh/sslh.pid"

und wir können das Ergebnis speichern. Den Service neu starten:

sudo service sslh restart

Nun passen wir noch SSH, Apache und OpenVPN an.

Ihr müsst in allen Apache Konfigurationsdateien das Interface für den Port 443 austauschen, auch in den Vhost Dateien.

Einmal in der /etc/apache2/ports.conf

sudo nano /etc/apache2/ports.conf
<IfModule ssl_module>
Listen 443
</IfModule>

Ändern in:

<IfModule ssl_module>
Listen 127.0.0.1:4443
</IfModule>

Danach die Zeile <VirtualHost *:443> in allen Vhost Dateien in <VirtualHost 127.0.0.1:4443>  ändern: 

sudo find /etc/apache2/sites-available/. -type f -exec sed -i 's/*:443/127.0.0.1:4443/g' {} \;

 Wenn Ihr das wieder rückgängig machen müsst, einfach  den sed Parameter austauschen:

sudo find /etc/apache2/sites-available/. -type f -exec sed -i 's/127.0.0.1:4443/*:443/g' {} \;

Den Apache Server neu starten und anschließend die Konfiguration überprüfen:

sudo service apache2 restart

Am besten einmal eine SSL Seite testen.

Bei OpenVPN sind relativ wenig Änderungen erfoderlich. Theoretisch braucht man nur das Protokoll auf TCP einstellen, wenn nicht eh schon geschehen. Möchte man den Port 1194 allerdings auch schließen, sollte das in der Konfiguration berücksichtit werden. Einfach folgende Parameter in OpenVPN ändern oder zufügen.

# sudo nano /etc/openvpn/server.conf
local 127.0.0.1
port 1194
proto tcp

OpenVPN neu starten:

sudo service openvpn restart

Nun dieses mit einem Klienten überprüfen. Wichtig, in allen Klienten muss jetzt das Protokoll TCP und der Port 443 eingestellt werden. 

Es ist nicht zwingend erforderlich, die SSH Konfiguration anzupassen, da normalerweise kein anderer Service auf Port 22 läuft. Wenn Ihr es aber macht, kann man anschließend den Port 22 in der Firewall schließen, Euer Logfile wird es Euch danken.

Öffne die Datei /etc/ssh/sshd_config mit dem Editor

sudo nano /etc/ssh/sshd_config

Füge ListenAddress 127.0.0.1 hinzu:

# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
ListenAddress 127.0.0.1

 Abspeichern und danach den Service mit

sudo service sshd restart

neu starten. Bitte daran denken, es kann jetzt passieren, das Ihr Eure Verbindung zum Server verliert. Dann bitte auf dem Port 443 neu verbinden.