转载来源 :SSLH:让 HTTPS 和 SSH 共享同一个端口:http://www.safebase.cn/article-258224-1.html

摘要: 如果你遇到大多数端口被防火墙阻止的情况,你可以使用 SSLH 访问远程服务器。这个简短的教程描述了如何在类 Unix 操作系统中使用 SSLH 让 https、ssh 共享相同的端口。-- Sk(作者)一些 ISP 和公司可能已经阻止了大多数端口,并且只允许少数特定端口(如端口 80 和 443)访问来加强其安全性。在这种情 …

如果你遇到大多数端口被防火墙阻止的情况,你可以使用 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 -y

安装 SSLH 时,将提示你是要将 sslh 作为从 inetd 运行的服务,还是作为独立服务器运行。每种选择都有其自身的优点。如果每天只有少量连接,最好从 inetd 运行 sslh 以节省资源。另一方面,如果有很多连接,sslh 应作为独立服务器运行,以避免为每个传入连接生成新进程。

安装 sslh

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

$ sudo pacman -S sslh

在 RHEL、CentOS 上,你需要添加 EPEL 存储库,然后安装 SSLH,如下所示:

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

在 Fedora:

$ sudo dnf install sslh -y

如果它在默认存储库中不可用,你可以如 这里 所述手动编译和安装 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 服务以更新更改。
centos启动命令

$ sudo systemctl enable sslh
$ sudo systemctl start sslh

Ubuntu启动命令

#service sslh enable
#service sslh restart

测试
检查 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


通过 SSH 使用 443 端口访问远程系统

看见了吗?即使默认的 SSH 端口 22 被阻止,我现在也可以通过 SSH 访问远程服务器。正如你在上面的示例中所看到的,我使用 https 端口 443 进行 SSH 连接。

我在我的 Ubuntu 18.04 LTS 服务器上测试了 SSLH,它如上所述工作得很好。我在受保护的局域网中测试了 SSLH,所以我不知道是否有安全问题。如果你在生产环境中使用它,请在下面的评论部分中告诉我们使用 SSLH 的优缺点。

有关更多详细信息,请查看下面给出的官方 GitHub 页面。

SSLH:让 HTTPS 和 SSH 共享同一个端口相关推荐

  1. nginx 同一个端口同时 支持 http 和 https

    遇到一个场景: 开始测试时,使用的是 88 端口,比如 www.abc.com:88 后来上线了切换到 80 端口,www.abc.com, 然后升级到 https 默认使用443端口,https:/ ...

  2. nginx 同一个端口支持 http https_Nginx

    Nginx 功能 web 服务器 负载均衡 反向代理 特点 网络 I/O 模型:epoll.kqueue 支持高并发连接(并发连接数:测试环境 5w,生产环境 2~4w ) 执行效率极高,内存.CPU ...

  3. Git 之五 通信协议(HTTPS、SSH、Git)、使用远程仓库(GitHub、GitLab、Gitee等)

    写在前面   Git 的官网上有很详细的使用教程(当然有翻译版本),具体地址是 https://git-scm.com/book/zh/v2.唯一不足就是,很多讲解并没有实机演示.但是,毫无疑问,官网 ...

  4. 为什么 SSH 的默认端口是 22 ?

    原文:https://www.ssh.com/ssh/port 作者:Tatu Ylonen SSH (Secure Shell) 的端口是 22,它不是巧合,这是一个关于如何获得该端口的故事. 当我 ...

  5. linux的共享端口,Gogs与Linux共享SSH22端口

    前言 Gogs 是一个Git服务器, 跟Github 和 GitLab 很像; 但它是用Go语言编写的, 比GitLab更轻量化, 功能也很齐全. 但是, Gogs不管你是在物理机上面直接搭建的 or ...

  6. 如何让两个安装程序setup共享同一个component—— installing shared files(version:installshield develop8.0)...

    如何让两个安装程序(setup.exe),共享同一个component? 要实现的效果是,两个程序共享同一个dll,当两个程序中有一个被卸载掉时,这个dll仍存在,不随着第一个卸载而从系统中删除,因为 ...

  7. java 多个异常处理_Java 多个异常共享同一个异常处理器的方法

    传统的异常处理 我们先来看下,传统的异常处理方式: // not share exception handler int[] intArray = new int[3]; try { for (int ...

  8. Linux工作笔记-使用SCP文件协议(SSH协议22端口)使Windows与Linux互传文件

    背景: 因为部分操作系统里面没有vsftpd服务. 再加上某些国产Linux系统很冷门,百度上关于他的资料很少,需要专门的管理员,但开发者可以通过SCP文件协议(SSH协议22端口)实现ftp的功能, ...

  9. scp 、ssh非22端口的服务器方法

    ssh 连接远程ssh非22端口服务器的方法 #ssh -p 2000 weijunping@10.32.0.228 scp 远程拷贝ssh非22端口的服务器文件使用方法 #scp -P 2000 a ...

最新文章

  1. python语言入门u-Jupyter笔记-Python语法基础(U.1)
  2. Hibernate核心配置文件cfg参数说明
  3. Dream------scala--开发环境搭建
  4. apache 统计404日志_Apache 网站日志分析
  5. axure怎样24位bmp输出_【白皮书】使用24位设备进行基础应变测量
  6. Android WifiManager.WifiLock 简介
  7. 如何快速验证电子邮件地址?
  8. Glide:重新加载失败的问题
  9. Java编程语言下 Selenium 驱动各个浏览器代码
  10. Matlab学习笔记#01
  11. Ubuntu下VScode代码字体设置——monospace(等宽字体)
  12. Win10电脑不能读取U盘怎么办?不识别U盘怎么解决?
  13. 图论1:哥尼斯堡七桥问题的证明
  14. 思维导图工具Thebrain:动态思维导图简介
  15. 金融类openapi
  16. (2)Django---用命令创建项目
  17. 跟主页劫持的浏览器再见了,被恶意劫持修改方法!
  18. 学会做笔记-子弹笔记学习概要三
  19. 问题一:操作系统是什么?你知道哪些操作系统?怎么看自己的操作系统?电脑上怎么找到环境变量?问题二:Java开发工具还有哪些?问题三:软件公司有哪些?
  20. C# WebForm %%用法

热门文章

  1. 机器学习很难上手和提升?你只差一条学习路径!
  2. 微博python爬虫,每日百万级数据
  3. QQ浏览器下拉词推广是什么?
  4. linux mplayer_移植mplayer播放器到MY-IMX6-EK200开发板的步骤浅析
  5. 计算机信息机房,计算机信息中心机房建设标准
  6. 计算机java语言答案,2019年全国计算机二级Java语言练习试题及答案一
  7. esxi时区设置 +8_ESXI安装OpenWRT amp; LEDE软路由部署指南(附镜像下载)
  8. java token身份认证_java – 基于Spring Security Token的身份验证
  9. 波士顿大学计算机专业世界排名,波士顿大学计算机工程专业大学排名业内最独到阐明...
  10. ValueError: No JSON object could be decoded