讓HTTPS、SSH 共享端口的——工具SSLH

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

安裝 SSLHhtml

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

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

$ sudo apt-get install sslh

安裝 SSLH 時,將提示你是要將 sslh 做爲從 inetd 運行的服務,仍是做爲獨立服務器運行。每種選擇都有其自身的優勢。若是天天只有少許鏈接,最好從 inetd 運行 sslh 以節省資源。另外一方面,若是有不少鏈接,sslh 應做爲獨立服務器運行,以免爲每一個傳入鏈接生成新進程。apache

讓HTTPS、SSH 共享端口的——工具SSLH讓HTTPS、SSH 共享端口的——工具SSLH

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

$ 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 服務器ssh

如你所知,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

讓HTTPS、SSH 共享端口的——工具SSLH讓HTTPS、SSH 共享端口的——工具SSLH

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

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

本文地址:https://www.linuxprobe.com/https-ssh-sslh.html

相關文章
相關標籤/搜索