一、ACL 的基本原理
1.访问控制列表(ACL)是应用在路由器接口的指令列表(即规则)。这些指令列表用来告诉路由器,那些数据包可以接受,那些数据包需要拒绝。
2.ACL使用包过滤技术,在路由器上读取OSI七层模型的第3层和第4层包头中的信息。如源地址,目标地址,源端口,目标端口等,根据预先定义好的规则,对包进行过滤,从而达到访问控制的目的。
3.ACL是一组规则的集合,它应用在路由器的某个接口上。对路由器接口而言,访问控制列表有两个方向。
out:已经过路由器的处理,正离开路由器的数据包。
in :已到达路由器接口的数据包。将被路由器处理。
4.如果对路由器的某接口应用了ACL,那么路由器对数据包应用该组规则进行顺序匹配,使用匹配即停止的,不匹配则使用默认规则的方式来过滤数据包。
引用自https://www.cnblogs.com/andy123/p/10933700.html
二、标准ACL
1.特点
- 只能根据源地址做过滤
- 针对整个协议采取相关动作(允许或禁止)
2.基本语法
Router(config)#
access-list access-list-number {permit|deny} source [souce-wildcard]
如:access-list 1 deny 192.168.1.1 0.0.0.0
参数 | 含义 |
---|---|
access-list-number | 编号(1-99或1300-1999) |
permit,deny | 动作(拒绝或允许) |
source | 源地址 |
souce-wildcard | 通配符 |
操作 | 命令 |
---|---|
删除ACL | no access-list 编号,如:no access-list 10 |
应用在接口(默认out) | ip access-group 编号 {in or out } ,如:ip access-list 1 out |
解除在接口上的应用 | no ip access-group 编号 {in or out } , 如:no ip access-list 1 out |
3.通配符
0 | 表示需要一致 |
1 | 表示随便 |
比如,access-list 1 deny 192.168.1.1 0.0.0.0 表示这全都要一致
- 要禁止192.168.1.0网段的全部主机,那就是前三位相同,后一位变动,0.0.0.255
要禁止172.16.0.0网段的全部主机,那就是前两位相同,后一位变动,0.0.255.255
禁止192.168.1.0网段中192.168.1.1-192.168.1.7的主机,通配符要怎么表示呢?
首先我们看到192.168.1.1-192.168.1.7,前三位是保持不变的, 所以可以先写出前三位通配符:0.0.0.?
现在求第四位,把第四位ip地址转换为2进制
192.168.1.1. | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
192.168.1.2. | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
192.168.1.3. | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
192.168.1.4. | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
192.168.1.5. | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 |
192.168.1.6. | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
192.168.1.7. | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
通配符 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
我们看到一个规律,前5个位是不变的,后3位在变,所以按照通配符的规律:0表示不变,1表示变动,可以这样写00000111,转换为十进制是7,通配符是0.0.0.7
这个ACL可以写成为:
access-list 1 deny 192.168.1.0 0.0.0.7
access-list 1 permit any
当然不嫌累也可以这样写
access-list 1 deny 192.168.1.1 0.0.0.0
access-list 1 deny 192.168.1.2 0.0.0.0
access-list 1 deny 192.168.1.3 0.0.0.0
access-list 1 deny 192.168.1.4 0.0.0.0
access-list 1 deny 192.168.1.5 0.0.0.0
access-list 1 deny 192.168.1.6 0.0.0.0
access-list 1 deny 192.168.1.7 0.0.0.0
access-list 1 permit any
note:默认ACL结尾有一句deny any ,拒绝所有,所以在ACL中至少要有一句permit语句
access-list 1 deny 192.168.1.0 0.0.0.7
access-list 1 permit any
在这个ACL中如果没有写access-list 1 permit any,运用这个ACL后整个192.168.1.0整个网段就全部被拒绝了
通配符简写
access-list 1 deny 192.168.1.1 0.0.0.0 | access-list 1 deny host 192.168.1.1 |
0.0.0.0 255.255.255.255 | any |
如,access-list 1 deny any 表示拒绝所有
三、扩展ACL
1.特点
- 能根据源、目的的地址、端口号等进行过滤
- 能允许或拒绝特定的协议
2.基本语法
Router(config)#
access-list access-list-number {permit|deny} protocol {source souce-wildcard destination destination-wildcard} [operator operan]
如:
- 拒绝所有的主机telnet连接192.168.1.1
access-list 1 deny tcp any host 192.168.1.1 eq 23 - 允许主机192.168.1.2通过http方式访问172.16.1.1
access-list 110 permit tcp host 192.168.1.2 host 172.16.1.1 eq 80
参数 | 含义 |
---|---|
access-list-number | 编号(100-199或2000-2699) |
permit,deny | 动作(拒绝或允许) |
protocol | 指定协议,如IP,TCP,UDP,ICMP等 |
source souce-wildcard | 源地址 通配符 |
destination destination-wildcard | 目标地址 通配符 |
operator | lt(小于)、gt(大于)、eq(等于)、neq(不等于) |
operan | 端口号 |
四、命名ACL
1.特点
- 通过对ACL的命名,利于以后的管理
- 可以删除其中的某一条ACL语句,而不用删除整个ACL
- 可以将ACL语句插入到列表中的某个位置
2.基本语法
(1)创建ACL
Router(config)#
ip access-list {standard|extended} access-list-name
参数 | 含义 |
---|---|
standard,extended | standard:创建标准的命名访问控制列表。extended:创建扩展的命名访问控制列表。 |
access-list-name | ACL的名字,任意字母和数字 |
(2)添加语句
-
标准命名ACL语法如下:
Router(config-std-nacl)#
[Sequence-Number] {permit|deny} source [souce-wildcard] -
扩展命名ACL语法如下:
Router(config-ext-nacl)#
[Sequence-Number] {permit|deny} protocol {source souce-wildcard destination destination-wildcard} [operator operan]
无论是配置标准命名ACL语句还是配置扩展命名ACL语句,都有一个可选参数Sequence-Number。Sequence-Number参数表明了配置的ACL语句在命令ACL中所处的位置,默认情况下,第一条为10,第二条为20,以此类推。Sequence-Number可以很方便地将新添加的ACL语句插于到原有的ACL列表的指定位置,如果不选择Sequence-Number,默认添加到ACL列表末尾并且序列号加10。
引用自https://blog.csdn.net/ningmeng_bumeng/article/details/78614362
(3)删除
- 删除整个ACL
Router(config)#
no ip access-list {standard|extended} access-list-name - 删除某一条语句
no Sequence-Number
例如:将一条新添加的ACL加入到原有标准命名ACL的序列15的位置。内容为允许主机192.168.1.1/24访问Internet。
Router(config)#ip access-list standard test1
Router(config-std-nacl)#15 permit host 192.168.1.1
列如:创建扩展命名ACL,内容为拒绝192.168.1.0/24访问FTP服务器192.168.2.200/24,允许其他主机。
Router(config)#ip access-list extended test2
Router(config-ext-nacl)#deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.200 eq 21
Router(config-ext-nacl)#permit ip any any
将命名ACL应用于接口语法如下:
Router(config-if)#ip access-group aaccess-list-name {in|out}
取消命名ACL的应用语法如下:
Router(config-if)#no ip access-group aaccess-list-name {in|out}
总结
- 每个接口,每个方向,每种协议,你只能设置1 个ACL
- 组织好你的ACL 的顺序,比如测试性的最好放在ACL 的最顶部 你不可能从ACL
从除去1 行,除去1 行意味你将除去整个ACL,命名访问列表(named access lists)例外 - 默认ACL 结尾语句是deny
any,所以你要记住的是在ACL 里至少要有1 条permit 语句 - 记得创建了ACL 后要把它应用在需要过滤的接口上 ACL
是用于过滤经过router 的数据包,它并不会过滤router 本身所产生的数据包 - 尽可能的把IP 标准ACL放置在离目标地址近的地方;尽可能的把IP 扩展ACL 放置在离 源地址近的地方