网络防火墙安全策略
一个组织的全局性安全策略必须根据安全分析和业务需求分析来决定。因为防火墙只与网络安全有关,所以只有在正确定义了全局安全策略的情况下,防火墙才具有一定的价值。网络防火墙安全策略是指要明确定义那些允许使用或禁止使用的网络服务,以及这些服务的使用规定和规定中的一些特殊情况。而且,网络防火墙安全策略中的每一条规定都应该在实际应用时得到实现。总的来说,一个防火墙应该使用以下方法之一。
* 每一个没有明确允许的都被拒绝
这种方法堵塞了两个网络之间的所有流量,除了那些被明确允许的服务和应用程序(application)。因此,每一个想保留的服务和应用程序都应该挨个实现,而任何一个可能成为防火墙漏洞的服务和应用程序都不能允许使用。刚才所说的是一个最安全的方法,那就是除非是系统管理员明确允许使用的服务和应用程序,否则都必须拒绝。另一方面,从用户的角度来看,这样可能会限制更多,不是非常方便。在本书中,我们在防火墙配置中会使用这种方法。
* 每一个没有明确拒绝的都允许
这种方法允许两个网络之间所有流量,除非那些被明确禁止的服务和应用程序。因此,每一个不信任或有潜在危害的服务和应用程序都应该逐个拒绝。但是,虽然这对用户是一个灵活和方便的方法,它却可能引起一些严重的安全问题。
包过滤
包过滤是一种内置于Linux 核心的防火墙类型。过滤型防火墙工作在网络层。数据只有在防火墙规定允许的情况下才能发出去,而到达的包要则根据它们的类型,源地址,目的地址和每个包中包含的端口信息进行过滤。
在绝大部分时间里,包过滤的工作是由一个能根据过滤规定转发数据包的路由器完成的。当一个数据包到达一个能进行包过滤的路由器时,这个路由器从该数据包的包头中解读某些信息,然后根据过滤规定决定数据包是通过还是被丢弃。
下面是能从包头中解读的信息:
* 源IP地址
* 目的IP地址
* TCP/UDP源端口
* TCP/UDP目的端口
* ICMP消息类型
* 协议信息(TCP,UDP,ICMP或IP隧道)
因为只需要分析很少的数据,而且登录到防火墙只占用很少CPU时间,网络延迟也非常小,所以如果想使用防火墙保护网络系统,可以通过很多种方法来建设网络。
拓扑结构
在网络中,所有的服务器都至少必须关闭所有没有用的端口,即使它不是一个防火墙服务器。这样做是为了更安全。想象一下,有人获得了对防火墙服务器的访问权,而这只是因为你邻近的服务器没有配置成关闭所有端口,才造成这种情况。对于本地连接,这也是一样的,没有安全认证的员工能从内部的其他服务器获得对另一个服务器的访问权。
在我们下面的配置中,我们将会给出三个例子,它们有助于你根据要保护的服务器类型和它们在网络结构中的地位决定防火墙规定。第一个防火墙规定适用于Web服务器,第二个适用于邮件服务器,最后一个适用于作为内部代理服务器使用的网关服务器。详见图。
www.openarch.com
Caching Only DNS
208.164.186.3
Deep.openarch.com
Master DNS Server
208.164.186.1
mail.openarch.com
Slave DNS Server
208.164.186.2
1. Unlimited traffic on the loopback interface allowed
2. ICMP traffic allowed
3. DNS Caching and Client Server on port 53 allowed
4. SSH Server on port 22 allowed
5. HTTP Server on port 80 allowed
6. HTTPS Server on port 443 allowed
7. SMTP Client on port 25 allowed
8. FTP Server on ports 20, 21 allowed
9. Outgoing traceroute request allowed
1. Unlimited traffic on the loopback interface allowed
2. ICMP traffic allowed
3. DNS Server and Client on port 53 allowed
4. SSH Server and Client on port 22 allowed
5. HTTP Server and Client on port 80 allowed
6. HTTPS Server and Client on port 443 allowed
7. WWW-CACHE Client on port 8080 allowed
8. External POP Client on port 110 allowed
9. External NNTP NEWS Client on port 119 allowed
10. SMTP Server and Client on port 25 allowed
11. IMAP Server on port 143 allowed
12. IRC Client on port 6667 allowed
13. ICQ Client on port 4000 allowed
14. FTP Client on port 20, 21 allowed
15. RealAudio / QuickTime Client allowed
16. Outgoing traceroute request allowed
1. Unlimited traffic on the loopback interface allowed
2. ICMP traffic allowed
3. DNS Server and Client on port 53 allowed
4. SSH Server on port 22 allowed
5. SMTP Server and Client on port 25 allowed
6. IMAP Server on port 143 allowed
7. Outgoing traceroute request allowed
上表显示了根据防火墙脚本文件在不同服务器上缺省打开的端口。根据服务器必须要对外提供的服务,你必须配置相应的防火墙脚本文件,以允许在指定端口上的通讯。表中,www.openarch.com是我们的Web服务器,mail.openarch.com是唯一对外的邮件服务器,deep.openarch.com是网关服务器。它们会用在本章所有的例子中。
编译一个支持IPCHAINS防火墙的内核
首先,必须确信LINUX内核已经编译成“Network Firewall support”和“Firewalling”(支持网络防火墙-译者注)。记住,所有服务器都至少必须关闭所有不使用的端口,即使它不是防火墙服务器。在内核2.2.14中,必须对下面两个问题回答“Y”。
Networking 选项:
Network firewalls (CONFIG_FIREFALL) [N] Y
IP: Firewalling (CONFIG_FIREWALL) [N] Y
IP: TCP syncookie support(CONFIG_SYN_COOKIES) [N] Y
注释:如果你在阅读《Linux 内核》一节时就重新编译了内核,那么上面这些选项应该已经设置好了。
只对网关服务器有用的IP Masquerading 和 IP ICMP Masquerading:
IP: Masquerading (CONFIG_IP_MASQUERADE) [N] Y
IP: ICMP Masquerading (CONFIG_IP_MASQUERADE_ICMP) [N] Y
注释:只有网关服务器才需要支持“IP: Masquerading”和“IP: ICMP Masquerading”内核选项,它需要把内部网对外界伪装起来。
在这里,伪装的意思是,如果在本地网中的一台计算机想要发送一些东西到网络外部,而这个本地网络由一个Linux盒 (Linux box:可以是任何简易的Linux 设备-译者注) 充当网络防火墙,那么这个Linux盒就可以伪装成那台要发送内容的计算机。例如,Linux盒转发了到网络外部的所有流量,但是对外部来说,这些都象是来自防火墙本身。
它可以通过两种方式工作:如果外部主机应答,Linux防火墙就将把这些流量转发到相应的本地计算机,在这种情况下,在本地网络中的计算机对于外部是完全不可见的,即使它们可以访问外界并收到应答。这样,即使本地网络中的计算机没有合法的IP地址也能够访问Internet。
IP伪装的代码只能工作在下面这种条件下,即在系统启动并安装(mount)了/proc 文件系统之后,“IP转发”能够通过下面这行代码执行:
echo "1"
/proc/sys/net/ipv4/ip_forward
你可以在“/etc/rc.d/rc.local”文件中加上这一行,这样在下次计算机重新启动时就会自动支持IP转发。
编辑rc.local文件 (通过 vi /etc/rc.d/rc.local )并加上下面这行:
echo "1"
/proc/sys/net/ipv4/ip_forward
注释:上面有关IP转发的命令行只有在对内核选项“IP: Masquerading (CONFIG_IP_MASQUERDE)”回答“Y”,并且配置了网关服务器来伪装内部网络的情况下才是必须的。
如果选择了支持IP Masquerading,模块ip_masq_ftp.o(用于ftp文件传输),ip_masq_irc.o(用于irc chats),ip_masq_quake.o (用途你可以猜得到),ip_masq_vdolive.o(用于VDOLive 的视频连接),ip_masq_cuseeme.o(用于CU-SeeMe 广播)和ip_masq_raudio.o(用于RealAudio 下载)将会自动编译,它们是这些协议工作时所需要的。
同时,你需要在回答“Enable loadale module support (CONFIG_MODULES)”时选择“Y”以编译一个模块化的内核而不是整体型的内核,这样就可以在网关服务器上使用伪装功能和象ip_masq_ftp.o之类的模块。
上面所讲的对“IP: masquerading”而言的基本伪装代码只能处理TCP或UDP包(以及当前连接的ICMP错误)。IP: ICMP Masquerading 增加了对伪装ICMP包的附加支持, 比如Windows 95 跟踪程序使用的ping 或 probe。
注释:记住,其它类型的服务器象Web 服务器和邮件服务器并不需要支持这些选项,因为它们要不是拥有一个真实的IP地址,就是不用担任内部网络的网关。
注意事项
如果你的系统与Internet相连,那你确实可以假设你处在潜在的危险中。因为你的网关是对Internet的暴露点,所以我们建议以下几点:
* 网关服务器除非确实有必要,一定不要在上面新增任何应用程序。
* 网关服务器上应该严格限制能够通过的协议种类和数量(许多协议都是潜在的安全漏洞,比如FTP和telnet )。
* 任何装有机密和敏感信息的系统都不应该能从Internet 上直接访问。
解释一下防火墙脚本文件的一些