day18、1 - ACL

一、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. 表号:1-99

  2. 特点:标准ACL只能基于源IP对包进行过滤(没有能力检查目标IP或者端口号等其他内容部分)

  3. 设置标准ACL的最优位置:标准ACL尽量写在靠近目标的地方

    • 比如现在有下图所示网络,要求禁止10网段的访问50网段,那么应该在哪个路由器上创建ACL表设置相关条目最好呢?

      image-20211112123241306
    • 由于标准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或源网段+反子网掩码表示匹配条件
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概述

  1. 表号:100-199

  2. 特点:可以基于源IP、目标IP、端口号、协议等对包进行过滤

  3. 举例说明扩展ACL的设置:

    • 比如现在有下图所示网络,还是要求10网段禁止访问50网段的

      image-20211112125745362
    • 可以在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.1permit
      源IP10.1.1.0/24 目标IP50.1.1.0/24deny
      源IP10.1.1.0/24 目标IP40.1.1.1/24 80permit
      源IP10.1.1.0/24 目标IP40.1.1.0/24deny
      any anypermit

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没有意义,因为路由器本身就会隔离广播)
  1. 当条件中指明了需要过滤的端口号,则协议选择五层端口号对应的服务所依赖的四层协议:TCP或UDP(二选一)

    • 具体端口依赖的四层协议详见下图(前面TCP/IP五层协议涉及过):

      image-20211027212311440
    • 举例说明:

      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中

  2. 当条件中不需要过滤端口,各协议单独使用表示的含义

    • 单独使用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
  • 优点:
    1. 自定义命名更容易辨认,也便于记忆
    2. 可以任意修改某一条,或删除某一条,也可以往中间插入某一条

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
    
    image-20211112185410536

    zjj为扩展ACL表的自定义命名,下面每一条条目前都有对应的条目ID

  • 依据ACL表中的条目的ID来删除具体某一条目

    ip access-list standard/extended 自定义表名         #先进入自定义表名的ACL表中
    no 条目ID
    exit
    
4)插入某一条
  • 同样先查看要插入的ACL表中条目ID,比如现在要在permit ip any any条目前加一个条目,则在输入条目动作和条件的命令前加上条目ID,比10大比20下即可

    image-20211112185410536
    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表

  1. 做流量控制,首先选择使用哪一种ACL:标准ACL还是扩展ACL
  2. 根据选择的ACL的种类判断ACL应该写在哪个地方最佳(哪个路由器?哪个接口的哪个方向?)
  3. (按照个人习惯)从下往上写:
    1. 先要判断最终要允许所有还是拒绝所有,将最后一条条目写好,如any permit或deny
    2. 对于相关联的控制将更严格更具体的控制写在前面
    3. 不相干的控制条目顺序无所谓
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值