作者:量力学
新人文章,请多多包含。
作为一个Nas的重度使用者, 个人对于数据安全性还是十分看重的。然而哪怕是白威联通或白群晖,一样会面临系统漏洞的风险,有可能使得数据被加密勒索。那么本文提供了一种设想方法,可能对于NAS的安全性有一定的提高作用。原理和使用方案如下:
目录
原理
威联通最近的重大漏洞是2021年4月的Qlocker勒索病毒。其利用了Hybrid Backup Sync绕过登录,获得系统权限并进行加密操作。可以说只要你把威联通的Web页面公开到公网,就会受到攻击的风险。越是复杂的系统,越容易因为疏忽而产生各式各样的漏洞,也就容易被攻击,而NAS本身复杂的功能也带来了极大的风险,包括群晖在内的各种NAS系统每年爆出的漏洞数目多达数十个,可以说是防不胜防。那么除了日常更新系统,修补漏洞,备份数据之外,能否有些其他的方案来保护NAS系统的安全呢?
1. 最直接的思路是用简单系统替换复杂系统。
因为NAS的网页端要提供大量的功能,因此其自然风险较高,所以用其他简单的协议来“包裹”网页端,自然能降低一定的风险。因而相对而言最安全的举措就是搭建VPN系统,通过VPN连接回NAS,这样暴露在公网上的就只有VPN服务了。各大VPN的代码安全性相对还是值得信赖的,而各个公司大型企业也正是利用这种方法为员工提供远程工作服务的。然而VPN部署起来较为不方便,尤其是临时在一台非常用电脑上操作时,还可能要安装客户端等等,安全单麻烦。
2. 另外一个思路就是让黑客不知道你是台NAS。
简而言之,张三家有一台威联通的NAS,也将Web页面公开到了公网上。但是黑客李四既不是威联通的官方人员,也不是联通的运行商,他怎么能够知道张三有NAS从而针对性的发动攻击呢?
答案就是:IPv4 全网扫描。IPv4 一共具有2^32()个地址,其中真正有效的更少,虽然看似数目庞大,但是在现在计算机以及基础网络来看,扫描这42亿个地址并不会花费多长时间。既然张三把Web公开到了公网上,那么扫描全网的李四肯定能够访问得到张三的IP,也就能发现他是一台有漏洞的机器。
所以如果你有ipv6网络的话,那么被扫描到的可能性就几乎没有了,2^128个地址空间,哪怕黑客的电脑冒烟了都找不到你的ip。但是ipv6还在推广中,很多公司内部还是没有v6地址,所以这种方案可行性也不高。那么我推荐另外一种投机取巧的方法,利用HTTPS协议(准确说是TLS)中的SNI扩展来“加密”连接。
SNI拓展又称服务器名称指示协议,即客户端在TLS协议握手的时候,告诉服务器他想要访问的是哪个域名。如果将ip地址比作你家(四合院)的大门地址,那么SNI就相当于东厢西厢前院后院。而我们正可以利用这个信息的不对等,来个黑客造成一定的麻烦。如果用户通过域名访问NAS的web页面,那么浏览器会自动的将域名放置在TLS中SNI部分,用这个信息去向服务器请求数据。而李四这一黑客则并不知道NAS的域名是多少,他只能直接访问ip地址,则他的连接请求不会携带域名信息。就此我们就可以区分正常的连接还是黑客连接,从而做出应对。
默认情况下,威联通之类的nas,对于不带域名直接访问ip地址的请求也是一视同仁,照常响应的。这也容易理解,毕竟NAS最常见的工作环境还是在内网,而内网往往就是直接通过ip地址来访问。所以我们需要搭建一个前端代理程序,检测外网发起的请求,如果发现不含域名的https连接,直接掐断,这样就能一定限度上组织黑客的攻击。当然,如果你的域名已经被泄露了,那该方案就没用了。
广告如何系统学习制造业的生产管理?×换句话说,这时候你的域名就相当于一个暗号,回答不上来你的服务器直接拒绝服务,甚至都不会返回给你任何网页数据,自然也就能够免疫扫描和部分攻击了。
实现
思路有了,实现的方案就有很多。可以利用工作在HTTPS层的Caddy程序,也可以利用工作在tls层的sniproxy程序,两种方案各有优劣,请大家自行选择。
HTTPS层 Caddy 方案
前置条件:
已经注册过域名,例如 example.com
DDNS动态解析配置完成
拥有自己的HTTPS证书文件,如 example.com.crt example.com.key
1. 在文件总管中创建一个名字叫做Caddyfile的文件,放置在某个文件夹下,如Public里,内容如下。
:10443 {
tls /root/cert.crt /root/cert.key
reverse_proxy :5001 {
header_up Host {upstream_hostport}
header_up X-Forwarded-Host {host}
transport http {
tls_insecure_skip_verify
}
}
}
:10443 {
abort
}
2. 上述Caddyfile文件的地址即为: /share/Public/Caddyfile 。将crt,key 证书也放在某一目录里,例如也放在Public中,则他们的地址为 /share/Public/example.com.crt 以及 /share/Public/example.com.key。
3. 打开Container Station,在创建中点击创建应用程序,输入以下内容,创建docker容器。
version: 3
services:
caddy:
image: caddy:2.4.6
network_mode: host
restart: always
volumes:
- /share/Public/Caddyfile:/etc/caddy/Caddyfile:ro
- /share/Public/example.com.crt:/root/cert.crt:ro
- /share/Public/example.com.key:/root/cert.key:ro
广告孩子要上初一了成绩不理想,如何提高成绩顺利跟上节奏?×4. 在路由器上关闭5000,5001的端口转发,打开10433的端口转发,将example.com域名指向你的公网IP。
测试从公网访问 :10433 和 ;>:10433 ,可以发现前者可访问,后者不可访问。
广告土巴兔-航空港装修_2022装修大全 ×此方案优点:可以启用HTTP/2加速访问,可以使用自己的域名和证书,访问记录中的IP地址信息不会丢失,可以配置lets encrypt 自动续签证书,等等。
此方案缺点:相对复杂,需要有自己的域名和证书,myQNAPcloud不兼容。
TLS层 Sniproxy 方案
该方案利用的转发程序是 dlundquist/sniproxy: Proxies incoming HTTP and TLS connections based on the hostname contained in the initial request of the TCP session. (github.com)
前置条件:
白威联通,myQNAPcloud 云服务正常工作,myQNAPcloud的证书正常,即通过 ;>.myqnapcloud.cn:5001 可以正常访问Web页面。
1. 打开Container Station,在创建中点击创建应用程序,输入以下内容(记得更改example.myqnapcloud.cn为你自己的),创建docker容器。
version: 3
services:
sniproxy:
image: austinchou0126/sniproxy
network_mode: host
restart: always
environment:
SNIPROXY_LISTEN0_PROTO: tls
SNIPROXY_LISTEN0_PORT: 10443
SNIPROXY_LISTEN0_FALLBACK: 127.0.0.2:0
SNIPROXY_TABLE0_SRC0: "^example.myqnapcloud.cn"
SNIPROXY_TABLE0_DEST0: 127.0.0.1:5001
2. 在路由器上关闭5000,5001的端口转发,打开10433的端口转发。
此方案优点:相对简单,无需自己的证书和域名,直接使用 myqnapcloud 的证书即可。
该方案的缺点:访问记录中的IP地址信息丢失。
总结及碎碎念
当然上述方案只是一个简易的探讨,能否真正的抵御黑客攻击还是未知数,真正的数据安全还是要靠3-2-1法则,多地备份容灾才是王道,哪怕用了NAS,备份也不可缺少。祝各位生活愉快,NAS能玩出花来。
如果此文反响不错的话,我可以发文详细讲讲docker-compose。说实话如果对Linux,Docker以及网络有着一定的基础,你会发现威联通的系统比群晖的可玩性高得多,当然配置的难度也大不少。所以威联通能送点啥给我不?虽然本文好像一直在吐槽它。