In diesem kurzen Tutorial werden wir sehen, was SSLH ist, wie SSLH installiert wird und wie SSLH konfiguriert wird, um denselben Port für https und ssh in Linux- und Unix-ähnlichen Betriebssystemen zu teilen.
Was ist SSLH?
Einige Internetdienstanbieter und Unternehmen haben möglicherweise die meisten Ports blockiert und nur einige bestimmte Ports wie Port 80 und 443 zugelassen, um ihre Sicherheit zu erhöhen.
In solchen Fällen bleibt uns nichts anderes übrig, als denselben Port für mehrere Programme zu verwenden, beispielsweise den HTTPS-Port 443 , die selten blockiert wird. Hier ist SSLH , ein SSL/SSH-Multiplexer, hilft dabei.
SSLH wartet auf eingehende Verbindungen auf Port 443. Einfacher ausgedrückt:SSLH ermöglicht es uns, mehrere Programme oder Dienste auf Port 443 auf einem Linux-System auszuführen. Sie können also SSL und SSH gleichzeitig über denselben Port verwenden.
Wenn Sie jemals in einer Situation waren, in der die meisten Ports von den Firewalls blockiert wurden, können Sie SSLH verwenden, um auf Ihren Remote-Server zuzugreifen.
SSLH unter Linux installieren
SSLH ist für die meisten Linux-Distributionen gepackt, sodass Sie es mit den Standardpaketmanagern installieren können.
Auf Debian , Ubuntu , Linux Mint und Pop OS , ausführen:
$ sudo apt install sslh
Während der Installation von SSLH werden Sie gefragt, ob Sie sslh als Dienst von inetd oder als eigenständigen Server ausführen möchten.
Jede Wahl hat ihre eigenen Vorteile. Bei nur wenigen Verbindungen pro Tag ist es wahrscheinlich besser, sslh von inetd aus auszuführen, um Ressourcen zu sparen.
Andererseits sollte sslh bei vielen Verbindungen als eigenständiger Server laufen, um zu vermeiden, dass für jede eingehende Verbindung ein neuer Prozess erzeugt wird.
Auf Arch Linux und Derivate wie Antergos, Manjaro Linux, installieren Sie es mit Pacman wie unten gezeigt.
$ sudo pacman -S sslh
Auf RHEL , CentOS , AlmaLinux und Rocky Linux , müssen Sie EPEL hinzufügen -Repository und installieren Sie dann SSLH wie unten gezeigt.
$ sudo dnf install epel-release
$ sudo dnf install sslh
Auf Fedora :
$ sudo dnf install sslh
Wenn es in den Standard-Repositories nicht verfügbar ist, können Sie SSLH wie hier beschrieben manuell kompilieren und installieren .
Apache- oder Nginx-Webserver konfigurieren
Wie Sie bereits wissen, lauschen Apache- und Nginx-Webserver auf allen Netzwerkschnittstellen (z. B. 0.0.0.0:443
) standardmäßig. Wir müssen diese Einstellung ändern, um den Webserver anzuweisen, nur auf der Localhost-Schnittstelle zu lauschen (d. h. 127.0.0.1:443
oder localhost:443
).
Bearbeiten Sie dazu die Konfigurationsdatei des Webservers (nginx oder Apache) und suchen Sie die folgende Zeile:
listen 443 ssl;
Und ändern Sie es in:
listen 127.0.0.1:443 ssl;
Wenn Sie Virutalhosts in Apache verwenden, stellen Sie sicher, dass Sie das auch geändert haben.
VirtualHost 127.0.0.1:443
Speichern und schließen Sie die Konfigurationsdateien. Starten Sie die Dienste nicht neu. Wir sind noch nicht fertig.
SSLH konfigurieren
Sobald Sie die Webserver so eingestellt haben, dass sie nur auf der lokalen Schnittstelle lauschen, bearbeiten Sie die SSLH-Konfigurationsdatei:
$ sudo vi /etc/default/sslh
Suchen Sie die folgende Zeile:
Run=no
Und ändern Sie es in:
Run=yes
Scrollen Sie dann ein wenig nach unten und ändern Sie die folgende Zeile, damit SSLH Port 443 auf allen verfügbaren Schnittstellen abhören kann (z. B. 0.0.0.0:443
).
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid"
Wo,
--user sslh
:Muss unter diesem angegebenen Benutzernamen ausgeführt werden.--listen 0.0.0.0:443
:SSLH lauscht auf Port443
auf allen verfügbaren Schnittstellen.--sshs 127.0.0.1:22
:SSH-Verkehr an Port22
weiterleiten auf dem lokalen Host.--ssl 127.0.0.1:443
:HTTPS/SSL-Verkehr an Port443
leiten auf dem lokalen Host.
Speichern und schließen Sie die Datei.
Schließlich aktivieren und starten Sie sslh
Dienst, um die Änderungen zu aktualisieren.
$ sudo systemctl enable sslh
$ sudo systemctl start sslh
Testen
Überprüfen Sie, ob der SSLH-Daemon auf 443
lauscht .
$ ps -ef | grep sslh sslh 2746 1 0 15:51 ? 00:00:00 /usr/sbin/sslh --foreground --user sslh --listen 0.0.0.0 443 --ssh 127.0.0.1 22 --ssl 127.0.0.1 443 --pidfile /var/run/sslh/sslh.pid sslh 2747 2746 0 15:51 ? 00:00:00 /usr/sbin/sslh --foreground --user sslh --listen 0.0.0.0 443 --ssh 127.0.0.1 22 --ssl 127.0.0.1 443 --pidfile /var/run/sslh/sslh.pid sk 2754 1432 0 15:51 pts/0 00:00:00 grep --color=auto sslh
Jetzt können Sie über Port 443
per SSH auf Ihren Remote-Server zugreifen :
$ ssh -p 443 [email protected]
Beispielausgabe:
[email protected]'s password: Welcome to Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-55-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Wed Aug 14 13:11:04 IST 2019 System load: 0.23 Processes: 101 Usage of /: 53.5% of 19.56GB Users logged in: 0 Memory usage: 9% IP address for enp0s3: 192.168.225.50 Swap usage: 0% IP address for enp0s8: 192.168.225.51 * Keen to learn Istio? It's included in the single-package MicroK8s. https://snapcraft.io/microk8s 61 packages can be updated. 22 updates are security updates. Last login: Wed Aug 14 13:10:33 2019 from 127.0.0.1
Sehen? Ich kann jetzt über SSH auf den Remote-Server zugreifen, auch wenn der Standard-SSH-Port 22
ist blockiert. Wie Sie im obigen Beispiel sehen, habe ich den https-Port 443
verwendet für SSH-Verbindung. Außerdem können wir denselben Port 443
verwenden auch für openVPN-Verbindungen.
Ich habe SSLH auf meinem Ubuntu 18.04 LTS-Server getestet und es hat wie oben beschrieben einwandfrei funktioniert. Ich habe SSLH in einem geschützten lokalen Netzwerk getestet, daher sind mir die Sicherheitsprobleme nicht bekannt. Wenn Sie es in der Produktion verwenden, teilen Sie uns die Vor- und Nachteile der Verwendung von SSLH im Kommentarbereich unten mit.
Weitere Einzelheiten finden Sie auf der unten angegebenen offiziellen GitHub-Seite.