一、ACL 概述
1.什么是ACL
-
Access Control List,是一种包过滤技术
前面在学NTFS权限时涉及过ACL,当时指的是文件对用户权限的访问控制列表,用来控制哪些用户对文件有哪些操作权限的。这次学的ACL是在设备上配置的,操作的对象不是用户了,而是帧的包部分
2.ACL过滤对象
-
ACL基于IP包头的IP地址、四层TCP/UDP头部的端口号、[5层数据]。即基于三层和四层过滤
有些高级的防火墙不光可以根据IP地址或者端口来过滤,还可以过滤5层数据,但是选择对5层数据进行过滤会降低过滤速度,因为IP包头和TCP/UDP包头是20字节-60字节大小,而数据部分可能会很长。
3.在哪配置ACL
-
ACL在路由器上配置,也可以在防火墙上配置(一般称在防火墙上的ACL为策略)
一般路由器过滤三层,防火墙过滤三层或四层,所以防火墙不能过滤病毒和木马,因为病毒和木马属于五层,要想过滤五层,防火墙虽然可以但是技术还不成熟(未来发展的趋势),需要IPS–入侵防御系统来过滤五层
4.ACL分类
- ACL主要分为两类:①标准ACL,②扩展ACL
5.ACL表的组成
- ACL表中有一条一条的条目,每一个条目由两个部分组成:左边是条件,右边是动作。
二、ACL原理
1.创建ACL表
-
路由器的每个接口都有进方向(in)和出方向(out),进和出是相对于路由器而言,ACL表必须应用到某接口的进或出方向才生效
-
且一个接口的一个方向只能应用一张表!可以在一个方向的ACL表上添加多条条目
2.检查ACL表中条目的顺序
-
路由器检查ACL表严格遵循自上而下检查每一条条目,所以要注意书写顺序
-
ACL表中每一条条目由条件和动作组成,当流量完全满足此条目的条件,才会执行此条目后面的动作。而当流量没有满足某条件,会继续检查此ACL表的下一条条目
-
一旦ACL被创建出来,会在表的末尾隐藏一条条目:条件是any,动作是拒绝。即如果检查完ACL表中的所有条目还没有满足条件的,则会执行最后一条隐藏的条目:一律不允许通过!
比如现在有一张ACL表中有一条条目----第一条:男孩 拒绝。那么匹配ACL表会自上而下检查条目,如果流量中信息为女的,先检查是否完全满足第一条条目的条件–男孩。不满足则不会执行后面的动作,而是会继续检查此ACL表中的下一条条目,因为ACL创建出来末尾有隐藏条目:any 拒绝。所以会直接将此流量干掉。
但是注意:我们设置这条条目的目的是为了让:男孩拒绝通过,其他所有人允许通过。所以为了达到此目的,除了原先加的第一条条目,还需要在此ACL表中添加第二条条目:any 允许通过。这样刚那条流量被检查到第二条条目,满足any条件(相当于任何流量都可以),则会执行后面的允许通过动作。
三、标准ACL
1.标准ACL概述
一般ACL通过写成一张表(文件),根据这张ACL表来实现过滤
-
表号:1-99
-
特点:标准ACL只能基于源IP对包进行过滤(没有能力检查目标IP或者端口号等其他内容部分)
-
设置标准ACL的最优位置:标准ACL尽量写在靠近目标的地方
-
比如现在有下图所示网络,要求禁止10网段的访问50网段,那么应该在哪个路由器上创建ACL表设置相关条目最好呢?
-
由于标准ACL表只能基于源IP过滤,所以现在只能在r1的f0/0端口的入方向或者r1的f0/1端口的出方向的ACL表(表号可以为1-99)添加两条条目:第一条为
源IP为10网段(条件) deny(动作)
;第二条为any permit
。但是这样设置的话会造成r1会拒绝10网段与其他任何网段的通信,所以不可行。(用后面的扩展ACL就可以基于目标IP过滤了) -
所以如果要使用标准ACL表来达到这个要求,就应该尽量在靠近目标的路由器的靠近目标的端口设置标准ACL表。现在在r2的f1/0端口的入方向添加两条条目:第一条为
源IP为10网段 deny
;第二条为any permit
。这样就达到了我们想要的效果
-
2.标准ACL相关命令
1)创建ACL并添加条目(不推荐)
-
在某张ACL表中添加条目
conf t access-list 表号(1-99) permit/deny 源IP或源网段 反子网掩码
-
参数解释:
- 每在某个标准ACL表中添加新的条目都需要写
access-list 表号
,如果还没有表号,那么表示创建一张标准ACL表并定义表号 - permit/deny表示行为
- 源IP或源网段+反子网掩码表示匹配条件
- 每在某个标准ACL表中添加新的条目都需要写
2)特殊过滤的命令格式
-
只对一个IP过滤的时候可以简化
conf t access-list 表号 permit/deny host 10.1.1.1
-
对所有IP过滤的时候可以简化
conf t access-list 表号 permit/deny any
3)反子网掩码
-
反子网掩码:将正的子网掩码中的0和1倒置
-
255.0.0.0 反子网掩码为 0.255.255.255
-
255.255.0.0 反子网掩码为 0.0.255.255
-
255.255.255.0 反子网掩码为 0.0.0.255
-
反子网掩码的作用:用来匹配条件,与0对应的需要严格匹配,与1对应的忽略
-
举例:
access-list 1 deny 10.0.0.0 0.255.255.255
10.1.1.1与反子网掩码的0对应的位为10,则表示该条目用来拒绝所有源IP为10开头的人
access-list 1 deny 10.1.1.1 0.0.0.0 access-list 表号 permit/deny host 10.1.1.1
10.1.1.1与反子网掩码的0对应的位为10.1.1.1,则表示该条目用来拒绝所有源IP为10.1.1.1发来的包
access-list 1 deny 0.0.0.0 255.255.255.255 access-list 表号 permit/deny any
反子网掩码所有位全为1表示收到的源IP地址我一律不检查全部deny,则该条目用来拒绝所有人
4)删除ACL表
-
一般情况下,标准或扩展ACL一旦编写号,无法修改或删除某一条,也无法修改顺序或往中间插入新的条目,只能一直在最后添加新的条目。如想修改或插入或删除,只能删除整张表,重新写!
-
删除ACL表命令
conf t no access-list 表号
5)查看ACL表
-
查看指定ACL表中条目
show ip access-list 表号
-
查看此设备上所有的ACL表
show ip access-list
6)将ACL应用到接口
-
由于ACL表创建好后需要应用到接口指明过滤方向,接口才会根据ACL表中条目去过滤
int f0/x ip access-group 表号 in/out exit
7)将ACL表取消应用
-
这条命令区别于删除ACL表,只是将ACL表从某接口的某方向拿下来而已,但是ACL表还存在
int f0/x no ip access-group 表号 in/out exit
四、扩展ACL
1.扩展ACL概述
-
表号:100-199
-
特点:可以基于源IP、目标IP、端口号、协议等对包进行过滤
-
举例说明扩展ACL的设置:
-
比如现在有下图所示网络,还是要求10网段禁止访问50网段的
-
可以在r1f0/0端口的入方向或者f0/1端口的出方向设置扩展ACL(表号为100-199):第一条为
源IP10网段 目标IP50网段 deny
;第二条为any any permit
(第一个any表示任何源IP,第二个any表示任何目标IP)。为什么不像标准ACL一样选择离目标近的地方创建ACL,因为扩展ACL可以基于源IP和目标IP等过滤了,所以直接将源IP为10万网段,目标iP为50网段的包扼杀在摇篮里,不用想前面一样,还要到r2才能过滤掉;相反的经过r1就可以将此包过滤掉,提高网络传输效率,不用再传一些最终会被过滤掉的包
-
如果现在想设置10网段的可以访问50网段的具体某一个IP,但不允许访问50网段的其他IP,则在刚才设置好的扩展ACL表中的条目前面再添加一条:
源IP10网段 目标IP50.1.1.1 permit
。(一定要在上面加,相关联的条目范围更具体的一般都写在前面) -
现在又想设置10网段的不能访问40网段的,但唯独可以访问40网段的web服务器的80端口。则在刚才设置好的扩展ACL表中再添加两条条目,由于和50网段的条目不相干了,加在前面或者加在后面都无所谓。但是40网段的这两条条目是有先后的:第三条为
源IP10网段 目标IP40.1.1.1 80 permit
,第四条为源IP10网段 目标IP40网段 deny
-
综上所述最终r1f0/1端口出方向的ACL101表(假设扩展ACL表号为101)如下图所示
源IP10.1.1.0/24 目标IP50.1.1.1 permit 源IP10.1.1.0/24 目标IP50.1.1.0/24 deny 源IP10.1.1.0/24 目标IP40.1.1.1/24 80 permit 源IP10.1.1.0/24 目标IP40.1.1.0/24 deny any any permit
-
2.扩展ACL相关命令
删除查看ACL表、以及ACL应用到接口某方向的命令全部与标准ACL中的命令类似,只有创建ACL并添加条目命令不同
1)创建扩展ACL并添加条目(不推荐)
access-list 100 permit/deny 协议 源IP或源网段 反子网掩码 目标IP或源网段 反子网掩码 [eq 端口号]
access-list 100表示扩展ACL100表(表号为100-199);permit/deny为动作;后面全部叫条件;端口号不是必须的
2)协议使用说明
- 可以选择四种协议:tcp/udp/icmp/ip(即三层和四层协议,arp没有意义,因为路由器本身就会隔离广播)
-
当条件中指明了需要过滤的端口号,则协议选择五层端口号对应的服务所依赖的四层协议:TCP或UDP(二选一)
-
具体端口依赖的四层协议详见下图(前面TCP/IP五层协议涉及过):
-
举例说明:
acc 100 permit tcp host 10.1.1.1 host 20.1.1.3 eq 80
由于80端口号对应的是五层的http服务,而http依赖于四层的TCP协议,所以添加扩展ACL表中的此条目时协议选择tcp。
即此命令表示将允许10.1.1.1PC访问20.1.1.3主机的80端口的条目添加到扩展ACL100中
-
-
当条件中不需要过滤端口,各协议单独使用表示的含义
-
单独使用tcp协议
acc 100 deny tcp host 10.1.1.1 20.1.1.0 0.0.0.255
由于没有指定端口,所以此命令表示禁止10.1.1.1PC访问20.1.1.1PC上所有依赖于tcp协议的服务(端口)
-
单独使用udp协议
acc 100 deny udp host 10.1.1.1 20.1.1.0 0.0.0.255
此命令表示禁止10.1.1.1PC访问20.1.1.1PC上所有依赖于udp协议的服务
-
单独使用ip协议
acc 100 deny ip host 10.1.1.1 20.1.1.0 0.0.0.255
因为TCP和UDP和ICMP都依赖于IP协议。所以此命令表示禁止10.1.1.1PC访问20.1.1.1PC上所有的服务
acc 100 permit ip any any
允许所有IP访问任何IP的任何端口。因为源IP和目标IP是一定要输入的而端口不是必须的,所有两个any
-
五、创建ACL命令的改进
前面用
acc 表名 ...
的方式创建ACL并且添加条目,如果写错策略顺序想调整前后位置、写错策略想删除或修改,都是无法实现的,只能删除此ACL表,再新建一个表添加新的条目,会很麻烦,所以我们要对此进行改进
1.命名ACL(推荐使用)
- 作用:可以对标准或扩展ACL进行自定义命名。不属于新的ACL种类,只是扩展了一些功能。所以既可以对标准ACL创建命名ACL,也可以对扩展ACL创建命名ACL
- 优点:
- 自定义命名更容易辨认,也便于记忆
- 可以任意修改某一条,或删除某一条,也可以往中间插入某一条
2.命名ACL相关命令
1)创建命名ACL
conf t
ip access-list standard/extended 自定义表名
-----------------------------------------------------------------
#创建完后就进入了标准/扩展ACL配置模式,不用每次添加条目时都输入'acc 表号'!直接从deny或permit开始编写ACL条目
conf t
ip access-list extended 自定义表名
deny tcp 0.0.0.0 255.255.255.255 host 10.1.1.1 eq 80
permit ip any any
exit
解释:standard表示对标准ACL表命名,extended表示对扩展ACL表命名。一定不能丢掉这个参数!!自定义表名一般可以取一个好记好懂的名字,让人可以看到表名就知道表中条目是针对什么过滤的
为什么前面的命令不写standard和extended?因为软件已经规定好了:如果表号为1-99就是标准,100-199就是扩展
2)删除整个命名ACL表
no ip access-list standard/extended 自定义表名
3)删除某ACL表中某一条目
-
先查看一下有哪些ACL表,即每个表中的条目ID为多少
show access-list
zjj为扩展ACL表的自定义命名,下面每一条条目前都有对应的条目ID
-
依据ACL表中的条目的ID来删除具体某一条目
ip access-list standard/extended 自定义表名 #先进入自定义表名的ACL表中 no 条目ID exit
4)插入某一条
-
同样先查看要插入的ACL表中条目ID,比如现在要在
permit ip any any
条目前加一个条目,则在输入条目动作和条件的命令前加上条目ID,比10大比20下即可ip access-list standard/extended 自定义表名 条目ID 动作 条件 exit #比如: ip access-list standard/extended zjj 18 deny tcp any host 10.1.1.1 #随便举一个例子 exit
-
也可以在创建好命名ACL后,添加条目时就在前面加上条目ID,数字稍微大一点,这样可以预留空间给其他条目在此条目之前插入
六、如何写ACL表
- 做流量控制,首先选择使用哪一种ACL:标准ACL还是扩展ACL
- 根据选择的ACL的种类判断ACL应该写在哪个地方最佳(哪个路由器?哪个接口的哪个方向?)
- (按照个人习惯)从下往上写:
- 先要判断最终要允许所有还是拒绝所有,将最后一条条目写好,如
any permit或deny
- 对于相关联的控制将更严格更具体的控制写在前面
- 不相干的控制条目顺序无所谓
- 先要判断最终要允许所有还是拒绝所有,将最后一条条目写好,如