SSLH:讓HTTPS和SSH共享同一個端口
一些 ISP 和公司可能已經(jīng)阻止了大多數(shù)端口,并且只允許少數(shù)特定端口(如端口 80 和 443)訪問來加強其安全性。在這種情況下,我們別無選擇,但同一個端口可以用于多個程序,比如 HTTPS 端口 443,很少被阻止。通過 SSL/SSH 多路復用器 SSLH 的幫助,它可以偵聽端口 443 上的傳入連接。更簡單地說,SSLH 允許我們在 Linux 系統(tǒng)上的端口 443 上運行多個程序/服務。因此,你可以同時通過同一個端口同時使用 SSL 和 SSH。如果你遇到大多數(shù)端口被防火墻阻止的情況,你可以使用 SSLH 訪問遠程服務器。這個簡短的教程描述了如何在類 Unix 操作系統(tǒng)中使用 SSLH 讓 https、ssh 共享相同的端口。
SSLH:讓 HTTPS、SSH 共享端口
安裝 SSLH
大多數(shù) Linux 發(fā)行版上 SSLH 都有軟件包,因此你可以使用默認包管理器進行安裝。
在 Debian、Ubuntu 及其衍生品上運行:
$ sudo apt-get install sslh
安裝 SSLH 時,將提示你是要將 sslh 作為從 inetd 運行的服務,還是作為獨立服務器運行。每種選擇都有其自身的優(yōu)點。如果每天只有少量連接,最好從 inetd 運行 sslh 以節(jié)省資源。另一方面,如果有很多連接,sslh 應作為獨立服務器運行,以避免為每個傳入連接生成新進程。
安裝 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 服務器默認會監(jiān)聽所有網(wǎng)絡接口(即 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 監(jiān)聽于所有可用接口的 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 守護程序是否正在監(jiān)聽 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
現(xiàn)在,你可以使用端口 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
通過 SSH 使用 443 端口訪問遠程系統(tǒng)
看見了嗎?即使默認的 SSH 端口 22 被阻止,我現(xiàn)在也可以通過 SSH 訪問遠程服務器。正如你在上面的示例中所看到的,我使用 https 端口 443 進行 SSH 連接。
我在我的 Ubuntu 18.04 LTS 服務器上測試了 SSLH,它如上所述工作得很好。我在受保護的局域網(wǎng)中測試了 SSLH,所以我不知道是否有安全問題。如果你在生產(chǎn)環(huán)境中使用它,請在下面的評論部分中告訴我們使用 SSLH 的優(yōu)缺點。
有關更多詳細信息,請查看下面給出的官方 GitHub 頁面。
資源: