利用Nginx Stream模块把 ssh 藏在 443 端口

Stream 模块真是牛的不行, 直接放配置

 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
27
stream {
    map $ssl_preread_server_name $name {
        mydomain                xtls;
        www.mydomain            http;
        default    ssh;
    }
    # upstream pool
    upstream xtls {
        server localhost:8081;
    }
    upstream http {
        server localhost:8080;
    }
    upstream ssh {
        # 默认 ssh 连接会回落到 default , 然后到本机 22 端口
        server localhost:22;
        # 你甚至可以在这里挂个 openvpn ...
    }
    server {
        listen 443 reuseport;
        listen [::]443 reuseport;
        proxy_pass $name;
        # 这个开不开在你, 我反正没开, 因为就一个静态博客加微信公众号后台, 并不关心客户端 IP 的问题
        proxy_protocol on;
        ssl_preread on;
    }
}

这样做的好处显而易见: ssh 可以经过 443 端口接入, 所以防火墙可以直接屏蔽掉22端口, VPS 安全性又能上个台阶, 虽然有fail2ban护体但每天 auth.log 里一堆垃圾试探看着也是神烦

当然 由于工作在四层, 你可以有更多的玩法, 比如搭把梯子

# NOTE: I am not responsible for any expired content.
create@2022-03-13T13:36:29+08:00
update@2022-03-13T13:44:12+08:00
comment@https://github.com/ferstar/blog/issues/54
加载评论