MMIL

Materials and Mechanics Informatics Lab

0%

使用SSLH,建立同一端口可以同时进行ssh, https和http的服务

  • 背景:买了内网穿透服务,搭建了一个自己的私有云盘,共享资料和协同工作。服务的限制有两个,一是只能绑定一个本地端口,二是带宽只有2M(钱多可以买带宽更大的。)。此处要解决第一个问题。

  • 使用sslh。它的基本思想是,监听一个端口,根据进来的信息的协议,转到对应的本地端口上去。

  • 步骤:1,打开要接受请求的端口,我设置了21102. 2. 建立sslh的listen和导向。

  • Centos7上,我使用的firewall打开的端口,查找到了如下的操作,成功。

方法一:使用firewall

1、运行命令:
firewall-cmd –get-active-zones
运行完成之后,可以看到zone名称,如下:

2、执行如下命令命令:

firewall-cmd –zone=public –add-port=21102/tcp –permanent

3、重启防火墙,运行命令:
firewall-cmd –reload

4、查看端口号是否开启,运行命令:
firewall-cmd –query-port=21102/tcp

  • Centos7上,sslh的配置文件在/etc/sslh.cfg,内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
verbose: false;
foreground: true;
inetd: false;
numeric: false;
transparent: false;
timeout: 2;
user: "sslh";

# Change hostname with your external address name.
# { host: "thelonious"; port: "443"; }
listen:
(
{ host: "0.0.0.0"; port: "21102"; }
);
protocols:
(
{ name: "ssh"; service: "ssh"; host: "localhost"; port: "22"; fork: true; },
{ name: "http"; host: "localhost"; port: "80"; },
{ name: "ssl"; host: "localhost"; port: "443"; log_level: 0; },
{ name: "anyprot"; host: "localhost"; port: "443"; }
);
# { name: "openvpn"; host: "localhost"; port: "1194"; },
# { name: "xmpp"; host: "localhost"; port: "5222"; },
  • systemctl start sslh即可打开,就成功了

  • 在调试过程中,可以临时打开sslh进行测试,命令:

1
/usr/sbin/sslh  --foreground --user sslh --listen 0.0.0.0:21102 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh.pid
  • 能够同时使用http和https访问的方法:在/etc/httpd/conf.d/ssl.conf开头,注释掉Listen 443, 加入下面的东西:
1
2
3
4
5
6
7
8
<IfModule mod_ssl.c>
Listen 443
</IfModule>


<IfModule mod_gnutls.c>
Listen 443
</IfModule>: