概述
在众多的网络防火墙产品中,Linux操作系统上的防火墙软件特点显著。它们和Linux一样,具有强大的功能,大多是开放软件,不仅可免费使用而且源代码公开。这些优势是其他防火墙产品不可比拟的。选用这类软件确实是最低硬件需求的可靠、高效的解决方案。但用户最关心的还是安全系统的性能,有关部门根据网络安全调查和分析曾得出结论:网络上的安全漏洞和隐患绝大部分是因网络设置不当引起的。使用Linux平台上的这些优秀软件同样也存在这样的问题。要使系统安全高效地运行,安装人员和管理人员必须能够理解该软件产品的运行机制并能深入分析所采用的防火墙设置策略会不会被人利用。本文仅对Linux平台上的IP包过滤防火墙软件Ipchains进行探讨。
防火墙的基本模型
基于TCP/IP协议簇的Internet网际互联完全依赖于网络层以上的协议栈(网络层的IP协议、传输控制协议TCP/UDP协议和应用层协议)。考虑到网络防火墙是为了保持网络连通性而设立的安全机制,因此防火墙技术就是通过分析、控制网络以上层协议特征,实现被保护网络所需安全策略的技术。构建防火墙有三类基本模型:即应用代理网关、电路级网关(Circuit Level Gateway)和网络层防火墙。它们涉及的技术有应用代理技术和包过滤技术等。
应用代理网关允许内部网络上的用户通过防火墙非直接地访问Internet。它根据用户的请求代替用户与目的地进行连接。由于应用代理网关在应用层进行代理,所以它可以对应用协议进行控制,而且还可以在应用级进行记录。它比网络级防火墙的安全措施更加严格,因为它能提供更详细的审计报告、跟踪用户和应用进程以及IP包的参数。然而,采用应用层防火墙对网络性能有较大影响。由于对任何用户的请求都要求应用代理进程为其提供应用服务,所以速度较慢,并且不如网络层防火墙那样透明以及维护不便等。在Linux上实现这种防火墙模型的软件有squid等。
电路级网关与应用代理网关类似,但进行的代理通常与应用无关。这样就失去了详尽记录和精确定义规则的能力。电路级网关是一台运行网关应用程序的设备,它只支持TCP/IP应用,使用TCP端口实现网络资源和用户应用程序之间的通信。它还要求客户端使用特殊软件才能为应用到应用的通信服务。SOCKS是Linux上实现这类防火墙模型的软件。
网络层的IP包过滤防火墙在IP包水平上工作。它根据在每个包中的源地址、目的地址和包类型等信息控制包的流动。更彻底的过滤过程是检查包中的源、目的端口号以及连接状态等信息。这种防火墙比较安全,但缺少足够的记录信息。它可以阻止外部网络访问被保护的内部网络,但不能记录谁访问了公开的系统,以及谁从内部网络访问Internet。在Linux内核中支持IP包过滤,所以不需要增加其他软件就可以构建包过滤防火墙,Ipchains软件包是Linux平台上一个功能强大的包过滤策略管理软件,用于设置可靠的防火墙系统。
Temoc 于 2006-10-27 09:50:04发表:
四、系统测试
系统配置好以后,可以从内部子网的任意一台主机上“ping”一下外部的某个服务器,若能“ping”通,则IP伪装配置是正确的。
可能的安全漏洞
对防火墙的不当配置可能造成安全漏洞。如处理TCP分段时,Ipchains需要查看包头中的源端口、目的端口、ICMP代码或“TCP SYN”标志等信息,而这些信息只能在TCP分段的第一个IP包中才有。于是从第二个分段开始都不能匹配过滤规则。某些管理者将防火墙配置为仅对第一个分段进行处理。通常,一个TCP连接的第一个TCP分段被防火墙阻挡后,其他的TCP分段被认为不会产生安全性问题,因为在目的主机上由于缺少第一个分段而无法重新组装报文。然而,由于系统缺陷等原因,发送的分段可能使机器瘫痪,甚至人为精心设计的IP包可借此缺陷绕过防火墙。因此配置防火墙需要仔细分析过滤规则如何处理各种类型的分组。对分段的处理最好将系统内核编译为重新组装所有通过的分段,或在应用层另设安全机制。
对基于包过滤防火墙更常见的攻击是利用IP欺骗的方法。IP欺骗是指主机发送自称是另一个主机发送的包。防止IP欺骗的方法是使用源地址确认,它通过配置路由器识别路由代码实现,而不是防火墙。防火墙结合源地址确认能较好地增强系统的安全性。
Temoc 于 2006-10-27 09:49:30发表:
二、不应该过滤的包
[/align]
在开始过滤某些不想要的包之前要注意以下内容:
● ICMP包
ICMP包可用于检测TCP/IP失败的情形。如果阻挡这些包将导致不能得到“Host unreachable”或“No route to host”等信息。ICMP包还用于MTU发现,某些TCP实现使用了MTU发现来决定是否进行分段。MTU发现通过发送设置了不进行分段的位的包探测,当得到的ICMP应答表示需要分段时,再发送较小的包。如果得不到ICMP包(“destination unreachable”类型的包),则本地主机不减少MTU大小,这将导致测试无法停止或网络性能下降。
● 到DNS的TCP连接
如果要拦阻出去的TCP连接,那么要记住DNS不总是使用UDP。如果从DNS服务器过来的回答超过512字节,客户端将使用TCP连接,并仍使用端口53接收数据。若禁止了TCP连接,DNS大多数情况下会正常工作,但可能会有奇怪的延时故障出现。如果内部网络的DNS查询总是指向某个固定的外部DNS服务器,可以允许本地域端口到该服务器的域端口连接。
● 主动式FTP的TCP连接
FTP有两种运作方式,即传统的主动式(active)方式和目前流行的被动式(passive)方式。在主动式FTP模式下,FTP 服务器发送文件或应答LS命令时,主动和客户端建立TCP连接。如果这些TCP连接被过滤,则主动方式的FTP将被中断。如果使用被动方式,则过滤远地的TCP连接没有问题。因为数据连接是从客户端到服务器进行的(包括双向的数据)。
三、针对可能的网络攻击
防火墙的性能是否优良关键在于其配置能否防护来自外界的各种网络攻击。这要求网络管理者能针对可能的网络攻击特点设定完善的安全策略。以网络常见的“ping of death”攻击为例,“ping of death”攻击通过发送一个非法的大ICMP包使接收者的TCP堆栈溢出从而引起混乱。针对这种攻击可将防火墙配置为阻挡ICMP分段。因为普通的ICMP包大都不需要到分段的程度,阻挡ICMP分段只拦阻大的“ping”包。 这种防护策略也可用于针对其他协议安全缺陷的网络攻击。
TurboLinux平台上的Ipchains防火墙实例
一、 应用背景
在TurboLinux 6.1平台上实现IP包过滤防火墙,将内部网络配置为IP伪装方式访问Internet。
内部网络与防火墙间用以太网连接,内部网址取IANA的C类地址192.168.1.*。防火墙与外部网络通过modem和电话线与PPP服务器连接(连接示意图如图2所示)。
[align=center]
二、准备工作
1. 检查Linux系统是否支持IP 伪装。输入命令:# ls /proc/sys/net/ipv4,若存在“ip_forward”、“ip_masq_debug”、“ip_masq_udp_dloose”、“ip_always_defrag”等文件则内核已支持IP 伪装,否则需要重新编译内核。
2. 配置网卡和PPP连接的IP地址,这部分可查阅相关资料。
三、配置命令
编辑配置命令文件/etc/rc.d/rc.firewall,将防火墙的配置命令写成执行脚本。
最后,改变这个脚本文件的执行权限为可执行。输入命令:# chmod 700/etc/rc.d/rc.firewall。可以手工方式运行这个脚本,也可以在文件/etc/rc.d/init.d中加入一行: /etc/rc.d/rc.firewall,这样每次系统启动时可自动运行这个脚本。