SSLH:讓 HTTPS 和 SSH 共享同一個端口

SSLH:讓 HTTPS 和 SSH 共享同一個端口

如果你遇到大多數端口被防火牆阻止的情況,你可以使用 SSLH 訪問遠程服務器。這個簡短的教程描述瞭如何在類 Unix 操作系統中使用 SSLH 讓 https、ssh 共享相同的端口。

-- Sk(作者)

一些 ISP 和公司可能已經阻止了大多數端口,並且只允許少數特定端口(如端口 80 和 443)訪問來加強其安全性。在這種情況下,我們別無選擇,但同一個端口可以用於多個程序,比如 HTTPS 端口 443,很少被阻止。通過 SSL/SSH 多路複用器 SSLH 的幫助,它可以偵聽端口 443 上的傳入連接。更簡單地說,SSLH 允許我們在 Linux 系統上的端口 443 上運行多個程序/服務。因此,你可以同時通過同一個端口同時使用 SSL 和 SSH。如果你遇到大多數端口被防火牆阻止的情況,你可以使用 SSLH 訪問遠程服務器。這個簡短的教程描述瞭如何在類 Unix 操作系統中使用 SSLH 讓 https、ssh 共享相同的端口。

SSLH:讓 HTTPS、SSH 共享端口

安裝 SSLH

大多數 Linux 發行版上 SSLH 都有軟件包,因此你可以使用默認包管理器進行安裝。

在 Debian、Ubuntu 及其衍生品上運行:

$ sudo apt-get install sslh

安裝 SSLH 時,將提示你是要將 sslh 作為從 inetd 運行的服務,還是作為獨立服務器運行。每種選擇都有其自身的優點。如果每天只有少量連接,最好從 inetd 運行 sslh 以節省資源。另一方面,如果有很多連接,sslh 應作為獨立服務器運行,以避免為每個傳入連接生成新進程。


SSLH:讓 HTTPS 和 SSH 共享同一個端口

安裝 sslh


在 Arch Linux 和 Antergos、Manjaro Linux 等衍生品上,使用 Pacman 進行安裝,如下所示:

$ sudo pacman -S sslh

在 RHEL、CentOS 上,你需要添加 EPEL 存儲庫,然後安裝 SSLH,如下所示:

$ sudo yum install epel-release
$ sudo yum install sslh

在 Fedora:

$ 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;

如果你在 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

現在,你可以使用端口 443 通過 SSH 訪問遠程服務器:

$ 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


SSLH:讓 HTTPS 和 SSH 共享同一個端口

通過 SSH 使用 443 端口訪問遠程系統


看見了嗎?即使默認的 SSH 端口 22 被阻止,我現在也可以通過 SSH 訪問遠程服務器。正如你在上面的示例中所看到的,我使用 https 端口 443 進行 SSH 連接。

我在我的 Ubuntu 18.04 LTS 服務器上測試了 SSLH,它如上所述工作得很好。我在受保護的局域網中測試了 SSLH,所以我不知道是否有安全問題。如果你在生產環境中使用它,請在下面的評論部分中告訴我們使用 SSLH 的優缺點。

有關更多詳細信息,請查看下面給出的官方 GitHub 頁面。

資源:

  • SSLH GitHub 倉庫

via: https://www.ostechnix.com/sslh-share-port-https-ssh/

作者: sk 選題: lujun9972 譯者: wxy 校對: wxy

本文由 LCTT 原創編譯, Linux中國 榮譽推出


分享到:


相關文章: