访问权限控制―
定时访问列表、动态访问列表、自反访问列表及访问列表的高级应用
定时访问列表:
先举一个例子,有一个这样的需求:要求在上班时间内(9:00-17:30)禁止内部员工浏览
internet,禁止使用QQ、MSN。而且在2005 年12 月31 日(周六,但是正常上班)的所有时
间内都不允许进行上述操作。但在任何时间都可以允许以其它方式访问Internet。天
首先,让我们来分析一下这个需求,浏览internet 现在基本上都是使用http 或https 进
行访问,标准端口是TCP/80 端口和TCP/443,MSN 使用TCP/1863 端口,QQ 登录会使用
到TCP/UDP8000 这两个端口,还有可能使用到udp/4000 进行通讯。而且这些软件都能支持
代理服务器,目前的代理服务器主要布署在TCP 8080、TCP 3128(HTTP 代理)和
TCP1080(socks)这三个端口上。
time-range TEST
absolute start 00:00 31 Dec 2005 end 23:59 31 Dec 2005
periodic weekdays start 9:00 17:30
exit
ip access-list extend INTERNET_LIMIT
deny tcp 10.1.0.0 0.0.255.255 any eq 80 time-range TEST
deny tcp 10.1.0.0 0.0.255.255 any eq 443 time-range TEST
deny tcp 10.1.0.0 0.0.255.255 any eq 1863 time-range TEST
deny tcp 10.1.0.0 0.0.255.255 any eq 8000 time-range TEST
deny udp 10.1.0.0 0.0.255.255 any eq 8000 time-range TEST
deny udp 10.1.0.0 0.0.255.255 any eq 4000 time-range TEST
deny tcp 10.1.0.0 0.0.255.255 any eq 3128 time-range TEST
deny tcp 10.1.0.0 0.0.255.255 any eq 8080 time-range TEST
deny tcp 10.1.0.0 0.0.255.255 any eq 1080 time-range TEST
permit ip any any
int fa0/0
ip access-group INTERNET_LIMIT in
定时访问列表配置步骤:
1:time-range TEST:定义一个新的时间范围,其中的TEST 是为该时间范围取的一个名字。
absolute:为绝对时间。只使用一次。可以定义为1993-2035 年内的任意一个时点。
Periodic:为周期性重复使用的时间范围的定义。完整格式为periodic 日期关键字开始时间
结束时间。
2:access-list 101 deny ip 10.1.0.0 0.0.255.255 any time-range TEST:注意这一句最后的
time-range TEST,使这条ACL 语句与time-range TR1 相关联,表明这条语句在time-range
TEST 所定义的时间范围内才起作用。
3:应用访问列表
动态访问列表(Lock-and-Key)
动态访问列表,Cisco 把它称为Lock-and-key,它使用IP 动态扩展访问列表,用户的流
量平时是被禁止通过路由器的,当用户通过路由器的身份验证的时候(通过telnet 到路由器
上,输入用户名和密码的方式),路由器生成一个临时的访问列表,临时准许用户的流量通
过路由器。
何时应该使用 Lock-and-key 动态访问列表:
1:当你准许一个远程internet 用户允许访问你内网中的主机时,你可以使用Lock-and-key
验证用户身份,通过验证后,用户可以访问你授权的内网资源。
2:如果你想准许内网的部分用户可以访问远程网络,你可以使用Lock-and-key 验证用户身
份,身份验证的方式可以通过Tacacs+或本地认证等方式。
动态访问列表工作过程
1:用户通过telnet 方式登录到一台配置了Lock-and-key 的边缘路由器(防火墙)上,用户通过
VTY 方式登录路由器。
2:当Cisco IOS 收到telnet 的数据包后,打开一个telnet 会话,提示输入用户名口令。可以
使用本地认证、TACACS+ 或者 RADIUS 认证。
3:当用户通过认证后,telnet 会话自动断开,IOS 建立了一个临时的动态访问列表。
4:用户可以访问授权的资源。
5:当动态访问列表配置的超时时间(可以使空闲时间或者绝对时间)到达后,IOS 删除临时建
立的访问列表。
配置 Lock-and-Key 动态访问列表
命令 目的
Step 1 Router(config)# access-list access-list-number [dynamic
dynamic-name [timeout minutes]] {deny | permit} telnet
source source-wildcard destination destination-wildcard
[precedence precedence] [tos tos] [established] [log]
配置一个动态的访问列表。
Step 2 Router(config)# access-list dynamic-extend (可选) 延长动态ACL 的绝对
时间6 分钟
Step 3 Router(config)# interface type number 进入接口配置模式,应用动态
访问列表
Step 4 Router(config-if)# ip access-group access-list-number
Step 5 Router(config-if)# exit
Step 6 Router(config)# line vty line-number [ending-line-number] 进入VTY配置模式
Step 7 Tacacs 认证:
Router(config-line)# login tacacs
密码认证:
Router(config-line)# password password
本地用户名和密码认证:
Router(config-line)# login local
Router(config)# username name password secret
配置用户认证方式。
Step 8 Router(config-line)# autocommand access-enable [host]
[timeout minutes]
或者
Router(config)# autocommand access-enable [host]
[timeout minutes]
在 line 或者全局配置模式激活
临时访问列表建立。如果指定
了host 则只准许发起telnet 验
证会话的主机访问,如果没有
指定关键字host,则整个网络
上的主机都被准许建立动态访
问列表。
显示动态访问列表:
Router# show access-lists [access-list-number]
手工清除动态访问列表:
Router# clear access-template [access-list-number | name] [dynamic-name] [source] [destination]
动态访问列表举例:
username test password 0 test 配置用户和密码
ip telnet source-interface Ethernet0 将所有的TELNET 数据包的源设置为E0 IP
interface ethernet0
ip address 172.18.23.9 255.255.255.0
ip access-group 101 in
access-list 101 permit tcp any host 172.18.23.9 eq telnet
access-list 101 dynamic mytestlist timeout 120 permit ip any any
line vty 0
login local
autocommand access-enable timeout 5
自反访问表
自反访问表是 CISCO 提供给企业网络的一种较强的安全手段,利用自反访问表可以很
好的保护企业内部网络,免受外部非法用户的攻击。
自反访问表的基本的工作原理是:
只能由内部网络始发的,外部网络的响应流量可以进入,由外部网络始发的流量如果没
有明确的允许,是禁止进入的。也就是说做网络的单向访问其实实现的是防火墙的基本功能:
内网可以访问外网,但外网可以访问内网。
拓扑图(所有子网掩码均为255.255.255.0):如下:
PC(10.1.1.2)---E0(10.1.1.1)[RouterA]S0(192.1.1.1)---S1(192.1.1.2)[RouterB]
现在假设 RouterA 的E0 口所连网段为内网段,RouterA S0 所连的网段为外网段,还假
设我想做的是内网的PC机能ping 通外网RouterB 的S1 口,但RouterB 却ping 不进内网。
如果只是使用扩展访问列表准许PC 的ICMP 的数据包出去,不允许RouterB 的ICMP 数据
包进来,并不能达到要求,用ACL 来实现类似的单向访问控制需要用到一种特殊的ACL,
叫Reflexive ACL。Reflexive ACL 的配置分为两个部分,一部分是outbound 的配置,一部分
是inbound 的配置。
1)Reflexive-ACL 的工作流程:
a.由内网始发的流量到达配置了自反访问表的路由器,路由器根据此流量的第三层和第四层
信息自动生成一个临时性的访问表,临时性访问表的创建依据下列原则:
protocol 不变,source-IP 地址 , destination-IP 地址严格对调,source-port,destination-port 严格
对调,对于ICMP 这样的协议,会根据类型号进行匹配。
b.路由器将此流量传出,流量到达目标,然后响应流量从目标返回到配置了自反访问表的路
由器。
c.路由器对入站的响应流量进行评估,只有当返回流量的第三、四层信息与先前基于出站流
量创建的临时性访问表的第三、四层信息严格匹配时,路由器才会允许此流量进入内部网络。
2)自反访问表的超时:
对于 TCP 流量,当下列三种情况中任何一种出现时,才会删除临时性的访问表:
a)两个连续的FIN 标志被检测到,之后5 秒钟删除。
b)RST 标志被检测到,立即删除。
c)配置的空闲超时值到期(缺省是300 秒)。
对于UDP,由于没有各种标志,所以只有当配置的空闲超时值(300 秒)到期才会删除临时
性的访问表。
允许由内部 192.168.10.0/24 始发的HTTP,SMTP,流量可以出去, 其余的流量全部拒绝。
RA:
!
ip access-list extended OUTBOUND
permit tcp 192.168.10.0 0.0.0.255 any eq www reflect CISCO
permit tcp 192.168.10.0 0.0.0.255 any eq smtp reflect CISCO
!
ip access-list extended INBOUND
evaluate CISCO
!
int serial 0
ip access-group OUBOUND out
ip access-group INBOUND in
扩展访问列表的高级应用
下面讨论扩展访问控制列表的fragment 选项和established 选项。
1. fragment 选项:
(1) 当一个ACL 只含有三层信息时,对所有的包都进行控制。
(2) 当不使用frament 选项时,一个包含三层和四层信息的acl 条目将对所有的数据包进行以
下控制:
如果是未分片数据包(nonfragmented)或者分片数据包的第一个分片(initial fragment) ,都
将按正常的ACL 进行控制(permit 或deny)。
如果是分片数据包的后续分片(noninitial fragment),则只检查ACL 条目中的三层部分(协
议号、源、目的)。如果三层匹配而且是permit 控制,则允许该分片通过;如果三层匹配而
且是deny 控制,则继续检查下一个ACL条目(和正常的ACL 控制顺序不同)。
(3)当使用fragment 选项时,一个acl 条目将只对分片数据包的后续分片(noninitial fragment)
进行控制;并且ACL 条目中不能包含四层信息。
access-list 101 permit <协议> <源> <目的> fragment
2.established 选项:
access-list 101 permit tcp <源> <目的> established
该选项只能用于 tcp 协议,目的是为了实现基于tcp 数据段(四层pdu)中的代码控制
位的标志进行会话的控制,例如只允许那些已经建立的tcp 会话的流量(特征是ACK 或者
RST 标志已置位)。
简易拓扑图:NetA----e1-R1-e0----NetB
例如:假定上图中要实现以下控制,只允许Net A 的所有主机初始化到Net B 的TCP 通信,
但是不允许NetB 的主机初始化到Net A 的TCP 通信,可以使用以下ACL 实现。
hostname R1
interface ethernet0
ip access-group 102 in
access-list 102 permit tcp any any gt 1023 established
注意到 access-list 102 最末尾使用了关键字"established",它被CISCO 路由器访问列表用
来允许TCP 返回的报文。它检测TCP 报文中ACK 或RST 标志位的存在,如果报文中的
ACK 或RST 位被设置了,则通常表示报文是一个正在进行的会话的一部分,所以,使用关
键字"established"是一种判断报文是否为一个已知会话的一部分的简单方法。但是,作为网
络黑客可以非常容易地写出一段程序,用来生成这两个标志,并将带有ACK 或RST 标志位
的报文发送出去,而这些报文却并非正在进行的合法会话的一部分。在实践中我们发现TCP
返回的报文随机选择的端口号范围为1024~65536(因为Well-Know port 的端口范围是
1~1023),所以我们可以将含有关键字"established"的访问控制语句改为:
access-list 100 permit tcp any any gt 1023 established
这就确保了进入企业内部网络的报文,其目的端口号必须大于1023。那么,黑客的攻
击报文即使欺骗地使用了ACK 和RST 位,企图逃脱访问列表项的控制,但是它的端口号必
须大于1023,这能使得欺骗性的报文不会对端口号低于1024 的网络设备如FTP、DNS、HTTP
等服务器造成影响,在一定程度上提高了网络的安全性。