V tomto krátkém tutoriálu uvidíme, co je SSLH, jak nainstalovat SSLH a jak nakonfigurovat SSLH pro sdílení stejného portu pro https a ssh v operačních systémech Linux a Unix.
Co je SSLH?
Někteří poskytovatelé internetových služeb a korporátní společnosti možná zablokovali většinu portů a povolili pouze několik konkrétních portů, jako je port 80 a 443, aby zpřísnili zabezpečení.
V takových případech nemáme jinou možnost, ale použít stejný port pro více programů, řekněme port HTTPS 443 , který je zřídka blokován. Zde je SSLH , SSL/SSH multiplexer, přichází na pomoc.
SSLH bude naslouchat příchozím připojením na portu 443. Jednoduše řečeno, SSLH nám umožňuje spouštět několik programů nebo služeb na portu 443 v systému Linux. Takže můžete současně používat SSL i SSH pomocí stejného portu.
Pokud jste se někdy dostali do situace, kdy je většina portů blokována firewally, můžete pro přístup ke vzdálenému serveru použít SSLH.
Nainstalujte SSLH v Linuxu
SSLH je součástí balíčku pro většinu distribucí Linuxu, takže jej můžete nainstalovat pomocí výchozích správců balíčků.
V Debianu , Ubuntu , Linux Mint a Pop OS , spustit:
$ sudo apt install sslh
Při instalaci SSLH budete dotázáni, zda chcete sslh spouštět jako službu od inetd, nebo jako samostatný server.
Každá volba má své výhody. S pouze několika připojeními za den je pravděpodobně lepší spouštět sslh z inetd, abyste ušetřili zdroje.
Na druhou stranu, s mnoha připojeními by měl sslh běžet jako samostatný server, aby se zabránilo vytváření nového procesu pro každé příchozí připojení.
V systému Arch Linux a deriváty jako Antergos, Manjaro Linux, nainstalujte jej pomocí Pacman, jak je uvedeno níže.
$ sudo pacman -S sslh
Na RHEL , CentOS , AlmaLinux a Rocky Linux , musíte přidat EPEL úložiště a poté nainstalujte SSLH, jak je znázorněno níže.
$ sudo dnf install epel-release
$ sudo dnf install sslh
Na Fedoře :
$ sudo dnf install sslh
Pokud není k dispozici ve výchozích úložištích, můžete ručně zkompilovat a nainstalovat SSLH, jak je popsáno zde .
Nakonfigurujte webové servery Apache nebo Nginx
Jak již víte, webové servery Apache a Nginx budou naslouchat na všech síťových rozhraních (tj. 0.0.0.0:443
) ve výchozím stavu. Toto nastavení musíme změnit, aby webový server naslouchal pouze na rozhraní localhost (tj. 127.0.0.1:443
nebo localhost:443
).
Chcete-li tak učinit, upravte konfigurační soubor webového serveru (nginx nebo apache) a vyhledejte následující řádek:
listen 443 ssl;
A změňte jej na:
listen 127.0.0.1:443 ssl;
Pokud používáte Virutalhosts v Apache, ujistěte se, že jste to také změnili.
VirtualHost 127.0.0.1:443
Uložte a zavřete konfigurační soubory. Nerestartujte služby. Ještě jsme neskončili.
Nakonfigurujte SSLH
Jakmile nastavíte, aby webové servery naslouchaly pouze místnímu rozhraní, upravte konfigurační soubor SSLH:
$ sudo vi /etc/default/sslh
Najděte následující řádek:
Run=no
A změňte jej na:
Run=yes
Poté přejděte o kousek dolů a upravte následující řádek tak, aby umožnil SSLH naslouchat na portu 443 na všech dostupných rozhraních (např. 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"
Kde,
--user sslh
:Vyžaduje spuštění pod tímto zadaným uživatelským jménem.--listen 0.0.0.0:443
:SSLH naslouchá na portu443
na všech dostupných rozhraních.--sshs 127.0.0.1:22
:Směrovat provoz SSH na port22
na localhost.--ssl 127.0.0.1:443
:Směrovat provoz HTTPS/SSL na port443
na localhost.
Uložte a zavřete soubor.
Nakonec povolte a spusťte sslh
služby pro aktualizaci změn.
$ sudo systemctl enable sslh
$ sudo systemctl start sslh
Testování
Zkontrolujte, zda démon SSLH poslouchá 443
.
$ 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
Nyní můžete přistupovat ke vzdálenému serveru přes SSH pomocí portu 443
:
$ ssh -p 443 [email protected]
Ukázkový výstup:
[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
Vidět? Nyní mohu přistupovat ke vzdálenému serveru přes SSH, i když je výchozí port SSH 22
je zablokován. Jak vidíte ve výše uvedeném příkladu, použil jsem https port 443
pro připojení SSH. Také můžeme použít stejný port 443
i pro připojení openVPN.
Testoval jsem SSLH na svém serveru Ubuntu 18.04 LTS a fungovalo to dobře, jak je popsáno výše. Testoval jsem SSLH v chráněné místní síti, takže si nejsem vědom bezpečnostních problémů. Pokud jej používáte ve výrobě, dejte nám vědět o výhodách a nevýhodách používání SSLH v sekci komentářů níže.
Další podrobnosti najdete na oficiální stránce GitHubu uvedené níže.