前期准备条件:
- 有一个域名(对外提供访问服务)
- 有一个公网IP,固定公网IP或者动态公网IP都行
- 拨号路由器支持端口映射
- 路由器或者NAS能够设置免费的DDNS动态域名解析
- 利用Cloudflare隐藏NAS
前期分析说明
把NAS直接暴露到公网的危险性
没有任何防护的设备暴露到公网是非常危险的,将会面临来自互联网的威胁,其中包括DDOS攻击、黑客入侵、暴力破解等不限于以上手段的任何威胁。
但是有时候我们的NAS往往又需要在公网提供服务,此时我们又该如何给NAS增加一层安全防护呢?
防火墙安全防护
虽然NAS有防火墙功能,但是我认为NAS的防火墙不够强大到足以面对来自互联网的恶意请求,特别是类似DDOS类的攻击。
现在所有的公有云都有专门的安全防火墙系统来保护后端服务器,但我们明显没有这种能力来为NAS部署专门的防火墙系统,这不仅费用非常昂贵,还增加了维护难度和维护成本。
那么如何在低成本情况下保护NAS在互联网的安全呢?
内网穿透(NAS不需要公网IP)
现在互联网公有云都有专门的防火墙来给服务器提供一定程度上的安全防护,我们可以租用一台公网服务器来做中转服务,所有的流量仅通过公网服务器,再由公网服务器转发到我们的NAS。
此方案的可以有效利用云平台提供的防火墙功能来对服务进行一定的防护,但是我们还是需要维护中转服务器的部分安全问题,以及要支付租用云服务器的费用和带宽费用,实际上也存在一定量的成本。
那么有没有成本更低的方案呢?
借助群晖 QuickConnect 提供的服务
群晖自带了一个免费的 QuickConnect 服务,但是此服务只能访问我们的 NAS 管理端口(默认5000/5001),无法访问我们的 WebStation 服务端口。
这种方案可以说毫无成本,但是功能有限,无法转发到其他的端口。
隐藏在 Cloudflare 背后(NAS需要公网IP)
我们可以利用 Cloudflare 平台来保护我们的NAS服务。
使用 Cloudflare 来负责我们对外域名的解析服务,然后设置CNAME记录解析到DDNS域名上,这样当我们访问对外域名时,Cloudflare 服务会把请求转发到我们的DDNS域名上,从而把请求转发到NAS上。
虽然说我们的NAS是暴露在了公网,但是用户并不是直接访问NAS,而是访问了Cloudflare服务器,由Cloudflare提供中转,此时NAS对用户是不可见的,在茫茫的互联网中,很难找到隐藏在Cloudflare背后的具体服务器,因此这种方式相对来说是比较安全的。
操作
设备清单
路由器:TL-R489GP-AC
动态DNS域名:houkunlin.tpddns.cn
对外域名:doomsday.city
NAS:群晖D920+
公网IP:使用公网IP请咨询自己宽带运营商
NAS 局域网IP:192.168.0.5
NAS WebStation HTTP 内网端口:80
NAS WebStation HTTPs 内网端口:443
NAS WebStation HTTP 公网端口:2095
NAS WebStation HTTPs 公网端口:2096
网络结构图:
DDNS动态域名解析配置
以下二选一即可
路由器配置DDNS
在路由器的【高级功能】》【动态DNS】功能下管理动态DNS信息,以下是我的配置截图:
群晖NAS设置DDNS
在NAS的【控制面板】》【外部访问】》【DDNS】功能下管理动态DNS信息,NAS提供的DDNS功能更丰富,可以有更多的选择性。
配置端口映射
端口映射功能主要把公网的端口与NAS的端口关联起来,访问这个IP的公网端口时就相当于访问NAS的某个端口。
如果我们的公网IP没有80/443端口的权限,则需要映射2095和2096端口到内网的NAS上,可参考 Cloudflare网络端口
映射关系表如下:
公网端口 | 局域网端口 | 局域网IP |
---|---|---|
2095 | 80 | 192.168.0.5 |
2096 | 443 | 192.168.0.5 |
80 | 80 | 192.168.0.5 |
443 | 443 | 192.168.0.5 |
可能由于我们的公网IP限制,公网的80/443可能会无法访问
路由器设置
仅在使用路由器拨号的场景有效。
在路由器的【高级功能】》【虚拟服务器】功能中可以管理路由器的端口映射关系,
在这里我们需要按照前面的表内容添加两条配置记录(2095/2096)。
Cloudflare 配置
绑定对外域名
登录 Cloudflare 后在【网站】功能页面增加一个网站:
然后把我们的对外域名填写上去:
填写上去后需要去我们的域名原来的注册商的管理平台更改DNS解析服务器为 Cloudflare 提供的服务器:
等待 Cloudflare 验证成功后就可以在 Cloudflare 上管理我们的域名了:
配置CNAME解析
进入到我们的域名管理页面中,在左侧的【DNS】》【记录】中管理域名的DNS记录信息,在此添加一条DNS记录:
在这里测试中我把 test 的 CNAME 值配置成 houkunlin.tpddns.cn 域名,下表举例几个访问关系:
可能由于公网IP端口限制原因,80/443端口无法访问,此时仅有 http://test.doomsday.city:2095
和 https://test.doomsday.city:2096
正常,但是我们往往很难记住端口,那么我们可以使用页面规则把 http://test.doomsday.city:80
和 https://test.doomsday.city:443
自动重定向到 2095/2096 端口,虽然实际依旧是访问了 2095/2096 端口,但是我们可以不用记住它,由 Cloudflare 自动跳转,当某一天端口号变动的时候,只需要修改配置就行了。
配置页面规则
进入到我们的域名管理页面中,在左侧的【规则】》【页面规则】中管理域名的页面规则配置,在这里我们需要新增两条配置:
第一条记录:把 test.doomsday.city:80/*
重定向到 https://test.doomsday.city:2096/$1
第二条记录:把 test.doomsday.city:443/*
重定向到 https://test.doomsday.city:2096/$1