访问控制列表ACL的配置与使用

访问控制列表,即 Access Control List,以下简称 ACL,是路由器、交换机等网络设备上最常用的功能之一。可以说大多数的网络协议都跟ACL有着千丝万缕的联系,所以要弄清楚ACL的用法非常重要。

实际上,ACL的本质就是用于描述一个IP数据包、以太网数据帧若干特征的集合。然后根据这些集合去匹配网络中的流量(由大量数据包组成),同时根据策略来“允许”或者“禁止”。

ACL的基本原理

如图: 20092249551786346.png

1、ACL由若干 条件,并按照一定的顺序而成,同时每个条件都对应了一个 策略:允许或者禁止。

2、收到一个数据帧之后,ACL会按照从上到下的顺序逐一匹配:

  ●一个条件不匹配就查看下一个;

  ●任意一个条件匹配后就按照指定的策略执行,并跳出匹配;

  ●所有条件都不匹配时,默认禁止,即 deny

 
根据 条件描述的不同,我们通常可以将IP ACL分为 基本型扩展型两种。

其中基本型只能就数据包的源ip地址进行匹配;

而扩展型ACL就可以对源IP、目的IP、协议号(判断tcp/udp/icmp等)、源端口号、目的端口号、QoS参数(tos、precedence)等参数来进行定义,同时在匹配时,还可以根据路由器系统时间(time-range)来变化、还可以选择是否生成日志(log)等,功能非常强大。

显然标准型ACL功能非常简单,而扩展型ACL功能非常强大;但是功能越强大,匹配的越详细,对于路由器等网络设备的性能要求越高,或者对于网速的拖慢越明显。组网时需要酌情使用。

不过有一点,两种类型的ACL在原理上是完全一致的。

标准型ACL只能匹配源IP地址,在实际操作中,有三种匹配方式:

1、 any,任意地址

2、 <net><mask>,指定ip网段

3、 src_range,指定ip地址范围

 

配置模板:

ip access-list standard < name>                //建立一个标准型的ACL,名字自定

  {permit | deny} any

  {permit | deny} <network> <net-mask>

  {permit | deny} src_range <start-ip> <end-ip>

 
例1:我们需要设置某局域网中只有192.168.1.0网段的用户能够上网(理论上有254个用户),那么应该是

ip access-list standard test

  permit 192.168.1.0 255.255.255.0

  deny any(隐含生效,无需配置)

例2:我们需要设置某局域网中只有192.168.1.2~192.168.1.80的用户能够上网(理论上有79个用户),本网段的其他用户无法上网,那么应该是

ip access-list standard test

  permit src_range 192.168.1.2 192.168.1.80

  deny any(隐含生效)

例3 :我们需要让某局域网中只有192.168.1.0网段用户上网,但是192.168.1.33这个ip地址的用户要禁止(财务禁止上网)(理论上有253个用户),那么应该是

ip access-list standard test

  deny 192.168.1.33 255.255.255.255

  permit 192.168.1.0 255.255.255.0

  deny any(隐含生效)

注意:

例3中,要表示单个主机的话,掩码必须是4个255,即32位掩码;

基本:Switch#access-list access-list-number(1~99) {permit|deny}{anyA|source[source-wildcard-mask]}{any|destination[destination-mask]}

基本式的:
access-list 10  permit 192.168.10.0   0.0.0.255         允许192.168.10.0这个网段访问
ip access-group 1 in                                               把标准访问控制列表1应用到接口上
access-list 20 deny 172.16.0.0 0.0.255.255              禁止172.16.0.0网络上的主机访问
access-list 30 permit 0.0.0.0 255.255.255.255          允许所有IP的访问
access-list 40 deny 192.168.10.5 0.0.0.0                   禁止192.168.10.5主机的通信


扩展型ACL可匹配的条目比较多,前面已经说过,但世纪上最常用的项目也就是源、目的IP,源、目的端口号,以及ip协议号(种类)这5种,这5种就可以用来满足绝大多数的应用。

由于匹配的条目比较多,在一个条件中,这些项目也是有前后顺序的,为:

协议号,源ip地址,源端口号,目的ip地址,目的端口号

其中,协议号必须写(ip、icmp、tcp、udp等);

源ip地址也必须写,其表示方式也有三种,与标准acl相同(如果不想匹配,以any来代替);

源端口号可以不写,表示any;

目的ip地址必须写;

目的端口号必须写(当协议号为tcp/udp时,源和目的端口号中至少应当写一个)

配置模板:

ip access-list extended <name>

  {permit | deny} {ip | icmp | tcp | udp} {any | network | src_range} [src_port] {any | network | src_range} [dst_port]
 
例1:网络中除了正常的web访问、邮件收发,其他所有的应用都要禁止

ip access-list extended test

  permit tcp any any eq 80

  permit tcp any any eq 25

  permit tcp any any eq 110

  deny ip any any(隐含生效,后面不再贴出来了)

例2:禁止本网(192.168.1.0)到172.16.11.0网段的访问,其他的不受限制

ip access-list extended test

  deny ip 192.168.1.0 255.255.255.0 172.16.11.0 255.255.0.0

  permit ip any any(本条必须写,想想看为什么)

例3:网络中,要禁止所有用户去ping、telnet、http访问某服务器(dns服务器,ip为192.168.1.3),但要其正常提供服务

ip access-list extended test

  deny icmp any 192.168.1.3 255.255.255.255 

  deny tcp any 192.168.1.3 255.255.255.255 eq 23

  deny tcp any 192.168.1.3 255.255.255.255 eq 80

  permit ip any any

 
注意:在设置扩展型ACL时,要特别注意各个条件之间的关系,如果是“包含”的话,要把范围小的条目写在前面。

常见的包含关系例如:

icmp包含tcp、udp和icmp;

192.168.0.0 255.255.0.0包含192.168.1.0 255.255.255.0

192.168.1.0 255.255.255.0包含 range 192.168.1.1 192.168.1.10

不指定端口(port any)包含具体指定的端口,如tcp 80

等等

扩展:Switch#access-list access-list-number(100~199) {permit|deny} protocol{any|source[source-mask]}{any|destination[destination-mask]}[port-number]

再来看一下扩展式实例
access-list 100 deny tcp any any eq ftp                 禁止网上FTP下载  any(可以替代0.0.0.0 255.255.255.255
access-list 110 permit tcp any any eq www            允许www上网

access-list 120 permit tcp host 192.168.0.10 host 192.168.0.20  eq telnet         

                                                                         允许192.168.0.10这台主机通过telnet访问192.168.0.20主机
access-list 130 permit icmp any any                      允许icmp数据包从任何地址到任何地址
access-list 140 permit tcp 192.168.10.0 0.0.0.255 172.16.1.0 0.0.0.255 eq 80            
                                                                           允许192.168.10.0网络通过WEB80端口访问172.16.1.0的服务器
到此,相信你应该有个比较清楚的了解了。同时也完全解释了BBS中有人曾提到的ACL访问的疑问。