在這個簡短的教程中,了解 SSLH 是什麼,如何安裝它,以及如何將它配置為在 Linux 和類 Unix 操作系統上為 https 和 ssh 共享相同的端口。
什麼是 SSLH?
一些 Internet 服務提供商和公司只允許某些端口,例如端口 80 和 443,並阻止大多數端口以增加安全性。
在這種情況下,唯一的選擇是為多個程序使用同一個端口,例如 HTTPS 端口。 443, 很少被阻止。這是哪裡 SSLH成為 SSL/SSH 多路復用器會有所幫助。
SSLH 偵聽端口 443 上的傳入連接。簡單地說,SSLH 允許多個程序和服務在 Linux 系統的 443 端口上運行。因此,您可以在同一端口上同時使用 SSL 和 SSH。
如果您曾經遇到過大多數端口被防火牆阻止的情況,您可以使用 SSLH 訪問遠程服務器。
在 Linux 上安裝 SSLH
SSLH 為大多數 Linux 發行版打包,因此您可以使用默認的包管理器安裝它。
存在 德維安, Ubuntu, Linux 薄荷糖 什麼時候 通用操作系統, 跑:
$ sudo apt install sslh
安裝 SSLH 時,系統會詢問您是要將 sslh 作為 inetd 中的服務運行還是作為獨立服務器運行。
每個選項都有其自身的優勢。 建議從 inetd 運行 sslh 以節省資源,因為每天只有幾個連接。
另一方面,許多連接需要 sslh 作為獨立服務器運行,以避免為每個傳入連接生成新進程。
存在 拱 linux 此外,Antergos 和 Manjaro Linux 等衍生產品是使用 Pacman 安裝的,如下所示。
$ sudo pacman -S sslh
存在 RHEL, 中央操作系統, 阿爾瑪Linux 什麼時候 洛基Linux應該加上 埃佩爾 如下所示安裝 SSLH。
$ sudo dnf install epel-release
$ sudo dnf install sslh
存在 軟呢帽:
$ sudo dnf install sslh
如果它在默認存儲庫中不可用,您可以按照說明手動編譯和安裝 SSLH。 這裡.
配置 Apache 或 Nginx Web 服務器
如您所知,Apache Nginx Web 服務器支持所有網絡接口(即 . 0.0.0.0:443
) 默認。您應該更改此設置以告訴您的 Web 服務器僅偵聽 localhost 接口(即 . 127.0.0.1:443
還 localhost:443
)。
為此,請編輯您的 Web 服務器(nginx 或 apache)配置文件並找到以下行:
listen 443 ssl;
並將其更改為:
listen 127.0.0.1:443 ssl;
如果您使用的是 Virtualhosts Apache,也請更改它。
VirtualHost 127.0.0.1:443
保存並關閉配置文件。不要重新啟動服務。還沒結束。
配置 SSLH
將 Web 服務器設置為僅偵聽本地接口後,編輯 SSLH 配置文件。
$ sudo vi /etc/default/sslh
找到這一行:
Run=no
並將其更改為:
Run=yes
然後向下滾動並更改以下行以包含所有啟用 SSLH 的接口(例如 . 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"
在哪裡,
--user sslh
: 你必須在這個指定的用戶名下運行。--listen 0.0.0.0:443
: SSLH 監聽端口443
在所有可用的接口中。--sshs 127.0.0.1:22
: 將 SSH 流量路由到端口22
在本地主機上。--ssl 127.0.0.1:443
: 將 HTTPS/SSL 流量路由到端口443
在本地主機上。
保存並關閉文件。
最後,啟用並啟動 sslh
更新更改的服務。
$ sudo systemctl enable sslh
$ sudo systemctl start 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
您現在可以使用端口通過 SSH 訪問遠程服務器 443
:
$ ssh -p 443 [email protected]
示例輸出:
[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
看?即使在默認 SSH 端口上,您現在也可以通過 SSH 連接到遠程服務器 22
禁止。正如您在上面的示例中看到的,我使用了 https 端口 443
用於 SSH 連接。您也可以使用相同的端口 443
它也適用於 openVPN 連接。
我在我的 Ubuntu 18.04 LTS 服務器上測試了 SSLH,它運行良好,如上所述。我已經在安全的 LAN 上測試了 SSLH,所以我不確定安全問題。如果您在生產中使用它,請在下面的評論部分告訴我們您使用 SSLH 的優缺點。
有關更多信息,請訪問下面的官方 GitHub 頁面。
資源:
推薦閱讀:
- 如何通過 SSH 連接到 Linux 中的特定目錄
- 如何在 Linux 中創建 SSH 別名
- 如何在 Linux 上配置基於 SSH 密鑰的身份驗證
- 如何防止 SSH 會話在 Linux 中斷開連接
- 在 Linux 中允許或拒絕對特定用戶或組的 SSH 訪問
- 關閉 SSH 會話後保持命令運行的 4 種方法
- ScanSSH – 快速 SSH 服務器和開放代理掃描器
HTTPSLinux 安全連接為 HTTPS 和 SSHSSHSSLSSLH 共享同一個端口