|
在人们谈到病毒,想到杀毒软件的同时,也必然会想到防火墙。那一夫当关,万夫莫开的特性。它也是病毒、木马程序要想入侵,首先必须要过的第一关。但有些朋友只知道装载了防火墙,但没有恰当合理的去设置防火墙。今天我们从实际的操作出发,继续讲授一些防火墙实际的运用。
1、防火墙规则集有效建立
如何建立一个安全的规则集呢?下面我们就从一个虚构机构的安全策略开始,基于此策略,来设计一个防火墙规则集。
一:制定安全策略
防火墙和防火墙规则集只是安全策略的技术实现。管理层规定实施什么样的安全策略,防火墙是策略得以实施的技术工具。所以,在建立规则集之前,我们必须首先理解安全策略,假设它包含以下3方面内容:
1. 内部雇员访问Internet不受限制。
2. 规定Internet有权使用公司的Webserver和Internet Email。
3. 任何进入公用内部网络的通话必须经过安全认证和加密。
显然,大多数机构的安全策略要远远比这复杂,对本文来说,这就够了。
二:搭建安全体系结构
作为一个安全管理员,第一步是将安全策略转化为安全体系结构。现在,我们来讨论把每一项安全策略核心如何转化为技术实现。
第一项很容易,内部网络的任何东西都允许输出到Internet上。
第二项安全策略核心很微妙,这就要求我们要为公司建立Web和E-mail服务器。由于任何人都能访问Web和E-mail服务器,所以我们不能信任它们。我们通过把它们放入DMZ(Demilitarized
Zone,中立区)来实现该项策略。DMZ是一个孤立的网络,通常把不信任的系统放在那里,DMZ中的系统不能启动连接内部网络。DMZ有两种类型,有保护的和无保护的。有保护的DMZ是与防火墙脱离的孤立的部分;无保护的DMZ是介于路由器和防火墙之间的网络部分。这里建议使用有保护的DMZ,我们把Web和E-mail服务器放在那里。
惟一的从Internet到内部网络的通话是远程管理。我们必须让系统管理员能远程地访问他们的系统。我们实现它的方式是只允许加密服务进入内部网络。
还有一样东西我们必须添加,那就是DNS。虽然我们没有在安全策略中陈述它,但我们必须提供这项服务。作为安全管理员,我们要实现Split
DNS。Split DNS是指在两台不同的服务器上分离DNS的功能。我们通过用一台DNS来分析公司域名的External
DNS服务器和一台内部用户使用的Internal DNS服务器来实现该项功能。External
DNS服务器与Web和E-mail服务器一起放在有保护的DMZ中,Internal DNS服务器放在内部网络中。
三:制定规则次序
在建立规则集之前,有一件事必须提及,即规则次序。哪条规则放在哪条之前是非常关键的。同样的规则,以不同的次序放置,可能会完全改变防火墙的运转情况。很多防火墙(例如SunScreen
EFS、Cisco IOs、FW-1)以顺序方式检查信息包,当防火墙接收到一个信息包时,它先与第一条规则相比较,然后是第二条、第三条……当它发现一条匹配规则时,就停止检查并应用那条规则。如果信息包经过每一条规则而没有发现匹配,这个信息包便会被拒绝。一般来说,通常的顺序是,较特殊的规则在前,较普通的规则在后,防止在找到一个特殊规则之前一个普通规则便被匹配,这可以使你的防火墙避免配置错误。
四:落实规则集
选好素材就可以建立规则集了,下面就简要概述每条规则。
切断默认
通常在默认情况下,DS2000有多种服务是不公开的。我们的第一步需要切断默认性能。
允许内部出网
我们的规则是允许内部网络的任何人出网,与安全策略中所规定的一样,所有的服务都被许可。
添加锁定
现在我们添加锁定规则,阻塞对防火墙的任何访问,这是所有规则集都应有的一条标准规则,除了防火墙管理员,任何人都不能访问防火墙。
丢弃不匹配的信息包
在默认情况下,丢弃所有不能与任何规则匹配的信息包。但这些信息包并没有被记录。我们把它添加到规则集末尾来改变这种情况,这是每个规则集都应有的标准规则。
丢弃并不记录
通常网络上大量被防火墙丢弃并记录的通信通话会很快将日志填满。我们创立一条规则丢弃/拒绝这种通话但不记录它。这是一条你需要的标准规则。
允许DNS 访问
我们允许Internet用户访问我们的DNS服务器。
允许邮件访问
我们希望Internet和内部用户通过SMTP(简单邮件传递协议)访问我们的邮件服务器。
允许Web 访问
我们希望Internet和内部用户通过HTTP(服务程序所用的协议)访问我们的Web服务器。
阻塞DMZ
内部用户公开访问我们的DMZ,这是我们必须阻止的.
允许内部的POP访问
让内部用户通过POP(邮局协议)访问我们的邮件服务器。
强化DMZ的规则
你的DMZ应该从不启动与内部网络的连接。如果你的DMZ能这样做,就说明它是不安全的。这里希望加上这样一条规则,只要有从DMZ到内部用户的通话,它就会发出拒绝、做记录并发出警告。
允许管理员访问
我们允许管理员(受限于特殊的资源IP)以加密方式访问内部网络。
提高性能
最后,我们回顾一下规则集来考虑性能问题,只要有可能,就把最常用的规则移到规则集的顶端。因为防火墙只分析较少数的规则,这样能提高防火墙性能。
增加IDS
对那些喜欢基础扫描检测的人来说,这会有帮助。
附加规则
你可以添加一些附加规则,例如:
阻塞与AOL ICQ的连接,不要阻塞入口,只阻塞目的文件AOL服务器。
五:注意更换控制
在你恰当地组织好规则之后,还建议你写上注释并经常更新它们。注释可以帮助你明白哪条规则做什么,对规则理解得越好,错误配置的可能性就越小。对那些有多重防火墙管理员的大机构来说,建议当规则被修改时,把下列信息加入注释中,这可以帮助你跟踪谁修改了哪条规则以及修改的原因。
规则更改者的名字。
规则变更的日期/时间。
规则变更的原因。
六:做好审计工作
当你建立好规则集后,检测它很关键。我们所犯的错误由好的管理员去跟踪并找到它们。
防火墙实际上是一种隔离内外网的工具。在如今Internet访问的动态世界里,在实现过程中很容易犯错误。通过建立一个可靠的、简单的规则集,你可以创建一个更安全的被你的防火墙所隔离的网络环境。
成功的诀窍:规则越简单越好
在我们深入探讨之前,要强调一下一个简单的规则集是建立一个安全的防火墙的关键所在。网络的头号敌人是错误配置。为什么当你意外地将消息访问协议(IMAP)公开时,那些坏家伙会试图悄悄携带欺骗性的、片断的信息包通过你的防火墙?请尽量保持你的规则集简洁和简短,因为规则越多,就越可能犯错误,规则越少,理解和维护就越容易。一个好的准则是最好不要超过30条。一旦规则超过50条,你就会以失败而告终。当你要从很多规则入手时,就要认真检查一下你的整个安全体系结构,而不仅仅是防火墙。规则越少,规则集就越简洁,错误配置的可能性就越小,系统就越安全。
因为规则少意味着只分析少数的规则,防火墙的CPU周期就短,防火墙效率就可以提高
2、配置ADSL Modem防火墙
一、防火墙的设置
进入ADSL Modem的管理页面,点击 “服务→FireWall”,我们就可以在页面中对防火墙做详细的设置。
Blacklist Status:黑名单状态。如果你想让ADSL Modem一直使用黑名单状态进行工作,则可选择Enable,否则就选择Disable。
Blacklist Period(min):在规定的时间(以分钟为单位)内指定计算机的IP地址会处在黑名单状态下。
Attack Protection:勾选“Enable”可以启用ADSL Modem内建的防火墙保护功能。
DoS Protection:点击Enable选项可以得到SYN DoS、ICMP DoS和Per-host DoS的服务性保护。
Max Half Open TCP
Conn:设定不完全开放状态时,当前IP连接开放的百分数。TCP连接在不完全开放状态下可能会耗尽可用的IP连接数,如果百分数超标,这个不完全开放连接会被关闭,一个新的连接将会取代它。
Max ICMP Conn:为管理ICMP设定当前使用的连接数量的百分数,如果百分数超标,新的连接将会取代旧的连接开始传送数据。
Max Single Host Conn:设定单独一台计算机能使用当前IP连接的百分数,设定这个百分数时要考虑局域网内的计算机数量。
Log Destination:用于在记录上列出攻击防火墙的事件,这些事件的记录可以发送给系统或指定的管理员。
E-mail ID of Admin
1/2/3:指定管理员的电子邮件地址。用于接收防火墙被攻击的报告。在发送的电子邮件报告信息中包括攻击时间、进行攻击的计算机的源IP地址、目标IP地址、使用的协议等。
二、管理黑名单列表
如果确认了某个数据包攻击过防火墙的设定或某些IP过滤的规则,那么在今后指定的一段时间内,防火墙将会封锁这种数据包的源IP地址,但用户必须启用黑名单列表的设置。
要查看当前黑名单计算机的列表,可在“防火墙设置”页面底部点击“黑名单”,在出现的表格中包含如下信息:
主机IP地址:记录发出攻击数据包的计算机的IP地址。
Reason:攻击类型的简短描述。
IPF规则ID:如果数据包违反IP过滤规则,那么这个框中显示的是规则的ID号码。
操作:如果用户想让黑名单上的条目在它自动解除封锁前解封,可以删除列表中的条目。
3、用老式奔腾机和Linux构建防火墙
在要从不同级别执行包过滤服务之前,您得建立符号链接。网络已经启动的情况下,首先确认包过滤器已运行在初始级别2和3下。
# ln -s /etc/rc.d/init.d/packetfilter /etc/rc.d/rc2.d/S09packetfilter
# ln -s /etc/rc.d/init.d/packetfilter /etc/rc.d/rc3.d/S09packetfilter
以上两条命令建立了符号链接,从而保证在 Red Hat Linux 的网络有效前启动包过滤器。某种网络服务的名称应该类似于 SXXnetwork,其中的
"XX"
指定了该服务的启动次序。请选择一个其他启动脚本内未指定的,比所有网络服务启动次序号都低的"XX"。上面的例子中,网络启动脚本命名为
"S10network" 。
类似的,在网络服务关闭后也应该停止包过滤器的符号连接。该例子中,网络接口关闭位于脚本 K90network,因此包过滤器脚本链接为
K91packetfilter。
# ln -s /etc/rc.d/init.d/packetfilter /etc/rc.d/rc0.d/K91packetfilter
# ln -s /etc/rc.d/init.d/packetfilter /etc/rc.d/rc1.d/K91packetfilter
最后,在 Red Hat 系统中,您务必确保文件 /etc/sysconfig/network 中含有下列条目:
FORWARD_IPV4="yes"
一旦重新启动机器,包过滤器就启动了。到目前为止,您还没有制定任何过滤规则。下面我们将继续这个规则设置步骤。
配置防火墙
如果您用了防火墙,就可以使用公共因特网上无效的某段网址,或者用 NAT
。这样,主干网的主要路由器将视那些来自私人地址的包为非法而予以丢弃。这些段址已经定义并在文献 RFC 1918 列举出来(参看表
1)。这样的段址共有三套,但对于绝大多数公司来说,192.168.0.0 就足够了。在下面的例子中我们也将采用这套段址。
表 1: 分配给私有网络的 IP 地址
起始地址 结束地址 CIDR 段址前缀 地址数目
10.0.0.0 10.255.255.255 10.0.0.0/8 ~ 16,000,000
172.16.0.0 172.31.255.255 172.16.0.0/12 ~ 4,000,000
192.168.0.0 192.168.255.255 192.168.0.0/16 ~ 65,000
您的内部网的全部机器都应该用这些给定地址范围来标识。比如 192.168.1.22 防火墙的内部接口应占用第一个地址 192.168.0.1。以
.0.0、.0、.255 和 .255.255 结尾的是系统保留地址,所以不要把他们分配给任何机器。在起始地址和结束地址范围之内的其他 IP
地址可按个人喜好分配.
下面的例子包括四个台式机和四个服务器。名为 stranger 的台式机禁止进入防火墙保护的内部网络,而 familiar 则可以。名为 Freedom
的服务器位于公司内部网络,但不受防火墙保护,这对向公开的网站来说是常见的。分配给这些机器的网络地址是随便给定的,但是它们被划分成不同的网络地址集合
(192.168.x.x 分配给防火墙内部网, 216.19.15.x 分配给防火墙外部但仍处于公司内部的网络, 198.102.x.x
指的是公共因特网址)。

表 2: 链操作命令
命令 陈述
ipchains -N 创建一个新链
ipchains -X 删除已有链
ipchains -L 列出链中的所有规则
ipchains -F 删除链中的所有规则,但仍保留该链
ipchains -Z 删除与链相关的统计数据
ipchains -P 设置链的全部策略(接受 ACCEPT, 否决 DENY, 拒绝 REJECT, 屏蔽 MASQ, 改向 REDIRECT, 返回
RETURN 等)
ipchains -M -L 列出所有使用屏蔽的链
ipchains -M -S 对所有使用屏蔽的链,根据协议不同而分配若干超时限制
表 3: 定义过滤规则的命令
命令 陈述
ipchains -A 将规则添加到链中
ipchains -D 根据规则在链中的位置,删除该规则
ipchains -R 根据规则在链中的位置,用新规则取代它
ipchains -I 将新规则插入到链中的指定位置
ipchains -C 使用链中的规则来过滤 protocol-info 中的内容,从而测试该链
表 3
中的过滤规则命令需要指定源和目的地址、协议类型和相关的端口号、其他IP协议的标志、以及所施行于它们的规则。这些规则条目可以逐一列出,以便或含糊或准确的描述被过滤掉的包的类型。
源地址 (-s) 和目的地址 (-d)
具有相同的格式。您可以具体指定单个主机地址或某网络的一组主机地址。前一种情况,只需要插入主机地址;后一种情况则需要指定网络地址和网络地址掩码或比特掩码。比特掩码和网络掩码的作用是一样的,不同于网络掩码给定四组十进制数,它从网络掩码的左端开始计入比特数。例如,网络掩码
255.255.255.0 等效于比特掩码 24,255.255.224.0 等效于 19。不方便的是,您不能指定任意范围的网络地址,比如从
192.168.1.1 到 192.168.1.133 ――
因为您无法用合适的网络掩码来表示它们。这个软件不得不这么工作,因为想要使它有效地过滤任意一段网络地址实在是太困难了。
规则 陈述
-d 192.168.1.24 -j ACCEPT 接受所有发送到 192.16.1.24 (Jane) 的包
-d 192.168.0.0/255.255.224.0 -j DENY 拒绝所有试图到达 192.168.1.0 到 192.168.31.255
范围中某个地址的数据包,这就意味着 Bob, Fred 和 Jane 的主机都被保护起来,而 Olivia 则没有。
-d 192.168.0.0/19 -j DENY 和上一命令相同,只是用比特掩码来表示范围的结束地址。
上面的例子展示了目的地址的细节(用 -d ),但和源地址的用法是相同的(只是代之以 -s )。下一个策略组件是协议类型。ipchains
支持三种常用的传输协议类型:TCP、UDP 和 ICMP。其他协议仍处于试用阶段,这里略过不谈。
-p TCP -s 192.168.1.24 -j ACCEPT 接受所有来自 Jane (192.168.1.24) 的包
-p TCP -d 192.168.0.0/19 -j DENY 否决所有到达 Bob, Fred 和 Jane 的 TCP 包
-p TCP -d 192.168.1.24 80 -j ACCEPT 接受到达 Jane 机器80端口的所有 TCP 包
-p TCP -d 192.168.1.24 www -j ACCEPT 和上一命令类似,但用 www 来表示缺省的 Web 服务器端口。在
/etc/services 文件中定义了此端口。
-p TCP -d 192.168.1.24 0:1024 -j DENY 否决所有要到 Jane 的0到1024范围中任何一个端口的 TCP 包。
-p TCP -d 192.168.1.24 www -j ACCEPT 接收要到 Jane 机器上 www 端口(缺省情况下即80端口)的所有 TCP 包。
-p TCP -d 192.168.1.24 ! www -j DENY D 否决要到 Jane 机器上 www 之外任何端口的 TCP
包。命令中的感叹后(!)表示对它后面的值取非,这里即用 ! www 来表示除了 www 之外的所有端口值。
-p TCP -d ! 192.168.1.24 www -j DENY 否决要到除了 Jane 之外的其他机器 www 端口的所有 TCP
包。注意这条命令与上一条并不相同。
-p TCP -d ! 192.168.1.24 ! www -j DENY 否决所有要到 Jane 之外的其他机器,并且非 www 端口的 TCP
包。也就是说,它允许那些到达 Jane 的 www 端口的 TCP 包。尽量不要用这样的规则,以免引起混乱。
-p ! TCP -d 192.168.1.24 -j DENY 否决所有要到 Jane 机器上的 TCP 之外的数据包。
对于 UDP 协议,其工作情况类似。而对于支持 ping 和 traceroute 的 ICMP 协议则需要指定端口.
-p ICMP -d 192.168.1.24 0 -j ACCEPT -p ICMP -d 192.168.1.24 8 -j ACCEPT 接受对 Jane
的 ping 包。为了让 ping 正常工作,这两条规则(ICMP 端口0 和 8)必须分开写。
-p ICMP -d 192.168.1.24 3 -j ACCEPT 如果 Jane 机器上的用户试图访问一个远程站点,所返回的“无法到达” ICMP
消息允许通过。访问一些远程机器的 telnet 或其他服务时,常有这种没有回应的情况发生,因此通常都会使用这条规则。
-p ICMP -d 192.168.1.24 11 -j DENY 否决来自防火墙外部 traceroute 命令的数据包。
除了地址和协议信息,您还可以指定通过包的网络接口驱动程序。如果要加入考虑数据包的来源,是比较容易的,在指定过滤规则应用的网络端口时也很有用。
-i eth0 -s 192.168.1.24 -j ACCEPT 使用第一块以太网卡 (eth0) 来接受所有来自 Jane 的数据包。
-i eth+ -s 192.168.1.24 -j ACCEPT 可以用任何一块网卡 (eth+) 来接受来自 Jane 的数据包。
-i ppp0 -p TCP -s 198.102.68.2 1025:65535 -j ACCEPT 通过 ppp 接口,来接受所有来自 familiar
(198.102.68.2) 1025 到 65535 端口之间的 TCP 包。
有两种特殊的策略组件指定 TCP_SYN 标志 (-y) 和碎片包 (-f)。当 TCP 客户端第一次试图连接远程 TCP 服务器时,TCP_SYN
标志被设置。不幸的是,黑客会利用它攻击远程服务器,其做法是发送大量 TCP_SYN
消息而不真正连接服务器,从而锁住所有服务器进程,使其速度变慢或使服务器崩溃。只要为该组件指定 TCP 组件 -p,就可以阻止外部的 TCP_SYN 攻击。
碎片包过滤规则组件是必要的,因为 IP 包常常通过不同容量的的网络连接。有时他们不得不分成一些名为 碎片 的更小的包以便顺利通过小容量的连接通道。在 PPP
协议下用调制解调器连接网络时常发生这种情况。例如,以太网可以传送长为 1500 字节的 IP 包,而调制解调器(串行线)的包通常是 256
字节;以太网量级的包不得不分成六份以符合调制解调器量级的碎片包。到达目的机器后,这些碎片包就被组合起来。因此,在 PPP 或 SLIP
协议下使用调制解调器连接网络时,您应该指定这个规则组件,这样防火墙才会把包视作一体。也只有如此它才能正确辨识传输层协议( TCP, UDP, ICMP)
信息,从而实施其他规则。
在命令行下运行以上规则,并用 /sbin/ipchains -L
命令检查其顺序是否正确。接着还要按照"开始/关闭"脚本指定的文件名来保存这些规则(我们的例子中,该文件是
/etc/firewall.rules )。下次系统启动时就会使用这些规则了。需要注意的是,每次您定义新规则都必须运行以下命令:
# /sbin/ipchains-save >/etc/firewall.rules
接下来给出一些配置实例,您可以看到如何为防火墙制定规则。
一些配置实例
这个例子是最简单的防火墙模型,只允许位于保护范围内的机器访问外部网络,但禁止任何外部机器进入内部网络。您首先要拦截由任何接口流出的所有包,然后只让那些具有转换过的地址信息的包通过。
# /sbin/ipchains -P forward DENY
# /sbin/ipchains -A forward -f -i ppp0 -j MASQ
采用以上两个规则,则在包流出之前,所有安装了防火墙的机器(Bob,Fred,Jane 和
Olivia)都被屏蔽了。同时禁止防火墙外部的机器接触任何内部设备。这里并没有涉及路由器,实际上本例中的防火墙是通过调制解调器建立到因特网 PPP 连接的。
嵌入路由器的防火墙代码并不少见。很多时候,防火墙和路由器可能位于同一机器。另一方面,利用 PPP
的调制解调器方案,防火墙就成为路由器,路由指令把所有非本地数据流转发到 PPP 端口。
您可能希望防火墙的功能复杂些,例如所有保护范围内的机器都可连到外部去,而只有指定的外部机器才能连接进来。下面的例子准许名为 familiar 的机器
(198.102.68.2) 连接到防火墙内部机器的某些指定端口 (telnet、FTP 和 WWW 等服务的公共端口)。
# /sbin/ipchains -P forward DENY
# /sbin/ipchains -A forward -f -i eth0 -j MASQ
# /sbin/ipchains -A input -i eth0 -s 198.102.68.2 -j ACCEPT
# /sbin/ipchains -A output -i eth1 -s 198.102.68.2 -d 0/0 -j DENY
# /sbin/ipchains -A output -i eth1 -s 198.102.68.2 -d 0/0 telnet -j MASQ
# /sbin/ipchains -A output -i eth1 -s 198.102.68.2 -d 0/0 ftp -j MASQ
# /sbin/ipchains -A output -i eth1 -s 198.102.68.2 -d 0/0 ftp-data -j MASQ
# /sbin/ipchains -A output --i eth1 s 198.102.68.2 -d 0/0 www -j MASQ
在我们的例子中,有台名为 Freedom
的服务器位于防火墙网络外但处于公司网络内部。这是一台任何机器都可达的公共网页服务器,它和互联网上其他计算机一样,可能遭受外部世界的攻击和破坏。不过我们可以假定它足够安全,并允许其连接到防火墙内部网络。这就需要添加下列规则:
# /sbin/ipchains -A input -i eth0 -s 216.19.15.32 -j ACCEPT
# /sbin/ipchains -A output -i eth1 -s 216.19.15.32 -d 0/0 -j MASQ
应用协议
有些应用要求协议包含正确的主机地址信息,否则无法工作。这些应用可能会将网络或主机地址信息嵌入到 TCP 或 UDP
包里,但包过滤器一般不深入探究这些包中的内容。
如此一来,为了过滤这些应用协议内核还需要加载另外的模块。这些模块包含某些协议,能够支持 FTP、RealAudio、IRC、VDO Live、CU SeeMe
甚至某些流行的游戏 Quake 等。
为了加载这些模块,可以在先前的"开始/关闭"脚本中加入以下用于特殊协议的代码行:
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_cuseeme
/sbin/modprobe ip_masq_vdolive
/sbin/modprobe ip_masq_quake
/sbin/modprobe ports=ip_masq_quake 26000,27000,27910
ipchains
具有十分强大的功能,可以把几组规则一次"链接"。当您需要面对许多内部节点,并为它们分别定义网络数据包策略时,这种建立多链条的能力就更加重要。这些链条被指派给特定的网络接口,改变接口开关的安全规则(例如网络连接接通或断开)。
ipchains 将继续升级。随着下一内核版本 (2.3.x 和 2.4.x) 一起发布 ipchains 新版本,名为 netfilter
。新版本软件将能执行一些设计精巧的组件,例如逆向网络地址转换 (reverse NATs),用于使一组内部网机器为某个地址进行负载平衡。
一般情况下,有效使用 ipchains
可以让您的内部网络细节受到防火墙良好的保护。它赋予您那台"慢吞吞"的老机器以崭新的使命,变成网络里相当有用的一员。
|