在实际生产环境中,大部分互联网服务提供商或公司可能已经阻止了大多数网络端口,并且只允许使用少数特定端口(如:80 和 443)来进行服务访问,以加强其安全性。
在这种情况下,如果我们需要将更多的服务暴露在公网上,我们该怎么办呢?这时你别无选择,只有为多个程序共用相同的端口,比如:共用 HTTPS 的端口 443。
那怎么样才能实现不同程序复用相同端口呢,这时你就需要 SSLH 这款神器。
SSLH 是一款采用 C 语言编写的开源端口复用软件,目前支持 HTTP、SSL、SSH、OpenVPN、Tinc、XMPP 等多种协议识别。它主要运行于 *nix 环境,源代码托管在 GitHub 上。 项目地址:https://github.com/yrutschle/sslh
更简单地说,SSLH 允许我们在 Linux 系统上的同一端口上运行多个程序/服务。因此,您可以用同一端口来同时使用两种服务。如果你遇到大多数端口被防火墙阻止的情况,SSLH 就可以帮你派上大用场。下面我们就来看一个 SSL 和 SSH 同时复用同一端口的实例。
一 安装 SSLH
SSLH 适用于大多数 Linux 发行版,因此您可以使用默认包管理器进行安装。
忽略此部分
接下来,我们需要修改 SSLH 的配置文件的如下几处。
$ sudo vi /etc/default/sslh # 找到以下行: Run=no # 并将其更改为: Run=yes # 修改以下行以允许 SSLH 在所有可用接口上侦听端口 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 : 用此指定的用户名运行 SSLH。 -–listen 0.0.0.0:443 : 指定 SSLH 在所有接口上监听 443 端口。 -–sshs 127.0.0.1:22 : 将 SSH 流量转发到 localhost 上的 22 端口。 -–ssl 127.0.0.1:443 : 将 HTTPS/SSL 流量转发到 localhost 上的 443 端口。
启动 SSLH 服务
$ sudo systemctl enable sslh
$ sudo systemctl start sslh
五 测试 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 和 HTTPS 访问。
参考文档
https://linux.cn/article-11247-1.html
https://www.ostechnix.com/sslh-share-port-https-ssh/
https://huataihuang.gitbooks.io/cloud-atlas/service/ssh/sslh_multi_service_in_one_port.html
https://it.baiked.com/linux/linuxcommon/4525.html
————————————————
原文链接:https://blog.csdn.net/weixin_44221613/java/article/details/102783379