在配置ACL的时候,要注意默认的是deny any。因此在一个端口如果配置多个ACL的时候要注意,如果第一条就已经把所有的给deny掉了,那么剩下的ACL也就没有意义了。因此在每个端口上都只能有一个入口ACL和出口ACL。
#access-list 10 permit 172.16.0.3
#line vty 0 4
#access-class 10 in
控制Telnet到路由器上的IP。
自反ACL
工作原理
只含临时性条目,没有“拒绝一切”语句
临时性条目的特点:
1.总是允许语句;
2.指定与最初的外出数据包相同的协议(TCP);
3.指定与最初外出数据包相同的源地址和目的地址,但这两个地址的位置被互换;
4.指定与最初外出数据包相同的源和目的端口号码(对TCP/UDP),但这两个地址的位置被互换;
5.对于不含端口号码的协议,如ICMP 和IGMP,它会指定其他准则;
6.入数据流将根据自反条目被评判,直到该条目过期被删除
配置:企业边界路由器:
interface FastEthernet0/0
ip address 23.0.0 .1 255.255.255.0
ip access-group ZIFAN -2 in
!
interface FastEthernet1/0
ip address 12.0.0 .2 255.255.255.0
ip access-group ZIFAN in
!
ip access-list extended ZIFAN
permit ip host 12.0.0 .1 any reflect LINK_IN //指定该条语句执行自反,自反列表的名字为LINK_IN
ip access-list extended ZIFAN-2
evaluate LINK_IN //计算并生成自反列表
—————————————————————–
说明1:reflect和evalute后面的对应名应该相同,此例中为LINK_IN
说明2:自反ACL只能在命名的扩展ACL里定义
—————————————————————–
试验结果:
router#sh access-lists
Reflexive IP access list LINK_IN
permit icmp host 23.0.0 .2 host 12.0.0.1 (39 matches) (time left 289)
Extended IP access list ZIFAN
10 permit ip host 12.0.0 .1 any reflect LINK_IN (188 matches)
Extended IP access list ZIFAN-2
10 evaluate LINK_IN
可以使用ip reflexive time-out命令改变自反ACL超时时间。但是这个默认时间不能用于TCP,因为TCP通信报文,因为在接受到一个报文后,若检测到RST位被设置并且在5秒钟内检测到2个FIN为,则TCP自反访问表表项会立即关闭。
自反ACL不适合通信中自动切换端口的程序,因为自反ACL只会生成相应目的端口置换成源端口的临时ACL。(多通道程序只能用CBAC)
时间控制列表
time-range no-ip
periodic daily 11:00 to 11:20
periodic weekend 10:00 to 11:00
!
ip access-list extended Time_no_ip
deny ip any any time-range no-ip
!
ACL注释
#access-list 110 remark permit bob from salves only to finace
Established(已建立连接的)
这是针对TCP的专有配置,因为TCP是三次握手,而发起连接一端的第一个报文中是不带有ACK字段的,因此可以通过报文中是否含有ACK判断是那端发起连接,从而做到只允许一端访问。
主机A -------------------------------- 主机B
SYN: seq=x
------------------------------------------->
SYN: seq=y ACK=x+1
<-------------------------------------------
SYN: seq=x+1 ACK=y+1
-------------------------------------------->
上面的图示显示了TCP 建立连接的过程。可以看出:A 发给B 的第一个数据段中没有ACK 位,通过这点我们就可以判断A 在向B 发起连接。扩展ACL 中的established 可以根据数据段中是否设置了ACK 位来对分组进行过滤(没有ACK 位的不符合established 条件)。
注意:该方法只能控制基于TCP 的应用。 在VACL中也适用。
实例:Server0———F0/0— route —F0/1———server1
Route配置:
!
interface FastEthernet0/0
ip address 192.168.0.1 255.255.255.0
!
interface FastEthernet0/1
ip address 192.168.1.1 255.255.255.0
ip access-group 101 in
!
access-list 101 deny tcp any eq www any established
access-list 101 permit ip any any
!
!
两个服务器都可以相互Ping通,因为ICMP是只封装在IP中的。
Server1可以访问Server0的WWW服务器
Server0不可以访问Server1的WWW服务器。
因为端口F0/1拒绝了所有已连接的TCP报文,即Server0发起的连接。
动态ACL
通过Telnet验证后激活的ACL
R1-------f0/0--R2--f1/0-------PC
R2配置:
!
username config password 0 config
!
!
interface FastEthernet0/0
ip address 192.168.1.2 255.255.255.0
!
interface FastEthernet1/0
ip address 192.168.2.2 255.255.255.0
ip access-group 101 in
!
!
access-list 101 permit tcp any any eq telnet
access-list 101 dynamic dy permit ip any any
!
!
control-plane
!
!
line vty 0 2 (通过正常登录,即:Telnet 192.168.2.2便会激活动态ACL,同
时退出登录)
login local
autocommand access-enable host timeout 20 (动态路由配置信息,而且没有提示,
属于line输入。关键命令,输入该命令就是允许自动建立一个动态ACL,如果不加host,一旦一台主机认证成功以后,那么其他主机就不需要认证了,这样是不好的。timeout指定空闲超时时间,单位是分钟)
line vty 3 4(如果需要登录到路由进行管理,Telnet 192.168.2.2 3001
<命令 rotary 1 实现的>)
login local
rotary 1
!
!
End
PC(使用路由器代替)ping R1 :
R3#ping 192.168.1.1
U.U.U
Success rate is 0 percent (0/5)
R3#telnet 192.168.2.2
Username: config
Password:
[Connection to 192.168.2.2 closed by foreign host]
R3#ping 192.168.1.1
!!!!!
R3#telnet 192.168.2.2 3001
Trying 192.168.2.2, 3001 ... Open
Username: config
Password:
R2>en
% No password set (R2忘记配置特权密码了,呵呵)
R2>en
Password:
R2#
一个ACL中只能创建一个动态ACL,而软件也只会引用你创建的第一条动态ACL。
删除临时动态ACL:R2#clear access-template [access-list-number|name]边[dynamic-name][source]
CBAC
1、 CBAC只能用于对TCP和UDP报文的检测,而不用用于其他IP报文(如ICMP)的检测
2、 以路由器作为源和目的地址的报文不被检测
3、 CBAC不能准确的检测加密报文,因此要是配置加密后,唯一能够检测到的多通道应用程序是CBAC stream works和CU-SeeMe。如果需要使用加密功能,则应配置这类应用程序和普通的TCP、UDP协议。
4、 如果同时配置IPSec和CBAC,那么只要CBAC路由器之IPsec隧道的末端,CBAC就能正确的检测通信报文。如果路由器不是其末端,则CBAC不能正确的检测报文,因为报文此时不包含TCP或UDP头。