access-list
(访问列表)最基本的有两种,分别是标准访问列表和扩展访问列表,二者的区别主要是前者是基于目标地址的数据包过滤,而后者是基于目标地址、源地址和网络协议及其端口的数据包过滤。
(
1
)标准型
IP
访问列表的格式
----
标准型
IP
访问列表的格式如下:
---- access-list[list number][permit|deny][source address]
---- [address][wildcard mask][log]
----
下面解释一下标准型
IP
访问列表的关键字和参数。首先,在
access
和
list
这
2
个关键字之间必须有一个连字符
"-"
;其次,
list number
的范围在
0
~
99
之间,这表明该
access-list
语句是一个普通的标准型
IP
访问列表语句。因为对于
Cisco IOS
,在
0
~
99
之间的数字指示出该访问列表和
IP
协议有关,所以
list number
参数具有双重功能
:
(
1
)定义访问列表的操作协议
;
(
2
)通知
IOS
在处理
access-list
语句时,把相同的
list number
参数作为同一实体对待。正如本文在后面所讨论的,扩展型
IP
访问列表也是通过
list number
(范围是
100
~
199
之间的数字)而表现其特点的。因此,当运用访问列表时,还需要补充如下重要的规则
:
在需要创建访问列表的时候,需要选择适当的
list number
参数。
----
(
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
----
在
Cisco
的访问列表中,用户除了使用上述的通配符掩码
0.0.0
.0
来指定特定的主机外,还可以使用
"host"
这一关键字。例如,为了让来自
IP
地址为
192.46.27.7
的数据包通过,您可以使用下列语句:
---- 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
----
的话,那么来自任何源地址的数据包都会通过接口。
----
(
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
----
注意,因为所有的访问列表会自动在最后包括该语句
.
----
顺便讨论一下标准型
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
协议进行过滤
----
为了更好地说明,下面列举
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
条语句的次序
基于时间的访问列表。通过它,可以根据一天中的不同时间,或者根据一星期中的不同日期,当然也可以二者结合起来,控制对网络数据包的转发。
一、使用方法
这种基于时间的访问列表就是在原来的标准访问列表和扩展访问列表中加入有效的时间范围来更合理有效的控制网络。它需要先定义一个时间范围,然后在原来的各种访问列表的基础上应用它。并且,对于编号访问表和名称访问表都适用。
二、使用规则
用
time-range
命令来指定时间范围的名称,然后用
absolute
命令或者一个或多个
periodic
命令来具体定义时间范围。
IOS
命令格式为:
time-range time-range-name absolute [start time date] [end time date] periodic days-of-the week hh:mm to [days-of-the week] hh:mm
我们分别来介绍下每个命令和参数的详细情况
time-range
:
用来定义时间范围的命令
time-range-name
:时间范围名称,用来标识时间范围,以便于在后面的访问列表中引用
absolute
:
该命令用来指定绝对时间范围。它后面紧跟这
start
和
end
两个关键字。在这两个关键字后面的时间要以
24
小时制、
hh:mm
(小时:分钟)表示,日期要按照日
/
月
/
年来表示。可以看到,他们两个可以都省略。如果省略
start
及其后面的时间,那表示与之相联系的
permit
或
deny
语句立即生效,并一直作用到
end
处的时间为止;若省略如果省略
end
及其后面的时间,那表示与之相联系的
permit
或
deny
语句在
start
处表示的时间开始生效,并且永远发生作用,当然把访问列表删除了的话就不会起作用了。
怎么样,看明白了吗?上面讲的就是命令和基本参数为了便于理解,我们看两个例子。
1
、如果要表示每天的早
8
点到晚
8
点就可以用这样的语句:
absolute start 8:00 end 20:00
2
、再如,我们要使一个访问列表从
2006
年
10
月
1
日早
5
点
开始起作用,直到
2006
年
10
月
31
日晚
24
点
停止作用,语句如下:
absolute start 5:00 1 December 2000 end 24:00 31 December 2000
这样一来,我们就可以用这种基于时间的访问列表来实现,而不用半夜跑到办公室去删除那个访问列表了。这对于网络管理员来说,是个很好的事情。如果你恰好是网管。。哇。。。什么也不要讲了,快回去好好配置吧:)。好了接下来,让我们接着看下一个
periodic
命令及其参数。一个时间范围只能有一个
absolute
语句,但是可以有几个
periodic
语句。
periodic
:主要是以星期为参数来定义时间范围的一个命令。它的参数主要有宾
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
中的一个或者几个的组合,也可以是
daily
(每天)、
weekday
(周一到周五)或者
weekend
(周末)。
ICMp
用于
PING
命令
TCP
协议
有
WWW 80
端口
FTP 20端口 FTP-DATA 21
端口
TELNET 23
端口
邮件传输协议
SMTP 25
端口
是发送
POP3 110
端口
是接收
UDP
协议
有
DNS (DOMAIN) 53
端口