网络安全是一个系统的概念,有效的安全策略或方案的制定,是网络信息安全的首要目标。 网络安全技术主要有,认证授权、数据加密、访问控制、安全审计等。而提供安全网关服务的类型有:地址转换、包过滤、应用代理、访问控制和 D oS 防御。本文主要介绍地址转换和访问控制两种安全网关服务,利用 cisco 路由器对 ISDN 拨号上网做安全规则设置。试验环境是一台有 fir ewall 版本 IOS cisco2621 路由器、一台交换机组成的局域网利用 ISDN 拨号上网。

一、地址转换
我们知道, Internet 技术是基于 IP 协议 的技术,所有的信息通信都是通过 IP 包来实现的,每一个设备需要进行通信都必须有一个唯一的 IP 地址。因此,当一个网络需要接入 Inte rnet 的时候,需要在 Internet 上进行通信的设备就必须有一个在全球 Internet 网络上唯一的地址。当一个网络需要接入 Internet 上使用时,网络中的每一台设备都有一个 I nternet 地址,这在实行各种 Internet 应用上当然是最理想不过的。但是,这样也导致每一个设备都暴露在网络上,任何人都可以对这些设备***,同时由于 I nternet 目前采用的 IPV4 协议在网络发展到现在,所剩下的可用的 IP 地址已经不多了,网络中的每一台设备都需要一个 IP 地址,这几乎是不可能的事情。
采用端口地址转换,管理员只需要设定一个可以用作端口地址转换的公有 Internet 地址,用户的访问将会映射到 IP 池中 IP 的一个端口上去,这使每个合法 Internet IP 可以映射六万多台内部网主机。从而隐藏内部网路地址信息,使外界无法直接访问内部网络设备。

Cisco
路由器提供了几种 NAT 转换的功能:

1
、内部地址与出口地址的一一对应
缺点:在出口地址资源稀少的情况下只能使较少主机连到 internet

2
、内部地址分享出口地址
路由器利用出口地址和端口号以及外部主机地址和端口号作为接口。其中内部地址的端口号为随机产生的大于 1024 的号码,而外部主机端口号为公认的标准端口号。这样可以用同一个出口地址来分配不同的端口号连接任意数量的内部主机到外网。
具体配置:由于实验用的是 ISDN 拨号上网,在 internet 上只能随机获得出口地址,所以 NAT 转换的地址池设置为 BRI 口上拨号所获得的地址。

interface FastEthernet0/0
ip address 172.16.18.200 255.255.255.0
ip nat inside the interface connected to inside world
!
interface BRI0/0
ip address negotiated
ip nat outside the interface connected to outside network
encapsulation ppp
no ip split-horizon
dialer string 163
dialer load-threshold 150 inbound
dialer-group 1
isdn switch-type basic-net3
ip nat inside source list 1 interface BRI0/0 overload
access-list 1 permit 172.16.18.0 0.0.0.255

3
、内部地址和外部地址出现交叠
当内部和外部用同一个网络段地址时,在地址没有重复的情况下,可以同时对内外接口进行 NAT 转换使之可以正常通讯。

4
、用一个出口地址映射内部多台主机
应用于 internet 上的大型网站有多台主机对应同一个系统的同一个出口地址。
可以用 sh ip nat translation debug ip nat 命令来检查 NAT 的状态。

二、基于上下文的访问控制( Context-based access control--CBAC
CISCO
路由器的 access-list 只能检查网络层或者传输层的数据包,而 CBAC 能够智能过滤基于应用层的(如 FTP 连接信息) TCP UDP sessi on CBAC 能够在 firewall access-list 打开一个临时的通道给起源于内部网络向外的连接,同时检查内外两个方向的 sessions

1
、工作原理
比如当 CBAC 配置于连到 internet 的外部接口上,一个从内部发出的 TCP 数据包( telnet 会话)经过该接口连出,同时 CBAC 的配置中已经包括了 t cp inspection ,将会经过以下几步:
1 )数据包到达防火墙的外部接口(设为 s0 );
2 )数据包由该接口 outbound access-list 检查是否允许通过(不通过的数据包在此被丢弃,不用经过以下步骤);
3 )通过 access list 检查的数据包由 CBAC 检查来决定和记录包连接状态信息,这个信息被记录于一个新产生的状态列表中为下一个连接提供快速通道;
4 )如果 CBAC 没有定义对 telnet 应用的检查,数据包可以直接从该接口送出;
5 )基于第三步所获得的状态信息, CBAC s0 inbound access list 中插入一个临时创建的 access list 入口,这个临时通道的定义是为了让从外部回来的数据包能够进入;
6 )数据包从 s0 送出;
7 )接下来一个外部的 inbound 数据包到达 s0 ,这个数据包是先前送出的 telnet 会话连接的一部分,经过 s0 口的 access list 检查,然后从第五步建立的临时通道进入;
8 )被允许进入的数据包经过 CBAC 的检查,同时连接状态列表根据需要更新,基于更新的状态信息, inbound access list 临时通道也进行修改只允许当前合法连接的数据包进入;
9 )所有属于当前连接的进出 s0 口数据包都被检查,用以更新状态列表和按需修改临时通道的 access list ,同时数据包被允许通过 s0 口;
10 )当前连接终止或超时,连接状态列表入口被删除,同时,临时打开的 access list 入口也被删除。
需要注意的是:对于配置到 s0 outbound ip access list accesslist 必须允许所有需要的应用通过,包括希望被 CBAC 检查的应用;但是 inbound ip access list 必须禁止所有需要 CBAC 检查的应用,当 CBAC 被出去的数据包触发后,会在 inbound access list 中临时开放一个通道给合法的、正在传送的数据进入。

2
CBAC 可提供如下服务
1 )状态包过滤:对企业内部网络、企业和合作伙伴互连以及企业连接 internet 提供完备的安全性和强制政策。
2 Dos 检测和抵御: CBAC 通过检查数据报头、丢弃可疑数据包来预防和保护路由器受到***。
3 )实时报警和跟踪:可配置基于应用层的连接,跟踪经过防火墙的数据包,提供详细过程信息并报告可疑行为。
4 )无缝兼容性:整和防火墙和其它 cisco IOS 软件于一体;优化广域网利用率;提供强大的、可升级的路由选择 etc
5 )支持 ××× :利用封装了防火墙版本的 cisco Ios 软件和 Qos 特性来保证在公共网络上传输数据的安全性,同时节省费用。
6 )可升级配置:适用于大部分路由器平台, cisco 带防火墙版本的 IOS 可升级来满足网络带宽和性能的需要。

3
CBAC 受到的限制
1 )仅适用于 IP 数据流:只有 TCP UDP 包被检测,其它如 ICMP 等不能被 CBAC 检测,只能通过基本的 access lists 过滤。
2 )如果我们在配置 CBAC 时重新更改 access lists ,要注意:如果 access lists 禁止 TFTP 数据流进入一个接口,我们将不能通过那个接口从网络启动路由器( netboot )。
3 CBAC 忽略 ICMP unreachable 信息。
4 )当 CBAC 检查 FTP 传输时,它只允许目的端口为 1024—65535 范围的数据通道。
5 )如果 FTP 客户端 / 服务器认证失败, CBAC 将不会打开一条数据通道。
6 IPSec CBAC 的兼容性:如果 CBAC IPSec 配置于同一台路由器上,只要对数据包的检查是在内部网接口上进行的,而数据包加密是终止在外部网接口上的,那么 I Psec CBAC 就能共存在该边界路由器上。在这种方式下,检查的是不加密的数据流。

4
CBAC 所需的内存和性能
有一些参数会影响 CBAC 所需的内存和性能:
1 CBAC 对每条连接使用 600 byte 的内存;
2 )在检查数据包的过程中, CBAC 使用额外的 CPU 资源;
3 )尽管 CBAC 通过对 access lists 的高效存储(对 access list 进行散列索引,然后评估该散列)来最小化其对资源的需求,它在 access list 检查过程中仍要使用一定的 CPU 资源。

5
、配置 CBAC
第一步, CBAC timeout threshold 值来管理会话,配置判断是否在会话还未完全建立的时候终止连接。这些参数全局性地应用于所有会话。具有 firewall feature cisco router12.0 以上版本的 IOS 缺省是起了 IP INSPECT 抵御 DoS 进攻的。当 half-open 会话数量大到一定的程度往往意味着正在有 DOS ***发生或某人正在做端口扫描, CBAC 既监测 half-open 会话总数也监测会话企图建立的速率。以下是缺省配置:
HpXg_1#sh ip inspect all
Session audit trail is disabled
(相关命令是 ip inspect audit trail, 是用来打开自动跟踪审计功能并将信息传送到 console 口,缺省是 disabled.
Session alert is enabled
one-minute thresholds are [400:500] connections
(相关命令是 ip inspect one-minute high 500 ip inspect one-minute low 400, 是将引起或导致路由器开始或停止删除 half-open 会话的新增未建立会话的速率,即每分钟 500/400 half-open 会话)
max-incomplete sessions thresholds are [400:500]
(相关命令是 ip inspect max-incomplete high 500, 表示将引起路由器开始删除 half-open 会话的已经存在的 half-open 会话数 500 个; ip inspect max-incomplete low 400 表示将导致路由器开始停止删除 half-open 会话的已经存在的 half-open 会话数)
max-incomplete tcp connections per host is 50. Block-time 0 minute.
(相关命令: ip inspect tcp max-incomplete host 50 block-time 0 表示将引起路由器开始丢弃到同一目的主机地址的超过 50 个的 half-open 会话。如果 block-time 值为 0 表示到某个目的主机的每条连接请求, C BAC 会删除到该主机的最老的已存在的 half-open 会话,并让该 SYN 包通过;如果 block-time 值大于 0 表示 CBAC 将删除到该目的主机的所有已存在的 h alf-open 连接,并阻拦所有新的连接请求直到 block-time 值超时)。
tcp synwait-time is 30 sec
ip inspect tcp synwait-time 30 :表示路由器在阻断会话前等待 TCP 会话达到连接建立状态的时间)
tcp finwait-time is 5 sec
ip inspect tcp finwait-time 5: 表示防火墙检测到一个 FIN 标志后仍继续管理 TCP 会话的时间长度)
tcp idle-time is 3600 sec
ip inspect tcp idle-time 3600: 在没有 TCP 连接后仍继续管理 TCP 会话的时间长度)
udp idle-time is 30 sec
ip inspect udp idle-time 30 :在 UDP 会话停止后仍继续管理 UDP 会话信息的时间长度)
dns-timeout is 5 sec
ip inspect dns-timeout 5 DNS 名字查询停止后仍继续被管理的时间)
设置 timeout 值可以通过丢弃超过时限的会话来有效阻止 DoS ***释放系统资源,设置 threshold 值可以通过限制 half-open 会话的数量来阻止 D oS ***。 CBAC 提供三种 threshold 值来抵御 DOS ***: 1 、最大 half-open TCP UDP 会话的数量。 2 、基于时间的 half-open 会话数量。 3 、每个 host 可以打开的 TCP half-open 会话的数量。对于超过 threshold 值的连接, CBAC 会初始化旧的 half-open 连接,释放资源接受新的要求同步的数据包。
第二步:配置 access list
access-list 101 permit icmp any any echo
access-list 101 permit icmp any any echo-reply
access-list 101 permit icmp any any unreachable
access-list 101 permit icmp any any time-exceeded
access-list 101 permit icmp any any packet-too-big
access-list 101 permit icmp any any traceroute(
以上命令允许 ping 包通过,主要用来排错,如果没有必要上述命令可以不做 )
access-list 101 permit any any eq smtp
(允许在邮件服务器上的安全验证)
access-list 101 deny ip any any log
CBAC 要求禁止其他所有进入的 ip 包)
第三步:根据实际环境定义一个检查规则。
ip inspect name CBAC fragment maximum 256 timeout 1 (
此命令 12.1 以后的版本出现,防止分段*** )
ip inspect name CBAC smtp
ip inspect name CBAC ftp
ip inspect name CBAC http
ip inspect name CBAC tcp (
进入的数据包必须与先前流出的数据包有相同的源 / 目的地址和端口号(源和目的对调),否则就被丢弃 )
ip inspect name CBAC udp timeout 5(
如果配置了 timeout 值,那么应答数据包是在最后的 UDP 请求包被送出后的预定时间范围内收到的,就被允许通过防火墙返回 )
第四步:把检查规则定义到一个接口上。
interface BRI0/0
ip address negotiated
ip access-group 101 in
ip nat outside
ip inspect CBAC out
做完以上配置后,实际运行中路由器显示的 log 如下:
04:20:27: %FW-6-SESS_AUDIT_TRAIL: http session initiator (172.16.18.1:1426) sent 656 bytes -- responder (202.108.36.156:80) sent 30740 bytes
04:20:39: %SEC-6-IPACCESSLOGP: list 101 denied tcp 202.104.128.164(2933) -> 202.104.47.135(80), 1 packet
04:20:48: %SEC-6-IPACCESSLOGP: list 101 denied tcp 64.4.13.87(1863) -> 202.104.47.135(1026), 1 packet
04:22:52: %SEC-6-IPACCESSLOGP: list 101 denied tcp 202.104.128.164(2933) -> 202.104.47.135(80), 1 packet
04:23:03: %FW-6-SESS_AUDIT_TRAIL: tcp session initiator (172.16.18.1:1433) sent 77 bytes -- responder (202.108.44.205:110) sent 45379 bytes
04:23:09: %FW-6-SESS_AUDIT_TRAIL: tcp session initiator (172.16.18.1:1435) sent 61 bytes -- responder (202.104.32.234:110) sent 1056 bytes
04:23:22: %FW-6-SESS_AUDIT_TRAIL: udp session initiator (172.16.18.1:1431) sent 29 bytes -- responder (202.96.128.68:53) sent 240 bytes
04:23:35: %SEC-6-IPACCESSLOGP: list 101 denied tcp 202.104.180.199(1262) -> 202.104.47.135(80)!
最后,可以用 debug ip inspect detail 来调试 CBAC