Linux端口复用工具sslh

内容纲要

sslh简介

sslh可以在同一端口上接受HTTP,HTTPS,SSH等多种协议的连接,然后转到其他不同的内部端口。
这样做的意义不仅是减少对外开放的端口数量,还能满足一些特殊的应用场合,如:

  • 实现网页和ssh共用443端口
  • 外部端口转内部端口的特殊应用

sslh安装

以centos为例:

yum install epel-release
yum install sslh

配置

安装好后,sslh的配置文件在/etc/sslh.conf。以两个示例说明配置方法

实现网页和ssh共用443端口

些配置假设nginx配置HTTPS监听的内部端口为8001。配置sslh监听443端口,将ssh的服务转到内部22端口,把其他443的访问转到8001端口:

# This is a basic configuration file that should provide
# sensible values for "standard" setup.

verbose: false;
foreground: true;
inetd: false;
numeric: false;
transparent: false;
timeout: 2;
user: "sslh";

# Change hostname with your external address name.
listen:
(
    { host: "0.0.0.0"; port: "443"; }
);

protocols:
(
     { name: "ssh"; service: "ssh"; host: "localhost"; port: "22"; },
     { name: "anyprot"; host: "localhost"; port: "8001"; }
);

外部端口转内部端口的特殊应用

如我需要将外部8003的访问都转到8883,可以用以下配置:

# Change hostname with your external address name.
listen:
(
    { host: "0.0.0.0"; port: "8003"; }
);

protocols:
(
     { name: "anyprot"; host: "localhost"; port: "8883"; }
);

开启sslh

因为sslh自带服务配置文件。所以直接用systemctl使能和启用便可:

systemctl enable sslh
systemctl start sslh

这样就启用SSLH了,且重启后服务也自动启动。