前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >公网端口不够用,用这款神器轻松搞定它!

公网端口不够用,用这款神器轻松搞定它!

作者头像
iMike
发布2019-10-28 16:49:59
1.9K0
发布2019-10-28 16:49:59
举报
文章被收录于专栏:运维之美

一些互联网服务提供商或公司可能已经阻止了大多数网络端口,并且只允许使用少数特定端口(如:80 和 443)来进行服务访问,以加强其安全性。 在这种情况下,如果我们需要将更多的服务暴露在公网上,我们该怎么办呢?这时你别无选择,只有为多个程序共用相同的端口,比如:共用 HTTPS 的端口 443。

那怎么样才能实现不同程序复用相同端口呢,这时你就需要 SSLH 这款神器。

SSLH 是一款采用 C 语言编写的开源端口复用软件,目前支持 HTTP、SSL、SSH、OpenV**、Tinc、XMPP 等多种协议识别。它主要运行于 *nix 环境,源代码托管在 GitHub 上。

项目地址:https://github.com/yrutschle/sslh

更简单地说,SSLH 允许我们在 Linux 系统上的同一端口上运行多个程序/服务。因此,您可以用同一端口来同时使用两种服务。如果你遇到大多数端口被防火墙阻止的情况,SSLH 就可以帮你派上大用场。下面我们就来看一个 SSL 和 SSH 同时复用同一端口的实例。

安装 SSLH

SSLH 适用于大多数 Linux 发行版,因此您可以使用默认包管理器进行安装。

  • 在 Debian / Ubuntu 上
代码语言:javascript
复制
$ sudo apt-get install sslh

  • 在 RHEL / CentOS 上
代码语言:javascript
复制
# 需要先安装 EPEL 仓库
$ sudo yum install epel-release
$ sudo yum install sslh

配置 Web 服务器

首先,我们需要安装一个 Web 服务器,并且配置它接受 HTTPS 请求。确保这个服务只监听在 localhost,当然也可以配置它监听在非标准端口,如:2443,这里我们以 Nginx 为例。

安装 Nginx

代码语言:javascript
复制
# RHEL / CentOS 
$ yum install nginx

# Debian / Ubuntu
$ apt install nginx

配置 Nginx

修改配置让其只监听 localhost 接口,即:127.0.0.1:443localhost:443

代码语言:javascript
复制
$ vim nginx.conf
# 找到如下行内容
listen 443 ssl;

# 并将其更改为以下内容
listen 127.0.0.1:443 ssl;

配置 SSLH

接下来,我们需要修改 SSLH 的配置文件的如下几处。

代码语言:javascript
复制
$ 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"

修改完成后,记得保存并关闭配置文件。这里在简单说下几个选项的含义

代码语言:javascript
复制
-–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 服务

代码语言:javascript
复制
$ sudo systemctl enable sslh
$ sudo systemctl start sslh

测试 SSLH 服务

验证 SSLH 守护程序是否正在侦听 443 端口。

代码语言:javascript
复制
$ 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 访问。

代码语言:javascript
复制
$ ssh -p 443 sk@192.168.43.2
sk@192.168.43.2's password: 
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-89-generic x86_64)

 * Documentation: https://help.ubuntu.com
 * Management: https://landscape.canonical.com
 * Support: https://ubuntu.com/advantage

Last login: Mon Aug 14 15:52:20 2017 from 192.168.43.192
sk@ubuntuserver:~$

同时使用浏览器访问 https://SERVER_NAME 这个地址也是可以正确访问的。

至此,我们就验证了 SSLH 确实可以在同一端口提供多种服务。

参考文档

  1. https://linux.cn/article-11247-1.html
  2. https://www.ostechnix.com/sslh-share-port-https-ssh/
  3. https://huataihuang.gitbooks.io/cloud-atlas/service/ssh/sslh_multi_service_in_one_port.html
  4. https://it.baiked.com/linux/linuxcommon/4525.html
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奇妙的Linux世界 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装 SSLH
  • 配置 Web 服务器
    • 安装 Nginx
      • 配置 Nginx
      • 配置 SSLH
      • 启动 SSLH 服务
      • 测试 SSLH 服务
      • 参考文档
      相关产品与服务
      SSL 证书
      腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档