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

“外网访问内网中的 mysql ,redis 和 minio”这事本身就不靠谱,你确定真的需要开放端口?

正常来说 mysql 类这种内网服务即使公网要用也是先拨入 vpn 再访问,而不是直接暴露公网端口。否则等于把危险请进来

时间来不及是你的责任吗?要学会甩锅,问你进度你就说在跟进了,表格交上去了,目前在 XXX 审核阶段,需要 XXX 签字,需要领导帮忙

SNI

Haproxy 可以针对协议进行分流,你可以抓包看下 tcp 头部几个字节,然后分流打不同后端。测试过 mysql ,mstsc 等,minio 这种 web 服务,再用 nginx 分流

那就是领导的问题,又考虑安全、又考虑进度,只能选一个,让他自己看着办

内网服务器和 DMZ 服务器只有一个端口?那直接用 frp 吧,稳定性是不错的

外网为什么要直接访问内网的 mysql,redis,minio?
DMZ 服务器不应该是直接暴露给外网但自身又能访问内网的跳板机吗?

还是你们 DMZ 服务器到内网还有一层网关吗

问领导啊。以领导的意见为准。

套 SSH 呗

外网访问数据层,你不得上个 vpn 还安全点?

我和 有同样疑问。
还是说,你们内网机器,listen 个端口也要走流程?

dmz 和内网之间有防火墙,开端口需要向总部打申请

dmz 到内网有防火墙,开端口的话需要申请

不是,外什么要在外网直接访问内网中的 mysql 、redis 和 minio 。就不能通过 VPN 先进内网嘛?

不是外网访问,是 DMZ 上的服务需要访问

大佬感觉这个可行 我去试试

不让用内网穿透

是 DMZ 中的服务器访问内网

你这属于架构设计问题啊,不是后期能打嘴仗解决的,而是前期就不该这么设计

三楼正解。

在内网部署 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 详细说原理和实施步骤。

这是公司的安全设计,你使用技术手段进行绕过,后续的不稳定,被黑都是你的问题。你应该走合规流程申请多开两个端口,时间长就找领导推进。这不是技术手段该解决的问题

接#20 ,你也可以在内网部署 ssh 、socks5 之类,然后防火墙开放 ssh/socks5 端口给 dmz ,不过 ssh 、socks5 等于开放整个内网,安全性比较差,强烈不推荐。

“通过 sni 聚合 3 个 tcp 端口”是最安全的方式,甚至比开放 3 个 tcp 端口更安全,因为 sni 名称天然就是一个密码锁。(看不懂可以发给 ai )

谢谢佬 我去试试

我刚入职,不是我设计的

我感觉也是,有点离谱

用什么 DMZ 啊,直接在对外服务器上 VPN ,一切过 VPN 访问内网

#23 如果临时用几天,最快最安全的方式是内网安装 stunnel server 将 3 路 tcp 聚合成 1 路 tls (根据 sni 区分),然后 dmz 区安装 stunnel client 将这路 tls 根据 sni 还原成 2 路 tcp ,你可以让 ai 写一下 stunnel 配置。

这不是技术问题 是责任问题,出了事儿就麻烦了