在 nginx 的同一个端口上运行多个协议 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fffonion
V2EX    NGINX

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

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

    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     Solana     899 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 21:51 PVG 05:51 LAX 14:51 JFK 17:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86