sslh erlaubt es mehrere Dienste wie SSL, SSH und OpenVPN gleichzeitig auf Port 443 zu betreiben. Es unterscheidet anhand des Headers beim Aufbau der TLS Verbindung an welchen Dienst die Anfrage weitergeleitet werden muss. Dies ist z.B. nützlich, wenn das WLAN in Hotels oder Cafés nur Verbindungen auf bestimmte Ports erlauben. In diesem Beitrag beschreibe ich wie sslh unter Raspbian installiert und konfiguriert werden kann.
Installation
sslh ist in den offiziellen Paketquellen von Raspbian vorhanden und kann daher einfach über apt installiert werden. Ich verwende den Parameter –no-install-recommends damit der Apache Webserver nicht automatisch installiert wird, da ich wie im Beitrag nginx unter Raspbian Jessie Lite mit sicherer SSL Konfiguration und PHP installieren und konfigurieren beschrieben bereits nginx als Webserver Installiert habe. Falls noch kein Webserver installiert ist kann Parameter entfernt werden, damit der Apache Webserver mitinstalliert wird.
$ sudo apt-get install sslh --no-install-recommends
Während der installation wird gefragt, ob sslh über inetd oder standalone gestartet werden soll. Der Unterschied liegt darin, dass sslh von inetd nur bei Bedarf gestartet wird. Bei standalone läuft der Prozess immer im Hintergrund. Ich verwende standalone.
Konfiguration
Bei mir laufen SSH, nginx sowie OpenVPN lokal auf dem Raspberry. Daher werden alle Anfragen an den lokalen host weitergeleitet. Des Weiteren muss sslh in der Konfiguration aktiviert werden. Meine Konfiguration sieht folgendermaßen aus.
# Default options for sslh initscript # sourced by /etc/init.d/sslh # Disabled by default, to force yourself # to read the configuration: # - /usr/share/doc/sslh/README.Debian (quick start) # - /usr/share/doc/sslh/README, at "Configuration" section # - sslh(8) via "man sslh" for more configuration details. # Once configuration ready, you *must* set RUN to yes here # and try to start sslh (standalone mode only) RUN=yes # 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 --timeout 5 --listen 192.168.xxx.xxx:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --openvpn 127.0.0.1:1194 --pidfile /var/run/sslh/sslh.pid"
nginx
Da ich auch nginx auf meinem Raspberry Pi laufen habe muss ich dort beachten, dass alle aktivierten Seiten nur auf dem localhost auf SSL Anfragen lauschen. Die Konfiguration für SSL in den Seiten muss daher folgendermaßen aussehen.
[...] listen 127.0.0.1:443 ssl; [...]
Starten
Nun kann sslh mit nachfolgendem Befehl gestartet werden
$ sudo /etc/init.d/sslh start
[ ok ] Starting sslh (via systemctl): sslh.service.