最近一直在琢磨 Nginx 与上游源服务器之前通讯及其安全的问题,想要实现的目标就是:第一,就是仅仅是授权的 nginx 才能做源服务器的代理。 第二,nginx 与源服务器之前通讯最好能实现加密传输,明文的 HTTP 协议容易被截取,密文的 HTTPS 特征也太明显容易被拦截。基于这些需求衍生除了下面的几个问题,望各位大佬解疑
stream { upstream bj { server bj.abc.com:8080; } server { listen 80; proxy_pass bj; } }
http { upstream bj { server bj.abc.com:8080; } server { listen 80; location / { proxy_pass http://bj; } } }
stream 和 http 都可以实现 HTTP 反向代理,那么这两种方式与上游源主机通讯的时候使用什么协议呢?是 TCP/UDP 还是是 HTTP 协议呢,或者说 stream 是使用 TCP ,http 使用的就是 http ?
如果上游的源服务器有证书双认证,nginx 能实现反向代理吗,就是 upstream 能配置客户端证书吗? nginx 与下游客户端双认证可有可无。
nginx 与上游源服务器通讯出了 http 模块使用 https 这种模式实现加密,那么还有其他什么方案吗?
除开配置系统级代理之外 stream 和 http 的 upstream 这里可以单独配置代理吗,比如 sockes/sockes5 等代理协议与上游服务器联系!
1
Judoon 2022-08-04 18:12:36 +08:00
1 、stream 就是 4 层,http 就是 7 层,接收和转发都是
2 、http 模块可以直接配置 proxy_ssl_certificate 等 3 、只有 tls/ssl ,其他加密可能要自己实现模块 4 、我觉得没有意义,你可以直接把你的中间代理配到 upstream 上(如果我没理解错你的意思的话) |
2
y830CAa5nink4rUQ 2022-08-04 18:30:52 +08:00
我理解你的情况大概是这样:
1. 要求加密并且不让嗅探者知道是什么协议 2. 并发不高的话 那么我给个很简单好用的方案: 使用 brook 做隧道。 大概是这样: 上游服务器运行一个 brook server nginx 服务器运行一个 brook client 数据流: 下游客户端 <---http/https 协议---> nginx <--- TCP 协议 ---> brook client <--- brook 专有协议 ---> brook server <--- http/https 协议 --->上游服务器 |
3
Aloento 2022-08-04 18:31:10 +08:00
我觉得 https 挺好的,已经很安全了,我自己的环境虽然用的是 socket 但是双方都有 TLS 加密
http 传输层就是 TCP 啊... 感觉你问这个问题意义不大 |
4
acbot OP |
5
acbot OP @DrX “要求加密并且不让嗅探者知道是什么协议” 对,就是这个意思,并且是不想让未授权的 IP 能直接访问源,只能访问 nginx 。
|
6
acbot OP @Aloento 如果 nginx 和源之间仅仅用 https 这种加密,第一 他不能鉴权(不开启证书双向认证的话) 第二 这个是常规协议,那么加密后虽然中间方不能解密但是可以通过 HTTPS 特征做拦截,这样通讯就无法完成了。
|
7
y830CAa5nink4rUQ 2022-08-04 19:34:58 +08:00
@acbot 你可以试试我的方案,源服务器不暴露任何公开端口,brook server 和 brook client 密码一致才能连上,保证其他人无法连接。
|
9
ik 2022-08-04 19:53:32 +08:00 via iPhone
4. nginx 不能直接实现, 但是可以配合其他软件来实现, 例如下面这个 gost(我徒手打的,不确定对不对),就是端口转发+前置代理,将 socks 服务上的 443 ,转发到本地 8443 端口, 源端口都没有直接暴露到公网上。
gost -L tcp://127.0.0.1:8443/127.0.0.1:443 -F socks5://user:pass@xxxxx |
10
ik 2022-08-04 19:58:54 +08:00 via iPhone
另外源 nginx 上加上 basic 认证,或者 allow ip 是不是也可以解决
|
13
westoy 2022-08-04 20:46:04 +08:00
你那些机器之间组个 VPN 不就行了么......
|
14
acbot OP @westoy 如果 nginx 本身就能实现需求不是更好,管理起来方便。VPN 这种应该就是最后的手段了,并且又要附带很多东西。
|
15
jiulang 2022-08-05 14:02:17 +08:00
给 nginx 写插件吧,只能这样才能为所欲为。话说插件我也不会写,让我来做的话,我就用 yarp
|