有些ISP和公司可能已经封锁了大部分端口,只允许访问少数特定端口(例如端口80和443)以加强其安全性。在这种情况下,我们别无选择,只能将同一个端口用于多个程序,例如很少被阻止的HTTPS端口443。它在SSL/SSH多路复用器SSLH的帮助下侦听端口443上的传入连接。简单来说,SSLH允许我们在Linux系统的443端口上运行多个程序/服务。因此,您可以通过同一端口同时使用SSL和SSH。如果您遇到大多数端口被防火墙阻止的情况,您可以使用SSLH访问远程服务器。这个简短的教程描述了如何使用SSLH让https、ssh在类Unix操作系统上共享相同的端口。SSLH:让HTTPS、SSH共享端口安装SSLHSSLH在大多数Linux发行版上都有软件包,因此您可以使用默认的软件包管理器安装它。在Debian、Ubuntu及其衍生产品上:$sudoapt-getinstallsslh安装SSLH时,系统会提示您是要将sslh作为来自inetd的服务还是作为独立服务器运行。每个选项都有自己的优势。如果您每天只有少量连接,最好从inetd运行sslh以节省资源。另一方面,如果有很多连接,sslh应该作为独立服务器运行,以避免为每个传入连接生成一个新进程。安装sslh在ArchLinux和Antergos、ManjaroLinux等衍生产品上,使用Pacman安装如下:$sudopacman-Ssslh在RHEL、CentOS上,需要添加EPEL存储库,然后安装SSLH,如下所示:$sudoyuminstallepel-release$sudoyuminstallsslh在Fedora上:$sudodnfinstallsslh如果它在默认存储库中不可用,您可以按照此处所述手动编译和安装SSLH。配置Apache或Nginx网络服务器如您所知,Apache和Nginx网络服务器默认侦听所有网络接口(即0.0.0.0:443)。我们需要更改此设置以告知Web服务器仅侦听本地主机接口(即127.0.0.1:443或localhost:443)。为此,编辑Web服务器(nginx或apache)配置文件并找到以下行:listen443ssl;改成:listen127.0.0.1:443ssl;如果您在Apache中使用虚拟主机,请确保您也修改了它。VirtualHost127.0.0.1:443保存并关闭配置文件。不要重新启动服务。我们还没有完成。配置SSLH以便Web服务器仅在本地接口上侦听后,编辑SSLH配置文件:$sudovi/etc/default/sslh找到以下行:Run=no将其更改为:Run=yes然后,向下滚动a位并修改以下行以允许SSLH在所有可用接口上侦听端口443(例如0.0.0.0:443)。DAEMON_OPTS="--usersslh--listen0.0.0.0:443--ssh127.0.0.1:22--ssl127.0.0.1:443--pidfile/var/run/sslh/sslh.pid"这里,--usersslh:需要在此特定用户下运行。--listen0.0.0.0:443:SSLH在所有可用接口上侦听端口443。–sshs127.0.0.1:22:将SSH流量路由到本地端口22。–ssl127.0.0.1:443:将HTTPS/SSL流量路由到本地端口443。保存并关闭文件。最后,启用并启动sslh服务以更新更改。$sudosystemctlenablesslh$sudosystemctlstartsslhtest检查SSLH守护进程是否正在侦听443。$ps-ef|grepsslhsslh27461015:51?00:00:00/usr/sbin/sslh--foreground--usersslh--listen0.0.0.0443--ssh127.0.0.122--ssl127.0.0.1443--pidfile/var/run/sslh/sslh.pidsslh27472746015:51?00:00:00/usr/sbin/sslh--foreground--usersslh--listen0.0.0.0443--ssh127.0.0.122--ssl127.0.0.1443--pidfile/var/run/sslh/sslh.pidsk27541432015:51pts/000:00:00grep--color=autosslh现在,您可以使用端口443通过SSH访问远程服务器:$ssh-p443[emailprotected]示例输出:[emailprotected]的密码:欢迎使用Ubuntu18.04.2LTS(GNU/Linux4.15.0-55-genericx86_64)*文档:https://help.ubuntu.com*管理:https://landscape.canonical。com*支持:https://ubuntu.com/advantageSystem信息截至8月14日星期三13:11:04IST2019系统负载:0.23进程:101/的使用:19.56GB的53.5%登录用户:0内存使用:9%IPenp0s3的地址:192.168.225.50Swap使用:0%enp0s8的IP地址:192.168.225.51*Keentol包含在单包MicroK8s中。https://snapcraft.io/microk8s61包可以更新。22个更新是安全更新。上次登录:2019年8月14日星期三13:10:33从127.0.0.1使用端口443通过SSH访问远程系统看到了吗?我现在可以通过SSH访问远程服务器,即使默认的SSH端口22被阻止。正如您在上面的示例中看到的,我使用https端口443进行SSH连接。我在我的Ubuntu18.04LTS服务器上测试了SSLH,它工作正常,如上所述。我在受保护的局域网中测试了SSLH,所以不知道是否存在安全问题。如果您在生产中使用它,请在下面的评论部分告诉我们使用SSLH的优缺点。有关详细信息,请查看下面给出的官方GitHub页面。资料来源:SSLHGitHub存储库
