- Access-list 1 permit host 192.46.27.7
---- 除了可以利用关键字"host"来代表通配符掩码0.0.0.0外,关键字"any"可以作为源地址的缩写,并代表通配符掩码0.0.0.0 255.255.255.255。例如,如果希望拒绝来自IP地址为192.46.27.8的站点的数据包,可以在访问列表中增加以下语句:
---- 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
---- 的话,那么来自任何源地址的数据包都会通过接口。我们由此可以得到规则6。
---- (4)拒绝的奥秘
---- 在默认情况下,除非明确规定允许通过,访问列表总是阻止或拒绝一切数据包的通过,即实际上在每个访问列表的最后,都隐含有一条"deny any"的语句。假设我们使用了前面创建的标准IP访问列表,从路由器的角度来看,这条语句的实际内容如下:
---- 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
---- 注意,因为所有的访问列表会自动在最后包括该语句,于是有了规则7。
---- 顺便讨论一下标准型IP访问列表的参数"log",它起日志的作用。一旦访问列表作用于某个接口,那么包括关键字"log"的语句将记录那些满足访问列表中"permit"和"deny"条件的数据包。第一个通过接口并且和访问列表语句匹配的数据包将立即产生一个日志信息。后续的数据包根据记录日志的方式,或者在控制台上显示日志,或者在内存中记录日志。通过Cisco IOS的控制台命令可以选择记录日志方式。
扩展型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]
---- 和标准型IP访问列表类似,"list number"标志了访问列表的类型。数字100~199用于确定100个惟一的扩展型IP访问列表。"protocol"确定需要过滤的协议,其中包括IP、TCP、UDP和ICMP等等。
---- 如果我们回顾一下数据包是如何形成的,我们就会了解为什么协议会影响数据包的过滤,尽管有时这样会产生副作用。图2表示了数据包的形成。请注意,应用数据通常有一个在传输层增加的前缀,它可以是TCP协议或UDP协议的头部,这样就增加了一个指示应用的端口标志。当数据流入协议栈之后,网络层再加上一个包含地址信息的IP协议的头部。
---- 由于IP头部传送TCP、UDP、路由协议和ICMP协议,所以在访问列表的语句中,IP协议的级别比其他协议更为重要。但是,在有些应用中,您可能需要改变这种情况,您需要基于某个非IP协议进行过滤。因此,需要增加规则8。
---- 为了更好地说明这个规则,下面列举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.