要点:
1、按顺序执行,一旦某条语句匹配,后续语句不再处理.
2、默认ACL 结尾语句是deny any,所以你要记住的是在ACL 里至少要有1 条permit 语句.
3、记得创建了ACL 后要把它应用在需要过滤的接口上.
4、每个接口,每个方向,每种协议,你只能设置1 个ACL(每个接口只能有一个 acl in 和一个 acl out).
5、你不可能从ACL 从除去1 行,除去1 行意味你将除去整个ACL,命名访问列表(named access lists)例外.
6、ACL 是用于过滤经过router 的数据包,它并不会过滤router 本身所产生的数据包.
7、尽可能的把IP 标准ACL 放置在离目标地址近的地方;尽可能的把IP 扩展ACL 放置在离源地址近的地方。
ACL的工作原理
•读取第三层及第四层包头中的信息
•根据预先定义好的规则对包进行过滤
ACL的两大主要功能:
•流量控制
•匹配感兴趣流量
ACL的类型:
•标准访问控制列表
–只能根据 源地址 做过滤
–针对整个协议采取相关动作(允许或禁止)
•扩展访问控制列表
–能根据 源、目的地地址、端口号 等等进行过滤
–能允许或拒绝 特定 的协议
•入站及出站
需要把ACL应用到接口上,而且还要定义过滤的方向:
1.in ACL(进方向ACL):先路由,再处理
当访问列表被应用到从接口输入的包时,那些包在被路由到输出接口之前要经过访问列表的处理。不能路由任何被拒绝的包,因为在路由之前这些包就会被丢弃掉。
2.out ACL(出方向ACL):先处理,再路由
当访问列表被应用到从接口输出的包时,那些包首先被路由到输出接口,然后在进入该接口的输出队列之前经过访问列表的处理。
•access-list
•通配符掩码
通配符和访问列表一起用来指定一台主机、一个网络、一个网络或几个网络内的某个范围
由0到255的4个8位位组组成的。0代表必须精确匹配,255代表任意,比如:172.16.30.0 0.0.0.255,它表示前3个8位位组必须精确匹配,后1个8位位组可以为任意值;
如果你想指定172.16.8.0 到172.16.15.0,则通配符掩码为0.0.7.255 (15-8=7)
表示192.168.1.0-192.168.1.31用通配符掩码网段表示为 192.168.1.0 0.0.0.31
•通配符缩写
•标准访问控制列表的配置:
access-list access-list-number {permit|deny} source [wildcard mask]
•编号选择1 – 99 以及 1300~1999之间的数字作为表号。
•通配符若无,默认0.0.0.0 (精确匹配)
•执行“no access-list access-list-number” 将会删除整个ACL列表
ip access-group access-list-number { in | out }
•在接口中应用
•应用时关联入或出站方向
•默认用于出站
标准ACL尽可能用在靠近目的地址的地方
//允许172.17.31.222通过,其他主机禁止 access-list 1 permit host 172.17.31.222 //可以省去输入host命令 //禁止172.17.31.222通过,其他主机允许 access-list 1 deny host 172.17.31.222 //可以省去输入host命令 access-list 1 permit any //允许172.17.31.0/24通过,其他主机禁止 access-list 1 permit 172.17.31.0 0.0.0.255 //禁止172.17.31.0/24通过,其他主机允许 access-list 1 deny 172.17.31.0 0.0.0.255 access-list 1 permit any
举例:
要求:销售部不允许访问金融部,但允许访问市场部和Internet:
(config)#access-list 10 deny 172.16.40.0 0.0.0.255 (config)#access-list 10 permit any (config)#interface E1 (config-if)#ip access-group 10 out //尽量把标准ACL放在离目标近的地方,所以应用在E1口,方向为out.
禁止172.16.4.0/24网段中除172.16.4.13这台服务器访问172.16.3.0/24的计算机
(config)#access-list 1 permit host 172.16.4.13 //允许172.16.4.13的数据包通过 (config)#int e 0 //进入E0端口(因为标准ACL尽量放在离目标地址近的地方) (config-if)#ip access-group 1 out //应用到接口E0的出方向
禁止172.16.4.13对172.16.3.0/24网段的访问,而172.16.4.0/24中的其他计算机可以正常访问。
(config)#access-list 1 deny host 172.16.4.13 //禁止172.16.4.13的数据包通过 (config)#access-list 1 permit any //允许其他所有计算机数据包通过 (config)#int e 0 //进入E0端口 (config-if)#ip access-group 1 out //将ACL1宣告,同理可以进入E1端口后使用ip access-group 1 in来完成宣告
•扩展访问控制列表的配置:
access-list access-list-number {permit | deny} protocol source source-wildcard [operator port] destination destination-wildcard [operator port] //中文: access-list ACL号 [permit|deny] [协议] [定义源主机范围][定义源端口][ 定义目的主机范围] [定义目的端口]
•编号选择100 – 199 以及 2000~2699之间的数字作为表号。
•执行“no access-list access-list-number” 将会删除整个ACL列表
ip access-group access-list-number { in | out }
•在接口中应用
•应用时关联入或出站方向
[operator port]
扩展ACL尽可能用在靠近源地址的地方
举例:
禁止172.16.3.0的计算机访问172.16.4.0的计算机,惟独可以访问172.16.4.13上的WEB服务
(config)#access-list 101 permit tcp any host 172.16.4.13 eq www //设置ACL101,容许源地址为任意IP,目的地址为主机172.16.4.13的80端口即web服务 (config)#int e 0 //进入E0端口(因为扩展ACL尽量放在离源地址近的地方) (config-if)#ip access-group 101 in //应用到接口E0的入方向
拒绝来自172.16.3.0去往172.16.4.0的FTP流量,允许其他所有流量
(config)#access-list 101 deny tcp 172.16.3.0 0.0.0.255 172.16.4.0 0.0.0.255 eq 21 (config)#access-list 101 permit ip any any (config)#int e 0 (config-if)#ip access-group 101 in
拒绝来自172.16.3.5去往172.16.4.13的所有流量,允许其他所有流量
(config)#access-list 101 deny ip host 172.16.3.5 host 172.16.4.13 (config)#access-list 101 permit ip any any (config)#int e 0 (config-if)#ip access-group 101 in
(config)#access-list 101 permit tcp host 192.168.33.3 host 172.22.242.23 eq www (config)#access-list 101 deny tcp any host 172.22.242.23 eq www (config)#access-list 101 permit ip any any (config)#interface FastEthernet0/0 (config-if)ip access-group 101 in
•命名访问控制列表:
不论是标准ACL还是扩展ACL都存在一个弊端:当配置好ACL规则后,希望对某条进行修改或删除只能将整条ACL信息都删除。可以用基于名称的访问控制列表来解决这个问题。
标准命名ACL命令:
(config)#ip access-list standard name (config-std-nacl)#{permit /deny} source-ip source-wildcard
(config-if)#ip access-group standard name { in | out }
•在接口中应用
•应用时关联入或出站方向
建立标准ACL命名为test:允许10.1.1.101和103通过,其他主机禁止
(config)#ip access-list standard test (config-std-nacl)#permit host 10.1.1.101 (config-std-nacl)#permit host 10.1.1.103 (config)#int fa0/0 (config-if)#ip access-group test out //接口应用(靠近目标,出方向)
当需要将"permit host 10.1.1.103"删除时,非命名ACL只能删除整个ACL信息。正是因为使用了基于名称的访问控制列表,我们进入ip access-list standard test后,可使用"no permit host 10.1.1.103"删除.
命名扩展ACL命令:
(config)#ip access-list extended name (config-ext-nacl)#{permit /deny} protocol [source-ip source-wildcard destination-ip destination-wildcard] [operator port]
ip access-group extended name { in | out }
•在接口中应用
•应用时关联入或出站方向
仅允许10.1.1.0网段的主机访问主机209.165.202.196的web服务
(config)#ip access-list extended web_only (config-ext-nacl)#permit tcp 10.1.1.0 0.0.0.255 host 209.165.202.196 eq www
仅允许10.1.1.101访问所有主机80端口,其他所有主机禁止
(config)#ip access-list extended test01 (config-ext-nacl)#permit tcp host 10.1.1.101 any eq www
禁止所有主机访问209.165.202.197主机的23、26口,但允许访问其他端口
(config)#ip access-list extended test02 (config-ext-nacl)#deny tcp any host 209.165.202.197 eq 23 (config-ext-nacl)#deny tcp any host 209.165.202.197 eq 26 (config-ext-nacl)#permit tcp any any
接口应用(靠近源,入方向)
(config)#int fa1/0 (config-if)#ip access-group web_only in
命名ACL还有一个优点就是可以调整语句的顺序:
每新增一条语句,顺序号默认加10
例:
Router#show ip access-lists //显示ACL Extended IP access list test 10 deny tcp any host 209.165.202.197 eq telnet 20 permit tcp any any
如果要在前面插入:
Router#conf terminal Router(config)#ip access-list extended test Router(config-ext-nacl)#5 deny tcp any host 209.165.202.197 eq 8080
结果:
Router#show ip access-lists
Extended IP access list test
5 deny tcp any host 209.165.202.197 eq 8080
10 deny tcp any host 209.165.202.197 eq telnet
20 permit tcp any any
如果要在中间插入:
Router#conf terminal Router(config)#ip access-list extended test Router(config-ext-nacl)#15 deny tcp any host 209.165.202.197 eq 7070
结果:
Router#show ip access-lists
Extended IP access list test
5 deny tcp any host 209.165.202.197 eq 8080
10 deny tcp any host 209.165.202.197 eq telnet
15 deny tcp any host 209.165.202.197 eq 7070
20 permit tcp any any
------------------------------------------------------------------------------------------------------------
补充:
可使用IP 标准ACL 来控制VTY 线路的访问.步骤如下:
1.创建个IP 标准ACL 来允许某些主机可以telnet
2.使用access-class 命令来应用ACL 到VTY 线路上
配置如下:
Router(config)#access-list 50 permit 172.16.10.3 //仅允许172.16.10.3访问 Router(config)#line vty 0 4 //进入VTY 线路模式 Router(config-line)#access-class 50 in //应用ACL,方向为in
一些验证ACL 的命令:
1.show access-list:显示router 上配置了的所有的ACL 信息,但是不显示哪个接口应用了哪个
ACL 的信息
2.show access-list [number]:显示具体第几号ACL 信息,也不显示哪个接口应用了这个ACL
3.show ip access-list:只显示IP 访问列表信息
4.show ip interface:显示所有接口的信息和配置的ACL 信息
5.show ip interface [接口号]:显示具体某个接口的信息和配置的ACL 信息