基于LINUX操作系统的防火墙技术及其具体实现
步骤图中省略),然后通过防火墙端口1050与该地址的80端口建立一个连接,请求页面。
(3)www.263.net服务器接到请求后将页面传给squid代理。
(4)防火墙代理得到页面后,把数据复制到(1)中所建立的连接上,IE得到数据并
将“www.263.net”页面显示出来。
通过以上描述,可以清楚地了解到内部主机、LINUX代理防火墙以及外部服务器之间是如何进行数据传输的,那么,在LINUX防火墙内部,那些“防火链”又是如何工作的呢?其工作过程如图3所示:
steven主机发来的数据包经由内部接口eth1进来后,首先接受INPUT链的“检查”:系统内核从包头中提取出信息,与INPUT链中所有适用于eth1接口的过滤规则逐个比较,直到匹配通过。之后,该数据包被转发给本地的代理进程。同样,代理进程发送给远程Web服务器的数据包在从防火墙外部接口发送出去之前,也要经过OUTPUT链的“检查”,即与OUTPUT链中所有适用于eth0接口的规则一一比较。返回的过程正好与上述相反,在此就不再赘述
为了实现以上过程,我们必须在防火墙规则脚本中添加以下规则:
ipchains –A input –i eth1 –p tcp –s 192.168.0.2 1110 –d 192.168.0.1 8080 –j ACCEPT
ipchains –A output –i eth0 –p tcp –s 202.117.120.1 1050 –d 211.100.31.131 80 –j ACCEPT
ipchains –A input –i eth0 –p tcp !-y –s 211.100.31.131 80 –d 202.117.120.1 1050 –j ACCEPT
ipchains –A output –i eth1 –p tcp ! –y –s 192.168.0.1 8080 –d 192.168.0.2 1110 –j ACCEPT
从上文对代理功能的原理和实现的叙述中,我们可以看出,LINUX防火墙实际上扮演了一个“代理网关”的角色。内部主机和远程服务器分别都只与防火墙进行连接,而真正的“起点”和“终点”之间却毫无联系。
3.3 IP伪装
IP伪装(IP Masquerade)是LINUX操作系统自带的又一个重要功能。通过在系统内核增添相应的伪装模块,内核可以自动地对经过的数据包进行“伪装”,即修改包头中的源目的IP信息,以使外部主机误认为该包是由防火墙主机发出来的。这样做,可以有效解决使用内部保留IP的主机不能访问互联网的问题,同时屏蔽了内部局域网。这一点,与前面所讲的代理所达到的目的是很类似的。
关于IP伪装在LINUX防火墙内部的具体实现过程,请看图4。
仍以图2中所示的典型情况为例,steven主机的IE进程直接与远程的Web服务器建立一个连接。当数据包到达防火墙的内部接口后,照样要例行INPUT链的检查。之后,数据包被送到FORWARD链,接受系统内核的“伪装处理”,即将包头中的源IP地址改为防火墙外部接口eth0的地址,并在系统中做下记录,以便一会儿对其回应包的目的IP进行“恢复”。这样,当该数据包顺利从外部接口出来时,其包头中源IP已被改为202.117.120.1。远程服务器会认为这是从防火墙的合法地址发来的,从而对其做出响应。当远程服务器返回的回应包到达防火墙时,先经过INPUT链,然后会根据系统关于IP伪装的记录对数据包的目的IP进行恢复,即将202.117.120.1改为192.168.0.2,最后再经过OUTPUT链返回到steven主机。
为了实现这个过程,我们必须在防火墙规则脚本中添加以下规则:
ipchains –A input –i eth1 –p tcp –s 192.168.0.2 1110 –d 211.100.31.131 80 –j ACCEPT
ipchains –A output –i eth0 –p tcp –s 202.117.120.1 1050 –d 211.100.31.131 80 –j ACCEPT
ipchains –A input –i eth0 –p tcp !-y –s 211.100.31.131 80 –d 202.117.120.1 1050 –j ACCEPT
ipchains –A output –i eth1 –p tcp ! –y –s 211.100.31.131 80 –d 192.168.0.2 1110 –j ACCEPT
ipchains –A forward –i eth0 –s 192.168.0.2 1110 –d 211.100.31.131 80 –j MASQ
与代理功能比较而言,IP伪装不需要安装相应的代理软件,数据包的伪装对用户来说都是“透明”的,并且整个过程都是在IP层实现,因此实现速度较快。缺点是不能对经过的数据包作详细的记录。
以上介绍了LINUX防火墙在实际的设置中常用到的三种功能。但一般说来,用户在创建自己的防火墙规则脚本时,可以根据自己的需要将这三种功能组合起来实现。
4 一个LINUX防火墙实例
以下是我前一段时间为某办公室搭建的LINUX防火墙的实际配置,给出以供参考。
该室网络拓扑图如图5:
有两个局域网,LAN1地址:202.117.120.65/255.255.255.248
为公共网络IP,LAN2地址为192.168.0.0/255.255.255.0,为内部保留地址。LINUX防火墙有两个内部接口:202.117.120.70接LAN1;192.168.0.1接LAN2。
现对防火墙进行配置,使LAN2的主机通过IP伪装访问互联网,但只允许使用外部Web代理服务器202.117.112.34的1252端口。LAN1中的主机被限制使用几种常用的互联网服务(DNS、SMTP、POP3、HTTP和FTP)。
下面就是创建的防火墙规则脚本:
#/etc/rc.d/rc.firewall
#!/bin/sh
# eth0---External_interface
# eth1---LAN1_interface
# eth2---LAN2_interface
echo "Starting firewalling . . ."
#Flush any existing rules from all chains
ipchains -F
#Set the default policy to deny
ipchains -P input DENY
ipchains -P output REJECT
ipchains -P forward REJECT
#Enable traffic on the loopback interface
ipchains -A input -i lo -j ACCEPT
ipchains -A output -i lo -j ACCEPT
#Enable the traffic on the eth1
ipchains -A input -i eth1 -j ACCEPT
ipchains -A output -i eth1 -j ACCEPT
#the traffic on the eth2 only enablling using the WEB PROXY
ipchains -A input -i eth2 -p tcp -s 192.168.0.0/24 1024:65535 -d 202.117.112.34 1252 -j ACCEPT
ipchains -A output -i eth2 -p tcp ! -y -s 202.117.112.34 1252 -d 192.168.0.0/24 1024:65535 -j ACCEPT
#Forwarding rules
ipchains -A forward -i eth0 -s 202.117.120.64/29 -j ACCEPT
ipchains -A forward -i eth0 -s 192.168.0.0/24 -j MASQ
ipchains -A forward -i eth1 -d 202.117.120.64/29 -j ACCEPT
#Enable outgoing the packets from LAN on the External_Interface
ipchains -A output -i eth0 -j ACCEPT
#Enable incoming some ICMP messages on eth
# 1.Dest_Unreachable,Service_Unavailable
ipchains -A input -i eth0 -p icmp -s any/0 3 -d 202.117.120.64/29 -j ACCEPT
# 2.Time_Exceeded
ipchains -A input -i eth0 -p icmp -s any/0 11 -d 202.117.120.64/29 -j ACCEPT
# 3.Allow outgoing pings to anywhere
ipchains -A input -i eth0 -p icmp -s any/0 0 -d 202.117.120.64/29 -j ACCEPT
#Enable Proxy of 202.117.112.34:1252
ipchains -A input -i eth0 -p tcp ! -y -s 202.117.112.34 1252 -j ACCEPT
#DNS (53) (DNS:202.117.112.3)—client modes
ipchains -A input -i eth0 -p udp -s 202.117.112.3 53 -d 202.117.120.64/29 1024:65535 -j ACCEPT
ipchains -A input -i eth0 -p tcp ! -y -s 202.117.112.3 53 -d 202.117.120.64/29 1024:65535 -j ACCEPT
#SMTP(25)Enable sending mail through a remote SMTP gateway
ipchains -A input -i eth0 -p tcp ! -y -s any/0 25 -d 202.117.120.64/29 1024:65535 -j ACCEPT
#POP(110)--Enable receiving mail from a remote POP server
ipchains -A input -i eth0 -p tcp ! -y -s any/0 110 -d 202.117.120.64/29 1024:65535 -j ACCEPT
#HTTP(80) --Enable accessing remote WEB sites as a client
ipchains -A input -i eth0 -p tcp ! -y -s any/0 80 -d 202.117.120.64/29 1024:65535 -j ACCEPT
#FTP(20,21) --Enable accessing remote FTP servers
ipchains -A input -i eth0 -p tcp ! -y -s any/0 21 -d 202.117.120.64/29 1024:65535 -j ACCEPT
ipchains -A input -i eth0 -p tcp -s any/0 20 -d 202.117.120.64/29 1024:65535 -j ACCEPT
ipchains -A input -i eth0 -p tcp ! -y -s any/0 1024:65535 -d 202.117.120.64/29 1024:65535 -j ACCEPT
echo "done"
exit 0
5 结束语
本文着重从防火墙内部工作过程的角度分别对LINUX防火墙的包过滤、代理以及IP伪装功能进行了剖析,同时涉及到了一些网络配置、用ipchains具体实现等方面的内容。文末给出的实例已在实际中调试通过。
参考文献
1 Robert L.Ziegler,《Linux防火墙》人民邮电出版社,2000.10
2 W.Richard Stevens,《TCP/IP详解 卷一:协议》机械工业出版社,2000.4.1
3 Rusty Russell,“Linux IPCHAINS-HOWTO”,netfilter.samba.org,Jul 4,2000
5 Rawn Shah,“Using your old Pentiums and Linux to create a Firewall”,Independent
6 technologist and freelance journalist,September,1999
Tags:
作者:佚名评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论