本文介绍在Linux操作系统上安装SSLH的方法,可装在Debian、Ubuntu、Arch Linux、RHEL、CentOS、Fedora版本上,同时介绍配置使用SSLH的方法。SSLH允许我们在Linux系统上的443端口上运行多个程序/服务,因此,你可以使用同一端口同时使用SSL和SSH,如果你遇到大多数端口被防火墙阻止的情况,你可以使用SSLH访问远程服务器,这个简短的文章描述了如何在类Unix操作系统中使用SSLH共享https、ssh的相同端口,SSLH-为HTTPS、SSH和OpenVPN共享相同的端口。
安装SSLH SSLH适用于大多数Linux发行版,因此你可以使用默认包管理器进行安装。 在Debian、Ubuntu和衍生系统上,运行: $ sudo apt-get install sslh 安装SSLH时,将提示你是要将sslh作为服务从inetd运行,还是作为独立服务器运行,每种选择都有其自身的优点,由于每天只有少量连接,因此最好从inetd运行sslh以节省资源,另一方面,对于许多连接,sslh应作为独立服务器运行,以避免为每个传入连接生成新进程。
在Arch Linux和Antergos、Manjaro Linux等衍生系统上,使用Pacman进行安装,如下所示: $ sudo pacman -S sslh 在RHEL、CentOS上,你需要添加EPEL存储库,然后安装SSLH,如下所示: $ sudo yum install epel-release $ sudo yum install sslh 在Fedora上: $ sudo dnf install sslh 参考:离线安装Fedora应用程序的方法(使用DNF包管理器中包含的离线功能)。
配置Apache或Nginx Web服务器 如你所知,Apache和Nginx Web服务器默认会监听所有网络接口(即0.0.0.0:443),我们需要更改此设置以让Web服务器仅侦听localhost接口(即127.0.0.1:443或localhost:443)。 为此,请编辑webserver(nginx或apache)配置文件并找到以下行: listen 443 ssl; 并将其更改为: listen 127.0.0.1:443 ssl; 如果你在Apache中使用Virutalhosts,请确保你也改变了它: VirtualHost 127.0.0.1:443 保存并关闭配置文件,不要重新启动服务。
配置SSLH 使网络服务器仅在本地接口上侦听后,编辑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" 注: 1、-user sslh:需要在此指定的用户名下运行。 2、-listen 0.0.0.0:443:SSLH正在所有可用接口上侦听443端口。 3、-sshs 127.0.0.1:22:将SSH流量路由到localhost上的22端口。 4、-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访问远程服务器: $ ssh -p 443 sk@192.168.225.50 样本输出:
即使默认的SSH端口22被阻止,我现在也可以通过SSH访问远程服务器。正如你在上面的示例中所看到的,我使用https端口443进行SSH连接,此外,我们也可以使用相同的443端口进行openVPN连接(参考:在Ubuntu 18.04/16.04上安装和配置OpenVPN Server的简便方法)。 注:我在Ubuntu 18.04 LTS服务器上测试了SSLH,它运行得很好,同时我在受保护的局域网中测试了SSLH,成效相当的好。
相关主题 |