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

大家好,请问 反向代理 后,真实的服务器地址有必要 ssl 吗?

  •  
  •   frontEnd2020 · 2021-05-19 08:12:19 +08:00 · 5015 次点击
    这是一个创建于 1266 天前的主题,其中的信息可能已经有所发展或是发生改变。

    域名解析在 A 服务器,并且配置了 ssl,所有访问都是 https,

    然后 nginx 配置了反向代理到 B 服务器,B 是实际的服务器,存储了 前台 dist 文件夹、server.bundle.js 、数据库,

    假设 B 服务器上的文件需要保证安全(并配置了其他安全策略,如禁止 root 远程 ssh 、隐藏真实服务器 ip 和版本号),

    那么 有必要给 B 服务器单独配置域名 以及 ssl 吗?

    我主要的疑惑是:B 单独配置了域名以及 ssl 和 直接是 ip 的情况下,安全效果是一样的还是有差异?

    谢谢。

    29 条回复    2021-05-19 20:23:00 +08:00
    Tokin
        1
    Tokin  
       2021-05-19 08:21:14 +08:00 via iPhone
    理论上只有全 ssl 才安全,因为你不能保证 B 服务器是安全的,ssl 除了防止被监听,还一个比较重要的是防止被劫持。比如 a 访问 b 的过程中,被劫持加料,你 a 服务器的 ssl 也不安全了吧……
    iBugOne
        2
    iBugOne  
       2021-05-19 08:21:35 +08:00
    一般来说走公网最好配 SSL,当然可以是自签名的(毕竟你也不直接面向用户),只要你能维护好这个“私有 CA”。走内网的话,取决于内网的安全策略,可以配 SSL 也可以不配。
    Tokin
        3
    Tokin  
       2021-05-19 08:22:43 +08:00 via iPhone
    除非是 b 服务器是内网环境,a 代理成外网,这样一定程度上可以保证安全,如果 b 本身就可以外网访问,那就会存在隐患。
    gamexg
        4
    gamexg  
       2021-05-19 08:30:18 +08:00
    内网可以不加 ssl,公网需要加
    有过 http 回源被插广告的例子
    star7th
        5
    star7th  
       2021-05-19 08:44:33 +08:00
    内网不用。公网需要。就这么简单。
    alect
        6
    alect  
       2021-05-19 08:46:34 +08:00
    当然有必要,自签名即可。
    40EaE5uJO3Xt1VVa
        7
    40EaE5uJO3Xt1VVa  
       2021-05-19 08:47:03 +08:00
    没十分必要。 配置 ssl 是对外公开访问的,全世界都能看到你的网址,自然也会有人针对劫持。

    后端 B 也只有后端 A 访问,iptables 配置好仅允许后端 A 的 ip 访问就足够了
    yitingbai
        8
    yitingbai  
       2021-05-19 08:49:24 +08:00
    内网没必要加, SSL 会影响访问速度, 得不偿失
    frontEnd2020
        9
    frontEnd2020  
    OP
       2021-05-19 09:04:07 +08:00
    @Tokin 好的,明白,两个服务器都是公网。被劫持 这部分还不熟悉。
    ryd994
        10
    ryd994  
       2021-05-19 09:12:54 +08:00 via Android
    @yanzhiling2001 你不会以为不知道域名就没法劫持吧?
    就算不能劫持还不能偷看么?
    frontEnd2020
        11
    frontEnd2020  
    OP
       2021-05-19 09:14:07 +08:00
    @iBugOne 走公网,多谢提醒,我研究下 自签名。私有 CA 密钥文件 的维护还不熟悉,这两个存放在服务器上,其他 ssl 文件我全部移到本地。
    frontEnd2020
        12
    frontEnd2020  
    OP
       2021-05-19 09:18:00 +08:00
    @gamexg 多谢提醒,我是比较担心传输过程被做手脚。
    frontEnd2020
        13
    frontEnd2020  
    OP
       2021-05-19 09:23:47 +08:00
    @yanzhiling2001 好的,多谢提醒。 我是想把 A 配置成只有域名,没有其他文件, 然后将 前、后端的文件都配置到 B 服务器上,还不确定这样是否合适。
    lscho
        14
    lscho  
       2021-05-19 09:25:17 +08:00
    @yanzhiling2001 劫持大多数是 DNS 和运营商啊,不是针对某个域名劫持,而是全部。。。
    frontEnd2020
        15
    frontEnd2020  
    OP
       2021-05-19 09:30:08 +08:00
    @ryd994 走公网的话,有没有比较好的方案 能更安全的隐藏真实服务器的 ip ? 我目前的思路是 nginx 里配置 proxy .
    brader
        16
    brader  
       2021-05-19 09:34:33 +08:00
    a-b 是走的内网,看你自己考虑吧,不加的话,就是假设云服务商内网安全,管理安全,不会有内部人员截获、监听。看你自己怎么想
    gam2046
        17
    gam2046  
       2021-05-19 09:36:59 +08:00
    A 反代 B,如果 A 与 B 之间的链路是可以信任的(如完全可控的内网环境),就可以不走 SSL,以降低 CPU 使用率。
    如果 A 与 B 之间的链路不可信,那么 SSL 还是不建议省略掉,以避免由于 A->B 请求中可能出现的中间人,造成客户端请求 A 时的结果也不可信
    40EaE5uJO3Xt1VVa
        18
    40EaE5uJO3Xt1VVa  
       2021-05-19 10:01:14 +08:00
    @frontEnd2020 我就是这么干的,挺合适的。

    我主要是业务都放到了美国洛杉矶机房,用 cn2 的美西机器反代。


    后端 B 也只有后端 A 访问,iptables 配置好后端 B 仅允许后端 A 的 ip 访问就足够了。

    两个机器的通讯也没必要上加密自签证书之类的,后端 B 屏蔽除了后端 A 之外的全部访问。把安全重心放到后端 A 上。
    40EaE5uJO3Xt1VVa
        19
    40EaE5uJO3Xt1VVa  
       2021-05-19 10:02:52 +08:00
    我的后端 B 和后端 A 使用 frp stcp 模式组建的内网。frp 的 stcp 的流量已经加密用了自签证书了。
    ryd994
        20
    ryd994  
       2021-05-19 10:05:39 +08:00 via Android
    @gam2046 回源开长连接和 SSL session cache 。SSL 主要是握手开销大。连接建立以后用的是对称加密,开销不大。
    frontEnd2020
        21
    frontEnd2020  
    OP
       2021-05-19 10:20:56 +08:00
    @brader 好的,我得研究下内网方案。
    frontEnd2020
        22
    frontEnd2020  
    OP
       2021-05-19 10:22:29 +08:00
    @gam2046 明白,多谢提醒。
    frontEnd2020
        23
    frontEnd2020  
    OP
       2021-05-19 10:32:49 +08:00
    @yanzhiling2001 后端 B 屏蔽除了后端 A 之外的全部访问 -- 这个思路挺好的,我学习下。
    gam2046
        24
    gam2046  
       2021-05-19 11:05:57 +08:00
    @ryd994 #20 这个其实和具体业务有关,如果通讯量比较大的情况下,其实 SSL 还是很费 CPU 的。握手的开销更多是网络 IO 慢。当然啦,如果调用量不大,可以无脑上 SSL,绝大多数情况下,机器性能是过剩的。

    我以前做过一个中间件,内网调用也走的 HTTPS (调用频率比较高全天基本稳定在一个数值,没有低谷期),业务服务器 CPU 大量都被 nginx 占用了,后面找运维大哥说明一下情况,内网不再使用 HTTPS 后(同时为确保安全,只接受固定 IP 的请求),机器负载明显降低了。
    iBugOne
        25
    iBugOne  
       2021-05-19 11:31:25 +08:00
    如果两个机器有一边有公网地址的话,那么通过 WireGuard 建一个加密的端到端“内网”也是个不错的办法,只要两台机器都不被入侵,走 wg 内网也可以不用 SSL
    no1xsyzy
        26
    no1xsyzy  
       2021-05-19 12:24:39 +08:00
    @frontEnd2020 走公网可以 cloudflared,甚至不需要公网 IP (自带内网穿透
    daimaosix
        27
    daimaosix  
       2021-05-19 17:23:50 +08:00
    如果 AB 在同一内网下的话,可以不加,如果 AB 跨公网还是加上吧。
    frontEnd2020
        28
    frontEnd2020  
    OP
       2021-05-19 20:12:27 +08:00
    @iBugOne 好的,多谢,我简单了解了下,WireGuard 的原理是生成一个虚拟网卡,然后通过这个虚拟网卡通信,我学习下。
    frontEnd2020
        29
    frontEnd2020  
    OP
       2021-05-19 20:23:00 +08:00
    @no1xsyzy 好的哈,这方案挺有意思。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2942 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 14:50 · PVG 22:50 · LAX 06:50 · JFK 09:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.