IPV6网络下建立安全的家庭服务器[NAS]

先看成果,不捆绑动态域名,换用电子邮件进行解析的情况下,直接使用手机4g网络[ipv6]访问家庭服务器的实际效果,在这种模式下,服务器地址随便填写,客户端app会自动更新同步服务器地址,避免了家庭服务器ipv6地址因为动态域名而泄漏的问题

手机直接访问家庭ipv6服务器

[1] IPV6网络的开通

IPV6目前在国内已经在普及,国际出口带宽目前已经用到了80%左右,即将扩容,也许您的宽带还没有ipv6功能,很多运营商默认并不给你开通IPV6网络,而是只提供IPV4,建议你参考这篇文章要求运营商给你开通ipv6.

[2] IPV6网络和ipv4的区别

IPV6和IPV4是有天大的区别,在ipv4环境下,一般一条宽带只给你分配一个ipv4地址,类似67.122.3.184,运气好给你个公网地址,运气不好,给你个保留地址(多人共享一个ip然后NAT),然后您家里的所有设备都要依赖这唯一的ipv4地址上网,那明显不够用啊,一个设备必须要有个ip地址,解决办法就是路由器[网关]给你家的所有设备分配个内网地址,类似192.168.1.2,然后当你要访问公网的时候,路由器通过NAT地址转换功能,帮你把内部地址转换成路由器的公网地址,然后转发. 这里也许你要问了,那我要架设家庭服务器,类似NAS,同时要外部能访问,是怎么做到的? 这里有两种情况,一种是你获得了公网ipv4地址,那么你只需要在路由器端做个动态域名[DDNS],路由器会动态映射你的ipv4地址到动态域名,你只需要在路由器里,设置你服务器的网络地址开启DMZ模式就可以,或者通过端口映射模式也可以.这种模式的动态域名好处是访问很方便,直接写个域名就可以访问,但是这种模式下,由于你捆绑了动态域名,因此只要这个动态域名被别人知道,那么别人就可以知道你家服务器的ipv4地址,并尝试进行攻击.另一种是你没有获得公网ipv4地址,给了你一个保留地址,这时候你映射动态域名,其实外部是无法直接访问的,但是有些NAS硬件厂商,想了一个变通的方法,就是采用frp反向穿透,说穿了,其实就是厂商在公网架了个服务器,外部访问域名的时候其实访问的是公网服务器,然后你的NAS也连接到公网服务器,双方依赖公网服务器在完成访问,这个技术最大的缺点就是,需要厂商掏钱租服务器,分配给每个用户的带宽是非常少的,偶尔传个小文件可以,但是你想在线看视频,基本要卡的想跳楼.

大隐隐于市,在ipv6环境下,一般一条宽带直接给你一个前缀,目前国内基本是64位前缀,而后面的64位后缀,则由你自己自己决定如何配置,例如 240e:3f01:283b,dd3c:5890:ef33:0:3b8d,有多少个地址可以随意分配呢?大约是1600亿亿个,你没有看错,是1600亿亿个,你要知道,整个ipv4网络的全世界有效地址不到40亿个,所以如果你获得了公网ipv4地址直接做服务器,你会整天发现各种漏洞扫描包,防火墙一直在警告;而到了ipv6环境,由于可以分配的地址太多,你可以在1600亿亿个地址中随意分配其中一个,然后这个地址大约每3天会变化一次[前缀租用到期,重新分配,在stateless模式下,整个ipv6地址都将重新分配],因此,在ipv4下常见的扫描,在ipv6下几乎全部无效,因为你要扫描攻击首先要知道服务器地址,在ipv6下,你算算扫描 1600亿亿个ip地址要多少时间?你要享受这个安全特性,并不是说你直接上ipv6就可以,必须在ipv6网关里设置,ipv6地址分配为stateless,中文名大概是无状态,这样将使用整个后缀由设备自动分配,而如果设置为stateful,这个就类似于ipv4的dhcp服务,由路由器产生一个地址池,所有ipv6地址从这个池里进行分配,在这种模式下,由于地址池一般都只是一个子网段,数量少[例如只有3万个],这种模式下ipv6地址会出现规律,遇到懂行的可以针对性对子网段进行有效的子段扫描,被扫描到的概率很大.ipv6非服务器环境下,采用了临时ipv6地址和长期ipv6地址,什么区别呢,临时ipv6地址,是你访问外网的时候使用的,外部其他人是无法连进来的,并且有效时间比较短,可以有效防止追踪,而长期ipv6地址,则默认不用来访问外部,一般用来部署服务,让外部用户连进来进行访问,有效期比较长,这和之前的ipv4是完全不同的,ipv6更加隐蔽和安全,最大的安全是什么?就是别人无法知道你的ipv6地址.

总结: ipv4只给你家一个网络地址,而ipv6网络则给你家提供约1600亿亿个公网地址随意分配,海量随意分配的ipv6地址是你最大的安全保障,隐藏你家的服务器ipv6地址,是最安全的做法;在ipv4下,你可以在路由器上开通唯一的ddns动态域名,但是在ipv6下,如果要开通动态域名,必须在每个设备上开通而不能在路由器上开通.

[3] 使用动态IPV6架设家庭服务器[NAS]的软件安全问题

动态IP和静态IP架设服务器面临的安全问题是完全不同的,由于静态IP地址始终固定,可以通过TLS证书确保你要连接的服务器就是你想要的正确服务器的IP地址,缺点是服务器地址直接暴露在公网上,因此会面临各种攻击,必须做好安全防护. 而使用动态IPV6地址架设家庭服务器则完全不同,在使用动态IPV6的前提下,完全没有办法对服务器的IP地址通过申请TLS证书进行保护,什么意思呢,例如,你家服务器地址是240e:8888:8888::12,但是当你使用手机或者电脑尝试连接240e:8888:8888::12的时候,由于存在时间差(动态ip地址到期会自动更新),你连接的时候,你家ipv6地址可能正好重新分配,服务器地址变成了240e:7777:7777::15,而原来的240e:8888:8888:这个前缀地址已经被运营商分配给了其他用户,如果这个用户是个超级黑客,那么它完全有能力在它家的网关部署一个蜜罐服务器软件,监听所有类似21,80,443,25,110,965,995等常见端口,以FTP/POP3/SMTP等为例,客户端要登录到服务器,必须有一个发送用户名和口令的登录过程,无论你是否采用TLS/SSL加密[因为这个加密只是保护数据不会被传输过程中破解,但是对服务器来说,它是透明的],以常见的标准FTP协议为例子,

服务器: 220 welcome

你: USER admin

服务器:331 user name OK

你: PASS

服务器: 230 login OK

或者 550 bad user name or password

你:???? 服务器出问题了?我怎么登录不上去了,或者 这内容怎么全变了?

在这个过程中,你可能觉得只是家里服务器发生了故障,并不会在意,然后等个10分钟,重新尝试,又正常,但是,实际上,你的账户 admin:, 已经被蜜罐服务器收集了,常规的标准服务器软件很多存在这个安全风险,在使用动态IP地址建服务器的时候,始终存在危险.

那么,如何在动态IPV6,无法使用TLS证书保证ip地址映射关系的情况下,确保安全呢,参考解决办法:

(1) 服务器端必须主动给出一个握手码,这个握手码是64位数字,这样蜜罐服务器就傻了,因为不同的用户设置不同的握手码,它无法在用户没有登录的情况下就判断用户,例如,用户设置握手码是

在连接完成后,

蜜罐服务器: 220 welcome

XFile服务器: 220 XFtp service 1.90.1[x] (c)2017-2019 All rights reserved|

XFile客户端由于无法检测到正确的握手码,就自动判断出这不是正确的服务器,连接直接中断,这样就避免了账户泄漏,而在正确的的服务器上,则可以知道检测到这个握手码,这个简单的设计功能被启用后,可以基本保证不会连接到错误的服务器,包括蜜罐服务器.

(2)对PASS进行加密,用户端和服务器端遵守共同的约定

对FTP协议进行改造,在客户端输入username 后,服务器端必须给出随机数,例如:

连接成功后

服务器响应: 220 XFtp service 1.90.1[x] (c)2017-2019 All rights reserved|

用户端: USER admin

服务器响应: 331 User name ok,need password|31c52c 0 1 18fe50e92 190 0 0

这里 31c52c就是改写后协议的一个非0随机数字,然后客户端使用原先的口令和随机数字31c52c进行混合,得到新的字符串是c52c,计算MD5得到dea1d4e9c1f5824adb596e0,然后去掉第一位字符,重新添加口令,得到ea1d4e9c1f5824adb596e0,再对这个字符串生成MD5,得到356d287fe13b80895ea99161fd87c063,把第一个字符改成_,最后的口令是_56d287fe13b80895ea99161fd87c063,

完整的登录命令将是

PASS _56d287fe13b80895ea99161fd87c063

即使前面包括TLS/SSL加密和握手码都被破掉,由于这个口令采用的是二次去位加密,即使黑客全部拦截到登录过程的数据,黑客得到口令是 _56d287fe13b80895ea99161fd87c063, 目前这个时间段他无法在合理的时间推算出原始口令,而得到了这个口令,由于存在每次连接都发生变化的随机数字,这口令能且只能用在本次连接,下次连接就又发生了变化 ,因此即使被黑客得到,也没有任何用处,这样就保证了即使账户密码在传输中泄漏或者拦截,黑客依然无法得到正确的原始口令,无法加以利用.

总结,在使用动态IPV6架设支持外部访问的家庭服务器上,必须对软件协议进行加强,防止账户口令的泄漏和被套取

[4] IPV6下,家庭服务器使用电子邮件解析替代动态域名(DDNS)

动态ip环境下,要架设可以随时访问的服务器,就必须解决服务器ip地址变化的问题,之前,ipv4环境下最常见的解决办法就是使用动态域名,反正一条宽带顶多一个ipv4地址,直接在路由器里捆绑下就成了. 但是,使用动态域名,引发了服务器地址泄漏问题,这在ipv4下没什么,反正整个ipv4就4亿个地址,每天都有大量的扫描,泄漏不泄漏都会被扫到.

在ipv6下,由于不再只分配一个ip地址,而是一下子给了你海量的ipv6地址,这就形成了天然的安全屏障,大家都知道,要尝试对某个家庭服务器发起攻击尝试,首要的条件就是知道对方的服务器地址,最大的安全是什么,你的服务器ipv6地址只有你自己知道,如果你不对家庭服务器捆绑DDNS(动态域名),那么有心人即使知道了你家宽带今天ipv6的64位前缀,为了尝试获得服务器的真实ipv6地址,它需要对1600亿亿个ipv6地址进行扫描,再牛的黑客,没有几年的时间,是无法完成的,而你的ipv6地址一般每3天更换一次前缀,意味着黑客必须在3天内完成1600亿亿个有效扫描,这是无法完成的任务. 而如果你捆绑了动态域名,这就好比直接打开了你家ipv6网络的一道门,任何人只要知道你的动态域名,根本不需要扫描,就可以直接知道你服务器的ipv6地址,然后进行攻击尝试. 由于家庭服务器,一般只为有限的家庭成员提供服务,因此服务器地址只需要家人能够解析就可以,因此通过服务器端发送邮件,用户直接在软件里自动通过电子邮件进行解析的方式,可以极大的保护建立在动态ipv6地址上的家庭服务器不被泄漏,使用这种方式,黑客要获取服务器ipv6地址,就必须尝试获取邮件,而电子邮箱由于是需要用户名和口令才能登录,而破解大公司的邮箱服务器口令和用户名是非常非常的困难,也就是,通过电子邮件解析服务器地址的方法,对比使用动态域名,多了一道由电子邮箱提供的安全防火门,让你家的服务器ip地址真正大隐隐于市了.

例如,我们的动态域名是test.somedynamicdns.com,那么,任何人只需要使用ping -6 test.somedynamicdns.com 就可以获取该动态域名的ipv6地址,无论该服务器如何切换ipv6地址,只要捆绑了动态域名,任何人始终可以获得ipv6地址,而如果采用电子邮件的方式,例如指定邮箱为[email protected],黑客即使知道了服务器是采用该电子邮箱进行服务器地址传递,但是由于无法知道邮箱的登录口令,因此无法获取服务器地址,除非它蠢到尝试攻击破解腾讯的邮箱服务器,问题这好像可能性太低了吧. 而家庭成员,只需要在软件设置里填写邮箱和登录口令等信息,就可以自动成功获取服务器地址, 电子邮件代替动态域名具体的实现方法参考这里.

动态域名最大的优点就是方便,那么,在什么情况下考虑使用动态域名呢?那就是你建立的家庭服务器,经常需要服务很多根本不认识的人,例如建个私人下载站之类的,提供给大众使用的,这个时候,动态域名可能是唯一选择.

[5]家庭内部访问,优先使用IPV4内部保留地址

家庭内部设备,例如平板电视,投影,台式电脑等,应该首先使用内部保留IPV4地址,使用IPV4保留地址,首先具有隐私性,类似192.168.1.x,这种地址的ip包不会出网关,其次,可以在路由器里直接固定服务器的ipv4地址,不需要每3天就刷新一次,以asus路由器为例子,

在内部网络设置里,可以直接绑定服务器的MAC到一个静态的ipv4地址,图片里是192.168.50.48,以后无论服务器重新启动或者外网变化,内部地址始终不会变动,服务器地址直接填写绑定的ipv4地址就可以,图片例子里是192.168.50.48.

总结,家庭内部设备,比如电视,投影等访问家庭服务器[NAS],应当首选内部IPV4保留地址.

[6]服务器操作系统的选择

如果您是一个小白,并且能买的起正版windows server操作系统软件,那么就安装windows server 操作系统,但是在目前的大环境下,windows server是美国软件,并不是一个好的选择,对老美安全机构来说,你的服务器数据是不设防的, 如果您已经对电脑操作有一定的基础,或者有爱好,建议您安装 ubuntu linux 18.04LTS长期支持版本, 注意,不再建议您安装CentOS, 尽量避免使用美国公司的东西,而且ubuntu linux无论在安装上还是使用上都是最适合家用的,安装教程参考这里, 这里两个要点,在ubuntu linux安装完成后,如果您不是linux方面的高手,建议您使用终端 执行 sudo apt install nautilus-admin , 安装这个组件后,您可以直接在图形环境下,对某些root权限的配置文件进行编辑修改,而不需要再使用命令行进行编辑了,其次,如果您不安装这个组件,您应当使用nano -w -m 来代替古老的vi 命令行编辑软件.

[7] 家庭服务器服务器软件的选择和安装

在内网环境,使用SMB协议,可以实现对文件的锁定和读写修改,对小文件操作支持非常好,缺点是出不了网关,其次是它使用的是包双向传输,大流量传输效率比较低,windows操作系统默认已经集成了SMB协议支持,因此不需要安装就能使用,而ubuntu 则需要安装组件,执行 sudo apt-get install samba samba-common,就可以安装samba服务,这里特别特别提醒,无论是windows还是linux,都必须为samba共享服务设置一个比较复杂的密码,千万不要使用匿名权限,这个服务比较危险,很多木马或者病毒都是利用samba进行传播,目前的技术,对弱口令扫描已经非常成熟,一旦samba密码被攻破,家里很多设备都会中毒被黑,而且极难彻底消除,因此务必使用复杂的密码. 另外,对于能熟练使用电脑的朋友,如果您使用windows服务器,强烈建议使用第三方SMB软件来代替windows自带的SMB共享服务,并不是windows自带的SMB共享服务不好用,而是自带的SMB服务支持的功能太多了(有几百个),而且和系统捆绑太紧密,从第一版到现在第三版,漏洞补不胜补,实在太多.

在公网环境,samba是不能出网关的,如果采用代理模式穿透进行访问,效率是非常低的.目前常见都是采用FTP, NFS也能支持公网访问,但是NFS由于只能基于ip地址进行访问控制,缺少密码保护,在家庭服务器公网访问环境下,是及其少见的,而且需要安装额外的软件才能支持,因此非常少见,能有效应用的目前只有FTP,对于直接播放网络视频来说,效率最高的是http协议,注意,是http协议而不是https,采用https,效率大约只有http的70%左右,开销非常巨大,在家庭网络环境下,特别是在线播放服务器视频音乐等应用时,没必要使用https,除了浪费带宽降低效率,没有任何作用.

参考:danscort:ARM v8(树莓派4)搭建服务器和性能测试实战