基于LINUX操作系统的防火墙技术及其具体实现

[摘要] 本文介绍了LINUX下常用的防火墙规则配置软件Ipchains;从实现原理、配置方法以及功能特点的角度描述了LINUX防火墙的三种 功能;并给出了一个LINUX防火墙实例作为参考。

 

[关键字] LINUX防火墙、ipchains 、包过滤、代理、IP伪装


1      前言


      防火墙作为网络安全措施中的一个重要组成部分,一直受到人们的普遍关注。LINUX是这几年一款异军突起的操作系统,以其公开的源代码、强大稳定的网络功 能和大量的免费资源受到业界的普遍赞扬。LINUX防火墙其实是操作系统本身所自带的一个功能模块。通过安装特定的防火墙内核,LINUX操作系统会对接 收到的数据包按一定的策略进行处理。而用户所要做的,就是使用特定的配置软件(如ipchains)去定制适合自己的“数据包处理策略”。


2      LINUX防火墙配置软件—Ipchains


      Ipchains是LINUX 2.1及其以上版本中所带的一个防火墙规则管理程序。用户可以使用它来建立、编辑、删除系统的防火墙规则。但通常,需要自己创建一个防火墙规则脚本 /etc/rc.d/rc.firewall,并使系统启动时自动运行这个脚本。


      一个LINUX防火墙系统的安全机制是通过Input、 Output、Forward这三个“防火链”来实现的。而用户正是使用ipchains在这三个“链”上分别创建一套“防火规则”,来完成对到来数据包 层层限制的目的。


      其中,每个链都包括一组由用户创建的过滤规则,数据包依次到达每个链,并比较其中的每条规则,直到找出匹配规则并执行相应策略(如通过、拒绝等),否则执 行默认策略。实际中,数据包在到达Input链之前还要进行测试和正常性检查,在到路由表之前还要被判断是否被伪装,这些,在本图中都被省略了。


Ipchains 经常使用的命令行格式如下:


Ipchains –A chain [–i interface] [–p protocol] [[!] -y]
[–s source-ip [port]] [-d destination-ip [port]] –j policy [-l]


对各选项的说明如下表:


-A <chain>      添加一规则到链尾。chain可为input、output、forward。
-i <interface>      指定本规则适用的网络接口。通常有eth0、eth1、lo、ppp0等。
-p <protocol>      指定本规则适用的IP协议,如tcp、udp、icmp等。
[!] –y      -y表明tcp握手中的连接请求标志位SYN; ! –y 表示对该请求的响应。
-s src-ip [port]      指明数据包的源IP地址,port表示本规则适用的端口号。
-d dst-ip [port]      指明数据包的目的IP地址及端口号。
-j policy      指定本规则对匹配数据包的处理策略:ACCEPT、DENY或REJECT。
-l      在系统日志/var/log/messages中记录与该规则匹配的数据包。


3      LINUX防火墙的几种常见功能


      由于每一个用户的要求和所处的环境都不一样,LINUX防火墙会根据用户的设置实现各种不同的功能。但一般说来,以下三种功能是大多数用户最常用到的。


3.1 包过滤


      对数据包进行过滤可以说是任何防火墙所具备的最基本的功能,而LINUX防火墙本身从某个角度也可以说是一种“包过滤防火墙”。在LINUX防火墙中,操 作系统内核对到来的每一个数据包进行检查,从它们的包头中提取出所需要的信息,如源IP地址、目的IP地址、源端口号、目的端口号等,再与已建立的防火规 则逐条进行比较,并执行所匹配规则的策略,或执行默认策略,这个过程在图1中已经形象的表现出来。


      值得注意的是,在制定防火墙过滤规则时通常有两个基本的策略方法可供选择:一个是默认允许一切,即在接受所有数据包的基础上明确地禁止那些特殊的、不希望 收到的数据包;还有一个策略就是默认禁止一切,即首先禁止所有的数据包通过,然后再根据所希望提供的服务去一项项允许需要的数据包通过。一般说来,前者使 启动和运行防火墙变得更加容易,但却更容易为自己留下安全隐患。


    通过在防火墙外部接口处对进来的数据包进行过滤,可以有效地阻止绝大多数有意或无 意地网络攻击,同时,对发出的数据包进行限制,可以明确地指定内部网中哪些主机可以访问互联网,哪些主机只能享用哪些服务或登陆哪些站点,从而实现对内部 主机的管理。可以说,在对一些小型内部局域网进行安全保护和网络管理时,包过滤确实是一种简单而有效的手段。


3.2 代理


      LINUX防火墙的代理功能是通过安装相应的代理软件实现的。它使那些不具备公共IP的内部主机也能访问互联网,并且很好地屏蔽了内部网,从而有效保障了 内部主机的安全。为了清楚地描述这一重要功能的实现过程,特假设以下典型情况,如下所示:
 
      steven为内部网中一台IP是192.168.0.2的主机,其上安装有IE5.0浏览器,并配置为使用防火墙主机192.168.0.1:8080 作为代理。firewall就是我们讨论的LINUX防火墙,有两个网络接口,分别是内部接口eth1=192.168.0.1、外部接口 eth0=202.117.120.1。在firewall主机上安装有Web代理软件“squid”,并配置其代理端口为8080。 www.263.net为263网站的Web服务器,IP为211.100.31.131,Web服务端口80。


      如果要从steven主机访问 263的主页,其具体的通信过程如图所示:
    (1)IE通过steven的非专用端口1110 (在1024~65535之间随机产生)与防火墙的代理端口8080建立连接,请求“http://www.263.net”页面。
    (2)squid 代理接收到请求后,先查找域名“www.263.net”,得到地址211.100.31.131(该步骤省略),然后通过防火墙端口1050与该地址的 80端口建立一个连接,请求页面。
    (3)www.263.net服务器接到请求后将页面传给squid代理。
    (4)防火墙代理得到页面 后,把数据复制到(1)中所建立的连接上,IE得到数据并将“www.263.net”页面显示出来。


      通过以上描述,可以清楚地了解到内部主机、LINUX代理防火墙以及外部服务器之间是如何进行数据传输的,那么,在LINUX防火墙内部,那些“防火链” 又是如何工作的呢? 


      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防火墙内部的具体实现过程:


      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防火墙的实际配置,给出以供参考。
    
      有两个局域网,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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
超完整的论文、 本人制作、大家分享 目 录 摘要 4 Abstract 5 引言 6 第1章 绪论 7 1.1Intranet系统以及其安全问题 7 1.2防火墙技术 8 1.2.1 防火墙的定义 9 1.2.2 防火墙的基本类型 9 1.2.3 包过滤防火墙 10 1.2.4 应用网关 11 1.2.4.1 回路层代理 12 1.2.4.2 应用层代理 13 1.3 设计实现Linux防火墙的缘起与目标 13 第2章 使用防火墙构造安全的解决方案 15 2.1 堡垒主机或双穴主机网关 15 2.2 被屏蔽主机网关 16 2.3 被屏蔽子网 16 第3章 Linux防火墙技术 18 3.1 Linux 防火墙技术的发展 18 3.2 利用Linux 实现路由和包过滤 18 3.2.1 Ipchains原理及简介 18 3.2.1.1 原理简介 18 3.2.1.2 源代码分析 20 3.2.2 Ipchains命令使用简介 23 3.3 Linux下代理的实现 29 3.3.1代理服务器概述 29 3.3.1.1 什么是代理服务器 29 3.3.1.2 代理服务器的功能 30 3.3.2 代理软件的简介和比较 33 结 论 36 致 谢 38 参考文献 39 摘要 随着计算机网络,特别是近年来Internet的飞速发展,各公司、企业、政府机关交流信息的方式正在发生变化。但这些部门面临的最大的问题就是如何用一种有效的安全解决方案来保护网络及信息系统不受攻击。在众多的方案中,防火墙是安全解决策略的关键部分。 防火墙是一类安全防范措施的总称,它是在两个网络之间强制实施访问控制策略的一个系统或一组系统。本文主要是针对有关防火墙的技术和防火墙应用的模型、设计实现进行研究,通过对各种防火墙技术防火墙体系结构的分类比较,对明确防火墙相关概念和选择使用防火墙上具有指导意义。同时,介绍了一种在Linux系统下集包过滤与代理于一身的复合防火墙设计实现过程。在这里介绍的一些技术细节和实现策略可以为今后的防火墙构造提供借鉴。这种防火墙技术不仅可以使系统更具有灵活性和可扩展性,更使得系统的安全性得到提高。 关键词: 防火墙 包过滤 代理 复合型防火墙 Linux Abstract Recently, with computer network and Internet increasing rapidly, its have changed forever the way of corporations, enterprises, and organizations communicating. But the vital problem that they must face is how to protect their network and information system against attack by setting an effective network security solution. In all of this solution, firewall is one of the important parts. Firewall is a type of network security measure. A firewall is a system or group of systems that enforces an access control policy between two networks. In the dissertation, we study on the modeling, design, and implementation of firewall technologies and firewall application, By the comparing and classifying the all types of firewall technology, we present a whole concept of firewall technology to reader. It is the good guide to choice and building firewall system. In additional, we illustrate a process of designing and implementing a complex firewall system which make packet filter and proxy under Linux operation system, All of
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值