安全与带宽的危机
1999年初,某企业大厦网络(以下简称B大厦)受到了带宽和安全问题的困扰,为此,网络中心开始酝酿网络的升级改造。
B大厦内有研究院、集团、公司等单位。大厦内所有的计算机使用某大学(以下简称A大学)校园网分配的真实Internet IP,共有7个24位掩码网段,下面又进一步划分了不同掩码长度的子网,计有近500台计算机,运行Windows NT、Windows 9x、Solaris、AIX、IRIX等多种操作系统。中心交换机为IBM 8274,安装了两个百兆交换模块。中心服务器(Web、FTP、文件共享、光盘库、Exchange Server、SMS、Lotus Notes Domino、NT PDC/BDC、DNS、WINS、Proxy)使用PC/Alpha平台,全部直接连至8274的百兆交换端口。4个楼层各有一个百兆交换机分别使用3Com 3800(3C16910)、Intel E550T等型号,全部为三层可管理并支持VLAN。每个楼层交换机都上行至8274的百兆端口。内部网络运行稳定,速度基本上能够满足要求。
B大厦的网络通过无线网络设备和A大学办公楼相连,两端相距7km各有一台运行NetWare 3.x的无线网关机器,两台机器各装有一块AT&T WaveLan无线网卡,通过楼顶的高增益天线对连,连接速率为2Mbps。办公楼的主干网络是由4台Digital 900EF路由器组成的FDDI双环。其中一台900EF连接到A大学校园网作为Internet出口,另外3台各自接到不同的部门,有一台接到无线网关。
当时,B大厦内已经有员工400多人。2Mbps的Internet接入带宽远远跟不上需求。从网络结构上看,FDDI环通过10兆交换以太网端口接入A大学校园网,B大厦的主干网络为百兆以太网,因此整个网络的瓶颈为无线网。
为了解决带宽问题,我们探讨了多种方案,首先是敷设光纤。因为牵涉到市政等多方面的因素,敷设光纤的费用颇高,是我们无法承受的。而租用专线首先速度不能满足要求,费用也不低,没有必要,因此我们决定仍然使用无线网的方式,使用新的快速无线网技术对旧有设备进行升级。
另一个严重的问题是安全问题,此前,B大厦的网络持续受到来自Internet的攻击,包括MailSpam、PoD、大规模的端口扫描等,多次造成Exchange服务器宕机和Internet访问中断,影响了企业的日常运作。当时采用的安全措施是在FDDI环的第一台900EF上进行IP访问限制,而900EF属于已经过时的设备,仅支持简单的包过滤。早已不能满足网络安全的需要。另一方面,B大厦的内部网对外几乎完全没有设防,从外部可以很容易地窃取内部网未经严格设置的员工机器上的信息。必须采取措施防止这类问题的发生。
经过论证,我们决定增加一台或两台防火墙机器来抵御黑客攻击。当时Linux 2.2系列内核刚发布不久,2.2.x中全新的IPChains代替了从BSD中移植来的ipfw,在性能和配置方面得到了各方的好评,因此我们初步决定采用Linux系统配置IPChains来作为新的包过滤防火墙。
此外,还有IP的浪费问题也引起了我们的注意,因为两台无线网关占用了整整两个24位掩码网段。这是由于NetWare 3.x使用早期的RIP协议,不支持子网的进一步划分。我们也希望通过升级来省出IP,以便适应日益增长的网络规模的需要。
使用Linux升级无线网
当时,新一代无线局域网协议IEEE802.11b尚未发布,市场上有多种标称速率在8Mbps至12Mbps的无线网络产品,大多是基于专有协议。我们对其中的5种产品进行了现场测试。测试方法是两端使用两台笔记本电脑,都安装Windows 98,一端安装Server U 2.4 FTP服务器软件,另一端使用Windows 98自带的命令行ftp程序进行连接,多次下载20MB的文件。经测试,没有一家的产品传输速率在500KBps以上。而且有些产品随距离增加传输速率迅速衰减。经过比较,我们选择了Lucent公司的WaveLan IEEE。在7km的距离上,WaveLan IEEE的FTP实测速率可达400KBps左右,约为传统有线10兆以太网的二分之一(原因见后文"方兴未艾的无线网络技术"),随距离增大信号衰减不明显。而且,由于Lucent是即将出台802.11b的主要制订者之一,WaveLan IEEE已经事实上支持了这个标准,为我们提供了可扩展性。
厂家建议的方案是使用两个WavePointⅡAP专用无线网桥,各插一块WaveLan IEEE PCMCIA卡,两端通过馈线连接高增益天线对连。网桥可配置为工作在下两层,不需要单独的网段。因为WavePointⅡAP价格较高而WavaLan IEEE PCMCIA支持多种系统,我们开始探讨使用PC机代替专用无线网关的可能性。经过调查,发现在台式机上使用ISA桥接卡转接即可使用WavaLan IEEE PCMCIA卡。在厂商的配合下,经过实验,我们成功地实现了用两台Linux机器作为无线网关,并发现这种方案的效率要比使用两台WavePointⅡAP略高。而且这样还免去了根据计划要在网络中再增加Linux防火墙的麻烦,可以直接把无线网关配置为防火墙。但由于WavePointⅡAP具有管理程序可供实时查看信道情况,有助于我们的管理,且安装也比较简单,我们最终采用了一个WavePointⅡAP和一台Linux机器。我们选择将无线网的Linux网关安装在办公楼一端,主要是基于如下考虑:访问流量以进入方向为主,而网络速度是有线以太网较快,这样可以减弱启用IPChains对网络速度带来的影响。事实证明,后来启用IPChains(约30条规则)效率非常高,没有对网络速度产生影响。其次,是最大保护原则,这样可以保护包括WavePointⅡAP在内的尽量多的设备。
我们采用了RedHat Linux 6.0,内核版本为2.2.5。Lucent仅以二进制可执行模块和库的方式提供了Linux的驱动程序,非GPL授权。当时网上已经有了由志愿者开发的GPL版本,但尚处在早期测试阶段,功能支持不完善,我们未予采用。由于是在台式机上安装PCMCIA设备,我们需要配置含PCMCIA支持,而Linux 2.2.5内核中没有包括这一部分,于是我们选择ftp://csb.stanford.edu/pub/pcmcia/下载了最新的PCMCIA支持包,并进行编译安装。
在编译之前要先把WaveLan IEEE的驱动程序放入PCMCIA 卡服务程序源代码中,假设PCMCIA 卡服务程序源代码目录与WaveLan IEEE的驱动程序的打包文件出于同一目录中,则执行如下操作。
#cd pcmcia-cs-3.0.9
#tar xzvf ../wavelan2_cs-3.10.tar.gz
#make config
#make all
#make install
这时PCMCIA支持包已经编译安装完毕,需要再对无线网卡的IP参数进行配置。因为无线网卡的驱动识别和载入实在PCMCIA卡服务程序启动之后发生的,不同于编译到内核中或以内核模块方式载入驱动的普通以太网卡,因此需要在PCMCIA卡服务程序的配置文件中指定网卡的IP设置。首先,编辑/etc/pcmcia/config.opts,加入如下一行。
module "wavelan2_cs" opts "network_name=wirelessrouter"
这里的wirelessrouter是无线网的网络代号。这里也可以使用对等模式,参见无线网卡驱动程序的说明文件。然后,再编辑/etc/pcmcia/network.opts,设置网络参数。
*,*,*,*)
IF_PORT=""
BOOTP="n"
IPADDR="163.215.120.238"
NETMASK="255.255.255.240"
NETWORK="163.215.120.224"
BROADCAST="163.215.120.255"
GATEWAY="163.215.120.252"
DOMAIN="router.Au.edu.cn"
这时就可以启动PCMCIA卡服务程序了。
# /etc/rc.d/rc.pcmcia restart
此时如果听到"嘟"一声,说明设备已被识别。
另一端的无线网桥也需要经过简单地配置,首先根据说明书将一台PC机的IP设为与网桥的默认IP在同一个网段,然后运行网桥的配置管理程序。对网桥的配置进行修改,将网络代号填为与Linux配置文件中一致。这里要注意的是,虽然WavePoint Ⅱ AP行使网桥的功能,但并不妨碍为其分配IP,否则将无法通过网络进行管理。
随后就是各级路由的设定,为了达到节省IP的目的,我们把163.215.120.224/27网络分为两个子网分别为163.215.120.224/28和163.215.120.240/16。将连接无线网关的900EF的IP地址改为163.215.120.239,将Linux以太网卡的IP改为163.215.120.238,无线网卡的IP则与另一端的IBM8274的出口端口设在一个网段。这样便节省出了163.215.121.x和163.215.154.x这两个网段。最后,逐一进行各级的三层以上设备的静态路由设置,实现网络的全线贯通。
网关/防火墙的安全策略
无线网升级完成后,为了解决网络安全问题,我们进行了一系列的设置。
首先要确保网关本身的安全。我们采取了如下措施。
1.使用TCP Wrapper的访问限制功能,设置仅允许一个指定的IP(由网络管理人员使用)访问,这是通过修改/etc/hosts.allow和/etc/hosts.deny等文件来实现的,具体方法可参见本刊2000年第44期《设置安全的Linux服务器》一文(以下简称《设》文)。
2.在Linux网关上停止一切不必要的服务,包括telnet和ftp,并取而代之以SSH和scp,从而实现网络管理员和网关通讯时仅传输加密数据,并摒弃了口令认证的方式,使用更为先进的密钥交换认证。这是通过修改/etc/inetd.conf文件(可参见《设》文)和安装、配置SSH来实现的。现在SSH已经向SSH2全面转移,可在http://www.ssh.com/products/ssh/download.html下载。
3.为了加强网关的开机安全性,我们为BIOS设置口令,并为LILO设置口令,以防止未授权用户使用"Linux single"进入系统单用户模式。
4.在内、外两个边界路由器设置对Linux网关的直接访问限制。具体做法是,在FDDI环的上与Linux网关直接连接的一台900EF上禁止所有指向Linux网关两个IP(分别绑定在有线和无线两块网卡上)的IP包;在内部网的IBM 8274上设置禁止除源地址为网管IP以外的所有指向Linux网关IP的