配置 SSLH 在 443 端口同时处理多种服务

使用 SSLH 在单一 443 端口上同时运行 HTTPS、SSH、OpenVPN 等多种服务

周三 1月 08 2025
368 字 · 2 分钟

1. 安装 SSLH

Ubuntu/Debian

Terminal window
sudo apt update
sudo apt install sslh

默认选择 Standalone 模式

2. 配置 SSLH

编辑 /etc/default/sslh(Debian/Ubuntu)或 /etc/sslh.cfg(CentOS/RHEL):

# 监听 443 端口(IPv4 + IPv6)
DAEMON_OPTS="--user sslh --listen 0.0.0.0:443 --listen [::]:443 --ssh 127.0.0.1:22 --tls 127.0.0.1:443 --http 127.0.0.1:80 --openvpn 127.0.0.1:1194"

参数说明:

  • --listen 0.0.0.0:443:SSLH 监听 443 端口(外部访问)。
  • --tls 127.0.0.1:443:HTTPS 流量转发到本机 Nginx/Apache(443)。
  • --openvpn 127.0.0.1:1194:OpenVPN 流量转发到本机 OpenVPN 服务器(默认 1194)。
  • --ssh 127.0.0.1:22(可选):SSH 流量转发到本机 SSH 服务(22)。

3. 启动 SSLH

Terminal window
sudo systemctl enable sslh
sudo systemctl start sslh

检查状态:

Terminal window
sudo systemctl status sslh

查看日志:

Terminal window
journalctl -u sslh -f

总结

SSLH 成功运行后:

  • 外部访问 443 端口时:
    • HTTPS 请求 → 交给 Nginx/Apache(127.0.0.1:443)。
    • OpenVPN 请求 → 交给 OpenVPN 服务器(127.0.0.1:1194)。
    • SSH 请求(可选) → 交给 SSH 服务器(127.0.0.1:22)。

🚀 适用场景:

  • 绕过公司/学校防火墙(因为 443 端口通常开放)。
  • 在单 IP 服务器上同时运行 HTTPS + OpenVPN + SSH。

⚠️ 注意事项:

  • 如果 OpenVPN 使用 UDP,需确保 SSLH 支持 UDP 模式(较新版本支持)。
  • 如果 Nginx 已经占用 443,需先修改 Nginx 监听地址(127.0.0.1:443)。

如不需要 Apache2

解决方案

✅ 方案 1:停止并禁用 Apache2

Terminal window
sudo systemctl stop apache2 # 停止 Apache2
sudo systemctl disable apache2 # 禁止开机自启

然后检查 80 端口是否释放:

Terminal window
sudo ss -tulnp | grep ':80' # 应该无输出

✅ 方案 2:卸载 Apache2(如果不需用它)

Terminal window
sudo apt remove apache2 apache2-utils # Debian/Ubuntu

清理残留配置:

Terminal window
sudo apt autoremove --purge # Debian/Ubuntu

Thanks for reading!

配置 SSLH 在 443 端口同时处理多种服务

周三 1月 08 2025
368 字 · 2 分钟