Time-range ACL
在网络中,当需要在一段时间内,限制用户可以访问或者不可以访问某类资源的时间,可以通过基于时间的
ACL
来实现此功能。
要实现基于时间的
ACL
,首先要使用
time-range
命令在路由器上定义出一段时间,该时间类型可以分为
absolute
和
periodic
两种,其中
absolute
是绝对时间,表示定义的时间只是一次性的;而
periodic
是周期性的。
配置:
在上述拓扑中,限制在工作日的
9
点到
18
点的时间段内
r2/r3
路由器禁止远程
telnet
到
R4
路由器,其他时间可以
R1(config)time-range telnet-time
R1(config-time-range)#periodic weekdays 9:00 to 18:00
R1(config)#access-list 100 deny ip host 10.1.1.2 any time-range telnet-range
R1(config)#access-list 100 permit ip any any
R1(config)#interface f0/0
R1(config-if)#ip access-group 100 in
Reflective ACL
在外网主动发给向内网的连接时,由于这可能是一些攻击,为了安全起见,我们可以在外网的路由器接口上设置
ACL
拒绝所有外网流量进行内网,但这样会影响内网正常用户上网查询资料,因为外网路由器接口已经拒绝了所有的外网流量。这时可以通过
reflective acl
来实现既可以让内网用户正常访问外网,同时又可以防止外网主动向内网发起的可能是攻击类的连接。
要实现
reflective acl
需要两个
ACL
条目配合使用,一个条目是拒绝外网所有的流量进入内网,并作一个标记,只有符合该标记的外网流量才会进入内网;第二个条目是定义内网到外网的哪些流量可以打上该标记。
但
reflective acl
也有一些缺陷,它只支持扩展命名
ACL
,并只针对
TCP
协议的流量有效;在使用
reflective acl
匹配内网到外网的流量时,最多只能写一个
ACL
条目
配置:
在上述拓扑中,
R2/R3
路由器分别代表内网,
R4
代表
internet
外网路由器,
R1
连接两边的网络,要求只有在内网用户需要
telnet
外网设备时,才允许该流量通过;其他的全部拒绝;
//
在这里配置名字为
come
的
ACL
,仅允许
icmp
协议的流量通过
R1
路由器,其他的全部拒绝;并且为作出一个标记为
cisco
r1(config)#ip access-list extended come
r1(config-ext-nacl)#permit icmp any any
r1(config-ext-nacl)#evaluate cisco
r1(config)#int f0/1
r1(config-if)#ip access-group come in
//
这里配置当内网要
telnet
外网的设备时,为此类流量标记为
cisco
,只有标记为
cisco
的流量外网的数据才可以进入内网
r1(config)#ip access-list extended go-internet
r1(config-ext-acl)#permit tcp any any eq 23 reflect cisco
r1(config-ext-acl)#permit ip any any
r1(config)interface f0/1
r1(config-if)#ip access-group go-internet out
CBAC-----------context-based access control
CBAC
实现与
reflect acl
一样的功能,但
CBAC
相对来说实现更简单些,比
reflect acl
功能要强大些;在匹配内网到外网的流量时,
CBAC
可以根据应用层协议来匹配数据,并且可以匹配多个协议的数据。
配置:
R1(config)#access-list 100 deny ip any any
R1(config)#interface f0/1
R1(config-if)#ip access-group 100 in
R1(config-if)#exit
R1(config)#ip inspect name cisco tcp audit-trail on
R1(config)#interface f0/1
R1(config-if)#ip inspect cisco out
//
在这里会有相关日志对会话进行记录
R1(config)#
*Sep 11 02:59:21.003: %FW-6-SESS_AUDIT_TRAIL_START: Start tcp session: initiator (10.1.1.2:34862) -- responder (14.1.1.4:23)
R1(config)#
*Sep 11 02:59:35.163: %FW-6-SESS_AUDIT_TRAIL: Stop tcp session: initiator (10.1.1.2:34862) sent 74 bytes -- responder (14.1.1.4:23) sent 842 bytes
当内网有流量产生时,可以通过命令查看
CBAC
的会话信息
R1#sh ip inspect sessions
Established Sessions
Session 64138E18 (10.1.1.2:29932)=>(14.1.1.4:23) tcp SIS_OPEN
R1#sh ip inspect sessions
Established Sessions
Session 64138E18 (10.1.1.2:29932)=>(14.1.1.4:23) tcp SIS_OPEN
PAM
在使用
CBAC
时,
CBAC
使用应用层的协议来限制内网到外网的安全访问,但
CBAC
只能匹配应用协议的标准端口,如果某些应用通过映射的方式将标准端口映射到非标准端口中,则
CBAC
会失去效果,因为它只认识应用层协议的标准端口号,如果要让
CBAC
同样可以认识这些修改了的非标准端口号,可以在路由器上通过
PAM
来告诉
CBAC
非标准端口是什么
配置:
在这里我们通过把
R4
的
telnet 23
端口映射到
13.1.1.100
的
1000
端口上,从而验证
PAM
的效果。
1、
在
R3
上配置静态
NAT
,将
R4
的
telnet
服务映射到
13.1.1.100
的
1000
端口上
R3(config)#interface f0/0
R3(config-if)#ip nat inside
R3(config-if)#exit
R3(config)#
R3(config)#interface f0/1
R3(config-if)#ip nat outside
R3(config-if)#exit
R3(config)#ip nat inside source static tcp 34.1.1.4 23 13.1.1.100 1000
在这里我们验证下通过
telnet 13.1.1.100 1000
可以登录到
R4
设备上
R2#telnet 13.1.1.100 1000
Trying 13.1.1.100, 1000 ... Open
User Access Verification
Username: cisco
Password:
R4>
R4>
2、
在
R1
上配置
CBAC
R1(config)#access-list 100 deny ip any any
R1(config)#interface f0/1
R1(config-if)#ip access-group 100 in
R1(config-if)#exit
R1(config)#ip inspect name cisco telnet
R1(config)#interface f0/1
R1(config-if)#ip inspect cisco out
R1(config-if)#exit
R2#telnet 13.1.1.100 1000
Trying 13.1.1.100, 1000 ...
% Connection timed out; remote host not responding
到此步为止,从
R2
上
telnet R4
时是失败的,因为
CBAC
中允许是
telnet
是标准的
23
端口,而我们这里在第一步的时候已经把
telnet
映射到
1000
端口上了
.
3、
通过
PAM
,使得
R2
可以
telnet
到
R4
上
R1(config)#ip port-map telnet port tcp 1000
在这里我们通过配置
PAM
告诉
CBAC telnet
服务已经映射到
1000
端口上
再次测试
R2
到
R4
远程服务
R2#telnet 13.1.1.100 1000
Trying 13.1.1.100, 1000 ... Open
User Access Verification
Username: cisco
Password:
R4>
[Connection to 13.1.1.100 closed by foreign host]
在
R1
上通过查看
CBAC
会话也可以看到效果
R1#sh ip inspect sessions
Established Sessions
Session 64138E18 (12.1.1.2:31853)=>(13.1.1.100:1000) telnet SIS_OPEN