sslh

sslh 是一个开源的 多协议复用器(multiplexer)。它允许在同一个端口上同时运行多个协议(如 SSH、HTTPS、OpenVPN 等),通过分析传入连接的头部信息来决定将流量转发到哪个后端服务。项目地址在:https://github.com/yrutschle/sslh

工作原理

sslh 监听一个特定的端口(通常是 443,因为它是 HTTPS 的默认端口),接收客户端的连接请求,然后根据流量特征判断它是哪种协议。例如:

  • 如果是 HTTPS 流量(SSL/TLS),转发到 Web 服务器(如 Nginx 或 Apache)。
  • 如果是 SSH 流量,转发到 SSH 服务器。
  • 如果是 OpenVPN 流量,转发到 VPN 服务。

这种方式可以让多种服务共享同一个端口,特别适合在防火墙限制严格的环境中(比如公司网络只允许 443 端口对外访问)。

常见用途

  1. 端口复用:在只有一个公网 IP 或有限端口的情况下,运行多个服务。
  2. 绕过防火墙:通过将 SSH 或 VPN 伪装成 HTTPS 流量,绕过网络限制。
  3. 简化服务器配置:减少需要开放的端口数量。

支持的协议

sslh 支持多种协议,包括但不限于:

  • SSH
  • HTTPS (SSL/TLS)
  • OpenVPN
  • XMPP
  • Tinc
  • HTTP

配置示例

假设你想在 443 端口上同时运行 HTTPS 和 SSH:

  1. 配置 sslh 监听 443 端口。
  2. 设置 HTTPS 后端(如 Nginx)监听本地 8443 端口。
  3. 设置 SSH 后端监听本地 2222 端口。
  4. sslh 会将流量分发到正确的后端。

配置文件(/etc/sslh.cfg)可能如下:

listen:
(
    { host: "0.0.0.0"; port: "443"; }
);

protocols:
(
    { name: "ssl"; host: "localhost"; port: "8443"; },
    { name: "ssh"; host: "localhost"; port: "2222"; }
);

优点

  • 提高端口利用率。
  • 增强服务的隐蔽性(SSH 流量看起来像 HTTPS)。
  • 易于配置和部署。

局限性

  • 可能增加少量延迟(因为需要分析流量)。
  • 如果协议特征不明显,可能导致误判。
  • 需要服务器有足够的性能处理流量分发。

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注