简介
ACL(Access Control List访问控制列表)是路由器和交换机接口的指令列表,用来控制端口进出的数据包。ACL的定义也是基于每一种被动路由协议的,且适用于所有的被动路由协议(如IP、IPX、AppleTalk等),如果路由器接口配置成为三种协议(IP、AppleTalk和IPX),那么必须定义三种ACL来分别控制这三种协议的数据包。
ACL的作用
ACL可以限制网络流量、提高网络性能;提供网络安全访问的基本手段;可以在路由器端口处决定哪种类型的通信流量被转发或被阻塞,应用范围很广,如:路由过滤、Qos、NAT、Router-map、VTY等。
ACL的分类
根据过滤层次:基于IP的ACL(IP ACL)、基于MAC的ACL(MACACL),专家ACL(Expert ACL)。
根据过滤字段:标准ACL(IP ACL、MAC ACL)、扩展ACL(IP ACL、MACACL、专家ACL)。
根据命名规则:表号ACL、命名ACL。
说明:标准型ACL功能非常简单;而扩展型ACL功能非常强大,匹配的更详细,对路由器等网络设备的性能要求更高,或者对于网速的拖慢更明显,组网时需要酌情使用。
ACL的工作原理
ACL的执行按照列表中条件语句的顺序从上到下、逐条依次判断执行。如果一个数据包的报头跟表中某个条件判断语句相匹配,则不论是第一条还是最后一条语句,数据包都会立即发送到目的端口,那么后面的语句将被忽略,不再进行检查。当数据包与前一个判断条件不匹配时,才被交给下一条判断语句进行比较。如果所有的ACL判断语句都检测完毕,仍没有匹配的语句出口,则该数据包将视为被拒绝而被丢弃,因为在每个ACL的最末尾都隐含一条为“拒绝所有”的语句。但是ACL并不能对本路由器产生的数据流量进行控制。
ACL遵循的规范和原则
1.ACL的列表号指出了是哪种协议的ACL。各种协议有自己的ACL,而每个协议的ACL又分为标准ACL和扩展ACL。
2.一个ACL的配置是基于每种协议的每个接口的每个方向。路由器的一个接口上每一种协议可以配置进方向和出
3.ACL的语句顺序决定了对数据包的控制顺序。在ACL中各描述语句的放置顺序是很重要的。当路由器决定某一数
4.最有限制性的语句应放在ACL语句的首行。把最有限制性的语句放在ACL语句中靠上的位置或者限制性不强的语
5.尽量考虑将扩展ACL放在靠近源的位置上,保证被拒绝的数据包尽早拒绝,避免浪费带宽;另外,尽量使标准
6.允许的语句少,先允许后拒绝所欲;拒绝的语句少,先拒绝后允许所有。
7.在标准ACL里,ACL语句不能被逐条删除,只能一次性删除整个ACL。并且新语句只能被添加到ACL的末行,这意
8.在将ACL应用到接口之前,一定要先建立ACL。首先在全局模式下建立ACL,然后再指明ACL是应用于接口进方向
9.在ACL的最后,隐含一条“全部拒绝”的命令,所以在ACL里一定至少有一条“允许”的语句。
10.ACL只能过滤穿过本路由器的数据流量,不能过滤由本路由器上发出的数据包。
11.路由器接口收到数据包时,应用在接口in方向的ACL起作用,数据包被该ACL允许后,路由器才会对数据包进
3P原则:
每种协议(Per Protocol)的每个接口(Per Interface)的每个方向(PerDirection)只能配置一个ACL。
每种协议一个ACL:要控制接口上的流量,必须为接口上启用的每种协议定义相应的ACL。
每个方向一个ACL:一个ACL只能控制接口上一个方向的流量。要控制入站和出站流量,必须分别定义两个ACL。
每个接口一个ACL:一个ACL只能控制一个接口(如快速以太网F0/0)上的流量。
基于表号的的访问控制列表
标准IP访问控制列表
用于简单的访问控制、路由过滤,且仅对源地址进行过滤。
标准ACL格式
R1(config)#access-list access-list-number{remark|permit|deny}source source-wildcard[log]
R1(config)#access-list
表号:标准ACL范围,1-99、1300-1999。
策略:permit(允许);deny(拒绝)。
源地址:指定IP网段:IP地址+通配符掩码;单个主机地址:host;任意地址:any。
说明:
①“remark”选项:用于给访问控制列表添加备注,增强列表的可读性。
②源地址字段中:any选项表示任何IP地址,等同于0.0.0.0255.255.255.255;host选项可代替掩码0.0.0.0。
③可选参数“log”:用于对匹配的数据包生成信息性日志消息,并发送到控制台上。
接口关联ACL
R1(config)#int f0/0
R1(config-if)#ip access-group
表号:与该接口关联的访问控制列表表号。
方向:in对所有入站的数据匹配;out 对所有出站的数据进行匹配。
示例:
R1(config)#access-list 1 remarkDeny:172.16.1.0/24&Permit:PC1
R1(config)#access-list1
R1(config)#access-list 1 deny 172.16.1.00.0.0.255
R1(config)#access-list 1 permitany
(R1(config)#access-list 1 denyany)
R1(config)#int f0/0
R1(config)#ip access-group 1in
R1#showaccess-list
R1#clear access-listcounters
通配符掩码/反码:0表示精确匹配;1表示不匹配。通配符掩码 = 255.255.255.255- 子网掩码。
如:192.168.1.0/24反码为0.0.0.255;192.168.1.64/28反码为0.0.0.15;192.168.1.1/32反码为0.0.0.0。
说明:192.168.1.1/32既可以写成host192.168.1.1,又可以写成192.168.1.1 0.0.0.0。
ACL对Telnet的控制
控制路由器有两种方法:一种是通过本地控制台端口(consoleport)直接操作;另一种是远程控制,在远程控制中最常用的方法是Telnet,只要知道路由器的任意一个物理接口地址和Telnet口令,并且存在路由,就可以远程操作路由器。
使用ACL提高Telnet的安全性也有两种办法:一种是在物理线路上设置访问控制列表,这种方法比较麻烦,需要在路由器上配置多条ACL并关联到每个物理接口;另一种是配置ACL并关联到Telnet使用的虚拟口(VTY0 4)上,这种方法比较简单。
实验:
实验要求:只有Pc2是管理员,只允许它控制管理路由器。
R1(config)#access-list1
R1(config)#access-list 1 permit host1.1.4.2
R1(config)#line vty 0 4
R1(config-line)#access-class 1in
R2、R3、R4配置同R1。
注意:VTY端口关联ACL的命令是“access-class”,“access-class”命令只对标准ACL有效。
扩展IP访问控制列表
标准ACL只能根据源地址来检查数据包,它允许/拒绝的整个TCP/IP协议集的数据,功能有限。扩展的访问控制列表可以根据源和目的端口等来检查数据包,条件细化、更加灵活。但是扩展ACL对网络设备性能、网络带宽要求更高,组网时需要酌情使用。
扩展ACL格式
R1(config)#access-listaccess-list-number{remark|permit|deny}protocol source [source-mask]
R1(config)#access-list
表号:扩展ACL范围,100-199、2000-2699。
策略:permit(允许);deny(拒绝)。
协议:检查特定协议的数据包,如TCP、UDP、ICMP、IP等。
源地址:指定IP网段:IP地址+通配符掩码;单个主机地址:host;任意地址:any。
源端口:可省略不写,lt、gt、eq、neq(小于、大于、等于、不等于)。
目的地址:指定IP网段:IP地址+通配符掩码;单个主机地址:host;任意地址:any。
目的端口:可省略不写,lt、gt、eq、neq(小于、大于、等于、不等于)。
说明:“establishe”选项用于TCP协议,指示已建立的连接。
接口关联ACL
R1(config)#int f0/0
R1(config-if)#ip access-group
表号:与该接口关联的访问控制列表表号。
方向:in对所有入站的数据匹配;out 对所有出站的数据进行匹配。
示例:
R1(config)#access-list 100 deny tcp172.16.1.0 0.0.0.255 host 172.16.2.1 eq 23 log
R1(config)#access-list100
R1(config)#access-list100
R1(config)#access-list 100 permit tcp172.16.1.0 0.0.0.255 host 172.16.2.1 eq www
R1(config)#access-list100
R1(config)#access-list100
(R1(config)#access-list 100 deny anyany)
R1(config)#int f0/0
R1(config)#ip access-group100
说明:FTP使用20端口传输数据,21端口传输控制命令,所以以上两条命令又分别可以写成:
常用协议及端口号:
ICMP协议
TCP协议:
HTTP
FTP-Data
FTP
SMTP
POP3
TELNET
UDP协议:
TFTP
DNS
DHCP
SNMP
“established”选项
TCP报头中有6个控制位,分别是:URG、ACK、PSH、RST、SYN、FIN。在整个TCP数据传输过程中ACK位除了在第一次握手的时候为0外,其它任何时候都是置1的,根据这个原理可以实现控制TCP连接的方向。当路由器收到了一个数据包并匹配到了带有established的ACL时,established会通过检查ACK和RST位,如果两个控制位都没被设置(使用),那么表明源地址正在向目标地址建立TCP连接,这与established选项的含义不一致,数据包将被拒绝通过,也就是拒绝该源地址发起建立TCP连接的请求。established只对TCP连接起作用,对UDP不起作用。
示例:
R1(config)#access-list 110 permittcp any 172.22.0.0 0.0.255.255
R1(config)#access-list 110 permittcp any 172.22.0.0 0.0.255.255 established
R1(config)#access-list 110 permittcp 172.22.0.0 0.0.255.255 any established
命名访问控制列表
基于表号的访问控制列表新添加的语句只能放在最后边,且执行顺序是从上到下、逐条执行的。如果需要修改列表执行顺序只能删除整个列表(列表里的语句是不可删除的),然后重新编写(导出配置文件进行修改,将ACL规则复制到编辑工具进行修改),然而这又是不现实的。所以基于表号访问控制列表就有缺陷,而命名访问控制列表可以弥补这个缺陷。
命名ACL的修改和维护
命名访问控制列表可以单独删除某条语句而不破坏整个列表的顺序;也可以在新添加的语句前面写入编号,把语句插入到指定的位置,当没有写入编号的时候默认添加到最末行。
示例:
R1(config)#ipaccess-list
R1(config-ext-nacl)#15 permit ospf anyany
R1(config-ext-nacl)#no20
R1(config)#ip access-listresequence test3 55
说明:ACL规则的起始序号默认值为10;递增序号默认值为10。
标准命名扩展访问控制列表
标准命名ACL格式
R1(config)#ip access-list standard
R1(config-std-nacl)#策略
表名:标准ACL范围,1-99、1300-1999;字符、字符+数字。
策略:permit(允许);deny(拒绝)。
源地址:指定IP网段:IP地址+通配符掩码;单个主机地址:host;任意地址:any。
接口关联ACL
R1(config)#int f0/0
R1(config-if)#ip access-group
表号:与该接口关联的访问控制列表表号。
方向:in对该接口所有进站的数据匹配;out 对该接口所有出站的数据进行匹配。
示例:
R1(config)#ip access-list standardtest1
R1(config-std-nacl)#deny 172.16.1.00.0.0.255
R1(config-std-nacl)#deny host172.16.2.1
R1(config-std-nacl)#permitany
(R1(config-std-nacl)#denyany)
R1(config)#int f0/0
R1(config)#ip access-group test1in
扩展命名访问控制列表
扩展命名ACL格式
R1(config)#ip access-listextended
名称:扩展ACL范围,100-199、2000-2699;字符、字符+数字。
R1(config-ext-nacl)#策略
策略:permit(允许);deny(拒绝)。
协议:检查特定协议的数据包,如TCP、UDP、ICMP、IP等。
源地址:指定IP网段:IP地址+通配符掩码;单个主机地址:host;任意地址:any。
源端口:可省略不写,lt、gt、eq、neq(小于、大于、等于、不等于)。
目的地址:指定IP网段:IP地址+通配符掩码;单个主机地址:host;任意地址:any。
目的端口:可省略不写,lt、gt、eq、neq(小于、大于、等于、不等于)。
接口关联ACL
R1(config)#int f0/0
R1(config-if)#ip access-group
表号:与该接口关联的访问控制列表表号。
方向:in对该接口所有进站的数据匹配;out 对该接口所有出站的数据进行匹配。
示例:
R1(config)#ip access-list
R1(config-ext-nacl)#deny tcp host 172.16.1.1 host 172.16.2.1 eq23
R1(config-ext-nacl)#permit tcp 172.16.1.0 0.0.0.255 host172.16.2.1 eq ftp
R1(config-ext-nacl)#permit tcp 172.16.1.0 0.0.0.255 host172.16.2.1 eq ftp-data
R1(config-ext-nacl)#deny ip 172.16.2.0 0.0.0.255 host172.16.3.1
(R1(config-ext-nacl)#deny any)
R1(config)#int f0/0
R1(config)#ip access-group test2 in
动态访问控制列表
动态访问控制列表是对传统访问控制列表的一种重要功能增强。动态ACL是能够自动创建动态访问表项的访问列表。传统的标准访问列表和扩展的访问列表都不能动态创建访问表项。一旦在传统访问列表中加入了一个表项,除非手工删除,该表项将一直产生作用。而在动态访问表中,读者可以根据用户认证过程来创建特定的、临时的访问表项,一旦某个表项超时,就会自动从路由器中删除。
动态ACL工作原理
用户一般通过提供用户名和口令,就能够开启一个到路由器的Telnet会话。在用户被认证之后,路由器会自动关闭Telnet会话,并将一个动态访问表项置于某个访问表中,以允许源地址为认证用户地址的报文通过。这样,我们可以在安全边界上配置访问表,只允许那些能够通过用户认证的工作站才能发送向内的报文。我们至少应该允许到达路由器的Telnet通信报文,这样才能进行用户认证过程。如果不允许Telnet连接,用户就不能在访问表中创建动态的访问表项。并一定要将Telnet表项放置在动态表项的前面。
动态ACL的优点
在传统的访问表中,如果处于路由器不可信任端的用户需要访问内部的资源,就必须永久性地在访问表中开启一个突破口,以允许这些用户的报文进入可信任网络。这些在访问表中的永久性的突破口给黑客发送报文进入安全边界,并达到内部网络提供了机会。这种情况可以通过只允许特定的可信IP源地址的报文进入内部,解决部分问题。但是,当用户使用动态的IP地址时(DHCP用户、ISP拨号用户等),上述的方法就不起作用了。
R1(config)#username user1privilege 15 secretcisco
R1(config)#access-list 120 permit tcp172.16.1.0 0.0.0.255 host 172.16.1.1 eqtelnet
R1(config)#access-list 120 permit tcp172.16.1.0 0.0.0.255 host 172.16.12.1eq
R1(config)#access-list 120 dynamicDACL timeout 60 permit ip 172.16.1.0 0.0.0.255host
R1(config)#int f1/0
R1(config-if)#ip access-group 120in
R1(config)#line vty 02
R1(config-line)#loginlocal
R1(config-line)#autocommandaccess-enable host timeout 10
R1(config)#line vty 34
R1(config-line)#login local
R1(config-line)#rotary1
说明:
①第一个timeout和第二个timeout的区别:
②“autocommand access-enable host timeout10”命令:
③“rotary1”命令:在VTY中开启动态ACL后,用户所有发起的Telnet会话都会触发一个动态ACL表项,并且此
实验调试
R1#show ipaccess-list
自反访问控制列表
自反ACL用于控制网络的单向访问。例如通常只允许内网主动访问外网,并允许外部数据通过;但拒绝外网主动访问内网。
自反ACL工作原理
当内网主动访问外网时,将被一条扩展命名ACL(如名为ACLOUT)匹配,再由这条ACL动态地创建一条暂时的自反ACL(如名为REF),REF再被外网到内网的扩展命名ACL(如名为ACLIN)调用。这条自反ACL的源、目的IP和源、目的端口刚好与ACLOUT相反,也就是匹配上外网响应内网的数据包。这样,一条从内网主动访问外网的双向通信便建立了。而如果有外网主动访问内网的数据包时,由于没有匹配的ACL语句,并且默认denyany any,因此外网主动访问的数据就被拒绝了。
示例:
R1(config)#ip reflexive-listtimeout100
R1(config)#ip access-list extendedACLOUT
R1(config-ext-nacl)#permit
R1(config)#ip access-list extendedACLIN
R1(config-ext-nacl)#evaluate
R1(config)#int f0/1
R1(config-if)#ipaccess-group
R1(config)#int f0/0
R1(config-if)#ipaccess-group
1.尽管在概念上与扩展ACL的“established”选项相似,但自反ACL可用于不含ACK或RST位的UDP和ICMP。
2.自反ACL仅可在扩展命名IPACL中定义,不能在编号ACL或标准命名ACL中定义。
3.自反ACL可以只允许出去的流量,并阻止外部网络主动向内部网络发起的的流量,从而更好地保护内部网络。
4.自反ACL不是直接被应用到某个接口下的,需要由一个扩展命名ACL调用(如上例中ACLIN)。
5.自反ACL默认超时时间300秒,或者TCP报文FIN位置1的数据包通过接口时,自反ACL会自动清除,因此定义自反
6.自反ACL只有permit语句没有deny语句,即永远是permit的(如上例中permit ip any anyreflect REF)。但调
基于时间的访问控制列表
基于时间的ACL可以对于不同的时间段实施不同的访问控制规则。在原有ACL的基础上应用时间段。时间段可以分为:绝对时间段(absolute)、周期时间段(periodic)和混合时间段。
设置路由器时间:R1#clock set时:分:秒日月年
说明:在配置基于时间的ACL之前确保路由器系统时间设置正确。
第一步,定义时间段:
R1(config)#time-range
R1(config-tmie-range)#定义时间段
名称:数字、字符、字符+数字。
定义时间段:
1.定义绝对时间段:
2.定义周期时间段:
说明:每个时间段只能有一个absolute语句,但可以有多个periodic语句。
absolute:为时间范围指定一个绝对的开始和结束时间。
periodic:为时间范围指定一个重复发生的开始和结束时间,它接受以下参数:Monday、Tuesday、Wednesday、
第二步,在访问控制列表中用time-range调用定义的时间段:
例如:access-list 100 permittcp any any eq 80 time-range t1
说明:在调用时间段时,只有配置了相应的time-range的时间规则才会在指定的时间段内生效
R1#showtime-range
R1#show access-list表名
联系客服