利用开源软件实现电子阅览室安全网关系统
胡弢, 魏涛, 徐海军
泰山医学院图书馆 泰安 271000
摘要

为保证现有电子阅览室设备在IPv4/IPv6过渡时期的正常运转,提出一种采用开源软件搭建的模块化安全网关系统设计方案,并详细阐述设计步骤。运行测试表明该系统性能良好、工作稳定。

关键词: 开源软件; 安全网关; 模块化设计; NAT; NAT-PT
Design and Implement Security Gateway System Based on Open Source Software Used in Electronic Reading Room
Hu Tao, Wei Tao, Xu Haijun
Library of Taishan Medical University, Taian 271000, China
Abstract

In order to ensure the normal operation of existing equipment that used in electronic reading room for the period while IPv6 hosts and routers co-exist with IPv4 systems, this paper introduces a method for building a modular security gateway system based on open source software and designs its main program flow. The application shows the system performs satisfactorily and works stably.

Keyword: Open source software; Security gateway; Modularity design; NAT; NAT-PT
1 引 言

随着IPv4地址资源的枯竭,IPv6协议成为互联网发展的必然趋势,IPv4网络的升级改造也逐渐提上日程,在一段时间内IPv6/IPv4网络将并存[ 1]。由于升级改造成本等多方面因素的制约,电子阅览室大部分软硬件设备的升级改造工作无法一步到位,这样就需要部属相关设备完成协议转换,实现IPv6网络与IPv4网络的相互通讯[ 2],维持现有设备的正常运转。

本文以开源软件系统为基本平台,提出了一种模块化的安全网关系统的设计方案,除了基本的IPv6/IPv4网络协议转换,还具有可配置的防火墙、用户并发数统计、策略路由、访问日志定时打包并异地备份等功能。

2 需求分析及系统设计
2.1 相关研究

针对IPv4向IPv6过渡问题,目前有多种解决方案,比较成熟的过渡技术有三种:双栈方式[ 3]、隧道方式[ 4, 5, 6]和NAT-PT[ 7]。NAT-PT(Network Address Translation-Protocol Translation)技术是上述三种技术中唯一的能够解决纯IPv4主机和纯IPv6主机之间透明互访的兼容方法。NAT-PT通过在两种不同协议的网络边界处设置具有IPv4/IPv6 双协议栈功能的转换网关,对来自两侧网络的数据,完成IPv4/IPv6 地址转换(NAT)和IP分组的语意一致性的协议转换(PT)。

近年来,研究人员针对NAT-PT技术实现IPv6/IPv4的转换做了一系列应用研究,乐德广等[ 8]在FreeBSD4.6系统上安装KAME IPv6 Kits和TOTD软件包设计出具备IPv4/IPv6转换网关,陆音等[ 9]根据NAT-PT协议提出一个兼容IPv4/ IPv6的高性能安全网关模型NAPTSG,王帅等[ 10]应用Netfilter功能框架实现IPv4/IPv6 转换网关。此外,杨晋升等[ 11]、曾湛伟[ 12]把Squid和透明代理技术应用于电子阅览室,并对系统的安全性和负载能力进行分析。以上研究与实践对本系统的设计与实现具有重要的参考价值。

2.2 需求分析

由于应用环境的特殊性,电子阅览室的软硬件系统形成特有的结构:使用带有自动分配IP地址功能的硬件保护卡实现系统保护,安装与“一卡通”系统对接的计费软件进行自助收费,上述两部分一般不支持IPv6环境。

作为过渡时期的安全网关系统,既要兼容IPv4协议,保证现有设备的运转,又要兼容IPv6协议,能够实现IPv4/IPv6之间的转换,同时具备访问校内、校外资源的线路分配和负载均衡,以及访问日志记录和备份等功能。根据上述特点及功能要求,本系统采用基于NAT-PT技术的网关完成IPv4/IPv6协议之间的转换,在仅支持IPv4协议的NAT网关上实现其余功能。

2.3 系统改造方案

泰山医学院图书馆现有两个电子阅览室,分为6个管理区域,每个区域有计算机120台左右,共用一台计费服务器,客户机均安装硬件保护卡和与“一卡通”对接的自动计费软件,使用为内网保留的虚拟IP地址段,通过Squid代理服务器上网。改造前网络拓扑结构如图1所示:

图1 改造前的网络拓扑结构

为了方便安全网关的配置,首先将现有应用按照IPv4/IPv6网络的边界进行划分,然后将功能相似的合并,形成多个功能模块,分别为:电子阅览室、NAT网关、NAT-PT网关和计费服务器4部分。上述几个功能模块中,电子阅览室、NAT网关和计费服务器工作在IPv4模式,在当前网络环境下直接接入网络;NAT-PT网关安装有双协议栈,分别对应IPv4和IPv6网络,在IPv6网络还没有完成施工的情况下,暂时处于离线状态,待IPv6主干网改造完成,再接入网络。改造后的网络拓扑结构如图2所示:

图2 改造后的网络拓扑结构

3 安全网关功能及实现

在本文的安全网关系统中,硬件平台均采用Intel架构的PC,安装支持Polling功能的百兆或千兆网络适配器。操作系统采用FreeBSD和Linux,它们都具有高性能和高稳定性的特点,对硬件配置的要求低,对i386和AMD64架构的硬件兼容性好[ 13, 14],很适合应用于高负载的网关。

NAT-PT网关完成IPv6/IPv4协议转换,其余的工作由NAT网关完成。NAT网关除了实现IPv4网络环境中的地址映射和防火墙等基本功能外,笔者还利用其开放的应用接口结合其他软件为其添加以下新功能:用户并发数统计、策略路由、访问日志定时打包并异地备份。

3.1 NAT-PT网关的安装配置

NAT-PT网关采用NAT-PT软件搭建,它是近几年来非常成熟的NAT-PT开源软件之一,依据IETF的RFC2766协议设计,运行在Linux系统上,需要iptables、ip6tables和syslog模块的支持。目前能够实现HTTP、IMAP、POP3、SMTP、MMS、SSH、FTP、DNS、Telnet、Ping等协议的转换[ 15]。主要安装配置过程如下[ 16]:

(1)软件安装,目前最新版本为0.4.2,可以通过以下两种方式进行安装:

通过rpm安装包的方式安装:

#rpm -ivh naptd-version-system-arch.rpm

通过源代码编译的方式安装:

#tar -zxf naptd-0.4.2.tar.bz2 && cd naptd-0.4.2

#./configure && make && make install

(2)配置NAT-PT:

#naptd-confmaker

(3)配置iptables和ip6tables的支持环境:

ip6tables -A OUTPUT -p icmpv6 --icmpv6-type 1 -j DROP

ip6tables -A FORWARD -d 2000:ffff:: -j DROP

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

iptables -A INPUT -m state --state NEW -p tcp -m tcp --dport 22 -j ACCEPT

iptables -A INPUT -j DROP

3.2 NAT网关的安装配置

NAT-PT系统虽然能够很好地完成IPv4/IPv6之间的转换,但是其核心的iptables模块在数据安全性、网络性能(系统对网卡轮询模式的支持情况)、NAT性能等功能方面与FreeBSD环境下运行的IPFilter模块各有优缺点,综合多方面因素,本系统采用IPFilter模块,IPFilter模块在内核级实现NAT功能,需要对内核重新编译,主要编译配置过程如下:

(1)为编译创建必要的符号链接[ 17]:

#mkdir /usr/kern

#cp /usr/src/sys/i386/conf/GENERIC /usr/kern/safegate

#ln -s /usr/kern/safegate /usr/src/sys/i386/conf/safegate

(2)编辑内核配置文件[ 17]:

#cd /sys/i386/conf && ee safegate

在内核配置文件中加入相应功能模块[ 18, 19, 20]:

options IPFILTER #在内核中增加IPFilter模块的支持

options IPFILTER_LOG #开启IPFilter日志记录功能

options IPFILTER_DEFAULT_BLOCK #防火墙默认使用阻拦规则

options DEVICE_POLLING #打开网卡的轮询功能

options HZ=4000 #网卡轮询频率,与上面的设置配合使用

(3)编译、安装内核[ 17]:

#/usr/sbin/config safegate && cd . . / . . / compile/safegate

#make depend && make && make install

(4)配置NAT规则,地址映射的语法规则如下[ 18]:

map IF LAN_IP_RANGE -> PUBLIC_ADDRESS

例如:设备代码为rl0的网络适配器,对应教育网接口的NAT规则如下:

map rl0 192.168.10.0/25 -> 222.206.113.11/32 portmap tcp/udp 5000:65000

map rl0 192.168.10.0/25 -> 222.206.113.11/32 proxy port ftp ftp/tcp

map rl0 192.168.10.0/25 -> 222.206.113.11/32

在以上映射规则中,每个地址开放60 000个映射端口,如果机器数量增多,端口不够用,可以将PUBLIC_ADDRESS 部分设置为可包含多个网络地址的地址池[ 18]。配置完NAT规则后,启动NAT日志,系统将记录通过NAT网关的每一次地址映射的信息。日志记录功能由ipmon完成。例如:日志文件名称为nat.log存放在/var目录下面,命令如下:

#/sbin/ipmon -o N >> /var/nat.log &

IPFilter模块还自带一个功能强大、可灵活配置的防火墙,防火墙规则一般写入/etc/ipf.rules文件中,语法规则如下[ 18]:

action in-out options selection stateful proto src_addr,dst_addr object port_num tcp_falg stateful

例如:针对rl0网络接口响应数据包,全部允许输出,除80端口以外的其他数据包禁止进入,使用如下规则:

pass out quick on rl0 all with frags

pass in quick on rl0 proto tcp from any to any port=80 flags S keep state

block in quick on rl0 all with frags

在编写完规则后,使用命令更新防火墙配置:

#ipf -f /etc/ipf.rules

防火墙的过滤规则可以根据网络的实际应用情况进行配置,可有效防止非法数据和危险数据进入电子阅览室网络。

3.3 用户并发数统计

P2P软件过度使用和网络病毒爆发很容易造成网络拥堵,导致上网速度锐减。通过用户并发数的分析可迅速定位出现异常的机器。但软件未提供用户并发数自动统计功能,笔者利用系统提供的NAT Table(NAT地址映射表)的信息,实现了用户并发数自动统计。系统提供的NAT地址映射表的数据格式如下[ 18]:

MAP lan_addr port_num <- ->public_addr port_num [dst_addr port_num]

MAP为关键字,lan_addr、public_addr、dst_addr分别代表局域网机器的IP地址,映射后的IP地址和访问的目的地址,port_num为使用的系统端口号。NAT Table中记录着每一个访问记录的源地址、目的地址和端口,通过对局域网IP地址的统计可以得到用户并发数。程序使用C语言编写,算法流程如下:

(1)初始化变量:存放内网IP地址及并发数的数组IPBuffer[]和记录在线IP数量的变量N;

(2)调用“/sbin/ipnat -l >> ipn”输出NAT Table数据到文件ipn;

(3)依次读取文件ipn的各行内容,读取成功则转至步骤(4),如达到文件尾则转至步骤(6);

(4)以空格为分割符将每一行的数据分割,如果此行包含地址映射表的基本信息则转至步骤(5),否则转至步骤(3);

(5)将步骤(4)提取的lan_addr字段的信息依次与缓冲区IPBuffer[]中存在数据比较,如果此IP地址存在,相应的IP地址对应的并发数加1,在线IP数量N不变;如果不存在,添加此地址,将其对应的并发数赋值1,在线IP数量N加1,执行完成后返回步骤(3);

(6)将统计结果按照HTML定义的格式输出。

程序调试完成后,编译成CGI脚本,通过FreeBSD上安装的轻量级的Web服务器程序httpd执行,使用网页返回运行结果,统计结果如图3所示:

图3 用户并发数统计

3.4 策略路由优化访问路径

目前网络条件下通常采用双线接入,就是在保持原有教育网线路的同时再接入联通、电信、移动等运营商的线路。为了发挥各条线路的优势,通过策略路由优化访问路径,由Route指令[ 21]实现:

defaultrouter="202.194.232.abc"

#设置联通出口的网关为默认网关

route add -net 121.249.128.0/20 192.168.12.abc

#教育网和校内地址使用教育网出口

route add -net 222.206.112.0/20 192.168.12.abc

route add -net 192.168.0.0/16 192.168.12.abc

经过运行测试,策略路由能够优化网络访问路径,对访问不同网络资源的数据进行分流,提高线路的综合利用率。

3.5 访问日志的定时打包和异地备份

定时打包和异地备份访问日志是保障网络安全的重要措施。本系统使用crontab定时执行计划任务,设定在每天晚上10点执行beifen.sh脚本。feiben.sh使用Shell语言编写,对当天ipmon生成的日志进行打包、清理,使用mount_smbfs指令[ 22]把远程服务器上的共享目录挂接到NAT网关上,将备份数据拷贝至远程服务器上完成数据的异地备份。beifen.sh脚本的内容如下:

#!/bin/sh

year=﹩(date +%Y)

month=﹩(date +%m)

date=﹩(date +%d)

fullname=﹩year”-”﹩month”-”﹩date”.tar.gz” #生成当天备份文件文件名

killall ipmon #停止ipmon日志记录

cd /var

tar -czf ﹩ fullname nat.log #对日志文件打包

cat /dev/null > /var/nat.log #清空当天NAT日志

ipmon-o N > /var/nat.log & #再次启动ipmon

mv /var/﹩fullname /usr/local/﹩fullname

#加载远程服务器的共享目录

mount_smbfs -N -I 10.100.22.3 //nat_user@nat-bak/nat_bak /mnt

cp /usr/local/﹩fullname /mnt #向远程服务器拷贝备份数据

umount /mnt #卸载远程服务器的目录

4 性能对比测试

(1)客户端代理服务器设置对比

表1 不同代理服务器客户端设置对照表

通过表1的对比,NAT模式的安全网关在系统配置方面相对于Squid代理服务器更简单、快捷,适合电子阅览室使用。

(2)IPv6/IPv4通讯测试

在建立的IPv6 实验网中,使用IPv4和IPv6主机之间互Ping操作测试网络延迟,IPv4->IPv6平均网络延迟为1.395ms,IPv6->IPv4平均延迟为1.157ms,测试未发现连续丢包现象。IPv4<->IPv6 之间的通信的响应时间和连接的稳定性达到实际应用环境的要求。

(3)性能测试

由于IPv6网络未完全建成,可用来测试的资源很少,因此压力测试在IPv4网络环境下完成。

测试系统:Squid代理,网卡工作在中断模式;NAT网关,网卡设置为中断模式;NAT网关,网卡设置为轮询模式[ 13, 14]

测试方案:使用迅雷7.0版下载热门网络游戏资源,使用IE8浏览器播放优酷视频网站高清视频,逐渐增加测试机器数量,通过CISCO 3550监测网络流量,直到100M网络出口带宽全部被占用或者网络流量停止增长,记录CPU利用率(利用系统自带的Top软件),网络并发数(NAT网关利用ipnat-l输出数据,Squid代理利用客户端netstat-an命令统计总并发数)、客户端Ping命令延迟、网页响应速度等数据。统计结果如表2所示:

表2 网络性能测试对照表

从测试数据看出,由于Squid代理本身有Cache系统,对缓存检索时需要占用CPU资源,同时伴随磁盘I/O操作,资源占用率较高,影响网卡的中断响应,降低网络吞吐量,对大并发访问的承受能力差。NAT网关使用的IPFilter模块在内核层运行,仅对来往数据包进行转发,除了记录访问日志以外,对磁盘I/O操作很少,绝大部分CPU资源可用来处理网络数据,负载能力强;网卡设置为中断模式时CPU资源绝大部分被数据通讯中断占用,几乎无剩余,一定程度上影响了网络数据的吞吐量,设置轮询模式后数据通讯占用的系统资源大大减少,提高了网络的响应速度,在大并发情况下负载能力很强,适合当前大量P2P网络软件应用的需要。

5 结 语

本系统采用Linux、FreeBSD开源操作系统作为平台,整合IPFilter、NAT-PT、iptables、mount_smbfs、httpd等开源软件实现,系统开放性好,可根据不同的需要进行修改和扩充。系统布置完成后,无需更换电子阅览室现有的主要网络设备,客户机、硬件保护卡和计费服务器系统也无需升级,可直接并入IPv6 主干网,并能够保证良好的通讯性能。作为IPv4/IPv6过渡时期的一种解决方案,本系统为电子阅览室提供高性能网络的同时大大延长了现有硬件的使用寿命。此外,NAT网关的可配置防火墙性能优良,可以作为中等网络流量负载情况下的服务器的防火墙系统使用。

参考文献
[1] 朱田, 陈涛, 马迪, . 基于IPv4向IPv6过渡的IP追溯技术研究[J]. 计算机应用研究, 2011, 28(12): 4409-4413.
(Zhu Tian, Chen Tao, Ma Di, et al. Research of IP Traceback Technology Based on Transition from IPv4 to IPv6[J]. Application Research of Computers, 2011, 28(12): 4409-4413. ) [本文引用:1] [CJCR: 0.601]
[2] 张伟. IPv6 过渡技术发展历程分析[J]. 电信网技术, 2011(6): 28-30.
(Zhang Wei. Analysis of the Development of IPv6 Transition Technologies[J]. Telecommunications Network Technology, 2011(6): 28-30. ) [本文引用:1]
[3] Nordmark E, Gilligan R. Basic Transition Mechanisms for IPv6 Hosts and Routers[EB/OL]. (2005-10-12). [2012-01-02]. http://www.ietf.org/rfc/rfc4213.txt. [本文引用:1]
[4] Durand A, Fasano P, Guardini I, et al. IPv6 Tunnel Broker[EB/OL]. (2001-01-15). [2012-01-02]. http://www.ietf.org/rfc/rfc3053.txt. [本文引用:1]
[5] Carpenter B, Moore K. Connection of IPv6 Domains via IPv4 Clouds[EB/OL]. (2001-02-15). [2012-01-02]. http://www.ietf.org/rfc/rfc3056.txt. [本文引用:1]
[6] Templin F, Gleeson T, Thaler D. Intra-Site Automatic Tunnel Addressing Protocol (ISATAP)[EB/OL]. (2008-03-15). [2012-01-02]. http://www.ietf.org/rfc/rfc5214.txt. [本文引用:1]
[7] Tsirtsis G, Srisuresh P. Network Address Translation-Protocol Translation (NAT-PT)[EB/OL]. (2000-02-17). [2012-01-02]. http://www.ietf.org/rfc/rfc2766.txt. [本文引用:1]
[8] 乐德广, 吴孙桃, 郭东辉. NAT-PT技术及其在FreeBSD系统中的实现[J]. 电信科学, 2003, 19(2): 20-23.
(Le Deguang, Wu Suntao, Guo Donghui. NAT-PT Technology and Its Implementation Based on FreeBSD[J]. Telecommunications Science, 2003, 19(2): 20-23. ) [本文引用:1] [CJCR: 0.9304]
[9] 陆音, 石进, 黄皓, . 一种基于地址、协议转换方式的高性能IPv6/IPv4安全网关[J]. 计算机应用与软件, 2007, 24(9): 7-10.
(Lu Yin, Shi Jin, Huang Hao, et al. A Secure Gateway of High Performance for IPv6/IPv4 Based on NAT-PT[J]. Computer Applications and Software, 2007, 24(9): 7-10. ) [本文引用:1] [CJCR: 0.515]
[10] 王帅, 刘雷, 柴乔林. 应用Netfilter框架基于NAT-PT的IPv4/IPv6转换网关的实现[J]. 计算机工程, 2006, 32(13): 147-149.
(Wang Shuai, Liu Lei, Chai Qiaolin. Implementation of IPv4-IPv6 Translation Gateway Based on NAT-PT with Netfilter Framework[J]. Computer Engineering, 2006, 32(13): 147-149. ) [本文引用:1] [CJCR: 0.492]
[11] 杨晋升, 郭一通. NAT技术在图书馆代理服务器上的实现[J]. 图书情报工作, 2004, 48(3): 99-101.
(Yang Jinsheng, Guo Yitong. The Realization of NAT Technique on Proxy Server of Libraries[J]. Library and Information Service, 2004, 48(3): 99-101. ) [本文引用:1] [CJCR: 1.193]
[12] 曾湛伟. 基于Linux系统的透明代理服务器的构建及在图书馆局域网中的应用[J]. 现代图书情报技术, 2005(2): 49-52.
(Zeng Zhanwei. Construct a Transparent Proxying on Linux System and Its Application in Library Local Area Network[J]. New Technology of Library and Information Service, 2005(2): 49-52. ) [本文引用:1] [CJCR: 1.073]
[13] FreeBSD 82- Release Hardware Notes [EB/OL]. [2012-01-02]. http://www.freebsd.org/releases/8.2R/hardware.html. [本文引用:2]
[14] Red Hat Enterprise Linux 5. 4 Release Notes[OL]. [2012-01-02]. http://www.centos.org/docs/5/html/5.4/pdf/Release_Notes.pdf. [本文引用:2]
[15] Network Address Translation, Protocol Translation IPv4/IPv6 [EB/OL]. (2010-12-04). [2012-01-02]. http://tomicki.net/naptd.php. [本文引用:1]
[16] NAT-PT - Installation[EB/OL]. (2010-12-04). [2012-01-02]. http://tomicki.net/naptd.installation.notes.php. [本文引用:1]
[17] FreeBSD Hand book: Building and Installing a Custom Kernel[EB/OL. (2011-10-04). [2012-01-02]. http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-building.html. [本文引用:3]
[18] FreeBSD Hand book: The IPFilter (IPF)Firewall[EB/OL]. (2011-10-04). [2012-01-02]. http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/firewalls-ipf.html. [本文引用:5]
[19] Luigi Rizzo. Device Polling Support for FreeBSD[EB/OL]. (2002-02-10). [2012-01-02]. http://info.iet.unipi.it/~luigi/polling/. [本文引用:1]
[20] FreeBSD Kernel Interfaces Manual: Polling (4)[EB/OL](2007-04-06). [2012-01-02]. http://www.freebsd.org/cgi/man.cgi?query=polling. [本文引用:1]
[21] FreeBSD System Manager’s Manual: ROUTE (8)[EB/OL] . (1996-06-01). [2012-01-02]. http://www.freebsd.org/cgi/man.cgi?query=route. [本文引用:1]
[22] FreeBSD System Manager’s Manual: MOUNT_SMBFS (8)[EB/OL]. (2011-09-17). [2012-01-02]. http://www.freebsd.org/cgi/man.cgi?query=mount_smbfs. [本文引用:1]