防火墙技术及其在LINUX下的实现
作者:孙自永
文章摘要:
本文主要从INTERNET的安全性问题说起,具体讲述了当今较为流行的防火墙技术以及其在LINUX环境下的实现。
关键词 防火墙,包过滤,LINUX
一、Intranet的安全性问题
安全性问题是网络上一个非常重要的问题.网络上一般存在两种安全性问题:一种是各种真正的攻击,无论来自外界还是内部的Hacker企图侵入并破坏系统;另一种来自软件、硬件和程序过程本身的脆弱性.与过去的PC机/LAN的客户/服务器环境相比,Intranet在安全性方面可以说取得了重大进展.因为Intranet模式是将应用程序和数据放在一个集中式网络服务器上,而不是台式PC机中.这样防护一个设有多重保护堡垒的中心服务器要比保护成千上万个分散的服务器和客户机要容易得多.但随着Internet网络规模和信息量的不断扩大,企业和社团网络的急剧增加,Intranet网络上企业和社团的数据遭到偷窃甚至破坏的可能性也随之增加.因为Internet服务给企业提供挖掘和共享Internet资源的条件,而获取巨大收益,同时,也为窃取企业秘密数据的非法用户敞开大门.因而,Intranet安全成为关键问题.防火墙(Firewall)技术就是针对Intranet网的特点而建立的防范措施。
一般情况下,网络的不安全性主要由以下原因造成:
1.操作系统本身的问题:
如Windows 98、NT和Linux系统本身的一些缺陷(BUG)。
2.各种应用服务存在安全问题:
Telnet、ftp、NFS、RPC、rlogin、X11、DNS、Jave、Web、Active X等都有安全问题。
例如Telnet、ftp协议在用户认证时,passward以明文方式传送。X11的净文本可能泄漏,终端可能被接管,键盘输入被窃取。Web服务器很难设置安全,CGI script也不安全。
3.TCP/IP协议本身设计时主要考虑数据传输的可靠性和完整性,对于安全因素几乎没有考虑。
4.攻击可能来自Internet上的任何一个地方。它可以是匿名攻击,因此追查起来非常困难。
5.对于一组相互信任的主机,其安全程度由最弱的一台主机决定。一个薄弱环节被攻破,则会殃及其它主机。
总之,当机构的内部数据网暴露在Internet黑客面前时,基于host的安全很容易被攻破,正是在承认主机不安全,且对每台主机分别进行保护几乎是不可能的前提下出现了防火墙。
二、防火墙系统概述
防火墙是这样一个或一组网络安全设备,它位于内部网络和外部网络之间的某一个适当的扼制点上(choke point),来限制外部非法用户访问内部网络资源和内部非法向外传递信息。也就是说,防火墙是指一种保护措施,它可按照用户事先规定的方案控制信息的流入和流出,监督和控制使用者的操作.使用户可以安全使用网络,并避免受到Hacker的袭击.
一般防火墙系统主要决定:
1、哪些内部服务可以被外部访问;
2、外部哪些主机或用户可以访问内部这些被允许访问的服务;
3、哪些外部服务可以被内部主机或用户访问。
防火墙检查内部和外部网络之间传递的信息,它只允许授权的数据通过。它在内外部网络之间构筑一个屏障。防火墙系统本身安全防御能力很高,能够抵抗各种进攻和渗透。防火墙不仅仅是路由器、堡垒主机等网络安全设备的组合,它还是安全策略的一个部分。安全策略建立了全方位的防御体系。安全策略包括机构规定的网络访问、服务访问、本地和异地用户认证、拨入和拨出、数据加密、病毒防御,以及每个用户的安全责任。只有防火墙,而没有完整的安全策略,则防火墙形同虚设。
三、常用防火墙技术
1.包过滤技术(IP filtering or packet filtering)
这种技术的原理在于监视并过滤网络上流入和流出的IP包,拒绝发送可疑的包。用户可在路由表中设定需要屏蔽或需要保护的源/目的主机的IP地址或端口号。在外来数据包进入企业的内部网络之前,路由器先检测源/远宿主机地址,如地址不符,则将该包滤除。这种防火墙又称为过滤式路由器。路由器作用在IP层,只在企业网络与Internet采用直接IP连接的情况下才采用,而且因为它只检测数据包的IP地址,一旦破坏者突破此防线便可为所欲为。所以在安全性要求较高的场合,通常还需要配合其它技术来加强安全性。
包过滤路由器一般有两种过滤方式:与服务相关的过滤和与服务无关的过滤。
与服务相关的过滤与服务相关的过滤是指根据特定的服务允许或拒绝流动的数据。因为大多数服务器都是在特定的TCP/UDP端口上监听。
与服务无关的过滤
有几种类型的攻击与服务无关,无法使用基本的包头信息来识别,只有通过审查路由表和特定的IP选项,检查特定段的内容,才能发现。下面有几个例子:
(1)源地址欺骗攻击(Source IP Address Spoofing Attacks)。入侵者从外部传来一个假装是来自内部主机的数据包,希望能渗透到使用了源地址安全功能的系统中。对付这种攻击的方法是让路由器丢弃任何来自外部端口的使用了内部IP地址的数据包。
(2)源路由攻击(Source Routing Attacks),利用源站点指定数据包在网络中所走的路线,将数据包循着一条不安全的路径到达目的地。对付这种攻击的方法是让路由器丢弃任何有源路由选项的数据包。
(3)极小数据段攻击(Tiny Fragment Attacks)。该攻击利用了IP分段的特性,创建极小的分段并强行将头信息分成多个数据包段。希望包过滤路由器只检查第一个分段而让其余分段通过,从而绕过用户定义的过滤规则。对付这种攻击,只要让路由器丢弃协议类型为TCP、IP Fragment Offset等于1的数据包就可以了。
2.应用网关技术(Application gateway)
该技术又称为双主机技术(Dual Homed Host),采用主机取代路由器执行控管功能。主机是内外网络连接的桥梁,是内外联系的唯一途径,起着网关的作用,也被称为Bastion Host(堡垒主机)。在应用网关上运行应用代理程序(Application proxy),一方面代替原服务器程序牞与客户程序建立连接,另一方面代替客户程序,与原服务器建立连接,使合法用户可以通过应用网关安全地使用Internet,而对非法用户不予理睬。常用的代理程序有WWW protxy,E-mail proxy等。与包过滤技术相比,应用网关技术更加灵活;由于作用在用户层,因此能执行更细致的检查工作。但软件开销大,管理和维护比较复杂。
其他常用的安全机制还有身份验证(Authentication)、访问控制(Access Control)、日志(Log)、报警(Alert)等。
四、防火墙技术在LINUX下的实现
1.物理构成
在LINUX下建立作为防火墙,采用Screened Subnet结构。同时在安装LINUX操作系统的PC机上安装两块网卡,给这两块网卡的中断向量分别配置为10、11。并在/etc/lilo.conf文件中加上如下配置信息:
append="ether=10,0x300,eth0\
ether=11,0x280,eth1"
用ifconfig命令把eth0配置为内部网关地址:192.168.1.1,把eth1配置为外部网关地址:20.2.51.33,这样计算机就跨接在内部网与外围网之间,它既具有路由的功能,又具有防火墙的功效。内部网的网址为:192.168.1.0 ~ 192.168.1.255,外围网的网址为:20.2.51.33~20.2.51.47,外围网再经过一个路由器与Internet相连。另外还要用make me nuconfig命令建立Linux的一个新Kernel,建立新Kernel时,打开Network Firewall功能。这样计算机Reboot后Linux操作系统就具有"防火"功能了。
2.如何配置防火墙
防火墙主要有以下三种用法:Accounting,Blocking,Forwarding。Accounting规则用来统计经过防火墙的IP Packets流量。Blocking规则是防火墙用来接收与拒绝途经的IP Packets。Forwarding规则是防火墙用来对指定的IP Packets进行过滤及转发,它能够基于对IP Packets的源地址及目的地址的判断、TCP或UDP的Port的筛选、TCP及UDP协议的选择等方法来制定相应的过滤及防护措施。
Linux操作系统中,用来设置防火墙规则的命令工具有ipfw、ipfwadm。其中ipfwadm能够提供更直观的接口、更好的输出及更好的参考说明。本文主要介绍ipfwadm命令。这两个命令都只能由超级用户来使用,它们能够增加、删除或显示防火墙的记帐及防护规则的内容。
在实施防火墙的作用之前,必须首先制定一个防护规则表格,规定哪些机器需要保护,以及什么样的保护。假设建立的防火墙必须满足以下条件:
①允许内部网络(192.168.1.0/24)的机器能够Telnet、Ftp到Internet上的任一点,而不允许Internet上的其它机器Telnet、Ftp到内部网上来。
②允许内部网及外部网的机器能够双向传送E-mail,并且外部网发来的E-mail只能够与内部网的Mailhub(192.168.1.2)相联系。
制定如表1所示的Forswarding规则。
表1 Forwarding规则
其中第一条"denyeverything"是一条经常用到的规则,这样做了之后,每当需要允许某一个任务时,只要增加一条accept规则,这样网络管理员能够很清楚地制定防火墙规则。
以下就是用ipfwadm命令来建立上述的防火墙规则:
# ipfwadm-F-f
# ipfwadm-F-p deny
# ipfwadm-F-a accept-b-P tcp-S 0.0.0.0/0 23\
-D 192.168.1.0/24 1024:65535
# ipfwadm-F-a accept-b-P tcp-S 0.0.0.0/0 21\
-D 192.168.1.0/24 1024:65535
# ipfwadm-F-a accept-b-P tcp-S 0.0.0.0/0 20\
-D 192.168.1.0/24 1024:65535
# ipfwadm-F-a accept-b-P tcp-S 0.0.0.0/0 25\
-D 192.168.1.2 1024:65535
# ipfwadm-F-a accept-b-P tcp-S 192.168.1.2 25\
-D 0.0.0.0/0 1024:65535
其中第一条# ipfwadm-F-f的作用是清除以前所定义的所有规则。为保证每一条规则都生效并不被遗漏,我们可以把以上所写的命令写入/etc/rc.d/rc.ipfw文件中,并使Linux的PC机一开机就运行它。
发布人:netbull 来自:China-pub