SSLH – 與 HTTPS 和 SSH 共享同一個端口


在這個簡短的教程中,您將了解 SSLH 是什麼、如何安裝 SSLH,以及如何配置 SSLH 以在 Linux 和類 Unix 操作系統上為 https 和 ssh 共享相同的端口。

  1. 什麼是 SSLH?
  2. 在 Linux 上安裝 SSLH
  3. 配置 Apache 或 Nginx Web 服務器
  4. 配置 SSLH
    1. 測試

什麼是 SSLH?

某些 Internet 服務提供商和企業可能會阻止大多數端口,只允許某些端口(例如端口 80 和 443)提供額外的安全性。

在這種情況下,您別無選擇,只能為多個程序使用同一個端口,例如 HTTPS 端口。 443, 很少被阻塞。這是哪裡 SSLHSSL/SSH 多路復用器很有用。

SSLH 偵聽端口 443 上的傳入連接。更簡單地說,SSLH 允許您在 Linux 系統的 443 端口上運行多個程序或服務。因此,您可以在同一端口上同時使用 SSL 和 SSH。

如果您遇到大多數端口被防火牆阻止的情況,您可以使用 SSLH 訪問遠程服務器。

在 Linux 上安裝 SSLH

SSLH 與大多數 Linux 發行版一起打包,可以使用默認的包管理器進行安裝。

存在 Debian, Ubuntu, Linux 薄荷糖 什麼時候 流行的操作系統, 跑:

$ sudo apt install sslh

安裝 SSLH 時,系統會詢問您是要將 sslh 作為 inetd 的服務還是作為獨立服務器運行。

每個選項都有其自身的優勢。 如果每天的連接數很少,最好從 inetd 運行 sslh 以節省資源。

另一方面,許多連接要求您將 sslh 作為獨立服務器運行,這樣就不會為每個傳入連接生成新進程。

安裝 sslh

存在 Arch Linux 此外,Antergos 和 Manjaro Linux 等衍生產品是使用 Pacman 安裝的,如下所示。

$ sudo pacman -S sslh

存在 RHEL, 中央操作系統, AlmaLinux 什麼時候 洛基 Linux需要添加 EPEL 然後創建存儲庫,然後安裝 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 服務器僅在本地主機接口上偵聽(即 127.0.0.1:443 localhost:443)。

為此,請編輯 Web 服務器(nginx 或 apache)配置文件並找到以下行:

listen 443 ssl;

然後將其更改如下:

listen 127.0.0.1:443 ssl;

如果您使用的是 Virutalhosts Apache,也請更改它。

VirtualHost 127.0.0.1:443

保存並關閉配置文件。不要重新啟動服務。還沒結束。

配置 SSLH

一旦 Web 服務器僅在本地接口上偵聽,請編輯 SSLH 配置文件。

$ sudo vi /etc/default/sslh

找到下一行。

Run=no

然後將其更改如下:

Run=yes

然後向下滾動並更改以下行以允許 SSLH 在所有可用接口(例如)上偵聽端口 443。 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
使用端口 443 SSH 進入遠程系統

看?您現在可以使用默認 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 服務器和開放代理掃描器

HTTPS Linux 安全連接與 HTTPS 和 SSHSSHSSLSSLH 共享同一個端口