域名解析在 A 服务器,并且配置了 ssl,所有访问都是 https,
然后 nginx 配置了反向代理到 B 服务器,B 是实际的服务器,存储了 前台 dist 文件夹、server.bundle.js 、数据库,
假设 B 服务器上的文件需要保证安全(并配置了其他安全策略,如禁止 root 远程 ssh 、隐藏真实服务器 ip 和版本号),
那么 有必要给 B 服务器单独配置域名 以及 ssl 吗?
我主要的疑惑是:B 单独配置了域名以及 ssl 和 直接是 ip 的情况下,安全效果是一样的还是有差异?
谢谢。
1
Tokin 2021-05-19 08:21:14 +08:00 via iPhone
理论上只有全 ssl 才安全,因为你不能保证 B 服务器是安全的,ssl 除了防止被监听,还一个比较重要的是防止被劫持。比如 a 访问 b 的过程中,被劫持加料,你 a 服务器的 ssl 也不安全了吧……
|
2
iBugOne 2021-05-19 08:21:35 +08:00
一般来说走公网最好配 SSL,当然可以是自签名的(毕竟你也不直接面向用户),只要你能维护好这个“私有 CA”。走内网的话,取决于内网的安全策略,可以配 SSL 也可以不配。
|
3
Tokin 2021-05-19 08:22:43 +08:00 via iPhone
除非是 b 服务器是内网环境,a 代理成外网,这样一定程度上可以保证安全,如果 b 本身就可以外网访问,那就会存在隐患。
|
4
gamexg 2021-05-19 08:30:18 +08:00
内网可以不加 ssl,公网需要加
有过 http 回源被插广告的例子 |
5
star7th 2021-05-19 08:44:33 +08:00
内网不用。公网需要。就这么简单。
|
6
alect 2021-05-19 08:46:34 +08:00
当然有必要,自签名即可。
|
7
40EaE5uJO3Xt1VVa 2021-05-19 08:47:03 +08:00
没十分必要。 配置 ssl 是对外公开访问的,全世界都能看到你的网址,自然也会有人针对劫持。
后端 B 也只有后端 A 访问,iptables 配置好仅允许后端 A 的 ip 访问就足够了 |
8
yitingbai 2021-05-19 08:49:24 +08:00
内网没必要加, SSL 会影响访问速度, 得不偿失
|
9
frontEnd2020 OP @Tokin 好的,明白,两个服务器都是公网。被劫持 这部分还不熟悉。
|
10
ryd994 2021-05-19 09:12:54 +08:00 via Android
@yanzhiling2001 你不会以为不知道域名就没法劫持吧?
就算不能劫持还不能偷看么? |
11
frontEnd2020 OP @iBugOne 走公网,多谢提醒,我研究下 自签名。私有 CA 密钥文件 的维护还不熟悉,这两个存放在服务器上,其他 ssl 文件我全部移到本地。
|
12
frontEnd2020 OP @gamexg 多谢提醒,我是比较担心传输过程被做手脚。
|
13
frontEnd2020 OP @yanzhiling2001 好的,多谢提醒。 我是想把 A 配置成只有域名,没有其他文件, 然后将 前、后端的文件都配置到 B 服务器上,还不确定这样是否合适。
|
14
lscho 2021-05-19 09:25:17 +08:00
@yanzhiling2001 劫持大多数是 DNS 和运营商啊,不是针对某个域名劫持,而是全部。。。
|
15
frontEnd2020 OP @ryd994 走公网的话,有没有比较好的方案 能更安全的隐藏真实服务器的 ip ? 我目前的思路是 nginx 里配置 proxy .
|
16
brader 2021-05-19 09:34:33 +08:00
a-b 是走的内网,看你自己考虑吧,不加的话,就是假设云服务商内网安全,管理安全,不会有内部人员截获、监听。看你自己怎么想
|
17
gam2046 2021-05-19 09:36:59 +08:00
A 反代 B,如果 A 与 B 之间的链路是可以信任的(如完全可控的内网环境),就可以不走 SSL,以降低 CPU 使用率。
如果 A 与 B 之间的链路不可信,那么 SSL 还是不建议省略掉,以避免由于 A->B 请求中可能出现的中间人,造成客户端请求 A 时的结果也不可信 |
18
40EaE5uJO3Xt1VVa 2021-05-19 10:01:14 +08:00
@frontEnd2020 我就是这么干的,挺合适的。
我主要是业务都放到了美国洛杉矶机房,用 cn2 的美西机器反代。 后端 B 也只有后端 A 访问,iptables 配置好后端 B 仅允许后端 A 的 ip 访问就足够了。 两个机器的通讯也没必要上加密自签证书之类的,后端 B 屏蔽除了后端 A 之外的全部访问。把安全重心放到后端 A 上。 |
19
40EaE5uJO3Xt1VVa 2021-05-19 10:02:52 +08:00
我的后端 B 和后端 A 使用 frp stcp 模式组建的内网。frp 的 stcp 的流量已经加密用了自签证书了。
|
20
ryd994 2021-05-19 10:05:39 +08:00 via Android
@gam2046 回源开长连接和 SSL session cache 。SSL 主要是握手开销大。连接建立以后用的是对称加密,开销不大。
|
21
frontEnd2020 OP @brader 好的,我得研究下内网方案。
|
22
frontEnd2020 OP @gam2046 明白,多谢提醒。
|
23
frontEnd2020 OP @yanzhiling2001 后端 B 屏蔽除了后端 A 之外的全部访问 -- 这个思路挺好的,我学习下。
|
24
gam2046 2021-05-19 11:05:57 +08:00
@ryd994 #20 这个其实和具体业务有关,如果通讯量比较大的情况下,其实 SSL 还是很费 CPU 的。握手的开销更多是网络 IO 慢。当然啦,如果调用量不大,可以无脑上 SSL,绝大多数情况下,机器性能是过剩的。
我以前做过一个中间件,内网调用也走的 HTTPS (调用频率比较高全天基本稳定在一个数值,没有低谷期),业务服务器 CPU 大量都被 nginx 占用了,后面找运维大哥说明一下情况,内网不再使用 HTTPS 后(同时为确保安全,只接受固定 IP 的请求),机器负载明显降低了。 |
25
iBugOne 2021-05-19 11:31:25 +08:00
如果两个机器有一边有公网地址的话,那么通过 WireGuard 建一个加密的端到端“内网”也是个不错的办法,只要两台机器都不被入侵,走 wg 内网也可以不用 SSL
|
26
no1xsyzy 2021-05-19 12:24:39 +08:00
@frontEnd2020 走公网可以 cloudflared,甚至不需要公网 IP (自带内网穿透
|
27
daimaosix 2021-05-19 17:23:50 +08:00
如果 AB 在同一内网下的话,可以不加,如果 AB 跨公网还是加上吧。
|
28
frontEnd2020 OP @iBugOne 好的,多谢,我简单了解了下,WireGuard 的原理是生成一个虚拟网卡,然后通过这个虚拟网卡通信,我学习下。
|
29
frontEnd2020 OP @no1xsyzy 好的哈,这方案挺有意思。
|