V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
fffonion
V2EX  ›  NGINX

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

  •  
  •   fffonion ·
    fffonion · 2018-04-13 13:44:56 +08:00 · 7399 次点击
    这是一个创建于 2176 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    欢迎讨论和拍砖: )

    说明

    • 理论上只能实现识别连接建立后客户端先发送请求的协议,目前实现了 http, ssh, dns, tls, xmpp。不兼容服务端先发送响应的协议。
    • 如果实现了 ngx.reqsock.peak(),则可以使用 ngx_stream_proxy 来转发流量,这样的话除了首个请求以外同一连接的后续请求将没有额外的性能损失;目前只能在 Lua 层转发。对于peak 的实现也欢迎讨论。
    21 条回复    2021-10-27 14:17:08 +08:00
    fffonion
        1
    fffonion  
    OP
       2018-04-13 13:45:11 +08:00
    测试 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
        2
    fffonion  
    OP
       2018-04-13 13:59:16 +08:00
    做这个的目的是想要骗过一些主动探测的机制( https://ensa.fi/active-probing/imc2015.pdf ),但是如果某 IDS 用重放的方法来检测协议的话,所有特征都是一样的。所以这个模块可以让你根据时间来选择不同的行为,比如奇数分钟选择 tls 协议后端,偶数分钟选择 http 协议后端。
    jinhan13789991
        3
    jinhan13789991  
       2018-04-13 13:59:32 +08:00
    顶一下,虽然看不懂。但是感觉很高达上的样子。
    BOYPT
        4
    BOYPT  
       2018-04-13 14:01:18 +08:00   ❤️ 1
    有用,其实 nginx 自己能检测到 http 发了到 https 端口,也有提示的,但是没留出 api 可配置而已。
    jeffson
        5
    jeffson  
       2018-04-13 14:23:56 +08:00
    Mark
    est
        6
    est  
       2018-04-13 14:28:22 +08:00
    @fffonion IDS 重放跟你的做法应该是一样的,是根据首个包进行 per connection 分析的。

    没有理由相信重放一次,就标记为该端口以后一直是这个协议了。。。。
    qnnnnez
        7
    qnnnnez  
       2018-04-13 14:30:25 +08:00 via Android
    peek?
    lieh222
        8
    lieh222  
       2018-04-13 14:59:47 +08:00
    ssh 不是服务端先发消息的吗。。
    lfzyx
        9
    lfzyx  
       2018-04-13 15:31:00 +08:00
    然后用这个反向代理 ss?
    Tokin
        10
    Tokin  
       2018-04-13 15:46:59 +08:00
    我第一个想到的就是反代。。。A 端口代理 B 端口,这样用户访问的时候完全感受不到 B 端口。
    chairuosen
        12
    chairuosen  
       2018-04-13 15:48:19 +08:00
    我有一个大胆的想法
    wxl1380610
        13
    wxl1380610  
       2018-04-13 16:34:23 +08:00
    mark
    frostnotfall
        14
    frostnotfall  
       2018-04-13 16:50:20 +08:00
    Mark
    wildcat007
        15
    wildcat007  
       2018-04-13 17:16:25 +08:00
    @chairuosen 收起你的大胆想法~其实我也有个大胆想法··
    hard2reg
        16
    hard2reg  
       2018-04-13 17:26:52 +08:00
    不就是这个吗? https://doub.io/ss-jc48/
    fffonion
        17
    fffonion  
    OP
       2018-04-14 00:19:28 +08:00 via iPhone
    @est 检测到了会封一段时间,如果是 tls 检测到了证书可能是无期
    fffonion
        18
    fffonion  
    OP
       2018-04-14 00:21:09 +08:00 via iPhone
    @lieh222 这个取决于客户端的实现
    fffonion
        19
    fffonion  
    OP
       2018-04-14 00:23:55 +08:00 via iPhone
    @lbp0200 我也是看到这个之后做的,希望能实现一个更加简单好用的框架
    xseven007
        20
    xseven007  
       2018-06-05 15:13:39 +08:00
    如果能够实现 sni 就好啦
    godblessumilk
        21
    godblessumilk  
       2021-10-27 14:17:08 +08:00
    我有个大胆的想法,内网穿透一下下
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   960 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:19 · PVG 05:19 · LAX 14:19 · JFK 17:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.