第八章 IP网络流量管理
8.1 包过滤介绍
包过滤应用在路由器中,就为路由器增加了对数据包的过滤功能。一般情况下,指的是对IP数据包的过滤。对路由器需要转发的数据包,先获取包头信息,包括IP层所承载的上层协议的协议号,数据包的源地址、目的地址、源端口和目的端口等,然后和设定的规则进行比较,根据比较的结果对数据包进行转发或者丢弃。
 
        8.2 访问列表介绍
为了过滤数据包,需要配置一些规则,规定什么样的数据包可以通过,什么样的数据包不能通过。一般采用访问列表的技术用来配置过滤规则。访问列表分为两类:
标准访问列表
扩展访问列表。
 
对于每个访问列表,你可以输入规则来允许或者禁止数据包,访问列表用号码来标识。对一个访问列表的所有语句必须使用相同的号码。
访问列表的号码范围
标准IP访问列表: 1~99
扩展IP访问列表: 100~199
 
8.3标准I P访问列表
标准I P访问列表的命令语句
  所有的访问列表是在全局配置模式下生成的。
 
标准访问列表的格式如下:
access-list listnumber { permit | deny } address [ wildcard-mask ]
此格式表示:允许或拒绝来自指定网络的数据包,该网络由IP地址(address)和地址通配比较位(wildcard-mask)指定。其中:
 listnumber为规则序号,标准访问列表的规则序号范围为1-99。
 permit和deny表示允许或禁止满足该规则的数据包通过 。
 address和wildcard-mask分别为IP地址和通配比较位,指定某个网络。如果IP地址指定为any,则表示所有IP地址,而且不需配置指定相应的通配位。 通配位缺省为0.0.0.0。另一个是“ h o s t”,它只能用于扩展访问列表中,用来代替掩码0 . 0 . 0 . 0。在标准访问列表中,当掩码是0 . 0 . 0 . 0时省略它,如果省略了掩码,则表示该掩码是0 . 0 . 0 . 0。
 
通配比较位用法类似于子网掩码而写法不相同。IP地址与地址通配位的关系语法规定如下:在通配位中相应位为1的地址中的位在比较中被忽略。IP地址与通配位都是32位的数。如通配位是0x00ffffff(0.255.255.255),则比较时,高8位需要比较,其他的都被忽略。又如IP地址是129.103.1.1,通配位是0.0.255.255,则地址与通配位合在一起表示129.103.0.0网段。若要表示203.38.160.0网段,地址位写成203.38.160.X(X是0~255之间的任意一个数字),通配位为0.0.0.255。
 
 
并不是所有的掩码在“精确匹配”位和“无关”位间都有两个八位位组的边界。有时,计算什么匹配什么不匹配是十分困难的事。让我们来看看下面例子中第三个八位位组的二进制分解:
172.16.16.0 0.0.7.255
地址位:1 6 = 0 0 0 1 0 0 0 0
掩码位: 7 = 0 0 0 0 0 1 1 1
可以看出,如果不管掩码中为1的相对应的地址位,这对数字描述了八种可能的数字范围,从1 6 ~ 2 3。如下所示,可以用二进制从1 6 ~ 2 4来验证它:
16= 0 0 0 1 0 0 0 0
17= 0 0 0 1 0 0 0 1
18= 0 0 0 1 0 0 1 0
19= 0 0 0 1 0 0 1 1
20= 0 0 0 1 0 1 0 0
21= 0 0 0 1 0 1 0 1
22= 0 0 0 1 0 1 1 0
23= 0 0 0 1 0 1 1 1
24= 0 0 0 1 1 0 0 0
注意,当我们数到2 4时,地址上的23位从0变成了1。23位不再符合掩码,所以它不再属于这对描述的范围内。
看看整个的地址掩码对,I P地址范围是从1 7 2 . 1 6 . 1 6 . 0到1 7 2 . 1 6 . 2 3 . 2 5 5。
 
标准I P访问列表的例子
 
 
配置标准I P访问列表的注意事项
1.记住每个访问列表的结尾含有隐式的DENY ANY,每个访问列表都必须包含至少一个允许的语句是十分重要的。
 
2.当你计划一个访问列表时,有两种不同的方法。如果你明确知道想允许的通信量,而且可用几条简单的语句描述出来,则可以明确允许那些通信量,拒绝其他的通信量。相反,如果你能够用几条简单的语句描述你想禁止的通信量,你可以明确拒绝那些通信量,然后用允许一切来结尾。这两种方法谈不上谁比谁好一些,但是用尽可能少的语句可以节省CPU周期。
 
3.由于第一个匹配的语句将执行,所以顺序是十分重要的。记住路由器在找到第一个匹配数据包的语句时就停止工作,所以如果匹配的语句靠近表的前面,则会得到更好的性能。
 
 
 
8.4 扩展I P访问列表
 
 
配置扩展访问列表
表20-32. 配置扩展访问列表
操作
命令
配置TCP/UDP 协议的扩展访问列表
access-list   listnumber
{ permit | deny } { tcp | udp } source-addr
[ source-mask ] dest-addr [ dest-mask ]
[ operator port1 [ port2 ] ] 
配置ICMP 协议的扩展访问列表
access-list listnumber
{ permit | deny } icmp source-addr
[ source-mask ] dest-addr [ dest-mask ]
 
配置其它协议的扩展访问列表
access-list   listnumber
{ permit | deny } protocol source-addr
[ source-mask ] dest-addr [ dest-mask ]
 
 
 
扩展访问列表的格式如下:    
access-list listnumber { permit | deny } protocol source source-wildcard-mask destination destination-wildcard-mask [ operator operand ]
此格式表示允许或拒绝满足如下条件的数据包通过:
       带有指定的协议(portocol),如 TCP、UDP 等;
       数据包来自由source及source-wildcard-mask指定的网络;
       数据包去往由destination及destination-wildcard-mask指定的网络;
       该数据包的目的端口在由operator operand规定的端口范围之内;
 
其中:
 listnumber为规则序号,扩展访问列表的规则序号范围为100-199。
       permit和deny表示允许或禁止满足该规则的数据包通过 。
       protocol 可以指定为0-255之间的任一协议号(如1 表示 ICMP 协议),对于常见协议(如IP、TCP和UDP),可以直观地指定协议名,若指定为IP,则该规则对所有IP包均起作用。
       source 和 source-wildcard-mask 以及 destination 和 destination-wildcard-mask 之间的关系请参见标准访问列表中相关内容。如果IP地址指定为any,则表示所有IP地址,而且不需配置指定相应的通配位。 通配位缺省为0.0.0.0。
operator operand 用于指定端口范围,缺省为全部端口号0-65535,只有 TCP 和 UDP 协议需要指定端口范围。支持的操作符及其语法如下表。
表20-26. 扩展访问列表的操作符意义
操作符及语法
意义
eg portnumber
等于端口号portnumber
gt portnumber
大于端口号portnumber
lt portnumber
小于端口号portnumber
neg portnumber
不等于端口号portnumber
range portnumber1 portnumber2
介于端口号portnumber1 和
portnumber2 之间
 
在指定 portnumber 时,对于部分常见的端口号,可以用相应的助记符来代替其实际数字,支持的助记符如下表。
 
表20-27. 端口号助记符
协议
助记符
意义及实际值
TCP
Bgp
Chargen
Cmd
Daytime
Discard
Domain
Echo
Exec
Finger
Ftp
Ftp-data
Gopher
Hostname           Irc
Klogin
Kshell
Login
Lpd
Nntp
Pop2
Pop3
Smtp
Sunrpc
Syslog
Tacacs
Talk
Telnet
Time
Uucp
Whois
Www
Border Gateway Protocol (179)
Character generator (19)
Remote commands (rcmd, 514)
Daytime (13)
Discard (9)
Domain Name Service (53)
Echo (7)
Exec (rsh, 512)
Finger (79)
File Transfer Protocol (21)
FTP data connections (20)
Gopher (70)
NIC hostname server (101)
Internet Relay Chat (194)
Kerberos login (543)
Kerberos shell (544)
Login (rlogin, 513)
Printer service (515)
Network News Transport Protocol (119)
Post Office Protocol v2 (109)
Post Office Protocol v3 (110)
Simple Mail Transport Protocol (25)
Sun Remote Procedure Call (111)
Syslog (514)
TAC Access Control System (49)
Talk (517)
Telnet (23)
Time (37)
Unix-to-Unix Copy Program (540)
Nicname (43)
World Wide Web (HTTP, 80)
UDP
biff
bootpc
bootps
discard
dns
dnsix
echo
mobilip-ag
mobilip-mn
nameserver
netbios-dgm
netbios-ns
netbios-ssn
ntp
rip
snmp
snmptrap
sunrpc
syslog
tacacs-ds
talk
tftp
time
who
xdmcp
Mail notify (512)
Bootstrap Protocol Client (68)
Bootstrap Protocol Server (67)
Discard (9)
Mail notify (512)
DNSIX Securit Attribute Token Map (90)
Echo (7)
MobileIP-Agent (434)
MobilIP-MN (435)
Host Name Server (42)
NETBIOS Datagram Service (138)
NETBIOS Name Service (137)
NETBIOS Session Service (139)
Network Time Protocol (123)
Routing Information Protocol (520)
SNMP (161)
SNMPTRAP (162)
SUN Remote Procedure Call (111)
Syslog (514)
TACACS-Database Service (65)
Talk (517)
Trivial File Transfer (69)
Time (37)
Who(513)
X Display Manager Control Protocol (177)
例:
100 deny udp any any eq rip
表示禁止接收和发送RIP报文。
100 permit tcp 129.8.0.0 0.0.255.255 202.39.160.0 0.0.0.255 eq www
表示允许从129.8.0.0网段的主机向202.39.160.0网段的主机发送WWW报文。
下面为扩展访问列表的例子:
 
 
 
 
8.5 在接口上应用访问列表
 
 
 
操作
操作
指定接口上过滤接收报文的规则
ip access-group listnumber in
取消接口上过滤接收报文的规则
no ip access-group listnumber in
指定接口上过滤发送报文的规则
ip access-group listnumber out
取消接口上过滤发送报文的规则
no ip access-group listnumber out
 
  你不仅需要建立想用的访问列表,同时还必须将它提供给每个想用它的接口。一个访问列表可用于同一个路由器的许多不同的接口,
 
  进入接口配置模式,使用命令IP ACCESS-GROUP 1 OUT将该接口放入使用访问列表1 0 1作为过滤的组。注意命令末端的参数O U T,O U T是默认参数,它表示数据包将在从路由器到出站的路上进行过滤。因为O U T是默认参数,所以可以省略,所以IP ACCESS-GROUP 101表示同样的意思。
  如果将其用作网络接口的入站数据包过滤,使用命令IP ACCESS-GROUP
101 IN。
  参数I N | O U T表示是入站还是出站。如果你想让访问列表对两个方向都有用,则两个参数都要加上,一个表示入站,一个表示出站。对于每个协议的每个接口的每个方向,只能提供一个访问列表。
 
 
8.6访问列表的核验
 
检验I P访问列表
配置完I P访问列表后,你会想知道是否正确。你可以使用SHOW ACCESS-LISTS命令和SHOW IP INTERFACES命令来检验I P访问列表。
SHOW ACCESS-LISTS命令显示路由器中所有的访问列表,包括I P、I P X和A p p l e Ta l k。这
里是一些SHOW ACCESS-LISTS命令的输出结果,显示了路由器中配置的标准和扩展访问列表。
 
可以看到,SHOW ACCESS-LISTS命令显示了路由器中所有类型的访问列表的配置细节,而不单单是I P访问列表。我们可以在命令行中指定特定的访问列表号来单独显示一个访问列表。
 
SHOW IP INTERFACES命令提供了接口配置的I P指定方面的信息。它被专用来看什么数据包过滤应用于接口。它并不显示访问列表的内容,而只有访问列表的号码。