在實際生產環境中,大部分互聯網服務提供商或公司可能已經阻止了大多數網絡端口,並且只允許使用少數特定端口(如:80 和 443)來進行服務訪問,以加強其安全性。
在這種情況下,如果我們需要將更多的服務暴露在公網上,我們該怎么辦呢?這時你別無選擇,只有為多個程序共用相同的端口,比如:共用 HTTPS 的端口 443。
那怎么樣才能實現不同程序復用相同端口呢,這時你就需要 SSLH 這款神器。
SSLH 是一款采用 C 語言編寫的開源端口復用軟件,目前支持 HTTP、SSL、SSH、OpenVPN、Tinc、XMPP 等多種協議識別。它主要運行於 *nix 環境,源代碼托管在 GitHub 上。 項目地址:https://github.com/yrutschle/sslh
更簡單地說,SSLH 允許我們在 Linux 系統上的同一端口上運行多個程序/服務。因此,您可以用同一端口來同時使用兩種服務。如果你遇到大多數端口被防火牆阻止的情況,SSLH 就可以幫你派上大用場。下面我們就來看一個 SSL 和 SSH 同時復用同一端口的實例。
一 安裝 SSLH
SSLH 適用於大多數 Linux 發行版,因此您可以使用默認包管理器進行安裝。
忽略此部分
接下來,我們需要修改 SSLH 的配置文件的如下幾處。
$ sudo vi /etc/default/sslh # 找到以下行: Run=no # 並將其更改為: Run=yes # 修改以下行以允許 SSLH 在所有可用接口上偵聽端口 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"
修改完成后,記得保存並關閉配置文件。這里在簡單說下幾個選項的含義
-–user sslh : 用此指定的用戶名運行 SSLH。 -–listen 0.0.0.0:443 : 指定 SSLH 在所有接口上監聽 443 端口。 -–sshs 127.0.0.1:22 : 將 SSH 流量轉發到 localhost 上的 22 端口。 -–ssl 127.0.0.1:443 : 將 HTTPS/SSL 流量轉發到 localhost 上的 443 端口。
啟動 SSLH 服務
$ sudo systemctl enable sslh
$ sudo systemctl start sslh
五 測試 SSLH 服務
驗證 SSLH 守護程序是否正在偵聽 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
最后,我們來驗證下使用 443 端口進行 SSH 和 HTTPS 訪問。
參考文檔
https://linux.cn/article-11247-1.html
https://www.ostechnix.com/sslh-share-port-https-ssh/
https://huataihuang.gitbooks.io/cloud-atlas/service/ssh/sslh_multi_service_in_one_port.html
https://it.baiked.com/linux/linuxcommon/4525.html
————————————————
原文鏈接:https://blog.csdn.net/weixin_44221613/java/article/details/102783379