私有文件服务器服务器搭建方案

1. 背景

类似Dropbox、金山快盘的同步服务确能给人们带来极大的便利,但是他们作为某一公司运营的非开源项目,安全性问题始终是人们担心的大问题。安全性问题一般而言,有几个方面:

  1. 最耸人听闻也最受阴谋论者喜爱的可能:某些可能的执法部门要求的后门(当然实际上甚至棱镜计划的解密文件也未能证实各大公司到底是否故意为执法部门预留了后门);
  2. 软件公司自己留下的后门:谁也不知道公司和程序员们会不会出于利益、窥探隐私等等目的自己设置后门(就像当年号称大陆最大程序员社区的CSDN竟然也明文储存用户的密码)
  3. 设计者为了追求软件功能而牺牲的安全性:软件间存在竞争关系,绝大多数使用者根本不关注(或者根本没有足够的知识关注)安全问题。他们眼里重视的是软件的外观与功能(用户也没机会审查代码啊!),可以设想,有的软件为了某些功能的实现,或者在明显不安全的条件下维持功能的运作,可能会将安全检查可以放松,从而主动遗留了安全问题。(针对这一点,最常见的问题可能是客户端放过可疑的证书)
  4. 开发者由于没空的安全性问题:毕竟程序员是有任务的……而衡量任务的指标主要是功能的实现而不是起实现方式是否科学与安全,因此,在进度很紧的情况下,反正经理不检查,消费者也看不到,许多程序员也没空考虑过多的安全方面的问题,自然程序漏洞就会比较多。

​在这个情况下,如果有一定的技术知识、硬件条件和时间,完全可以自己搭建一个可控、安全、灵活的文件服务器。这个文件服务器的基本功能应该是:允许PC端在任意地点经由互联网同步或者备份文件到服务器,移动端允许手机安全地上传下载文件。

2. 搭建步骤

2.1 硬件设施要求

  1. 具有公网IP的网络连接:经过测试,至少深圳、武汉的家庭用中国电信的宽带账户,每账户都是有公网IP的。需要说明的是,搭建外网可以访问的服务器,只需要IP可以被公网计算机访问,不要求IP总是不变。实际上,包括深圳电信和武汉电信在内,很多地区的电信用户的IP是隔一段时间(据我估计一般几天吧)会变动一次。不过这没关系,这可以通过动态DNS(DDNS)解决。
  2. 一台可以长期开机的电脑:既然是文件服务器,主要是硬盘最好可以大些,我认为,至少1T吧。
  3. 一台支持DDNS与DMZ主机的路由器:该设备是可选的,但是考虑到个人服务器不会独享一个电信账号,而是很可能放在一个家庭的路由器下与家里的其他电脑、手机共享数据连接。因此在大多数情况下,该路由器是需要的。

2.2 具体搭建过程

  1. 确认路由器具有一个公网IP:本文将以TPLink、DLink路由器的管理后台为例。登陆路由器,先观察管理后台首页的WAN口状态一栏内的IP地址,是否是一个公网IP。12如果不会判断,就将该IP粘贴进百度搜索框,看看百度能否显示出你的地理位置,如果可以,说明是一个公网IP。接着可以进入下一步。
  2. 配置DDNS:DDNS的作用是,在服务器IP不断变动的情况下,使得公网计算机总是能定位到该路由器。在路由器设置页的左侧,找到动态DNS或者DDNS一项,点开,大概会如下:2接下来需要按照该页的说明到花生壳的网站进行注册(如果你的服务器该页没有说明,就搜索一下“花生壳DDNS”吧),最开始的时候可以用免费的试试,但是服务器一旦进入正轨,建议买一个初级版的,不然解析不太及时。
  3. 检查DDNS的正确性:当注册了一个花生壳账号后,大概会得到一个如下结构的网址:xxxxxx.xicp.net,打开cmd.exe,ping一下,如无意外,只要路由器在线,ping出来的内容应该如下:3要是能ping通,说明DDNS设置已经正确。
  4. 配置服务器操作系统:首先考虑的是,究竟是用Windows Server还是Linux还是其他版本的操作系统?!Linux的话,自然,开源,更加可控,似乎更加安全,存在后门的概率更低,而且也不收钱。但是缺点是,没有习惯命令行人机交互界面的人使用(例如我),总归是特别别扭……斟酌再三,还是决定至少现在使用Windows系列比较好。我选择的是Windows Server 2012。需要说明的是,微软有个Dreamspark计划,只要是符合条件的学生(大陆学生亦可,只需要使用一个edu后缀的域名接收验证邮件即可),可以免费使用正版的Windows Server 2012,关于该计划,请自行搜索。Windows安装过程略
  5. 将服务器暴露到公网下:由于服务器是在一个路由器下的,默认设置下,公网计算机通过域名或者IP只能访问到路由器,但是,通过DMZ主机的功能,可以实现外网直接访问到服务器。首先需要固定服务器的局域网IP地址,例如固定为192.168.1.100。这主要需要在两处设置,一处是路由器后台->“DHCP服务器”->“静态地址保留”中,将192.168.1.100与服务器的MAC地址关联。然后还有一处是在“ARP绑定”->”静态ARP绑定设置“,将服务器MAC地址与IP地址绑定。接下来,进入“转发规则”->“DMZ主机”一项,填写服务器的局域网IP。这么一来,外网计算机访问当前路由器的IP地址时,路由器就会将该服务器推到前台,服务器就可以被外网访问到了。
  6. 配置服务器上运作的文件服务器软件:Bitvise SSH Server开始的时候试过Filezilla Server,该软件本身没什么问题,但是他只支持FTP和FTPS,可是各种FTPS的客户端的安全性校验都不好,因此,后来改用了更加科学的SFTP。SFTP是SSH的一个功能组件,先介绍下SSH协议,SSH协议和SSL一样,使用了基于公私钥系统的非对称加密机制,这可以使得信息在流经不安全网络时无法被破解或者篡改。与SSL不同的是,SSH并没有证书中心的说法,不依赖证书中心的签名来确保证书(根据我的理解,证书就是公私钥对)的正确性,用户只能自己根据公钥的校验值来判断连接到的服务器是否真是正确。无证书中心的缺点显而易见:加大了用户判断服务器真伪的负担,用户必须自行检查证书的真假,而不能通过软件自动完成。其好处,我觉得就是,降低了系统的复杂度,同时提高了安全性——用户把安全完全掌握在自己的手上,不依赖于不一定可靠的证书中心——特别是像CNNIC这样的流氓中心。注:对于SSL、SSH、非对称加密、RSA算法等等关键字基本上没有任何认识的话,建议先认真浏览相关维基百科词条,否则可以不需要往下读了,不然并不会有什么卵用。SSH主要应用是在类Unix系统中,能原生支持Windows的SSH工具并不太多,经过比较,Bitvise SSH Server是其中比较好的一个。他功能比较全面,而且充分利用的Windows的图形化界面,没有一些移植软件那样生硬的感觉。同时,这个软件供个人非营利用途使用时时免费的,可惜并没有中文版,对于那些没有通过六级的同学,用起来可能少有困难。安装完成后,他看起来大概是这个样子:sdsdsd浏览该界面,首先需要注意的是Host Key一栏,栏目中的第一行交代了当前使用中的服务器公私钥对的加密方法(本例中为DSA算法)和密钥长度(本例中为1024位),第二行交代了当前公私钥对的公钥的MD5校验值,这个校验值必须复制下来保存,当客户端连接他的时候,要拿出来对照,才能确认服务器的真实性。如果不服,可以使用下面的Manage host keys按钮生成一个新的密钥,如果要生成新的,根据openSSH的推荐,证书应当使用RSA算法,密钥长度不少于2048位。接下来,在Settings栏中,点开Open easy settings

     

    20150721234116

    特别需要注意的是其中的Open Windows Firewall一栏,这里的值必须修改为Open port(s) to any computer,否则的话,互联网内的其他计算机是无法连接到本SSH服务器的!这一个问题我开始没注意到,找了很久也没发现问题,后来读了Bitvise SSH Server的用户手册才发现这里需要修改。这一项改好后,进入第三个选项卡,Virtual Accounts。之所以叫Virtual Accounts,是因为这里设置的并不是真正的Windows账户,而是该软件虚构出来的账户,方便用户定义小权限账户,而并非一定要具有Windows账户的那些权限。能配置FTP服务器的人,配置该虚拟账户应该没有困难。配置中需要注意的一点是该软件支持通过验证客户端的密钥,而不是验证密码来登陆。这个问题比较复杂,以后有机会再说。配置好一个虚拟账户后,如无意外,使用SFTP客户端(例如WinSCP),输入账户和密码信息,就可以登陆该SFTP服务器了。在首次登陆的时候,WinSCP一定会问你是否信任服务器公钥,此时就需要对照刚刚记录的服务器公钥MD5和WinSCP提示的公钥的MD5进行比对,如果一致,说明服务器连接正确,如果不一致,多半是有人尝试中间人攻击,应当立即停止链接,直到回到安全的网络环境后再试。

  7. 配置桌面版客户端:SyncBack。该软件是一个FTP同步软件,支持超级多样的同步选项,也有中文版。使用该软件,要点是在同步选项中,展开“高级模式”,然后在“FTP”项中进入子项“高级设置”,勾上“服务器使用SFTP”:20150721235100然后才能倒回“FTP”项:20150721235305该页面中,注意SFTP公钥一栏,这里的公钥MD5校验值应当和Bitvise SSH Server 中的Manage Host Keys中看到的一样。如果在使用中,被提示公钥不正确,此时一定不要霸王硬上弓强行同步,因为多半是服务器遭到了中间人攻击,一旦接受新的公钥,整个加密体系就会崩溃,服务器也将变得很不安全。
  8. 移动版客户端:我尝试了很多Android版本的FTP客户端,发现,竟然没有一个支持连接前的证书验证。除了:FTP Express Pro,该Android APP可以支持链接到服务器前的证书证书校验,用法和PC端的FTP客户端很类似。

​2.3 一种没有被采用的做法

  实际上,有的公司已经为我在文章最前面提到的需求开发了全套的解决方案,他们之中的代表就是:ownCloud,这个解决方案包括服务器端的程序和客户端程序,只要按照他们的手册进行安装,不仅可以实现文件的同步,还可以通过浏览器对文件进行管理——功能上也就是和Dropbox以及金山快盘一样一样的,最大的区别在于——物理服务器的控制人由软件公司变成了用户。这样的变化看起来似乎让整个体系安全了很多,然而实际上并不是这样——整个软件的实现并不透明,用户无法知道该软件究竟有没有重大漏洞和后门,同时,该解决方案的功能非常丰富,而功能越多,可能的漏洞也就越多,特别是网页版的文件管理,根本就没有必要啊!加入网页服务器的功能,显然是极大地增加了整个体系出现漏洞的概率。如下是网友对ownCloud安全性的讨论:

https://security.stackexchange.com/questions/22634/how-safe-is-the-owncloud-encryption-in-a-trusted-lan

显然这里面的许多网友对ownCloud的安全性并不是很有信心。还有一个由于ownCloud和ubuntu共同造成的问题的文章:

http://www.pcworld.com/article/2845072/ubuntu-owncloud-and-a-hidden-dark-side-of-linux-software-repositories.html

乍一读,问题还是很大的!要是这样的系统被暴露在互联网上,基本上就是把安全性寄托在:“没有高手对我的服务器有兴趣”这个命题的正确性上了……和ownCloud类似,国内也有一些这样的软件,例如迷你云——这是一个连官网都没有的私有云解决方案(ownCloud再怎么说也做了个高大上的官网还配了个SSL证书啊!!),也是醉了。。。用这样的软件,我窃以为,还不如使用Dropbox!剩下的服务器购置费和电费够交好多年Dropbox的高级会员会员费了!

发表评论

电子邮件地址不会被公开。 必填项已用*标注