在 nginx 的同一个端口上运行多个协议

2018 年 4 月 13 日
 fffonion

https://github.com/fffonion/lua-resty-multiplexer

实现了一个端口服务复用的透明代理,可以在同一个端口上运行多个协议。根据每次连接中客户端发起的首个请求检测协议,根据协议或各种条件选择代理的上游。

需要打一个补丁。由@fcicq这个讨论中贡献。这个补丁实现了 BSD 的 socket recv()语义。目前官方也有这个 feature 的PR

欢迎讨论和拍砖: )

说明

8709 次点击
所在节点    NGINX
21 条回复
fffonion
2018 年 4 月 13 日
测试 ip
```shell
curl https://104.140.14.46:19999 -H "host:www.google.com" -k
curl 104.140.14.46:19999
ssh 104.140.14.46 -p19999 -v
dig www.google.com +tcp @104.140.14.46 -p19999
```
fffonion
2018 年 4 月 13 日
做这个的目的是想要骗过一些主动探测的机制( https://ensa.fi/active-probing/imc2015.pdf ),但是如果某 IDS 用重放的方法来检测协议的话,所有特征都是一样的。所以这个模块可以让你根据时间来选择不同的行为,比如奇数分钟选择 tls 协议后端,偶数分钟选择 http 协议后端。
jinhan13789991
2018 年 4 月 13 日
顶一下,虽然看不懂。但是感觉很高达上的样子。
BOYPT
2018 年 4 月 13 日
有用,其实 nginx 自己能检测到 http 发了到 https 端口,也有提示的,但是没留出 api 可配置而已。
jeffson
2018 年 4 月 13 日
Mark
est
2018 年 4 月 13 日
@fffonion IDS 重放跟你的做法应该是一样的,是根据首个包进行 per connection 分析的。

没有理由相信重放一次,就标记为该端口以后一直是这个协议了。。。。
qnnnnez
2018 年 4 月 13 日
peek?
lieh222
2018 年 4 月 13 日
ssh 不是服务端先发消息的吗。。
lfzyx
2018 年 4 月 13 日
然后用这个反向代理 ss?
Tokin
2018 年 4 月 13 日
我第一个想到的就是反代。。。A 端口代理 B 端口,这样用户访问的时候完全感受不到 B 端口。
lbp0200
2018 年 4 月 13 日
chairuosen
2018 年 4 月 13 日
我有一个大胆的想法
wxl1380610
2018 年 4 月 13 日
mark
frostnotfall
2018 年 4 月 13 日
Mark
wildcat007
2018 年 4 月 13 日
@chairuosen 收起你的大胆想法~其实我也有个大胆想法··
hard2reg
2018 年 4 月 13 日
不就是这个吗? https://doub.io/ss-jc48/
fffonion
2018 年 4 月 14 日
@est 检测到了会封一段时间,如果是 tls 检测到了证书可能是无期
fffonion
2018 年 4 月 14 日
@lieh222 这个取决于客户端的实现
fffonion
2018 年 4 月 14 日
@lbp0200 我也是看到这个之后做的,希望能实现一个更加简单好用的框架
xseven007
2018 年 6 月 5 日
如果能够实现 sni 就好啦

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/446531

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX