一、前言 如今很多企事业单位拥有自己的LAN,介入互联网的方案比较流行的方案是选用如图1-1的拓扑结构来构建网络。服务器充当过滤和转发数据报的中间代理,专用服务器安置在防火墙后面避免受到。这类防火墙有硬件和软件之分,对于一个普通小型局域网来说,软件防火墙已请看如下
一、前言
如今很多企事业单位拥有自己的LAN,介入互联网的方案比较流行的方案是选用如图1-1的拓扑结构来构建网络。服务器充当过滤和转发数据报的中间代理,专用服务器安置在防火墙后面避免受到。这类防火墙有硬件和软件之分,对于一个普通小型局域网来说,软件防火墙已经可以满足需求,而软件防火墙领域几乎是IPfw和IPFilter的天下,它们的功能非常强大,安装也非常容易,防火墙管理员的主要是如何配置防火墙的rules,现在在网上可以很容易地找到如何配置rules的文献,但是很少有介绍其工作机理的资料,本文将以一个基于IPFilter防火墙的实际案例来分析这些rules的工作机理,并将其运用到实际案例中解决特殊的需求问题。
图1-1常用的拓扑结构
二、案例需求
本文所举案例为一实验室的局域网的防火墙配置。该实验室局域网拥有30台客户机,它们通过3个HUB连接在一起,通过一台安装有FreeBSD的服务器用IPFW共享一个固定IP连接Internet,该服务器除了充域网的防火墙之外,在其还运行了几乎所有FreeBSD能够提供的大众化服务,如WEB、TOMCAT、JAVA、FTP、SMABA、MAIL、DNS、TELNET等(详情请参考cnfug期刊第八期的《用FreeBSD构建家庭网络世界》和第九期的《基于FreeBSD操作系统的安全电子邮件系统架设》),随着使用人数的增多,该服务器慢慢有些不堪重负,经常可以看到在后台运行的NATD服务占用了约50%的CPU时间,尤其是TOMCAT服务启动并调用JDK之后占用的内存高达106M之巨,在高峰期客户端的上网速度有明显变慢。为了缓解服务器的压力,我采用了前面介绍的现今比较流行的方案,把防火墙和专用服务器的功能分开,防火墙采用了由cnfug开发的基于FreeBSD的FloppyFirewall系统。如此,一来可以节约硬件成本,因为所有配件下来不到150元;二来可以方便日后的,因为一旦配置好防火墙之后,再也不怕断电等会导致硬盘版操作系统数据丢失的意外事故,也方便系统的备份(仅仅备份一张软盘镜像而已);三来可以对在防火墙后的专用服务器提供一道安全屏障,这点是显而易见的,虽然对于我们来说网络安全并不是太重要。
这套由cnfug开发的软盘版的FreeBSD防火墙使用的是4.9版本的FreeBSD,防火墙使用的是IPFilterV3.4.20,后的网络的整体拓扑结构如图2-1所示。
图2-1网络物理拓扑图
本案例的需求主要有四点:
1、子网192.168.0.0/24中的所有电脑可以借助网关(防火墙)192.168.0.1透明地访问互联网。
(注:192.168.0.0/24这种格式在IPFilter的rules中大量使用,其中/24=3×8表示三个字节的子网掩码255.255.255.0,一个C类网段,在这里表示IP地址前三段等于192.168.0的所有电脑。同理,/16表示一个B类网,/32唯一标识一台主机。)
2、外网的客户机可以透明地可以访问IP地址为192.168.0.251的多功能服务器(Web、Email、Ftp服务)和IP地址为192.168.0.2的文件兼打印服务器。
3、内网客户机可以和外网客户机一样通过访问外网IP202.115.65.225来访问内网的web、email等服务器。
4、内网的客户机可以访问远程的Ftp服务器同时外网的客户端也可访问内网的Ftp服务器。(由于Ftp协议的特殊性在此专门提出)从图2-1看到,防火墙的两块8139网卡rl1和rl0分别连接Internet和局域网的交换机,外网卡IP地址为202.115.65.225内网卡IP地址为192.168.0.1。由于内核中IPf的缺省设置为blockall,即过滤所有的包,在该情况下,防火墙的两块网卡不能和有任何数据交换,ping任何地址都提示“ping:sendto:noroutetohost”,所以必须人工配置IPf规则,如下命令可完成让所有数据报进出防火墙的两块网卡:
#cat<<end>ipf.conf//红色的字表示是系统提示符
>passinall//允许任何包从任何网卡进
>passoutall//允许任何包从任何网卡出
>end//保存
#ipf–fipf.conf//执行ipf.conf文件中的过滤规则
#sysctl–wnet.inet.ip.forwarding=1//打开内核的ip转发
现在防火墙没有任何过滤规则,可以允许所有的数据报进出自己的两块网卡,但是它还不知道如何把到达其上的数据报转发,下面我将详细介绍怎么让它按照我们的需求转发数据报,这也是本文的重点所在。(注:本文主要目的是介绍IPfilter防火墙软件对数据报转发机理,也就是路由功能,对于如何对数据报进行过滤不是本文的内容,请参考IPf的相关文献。)
三、IPFilterNAT机理分析
IPFilter的功能主要包括过滤和路由两部分,所以该防火墙软件包有两个主要工具-IPf和IPnat。IPf可以实现数据报过滤,上一节就用到了IPf命令来使passin/ourall过滤规则生效,路由功能则由IPnat来实现,IPnat命令用来读取并执行用户设定的路由规则。
3.1用map指令来共享IP地址
为了让192.168.0.0/24(24=3×8即三个字节的子网)的电脑可以共享一个外网IP来访问互联网,用一条最基本的两条rules就可以实现,如下所示:
maprl1192.168.0.0/24->202.115.65.225/32portmaptcp/udp10000:39999
maprl1192.168.0.0/24->202.115.65.225/32
这两条rules从字面上很好解释,即在网卡rl1上把192.168.0.(/24表示3字节的子网掩码,标识一个C类网段的所有IP地址)网段的所有IP地址和IP地址202.115.65.225(/32表示4字节的子网掩码,唯一标识一个IP地址)进行单向映射,portmap的用处是告诉防火墙把内网客户机的端口进行临时存储时的映射范围为10000-39999,具体原理在下面将详述。
图3-1内网用户访问外网WEB服务器的映射过程
从图3-1中,内网中IP地址为192.168.0.3的PC客户机欲访问外网的IP地址为202.108.249.134的web服务器,连接过程如下:
①建立连接阶段(SYN第一次握手):客户机先建立一个随机的TCP端口1413准备和web服务器的80端口连接,但由于它们不在同一个网段,所以请求连接的SYN数据报被发送到了和客户机在同一个网段的网关服务器,在这里网关服务器就是我们的防火墙兼路由器,所以数据报在数据链路层会先发送至我们的防火墙的内网卡,从下面捕获的数据报中可以看到,数据报的以太帧的目的地址是网关的MAC地址。网关即防火墙收到该数据报之后解开IP报取出目的IP地址,发现目的地址是外网IP所以在内部就转发到外网卡rl1,rl1会按照IPnat设置的转发规则,把在192.168.0.发来的数据报接受下来,然后改变IP头中的源地址为它的IP地址(202.115.65.225),map指令会把内部客户端的IP和端口号暂时保存在一个临时路由表中以便接受到返回的数据报时可以正确地交付给客户端,客户机的端口号并不是直接保存起来,而是防火墙先在portmap的范围内找到一个端口和其一一对应起来保存,前面的设置portmap的范围为10000:39999的原因主要是因为这个范围的端口一般不会被防火墙上本身自己的端口相同,如果端口冲突的话会导致严重问题,这种暂存功能在防火墙过滤中也经常被使用,Ipf规则中的keepstate就是用来在屏蔽外网数据进入的状态下把内网的请求端口号临时保存到一张路由表中以便返回数据报可以顺利被接收。
tags:192.168.0.25