1、1,访问控制列表(ACL),主讲:王海超,ISP,什么是访问列表,IP Access-list:IP访问列表或访问控制列表,简称IP ACL IP ACL就是对经过网络设备的数据包根据一定的规则进行数据包的过滤。,为什么要使用访问列表,网络安全性,可以是路由器或三层交换机或防火墙,访问列表的组成,定义访问列表的步骤 第一步,定义规则(哪些数据允许通过,哪些数据不允许通过) 第二步,将规则应用在路由器(或交换机)的接口上 访问控制列表的分类: 1、标准访问控制列表 2、扩展访问控制列表,访问列表规则的应用,路由器应用访问列表对流经接口的数据包进行控制 1.入栈应用(in) 经某接口进入设备内部的
2、数据包进行安全规则过滤 2.出栈应用(out) 设备从某接口向外发送数据时进行安全规则过滤 一个接口在一个方向只能应用一组访问控制列表,F1/0,F1/1,IN,OUT,访问列表的入栈应用,N,Y,是否允许 ?,Y,是否应用 访问列表 ?,N,查找路由表 进行选路转发,以ICMP信息通知源发送方,以ICMP信息通知源发送方,N,Y,选择出口 S0,路由表中是否 存在记录 ?,N,Y,查看访问列表 的陈述,是否允许 ?,Y,是否应用 访问列表 ?,N,S0,S0,访问列表的出栈应用,IP ACL的基本准则,一切未被允许的就是禁止的 定义访问控制列表规则时,最终的缺省规则是拒绝所有数据包通过 按规
3、则链来进行匹配 使用源地址、目的地址、源端口、目的端口、协议、时间段进行匹配 规则匹配原则 从头到尾,至顶向下的匹配方式 匹配成功马上停止 立刻使用该规则的“允许/拒绝”,Y,拒绝,Y,是否匹配 测试条件1 ?,允许,N,拒绝,允许,是否匹配 测试条件2 ?,拒绝,是否匹配 最后一个 测试条件 ?,Y,Y,N,Y,Y,允许,被系统隐 含拒绝,N,一个访问列表多个测试条件,访问列表规则的定义,标准访问列表 根据数据包源IP地址进行规则定义扩展访问列表 根据数据包中源IP、目的IP、源端口、目的端口、协议进行规则定义,ACL的基本用途是限制访问网络的用户,保护网络的安全。 ACL一般只在以下路由器
4、上配置: 1、内部网和外部网的边界路由器。 2、两个功能网络交界的路由器。 限制的内容通常包括: 1、允许那些用户访问网络。(根据用户的IP地址进行限制) 2、允许用户访问的类型,如允许http和ftp的访问,但拒绝Telnet的访问。(根据用户使用的上层协议进行限制),ACL的工作过程,访问控制列表(ACL) 由多条判断语句组成。每条语句给出一个条件和处理方式(通过或拒绝)。 路由器对收到的数据包按照判断语句的书写次序进行检查,当遇到相匹配的条件时,就按照指定的处理方式进行处理。 ACL中各语句的书写次序非常重要,如果一个数据包和某判断语句的条件相匹配时,该数据包的匹配过程就结束了,剩下的条
5、件语句被忽略。,8.2 ACL语句,一个访问控制列表(ACL)可由多条语句组成,每条ACL语句的形式为: Router(config)# access-list 表号 处理方式 条件 ACL表号:用于区分各访问控制列表。 一台路由器中可定义多个ACL,每个ACL使用一个表号。 其中针对IP数据报的ACL可使用的表号为: 标准访问控制列表:199。 扩展访问控制列表:100199。 同一个ACL中各语句的表号相同。,处理方式:取值有permit(允许)和deny(拒绝)两种。当数据包与该语句的条件相匹配时,用给定的处理方式进行处理。 条件:每条ACL语句只能定义一个条件。,例: access-l
6、ist 1 permit 10.0.0.0 0.255.255.255 access-list 1 deny 20.0.0.0 0.255.255.255 第1句表示允许地址为10.*.*.*的数据包通过。 第2句表示拒绝地址为20.*.*.*的数据包通过。 这里的地址指数据包的源地址。,应用ACL,如果只是定义了ACL,它还不会起到任何作用,必须把ACL应用到一个接口上才能起作用。 应用ACL: Router(config)# interface 接口号 Router(config-if)# ip access-group 表号 in | out in:表示在数据包进入此接口时使用ACL进行
7、过滤。 out:表示在数据包离开此接口时使用ACL进行过滤。 通常,使用出站接口检查的数据包数量较少,效率要高一些。,例: Router(config)# interface e0 Router(config-if)# ip access-group 1 out 表示在e0口上使用表号为1的ACL对出站数据包进行过滤。,通配符掩码,在ACL语句中,当使用地址作为条件时,它的一般格式为:地址 通配符掩码。 通配符掩码决定了地址中的哪些位需要精确匹配,哪些为不需要匹配。 通配符掩码是一个32位数,采用点分十进制方式书写。匹配时,“0”表示检查的位,“1”表示不检查的位。 如:192.168.1.1
8、 0.0.255.255 表示检查前16位,忽略后16位,所以这个条件表示的地址是 192.168.*.*。,any条件: 当条件为所有地址时,如果使用通配符掩码应写为: 0.0.0.0 255.255.255.255 这时可以用“any”表示这个条件。 如: Router(config)# access-list 1 permit 0.0.0.0 255.255.255.255 Router(config)# access-list 1 permit any 上面两个语句是等价的。,host关键字: 当条件为单一IP地址时,如果使用通配符掩码应写为: IP地址 0.0.0.0 这时可以用“h
9、ost”关键字定义这个条件。 如: Router(config)# access-list 1 permit 200.1.1.5 0.0.0.0 Router(config)# access-list 1 permit host 200.1.1.5 上面两个语句是等价的。,源地址,TCP/UDP,数据,IP,eg.HDLC,1-99 号列表,IP标准访问列表,目的地址,源地址,协议,端口号,100-199号列表,TCP/UDP,数据,IP,eg.HDLC,IP扩展访问列表,0表示检查相应的地址比特1表示不检查相应的地址比特,0,0,0,0,0,0,0,0,反掩码(通配符),思考题172.30.
10、16.0-172.30.31.0的通配符是什么? 第三个字段0001 0000 160001 0001 17 0001 0010 180001 1111 31 所以,掩码00000000 00000000 0000 1111 11111111 0.0.15.255 即相同的都需要考察(置0),不相同的则不用考察(置1)。,思考题,172.16.8.0到172.16.15.0的通配符是什么?答:0.0.7.255,172.16.32.0到172.16.63.0的通配符是什么?答:0.0.31.255,IP标准访问列表的配置,1.定义标准ACL 编号的标准访问列表 Router(config)#a
11、ccess-list permit|deny 源地址 反掩码 命名的标准访问列表ip access-list standard namedeny source source-wildcard|host source|any or permit source source-wildcard|host source|any 2.应用ACL到接口 Router(config-if)#ip access-group |name in | out ,access-list 1 permit 172.16.3.0 0.0.0.255 (access-list 1 deny 0.0.0.0 255.255.
12、255.255)interface serial 0 ip access-group 1 out,172.16.3.0,172.16.4.0,F0,S0,F1,172.17.0.0,IP标准访问列表配置实例,标准ACL配置举例1,R1,E0,一个局域网连接在路由器R1的E0口,这个局域网要求只有来自10.0.0.0/8、192.168.0.0/24、192.168.1.0/24的用户能够访问。,R1(config)# access-list 1 permit 10.0.0.0 0.255.255.255 R1(config)# access-list 1 permit 192.168.0.0
13、0.0.0.255 R1(config)# access-list 1 permit 192.168.1.0 0.0.0.255 R1(config)# interface e0 R1(config-if)# ip access-group 1 out,配置完成后,可以用命令查看ACL: R1# show access-lists,说明: 1、在每个ACL中都隐含着一个语句: access-list list-num deny any 它位于ACL的最后,表示拒绝所有。所以任何一个与前面各语句都不匹配的数据包都会被拒绝。 2、在ip access-group语句中,用in或out表示入站时匹配
14、或出站时匹配,如果没有指定这个值,默认为out。 3、在每个接口、每个方向上只能应用一个ACL。 4、一个ACL可以应用到多个接口上。,标准ACL配置举例2,R1,E0,一个局域网连接在路由器R1的E0口,这个局域网要求拒绝来自192.168.10.0/24的用户访问,其它用户都可以访问。,R1(config)# access-list 1 deny 192.168.10.0 0.0.0.255 R1(config)# access-list 1 permit any R1(config)# interface e0 R1(config-if)# ip access-group 1 out,注
15、意:access-list 1 permit any语句不能省略,如果省略该语句,则所有和语句1不匹配的数据包都会被隐含的access-list 1 deny any语句拒绝。,标准ACL配置举例3,R1,E0,一个局域网连接在路由器R1的E0口,这个局域网只允许来自192.168.20.0/24的用户访问,但其中192.168.20.1和192.168.20.5两台主机除外。,R1(config)# access-list 1 deny host 192.168.20.1 R1(config)# access-list 1 deny host 192.168.20.5 R1(config)#
16、 access-list 1 permit 192.168.20.0 0.0.0.255 R1(config)# interface e0 R1(config-if)# ip access-group 1 out,注意:access-list 1 permit 192.168.20 0.0.0.255语句不能写在另两条语句的前面,如果把它写在第1句,则192.168.20.1和192.168.20.5因已经满足了条件,不会再进行后面的匹配。,标准ACL配置举例4,R1,E0,一个局域网连接在路由器R1的E0口,这个局域网要求拒绝来自172.30.16.0-172.30.33.0的用户访问,其它
17、用户都可以访问。,R1(config)# access-list 1 deny 172.30.16.0 0.0.15.255 R1(config)# access-list 1 deny 172.30.32.0 0.0.0.255 R1(config)# access-list 1 deny 172.30.33.0 0.0.0.255 R1(config)# access-list 1 permit any R1(config)# interface e0 R1(config-if)# ip access-group 1 out,说明: 定义ACL时,每条语句都按输入的次序加入到ACL的末尾,
18、如果想要更改某条语句,或者更改语句的顺序,只能先删除整个ACL,再重新输入。 比如删除表号为1的ACL: Router(config)# no access-list 1 在实际应用中,我们往往把路由器的配置文件导出到TFTP服务器中,用文本编辑工具修改ACL,然后再把配置文件装回到路由器中。,扩展访问控制列表,扩展ACL可以使用地址作为条件,也可以用上层协议作为条件。 扩展ACL既可以测试数据包的源地址,也可以测试数据包的目的地址。 定义扩展ACL时,可使用的表号为100199。(针对IP数据报),扩展ACL的语句: access-list 表号 处理方式 条件 表号:取值100199。 处
19、理方式:permit(允许)或deny(拒绝)。 条件:协议 源地址 目的地址 运算符 端口号 established 协议:用于匹配数据包使用的网络层或传输层协议,如IP、TCP、UDP、ICMP等。 源地址、目的地址:使用“地址 通配符掩码”的形式,也可以使用any、host关键字。 运算符 端口号:用于匹配TCP、UDP数据包中的端口号。,运算符包括lt(小于)、gt(大于)、eq(等于)、neq(不等于)。 端口号用于对应一种应用,如21FTP、23Telnet、25SMTP、53DNS、80HTTP等。 “运算符 端口号”可匹配数据包的用途。如:“eq 80”可匹配那些访问Web网站
20、的数据包。 在扩展ACL语句中, “运算符 端口号”可以没有。,例: access-list 100 permit tcp 192.168.0.0 0.0.255.255 10.0.0.0 0.255.255.255 eq 80 表示允许来自192.168.*.*的用户访问位于10.*.*.*的Web站点。,扩展ACL定义后,也需要使用 ip access-group 命令应用在指定接口上才能起作用。 如: Router(config)# interface e0 Router(config-if)# ip access-group 100 out,在每个扩展ACL末尾也有一条默认语句: ac
21、cess-list list-num deny ip any any 它会拒绝所有与前面语句不匹配的数据包。,扩展ACL配置举例1,R1,E0,一个局域网连接在路由器R1的E0口,这个局域网只允许Web通信流量和Ftp通信流量,其它都拒绝。,R1(config)# access-list 100 permit tcp any any eq 80 R1(config)# access-list 100 permit tcp any any eq 20 R1(config)# access-list 100 permit tcp any any eq 21 R1(config)# interfac
22、e e0 R1(config-if)# ip access-group 100 out,说明:标准FTP协议使用了两个端口,21用于建立FTP连接,20用于数据传输。,说明: 例1的配置将会极大限制局域网和外网间的应用,它会拒绝除Web和Ftp外的所有应用(包括ICMP、DNS、电子邮件等),也会拒绝那些没有使用标准端口的Web和Ftp应用。 在实际应用中,我们通常只对那些可能有害的访问作出拒绝限制,或者限制用户访问某些有害的站点或服务。,扩展ACL配置举例2,R1,E0,R1是局域网和外网的边界路由器,禁止外网用户用Telnet远程登录本路由器。,S0,192.168.*.*,192.168
23、.0.1/24,200.1.1.1/24,R1(config)# access-list 100 deny tcp any host 200.1.1.1 eq 23 R1(config)# access-list 100 deny tcp any host 192.168.0.1 eq 23 R1(config)# access-list 100 permit ip any any R1(config)# interface s0 R1(config-if)# ip access-group 100 in,说明:这里使用了禁止对两个接口进行Telnet的数据包进入S0口的方法阻断来自外网的Te
24、lnet请求。 由于对E0口没有限制,所以它不影响来自内网的Telnet请求。,扩展ACL配置举例3,R1,E0,R1是局域网和外网的边界路由器,60.54.145.21是一个有害的Web网站,禁止内网用户访问该网站。,S0,192.168.*.*,192.168.0.1/24,200.1.1.1/24,R1(config)# access-list 100 deny tcp 192.168.0.0 0.0.255.255 host 60.54.145.21 eq 80 R1(config)# access-list 100 permit ip any any R1(config)# inte
25、rface e0 R1(config-if)# ip access-group 100 in,扩展ACL配置举例4,R1,E0,R1是局域网和外网的边界路由器,禁止对S0口的ping操作。,S0,192.168.*.*,192.168.0.1/24,200.1.1.1/24,R1(config)# access-list 100 deny icmp any host 200.1.1.1 R1(config)# access-list 100 permit ip any any R1(config)# interface s0 R1(config-if)# ip access-group 100
26、 in,说明:ping命令使用的是ICMP协议,但ICMP除了具有网络探查功能外,还需要用它传输各种错误信息,所以在路由器上不应该禁止该协议。如果想要禁止ping,最好使用专用的防火墙。,8.5 命名访问控制列表,命名ACL是新版路由器操作系统(11.2以后的版本)增加的一种定义ACL的方法。 命名ACL使用一个符号串作为ACL的名字,不再使用表号。 命名ACL也有标准ACL和扩展ACL两种,一个命名ACL只能是其中的一种。,命名ACL配置方法,Router(config)# ip access-list standard | extended name,standard:定义标准命名ACL。
27、 extended:定义扩展命名ACL。 name:ACL的名字,可自定义。 该命令执行后,提示符变为Router(config-std-nacl)#或Router(config-ext-nacl)#。在此提示符下可输入ACL语句。,命名ACL语句格式:处理方式 条件。 它只比以前的ACL少了前面的“access-list 表号”部分,其它都相同。,例1 配置标准命名ACL,R1,E0,要求拒绝来自200.1.1.0/24的数据包通过S0口进入路由器,其它都允许。,S0,R1(config)# ip access-list standard list1 R1(config-std-nacl)#
28、 deny 200.1.1.0 0.0.0.255 R1(config-std-nacl)# permit any R1(config-std-nacl)# exit R1(config)# interface s0 R1(config-if)# ip access-group list1 in,list1是访问控制列表的名字。,命名ACL在修改上略好于一般的ACL,进入一个ACL的模式后,我们可以使用“no”命令删除某一个表项。 但如果想要调整各表项的次序,还是需要删除整个ACL,再重新输入。,例2 配置扩展命名ACL,R1,E0,S0,192.168.*.*,192.168.0.1/24,
29、200.1.1.1/24,禁止内网用户访问地址为60.54.145.21的Web网站。,R1(config)# ip access-list extended list2 R1(config-ext-nacl)# deny tcp 192.168.0.0 0.0.255.255 host 60.54.145.21 eq 80 R1(config-ext-nacl)# permit any R1(config-ext-nacl)# exit R1(config)# interface e0 R1(config-if)# ip access-group list2 in,8.6 正确放置访问控制列表,ACL应用在不同接口、不同方向上会有不同效果。 标准ACL不能指定目的地址,一般应放置在离目的地最近的接口上。 扩展ACL一般应放置在离被拒绝的流量来源最近的地方。 由于一般的通信都需要双向传输信号,所以使用入站检测和出站检测在效果上往往一样,通常使用出站检测时被检查的数据包数量要少一些。,访问列表的验证,显示全部的访问列表 Router#show access-lists 显示指定的访问列表 Router#show access-lists 显示接口的访问列表应用 Router#show ip interface ,