内网服务器和 DMZ 服务器之间只开了一个端口,但是外网需要访问内网中的 mysql, redis 和 minio - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
badbay
V2EX    程序员

内网服务器和 DMZ 服务器之间只开了一个端口,但是外网需要访问内网中的 mysql, redis 和 minio

  •  
  •   badbay 21 天前 2674 次点击

    各位大佬,公司部署软件,要求 mysql ,redis ,minio 等存放数据的软件放在内网服务器上,Web 和 api 放在 DMZ 服务器上。原本我想的部署方案是 api 服务放在内网服务器,通过 DMZ 上部署 Nginx 转发访问 api 服务,这样就只需要一个端口。公司的领导说这样不安全,让把 api 放到 DMZ 服务器上,这样到内网的数据就多一层过滤,但是这样的话 api 访问内网的数据库,redis 和 minio 就需要三个端口,开端口的流程特别长,时间来不及,有其他的解决方案吗。

    43 条回复    2025-09-24 14:33:10 +08:00
    opengps
        1
    opengps  
       21 天前
    “外网访问内网中的 mysql ,redis 和 minio”这事本身就不靠谱,你确定真的需要开放端口?

    正常来说 mysql 类这种内网服务即使公网要用也是先拨入 vpn 再访问,而不是直接暴露公网端口。否则等于把危险请进来
    sagnitude
        2
    sagnitude  
       21 天前
    时间来不及是你的责任吗?要学会甩锅,问你进度你就说在跟进了,表格交上去了,目前在 XXX 审核阶段,需要 XXX 签字,需要领导帮忙
    LoNeZ
        3
    LoNeZ  
       21 天前
    SNI
    lolo1
        4
    lolo1  
       21 天前 via Android
    Haproxy 可以针对协议进行分流,你可以抓包看下 tcp 头部几个字节,然后分流打不同后端。测试过 mysql ,mstsc 等,minio 这种 web 服务,再用 nginx 分流
    potatowish
        5
    potatowish  
       21 天前 via iPhone
    那就是领导的问题,又考虑安全、又考虑进度,只能选一个,让他自己看着办
    caola
        6
    caola  
       21 天前
    内网服务器和 DMZ 服务器只有一个端口?那直接用 frp 吧,稳定性是不错的
    jiangzm
        7
    jiangzm  
       21 天前
    外网为什么要直接访问内网的 mysql,redis,minio?
    DMZ 服务器不应该是直接暴露给外网但自身又能访问内网的跳板机吗?

    还是你们 DMZ 服务器到内网还有一层网关吗
    hefish
        8
    hefish  
       21 天前
    问领导啊。以领导的意见为准。
    cheng6563
        9
    cheng6563  
       21 天前
    套 SSH 呗
    Ipsum
        10
    Ipsum  
       21 天前
    外网访问数据层,你不得上个 vpn 还安全点?
    jifengg
        11
    jifengg  
       21 天前
    我和 @jiangzm 有同样疑问。
    还是说,你们内网机器,listen 个端口也要走流程?
    badbay
        12
    badbay  
    OP
       21 天前
    @jifengg dmz 和内网之间有防火墙,开端口需要向总部打申请
    badbay
        13
    badbay  
    OP
       21 天前
    @jiangzm dmz 到内网有防火墙,开端口的话需要申请
    xuanbg
        14
    xuanbg  
       21 天前
    不是,外什么要在外网直接访问内网中的 mysql 、redis 和 minio 。就不能通过 VPN 先进内网嘛?
    badbay
        15
    badbay  
    OP
       21 天前
    @opengps 不是外网访问,是 DMZ 上的服务需要访问
    badbay
        16
    badbay  
    OP
       21 天前
    @zzh0410 大佬感觉这个可行 我去试试
    badbay
        17
    badbay  
    OP
       21 天前
    @caola 不让用内网穿透
    badbay
        18
    badbay  
    OP
       21 天前
    @xuanbg 是 DMZ 中的服务器访问内网
    julyclyde
        19
    julyclyde  
       21 天前
    你这属于架构设计问题啊,不是后期能打嘴仗解决的,而是前期就不该这么设计
    yinmin
        20
    yinmin  
       21 天前 via iPhone
    三楼正解。

    在内网部署 stunnel 软件将 mysql/redis/minio 的 tcp 转化成 tls ,然后通过 sni 聚合成 1 个端口,防火墙开放 stunnel 这个端口给 dmz 区,由于 mysql 、redis 、minio 的客户端都支持 tls ,所以可以通过不同的 sni 直连 stunnel tls 端口(也可以通过 stunnel 将 tls 还原成 tcp )。

    你也可以在 mysql 、redis 、minio 上部署 tls ,然后在内网部署 sni proxy 聚合成一个端口开放给 dmz 区。

    stunnel 、sniproxy 都是可以用在生产环境,在低并发(小于 500 并发)高带宽(千兆)下能长时间稳定运行。


    你可以将你的问题和我的答案发给 ai ,让 ai 详细说原理和实施步骤。
    zjyl1994
        21
    zjyl1994  
       21 天前
    这是公司的安全设计,你使用技术手段进行绕过,后续的不稳定,被黑都是你的问题。你应该走合规流程申请多开两个端口,时间长就找领导推进。这不是技术手段该解决的问题
    yinmin
        22
    yinmin  
       21 天前 via iPhone
    接#20 ,你也可以在内网部署 ssh 、socks5 之类,然后防火墙开放 ssh/socks5 端口给 dmz ,不过 ssh 、socks5 等于开放整个内网,安全性比较差,强烈不推荐。

    “通过 sni 聚合 3 个 tcp 端口”是最安全的方式,甚至比开放 3 个 tcp 端口更安全,因为 sni 名称天然就是一个密码锁。(看不懂可以发给 ai )
    badbay
        23
    badbay  
    OP
       21 天前
    @yinmin 谢谢佬 我去试试
    badbay
        24
    badbay  
    OP
       21 天前
    @julyclyde 我刚入职,不是我设计的
    badbay
        25
    badbay  
    OP
       21 天前
    @zjyl1994 我感觉也是,有点离谱
    iamwin
        26
    iamwin  
       21 天前
    用什么 DMZ 啊,直接在对外服务器上 VPN ,一切过 VPN 访问内网
    yinmin
        27
    yinmin  
       21 天前 via iPhone
    @badbay #23 如果临时用几天,最快最安全的方式是内网安装 stunnel server 将 3 路 tcp 聚合成 1 路 tls (根据 sni 区分),然后 dmz 区安装 stunnel client 将这路 tls 根据 sni 还原成 2 路 tcp ,你可以让 ai 写一下 stunnel 配置。
    daxin945
        28
    daxin945  
       21 天前
    这不是技术问题 是责任问题,出了事儿就麻烦了
    goodryb
        29
    goodryb  
       21 天前
    不要搞什么奇技淫巧,老板怎么说就怎么做,按照流程来, 端口该申请就申请,流程长就长,你着什么急
    julyclyde
        30
    julyclyde  
       21 天前
    @badbay 你刚入职,不是你设计的
    如果实施失败,那就是设计方的责任
    如果实施成功了然后被黑了,那就是变更方的责任
    你看着办吧
    tabliu
        31
    tabliu  
       21 天前
    用 openvpn 直接打通
    hahaha121
        32
    hahaha121  
       21 天前
    easytier 直接打通内网
    kiracyan
        33
    kiracyan  
       21 天前
    这几个理论上不允许外网访问的吧 最多 vpn 访问
    moioooo
        34
    moioooo  
       20 天前 via iPhone
    对外服务放 dmz ,你领导说的没问题呀。
    一劳永逸的事。另外再加个 waf 吧
    snoopygao
        35
    snoopygao  
       20 天前
    得有安全意识啊,这种情境用 vpn 或零信任,其他都是高风险扯淡
    badbay
        36
    badbay  
    OP
       20 天前
    @yinmin #20 最后利用 stunnel 解决了,在 dmz 部署 stunnel client ,在内网部署 stunnel server 。为每个应用客户端配置一个 stunnel client ,每个 client 配置不同的 sni name 。server 端根据 sni name 转发到不同的应用服务上就 ok 。另外,sni 到 ip 的映射我是手动添加在 hosts 文件中的
    yinmin
        37
    yinmin  
       20 天前 via iPhone
    @badbay #36 喜欢折腾(专研)的话,可以试试:
    ( 1 )去掉 stunnel client ,应用程序直连 stunnel server 加密后的 mysql/redis/minio tls 端口;
    ( 2 )将 stunnel server 改成 nginx (用 stream 配置)

    将( 1 )( 2 )折腾好了,基本上可以应对公司内部网管的质疑了,因为这个新方案更具安全性,nginx 是公认的、可靠的、基于网络 7 层的负载均衡器,而且启用了 sni 鉴证、tls 加密,更安全,没什么可以质疑的。
    ysc3839
        38
    ysc3839  
       20 天前 via Android
    用 WireGuard 等 VPN 连接就好了,只需要一个端口。
    ysc3839
        39
    ysc3839  
       20 天前 via Android
    @yinmin 个人认为最快的方案是直接用 VPN ,不需要单独配置端口,VPN 方案的安全性一般也比手动配置 TLS 好。
    如果担心 VPN 能访问到其他端口,也可以配合 firewalld 等防火墙进行拦截。
    badbay
        40
    badbay  
    OP
       17 天前
    @ysc3839 #39 stunnel 也支持身份验证,从访问控制和传输上来说和 vpn 差不多吧。公司在 dmz 和内网服务器之间有防火墙,使用 vpn 的话所有的端口都能绕过这个防火墙了,安全性更差?
    badbay
        41
    badbay  
    OP
       17 天前
    @yinmin #37 ( 1 )我最开始是了一下应用程序直连,证书配置这一块没调好,是不是 stunnelserver 和 mysql 服务应该使用同一个证书啊?
    ( 2 ) nginx 的 tcp 代理只能做到端口的区分,如果都使用同一个端口的话,无法分流出不同应用数据包。
    yinmin
        42
    yinmin  
       17 天前 via iPhone
    @badbay #41
    ( 1 )的答复:mysql server 不安装证书(不启用 tls ),而是用 stunnel server 将 mysql 明文 3306 端口进行 tls 加密,mysql client 启用 tls 直连 stunnel server

    ( 2 )的回复:nginx 根据 sni 分流 tls 。先使用 nginx 将 mysql tcp3306 转化成 tls 加密端口 或者 启用 mysql 的 tls 端口,然后使用 nginx 的 stream 模块能根据 sni 分流到对应的 tls 端口
    badbay
        43
    badbay  
    OP
       15 天前
    @yinmin #41 感谢大佬指点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     903 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 20:19 PVG 04:19 LAX 13:19 JFK 16:19
    Do have faith in what you're doing.
    ubao 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