像世界上其它的东西一样,良好的安全建设需要一笔不菲的价格。道理其实很简单,因为现在没有那么多的技术高超的安全专家来照顾我们不堪一击的网络。人才短缺所造成的一个不幸的结果就是高的令人难以承受的专家佣金。这个问题将一些小型的网络交给到了一群没有多大经验的网络管理员的手中,这些管理员也许不知道如何去设计、配置和监视网络中的主机,使这些有缺陷的主机时时受到网络上那些试图寻找内部信息、免费储存空间或者用于DDoS的肉鸡的入侵者的威胁。
幸运的是,网络上不少好心的黑客(褒义)制作出了不少非常出色的安全产品供网管们免费使用。这篇文章就是概述如何使用一个分隔的专用网络/DMZ的设计来设计并运行一个小型网络,这将允许管理员在使其用户享受高水平保护的同时向外部网络提供一些服务。这个设计的执行和管理都相当的容易,就算初学者都可以很轻松的掌握,而且它还可以作为安全公司给客户的一个基础安全配置。
I.
设计部分
我们的目标就是达到对外部发起的攻击做到最大的保护。同时,我们不希望花费很多钱,这样我们所使用的软件就只能限于开放源代码的软件或者免费软件。这并不像听起来那么坏,因为大部分免费的操作系统几乎都自带有一套能达到一个小型企业标准的网络安全软件。同时,很多免费的安全解决方案都可以在一些商业产品里找到。
为了使事情变的更简单,我们先假设我们将要建造的这个网络只有一个对Internet的连接,并且它只有大概十几个内部用户。当然,你总是可以按你自己的意愿将它的规模变小或变大。这只在于添加更快的硬件,将网络规划成许多更小的网络来消除瓶颈现象,甚至增加更多的对外连接等。
最简单的设计莫过于使用保护内部专用网络的防火墙来建设并维护这个网络,这样的话就不会有任何外来的连接,这种网络被称为非军事区(demilitarized zone,简称DMZ),我们需要将它建设成以有一些对外开放的服务,同时使用相同的防火墙来进行保护的分隔网络的形式。这些服务可以是DNS, WWW, mail, FTP, 或者news,不过你完全有自由去限制或增加任何其它服务。DMZ可以包含一台主机或者很多主机,这都在于你想要这个网络的复杂性而定的。
所有到我们网络中的数据流都会被防火墙检查和过滤,在几个分别的主机上需要运行这三个网络接口:
?
接口A连接防火墙到Internet上。接口的IP地址将由ISP分配 (本文中将会使用x.x.x.x).
?
接口B连接防火墙到内部专用网络上。本文中这个接口的IP地址将会是 192.168.1.1。
?
接口C 连接防火墙到DMZ网络上。本文中这个接口的IP地址将会是 192.168.2.1。
我们所设计的网络的大概轮廓显示在图一中:
防火墙将使用下面的规则来控制数据流:
1.
所有从内部专用网络发送到所有合法地址上的数据包都可以没有任何限制的通过防火墙。 (如有必要,这个规则可以做更大的限制)
2.
所有从Internet发到专用网络的数据包都应该被过滤,并且只有那些最初从内部专用网发送的请求包的有效回应包才应该被容许进入专用网络。
3.
所有从Internet发送到DMZ的数据包都应该被过滤,只给有那些发送到我们对Internet所开放的服务的数据包才能通过防火墙。 此外,最初从DMZ 发送的请求包的有效的回应包也容许进入DMZ。 (如有必要,这个规则可以做更大的限制 )
4.
最初从内部专用网络 发送到DMZ上的请求包的有效的回应包应容许进入专用网络。
5.
所有从DMZ 发送到Internet上(这不包括发送到DMZ上的)的数据包,应在没有任何限制的情况下通过防火墙。 (如有必要,这个规则可以做更大的限制)
6.
所有其它的数据流应该被丢弃。
除了我们上面说的这些数据包过滤规则以外,我们同时需要一个方法来让我们所提供给外部网络的服务在DMZ中的主机上运行。我们完全可以在装载防火墙的主机上运行这些服务,但是那么做的话就会出现很多麻烦,因为我们在防火墙上装载的服务越多,这个防火墙就会变的更弱。我们会通过重定位数据流到DMZ上,这样我们其实就把潜在的攻击目标从防火墙移到了DMZ上。这样的话,如果攻击者对我们的网络进行攻击,他们就是在攻击DMZ里的主机,而他们想攻击整个内部网络,则还要入侵防火墙和剩下的网络,这样会缓慢入侵者速度,从而让整个网络更安全了一些。(负责重定向数据包的主机有时被称为端口转发(port forwarding))。
因为一般的小型网络通常只有它们ISP所分配的一个单独的IP地址,所以防火墙同时需要运行一些“伪装”软件,这些软件使所有从内部网和DMZ那里发出的数据流好像是从一台主机上发出的一样。这是使我们的网络更难被攻破的另一个安全手段,因为在防火墙后面的机器的IP 地址永远不会被显示给外面的网络。
可以过滤数据包,重定向数据流到其它的地址和实现IP地址伪装的免费的防火墙产品有ipfilter, ipfw, ipchains, 和iptables。前面的两个软件包是使用于BSD家庭的,后两个则广泛用于Linux操作系统中。
II.
选择硬件及软件
我在本文中选择使用的防火墙软件是在OpenBSD 2.8上运行的Daren Reed的ipfilter,ipfilter 同时有NetBSD, Solaris, SunOS, BSD/OS, IRIX, HP-UX,和QNX版本。如果你是使用其它的防火墙软件,你要记得把我们后面要讲到的防火墙规则翻译成你所使用的防火墙的规则语言。(通用的设计原理在任何案例里都将是相同的。) 我选择ipfilter 主要有四个原因。第一,我对它非常了解。第二,它是被千万程序员反复测试过的。第三,它是OpenBSD的默认防火墙。第四,我喜欢它简单的语法。Ipfilter 相当的容易操作,它可以整理内部用户所发送的请求包及它们的回复包,并且让它们通过防火墙,而不需要我们写一些复杂的防火墙规则。它并且带有简单的数据包重定向和地址伪装模块,ipnat。
至于硬件,运行ipfilter 防火墙软件的机器可以是任何支持OpenBSD或其它有ipfilter 支持版本的操作系统,例如NetBSD,只要它能提供至少三个网络接口 ( 一个连接Internet,一个连接内部专用网络和另外一个连接DMZ )。我的选择是一台普通的低档奔腾处理器电脑,装备有串行端口和三个主板上空闲的扩充插槽。不过它可以只是一台Alpha, Sun, VAX或者任何一台满足我们上面所说的需求的主机。不过,防火墙所在的那台主机的硬盘至少要有540MB。你可以使用IDE而不是SCSI,只要磁盘系统不装太多东西,只要主机有起码24MB的内存。
另外一个重要的组成部分是网络接口卡。连接内部网络和DMZ到防火墙上用的接口卡,我推荐带有用于双绞线的10BASE-T插槽的10/100Mb/一秒的网卡和RJ-45插槽,这些东西不管是全新的还是二手货都很便宜。其它一些必要的连接设备包括双绞线和带有10BASE-T插槽的10/100Mb/一秒的hub。(如果整个DMZ都是在一个机器上的话,可以购买两个hub,一个用于内部专用网络,另一个用于交叉双绞线。)
我之所以建议你不要使用共轴的10BASE2电缆,而使用双绞线(还有带RJ-45插槽的网卡及hub),是因为双绞线装置更可靠一些,尽管它们需要一个hub才能工作。(在共轴线上,一个错误就会导致所有的电脑都连接到一个无法访问网络的电缆上,而如果一个错误发生在双绞线上,只有一台机器会被断开连接,其它的机器还都可以正常的访问网络)。
还有要注意的是,在你去eBay或者本地的旧电脑销售店里采购二手硬件之前,我建议你最好先去OpenBSD的网站及软件所副的安装说明书上查找自己要买的硬件的品牌是否在OpenBSD的支持硬件表里。这个步骤会为你省去很多的麻烦。
你同时要去你所使用的硬件的网站里去找你硬件的驱动程序。有些硬件不能被它厂商自己的驱动程序驱动,但可以用这个硬件所使用的芯片的驱动程序驱动。
最后一个重要的东西就是DOS盘或者Windows 95/98的救援盘。因为我不是太清楚微软对使用DOS或者Windows启动盘来装另外一个操作系统是怎么想的,所以我建议你最好是找一个合法的DOS或者MS Windows光盘来最备用,或者直接去买一个IBM的DOS,最好是去下载 FreeDOS,一个免费的DOS克隆版本。一但你有了一个DOS盘,创建一个启动盘,把里面不需要的程序删除掉,然后把需要的驱动程序装进去。
(请注意,你并不需要DOS或者Windows来装OpenBSD,我说的这种情况是当Windows已经是你电脑中的操作系统时的情况。)
III.
安装
OpenBSD的安装过程相当简单,你可以在OpenBSD FAQ 的第4部分中找到详细的安装说明。这样以来,我不会对设置进行详细的讲解,不过我会主要说明一些会让第一次使用OpenBSD的用户感到困惑的问题:
swap的最小空间(Minimum amount of swap space):使用大概你RAM内存的两倍就足够了。如果你不确定的话,可以使用OpenBSD FAQ 第四部分中列出的分割大小列表。
对大硬盘的支持(Large disk support): 当硬盘无法启动的时候,就算系统安装完全顺利,你也需要用硬盘或者电脑厂商的程序来让硬盘变的可启动。有些时候,特别是当电脑有一个很老的BIOS时,你的系统可能无法识别硬盘的大小。这种问题应该不会影响到OpenBSD的安装,但当安装结束以后,你必须去你电脑或者硬盘的厂商的网站上去下载驱动或者配置程序来让系统工作。如果你还有问题,阅读安装文档,那里非常详细的斤记录了一些不同的方法来解决大硬盘的问题。
网络接口地址(Network interface address): 当OpenBSD的安装程序询问你关于