Cisco 路由器的防火墙功能集与 CBAC
Cisco FWFS 可用于大多数型号的路由器,但因为它会对路由器造成较大负担,建议只在需要的地方安装。相较于普通 ACL,你对进入安全网络的会话控制要好得多。即使是能够细化到端口和标志的扩展 ACL(比如只允许已建立的 TCP)也远不及基于上下文的访问控制(CBAC)所带来的安全提升。
在 IOS 中设置它相当直接,你应该可以轻松进行微调。在下面的示例里,我还使用了网络地址转换(NAT)。NAT 并不是让 CBAC 工作的前提,但可以被视为额外的一层安全防护。
硬件和软件
本次测试使用了一台 2514 路由器,配有两个 10BaseT 接口。IOS 版本为 12.0(5)T。镜像的完整文件名为:c2500-io-l.120-5.T.bin。
网络布局
Ethernet0 面向公共互联网,而 Ethernet1 连接到我想要保护的安全网络。Ethernet0 将是我网络中通向互联网的出口点。
interface Ethernet0
description to Internet
ip address 1.2.3.1 255.255.255.252
no ip directed-broadcast
interface Ethernet1
description to Secure Net
ip address 192.168.2.1 255.255.255.0
no ip directed-broadcast
此时我们已有一个非常基础的布局。由于 Ethernet1 上使用的是 RFC1918 中规定的私有地址,不能在全球互联网中路由。该地址必须转换为我的公网(虽然是虚构的)地址 1.2.3.1。你可以轻松定义一个地址池用于 NAT。在本次测试中并不需要这么做。
定义网络地址转换
interface Ethernet0
ip nat outside
interface Ethernet1
ip nat inside
此时我们已经指定了哪些接口进行 NAT,以及哪些将被视为 “内部” 与 “外部”。在本例中,内部是我们的 Secure Net,外部则是 Ethernet0 的公网地址。接下来需要定义全局 nat 语句。语法如下:
ip nat inside source list secure-list interface Ethernet0 overload
NAT 基本已经配置完成。在前面的全局配置行中我们定义了一个名为 “secure‑list” 的列表。该列表的设置方式与 ACL 相同,用来指定哪些网络、端口或协议可以通过 NAT 处理。简单来说,这就是决定谁会被 NAT 的列表。
我们的列表如下:
ip access-list extended secure-list
permit tcp 192.168.2.0 0.0.0.255 any
permit udp 192.168.2.0 0.0.0.255 any
permit icmp 192.168.2.0 0.0.0.255 any
我们允许来自 Secure Net 的 TCP、UDP 与 ICMP 协议通过 NAT 进行转换。
开始锁定网络
我们的默认策略是拒绝所有流量。CBAC 通过允许流量并跟踪会话来工作。当你监视流量离开接口时,就能知道关联的端口和序列号。CBAC 会自动在规则集中打开洞口,以允许已建立的流量返回,同时还能跟踪像 UDP 这样的无状态协议。CBAC 的另一大优势是对 FTP 会话的检查。由于主动和被动模式常给防火墙管理员带来头疼的问题,很多人会在网络中打开大口子。CBAC 可以在通过 FTP 下载文件时,仅允许特定主机的特定端口返回数据。下载完成后,这些端口会自动关闭。
首先我们定义一个规则集,允许少量 ICMP 消息进入网络,然后阻止其余所有流量。
access-list 111 permit icmp any any time-exceeded
access-list 111 permit icmp any any packet-too-big
access-list 111 permit icmp any any unreachable
access-list 111 deny ip any any log
现在有了这个 ACL,需要把它绑定到接口上。
interface Ethernet0
ip access-group 111 in
此时,除我们最先允许的几条 ICMP 消息外,任何来自 Internet 到 Secure Net 的通信都会被拒绝。接下来需要配置 CBAC 来处理我们的动态 ACL。
CBAC 与 IP 检查的定义
现在我们需要实际设置 ip 检查。这将是一组要监视的协议列表。因为路由器会监视它们,ACL 将变为动态的,以允许返回流量。下面是定义方式:
ip inspect name secure-inspect tcp
ip inspect name secure-inspect udp
ip inspect name secure-inspect ftp
ip inspect name secure-inspect realaudio
你会注意到 CBAC 允许你定义既像 UDP、TCP 这样的传输协议,也可以是更具体的应用协议,如 FTP 和 RealAudio。就像 ACL 一样,你需要在接口上以方向方式应用 ip inspect name。我们的示例如下:
interface Ethernet0
description to Internet
ip inspect secure-inspect out
因为 secure-inspect 规则集是向外部应用的,我们从该接口发出的数据包将被“检查”。
实际观察
你可以通过输入 sh ip access-list 111 来观察动态 ACL 的创建和删除。这里使用 111 是因为它是默认的 deny 语句,应用于我们的 Ethernet0。你也可能想查看在任意时刻被检查的会话。可以运行 show ip inspect sessions 来查看。这会显示当前已建立的会话以及即将超时的会话。
补充信息
最初发布于 truman.net。查看存档副本。原页面没有日期;这是首次存档的日期。