AI 摘要
利用 nginx 流嗅探能力,将 443 端口的 SSH 流量与 HTTPS 流量分流,SSH 请求转发至本地 22 端口,Web 请求保持正常网站服务,实现 SSH 复用 443 端口穿透防火墙。给出具体配置与验证命令。

一、引子

之前看到过,类似这样的实现,利用 nginx 嗅探流量类型,然后分流到正常网站、或者本地监听的 22 端口。

二、配置

安装过程不再赘述。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 443 端口
server {
listen 443;
listen [::]:443;
ssl_preread on;
proxy_pass $backend;
proxy_protocol on;
}

# 如果是 tls 流量,交给 sni 继续按照域名进行 4层分流
map $ssl_preread_protocol $backend {
"" 127.0.0.1:7422;
default $sni_backend;
}

# 监听7422,拆掉 proxy_protocol 头,然后回落到 ssh 所在端口
server {
listen 127.0.0.1:7422 proxy_protocol;
proxy_pass 127.0.0.1:22;
}

# 根据域名进行 4 层分流
map $ssl_preread_server_name $sni_backend {
proxy.bravexist.cn 127.0.0.1:7444;
default 127.0.0.1:8443;
}

三、验证

1
ssh root@server_ip -p443