访问列表
按顺序排列的过滤器
一个访问列表是一组按顺序排列的过滤器,每台过滤器是由匹配标准和一个过滤动作构成的。过滤动作不是许可就是拒绝;而过滤标准既可以用像源地址一样简单的参数,也可以复杂到使用诸如源和目的地址、协议类型、端门号或套接字(socket)和某些标记状态(如TCPACK位)等参数的组合。
定义
一个访问列表是一组按顺序排列的过滤器,每台过滤器是由匹配标准和一个过滤动作构成的。过滤动作不是许可就是拒绝;而过滤标准既可以用像源地址一样简单的参数,也可以复杂到使用诸如源和目的地址、协议类型、端门号或套接字(socket)和某些标记状态(如TCPACK位)等参数的组合。
一个数据包从栈顶进入过滤器,在每台过滤器中匹配的标准将被应用,如果发生匹配,那么指定的许可或拒绝动作将被执行;如果匹配没有发生,数据包将向下移动到栈中下一台过滤器并再次重复匹配过程。
路由器交换机所保持的列表用来针对一些进出路由器或交换机的服务(如组织某个IP地址的分组从路由器或交换机的特定端口出发)做访问控制
顺序性
访问列表是从上到下按顺序执行的,这一概念很重要:或许访问列表发生故障的最普遍原因就是,过滤器的放置顺序出现错误。按顺序的访问列表的第一个匹配项总是被执行的,在第一个匹配项匹配成功后,访问列表其余的匹配项将被忽略。
类型
access-list(访问列表)最基本的有两种,分别是标准访问列表和扩展访问列表,二者的区别主要是前者是基于源地址的数据包过滤,而后者是基于目标地址、源地址和网络协议及其端口的数据包过滤。
标准型IP访问列表
1. 标准型IP访问列表的格式如下:
---- access-list[list number][permit|deny][source address]
---- [address][wildcard mask][log]
2.允许/拒绝数据包通过
---- 在标准型IP访问列表中,使用permit语句可以使得和访问列表项目匹配的数据包通过接口,而deny语句可以在接口过滤掉和访问列表项目匹配的数据包。source address代表主机的IP地址,利用不同掩码的组合可以指定主机。
---- 为了更好地了解IP地址和通配符掩码的作用,这里举一个例子。假设您的公司有一个分支机构,其IP地址为C类的192.46.28.0。在您的公司,每个分支机构都需要通过总部的路由器访问Internet。要实现这点,您就可以使用一个通配符掩码 0.0.0.255。因为C类IP地址的最后一组数字代表主机,把它们都置1即允许总部访问网络上的每一台主机。因此,您的标准型IP访问列表中的access-list语句如下:
---- access-list 1 permit 192.46.28.0 0.0.0.255
---- 注意,通配符掩码是子网掩码的补充。因此,如果您是网络高手,您可以先确定子网掩码,然后把它转换成可应用的通配符掩码。这里,又可以补充一条访问列表的规则5。
3.指定地址
---- 如果您想要指定一个特定的主机,可以增加一个通配符掩码0.0.0.0。例如,为了让来自IP地址为192.46.27.7的数据包通过,可以使用下列语句:
---- Access-list 1 permit 192.46.27.7 0.0.0.0
---- Access-list 1 permit host 192.46.27.7
---- Access-list 1 deny host 192.46.27.8
---- Access-list 1 permit any
---- 注意上述2条访问列表语句的次序。第1条语句把来自源地址为192.46.27.8的数据包过滤掉,第2条语句则允许来自任何源地址的数据包通过访问列表作用的接口。如果改变上述语句的次序,那么访问列表将不能够阻止来自源地址为192.46.27.8的数据包通过接口。因为访问列表是按从上到下的次序执行语句的。这样,如果第1条语句是:
---- Access-list 1 permit any
---- 的话,那么来自任何源地址的数据包都会通过接口。
4.拒绝的奥秘
---- access-list 1 deny host 192.46.27.8
---- access-list 1 permit any
---- access-list 1 deny any
---- 在上述例子里面,由于访问列表中第2条语句明确允许任何数据包都通过,所以隐含的拒绝语句不起作用,但实际情况并不总是如此。例如,如果希望来自源地址为192.46.27.8和192.46.27.12的数据包通过路由器的接口,同时阻止其他一切数据包通过,则访问列表的代码如下:
---- access-list 1 permit host 192.46.27.8
---- access-list 1 permit host 192.46.27.12
---- 注意,因为所有的访问列表会自动在最后包括该语句.
扩展型IP访问列表
扩展型IP访问列表在数据包的过滤方面增加了不少功能和灵活性。除了可以基于源地址和目标地址过滤外,还可以根据协议、源端口和目的端口过滤,甚至可以利用各种选项过滤。这些选项能够对数据包中某些域的信息进行读取和比较。扩展型IP访问列表的通用格式如下:
---- access-list[list number][permit|deny]
---- [protocol|protocol key word]
---- [source address source-wildcard mask][source port]
---- [destination address destination-wildcard mask]
---- [destination port][log options]
---- 如果我们回顾一下数据包是如何形成的,我们就会了解为什么协议会影响数据包的过滤,尽管有时这样会产生副作用。图2表示了数据包的形成。请注意,应用数据通常有一个在传输层增加的前缀,它可以是TCP协议或UDP协议的头部,这样就增加了一个指示应用的端口标志。当数据流入协议栈之后,网络层再加上一个包含地址信息的IP协议的头部。
由于IP头部传送TCP、UDP、路由协议和ICMP协议,所以在访问列表的语句中,IP协议的级别比其他协议更为重要。但是,在有些应用中,您可能需要改变这种情况,您需要基于某个非IP协议进行过滤
例子
---- 为了更好地说明,下面列举2个扩展型IP访问列表的语句来说明。假设我们希望阻止TCP协议的流量访问IP地址为192.78.46.8的服务器,同时允许其他协议的流量访问该服务器。那么以下访问列表语句能满足这一要求吗?
---- access-list 101 permit host 192.78.46.8
---- access-list 101 deny host 192.78.46.12
---- 回答是否定的。第一条语句允许所有的IP流量、同时包括TCP流量通过指定的主机地址。这样,第二条语句将不起任何作用。可是,如果改变上面2条语句的次序即可实现目标。
监视和计费
在不必显示路由器完整配置的前提下,能够检查一个甚至所有访问列表是非常有用的。命令show ip access-list可以显示路由器上所有IP访问列表的简化语法。如果观察一个特定的访问列表,可以通过指定名字和标号。如果没有输入关键字ip(show access-list),那么所有访问列表都将被显示出来。
跟踪被访问列表拒绝的数据包作为安全计划或编制策略能力的一部分,这是很有用的。命令ip accouting access-violations可以配置在独立的接口上,用来创建所有在该接口被访问列表拒绝的数据包的数据库。可以使用show ip accounting access-violations来检查数据库,结果可以显示出匹配该地址的源和目标地址、数据包数、字节数以及拒绝该数据的访问列表编号。命令clear ip accounting可以清楚计费数据库。
参考资料
最新修订时间:2022-08-25 12:01
目录
概述
定义
顺序性
参考资料