访问列表ACL技术详解.docx
《访问列表ACL技术详解.docx》由会员分享,可在线阅读,更多相关《访问列表ACL技术详解.docx(24页珍藏版)》请在冰豆网上搜索。
访问列表ACL技术详解
访问列表ACL技术详解
2009-12-10来源:
ben作者:
佚名【大中小】点击:
91次
路由器中的access-list(访问列表)最基本的有两种,分别是标准访问列表和扩展访问列表,二者的区别主要是前者是基于目标地址的数据包过滤,而后者是基于目标地址、源地址和网络协议及其端口的数据包过滤。
(1)标准型IP访问列表的格式
----标准型IP访问列表的格式如下:
----access-list[listnumber][permit|deny][sourceaddress]
----[address][wildcardmask][log]
----下面解释一下标准型IP访问列表的关键字和参数。
首先,在access和list这2个关键字之间必须有一个连字符"-";其次,listnumber的范围在0~99之间,这表明该access-list语句是一个普通的标准型IP访问列表语句。
因为对于CiscoIOS,在0~99之间的数字指示出该访问列表和IP协议有关,所以listnumber参数具有双重功能:
(1)定义访问列表的操作协议;
(2)通知IOS在处理access-list语句时,把相同的listnumber参数作为同一实体对待。
正如本文在后面所讨论的,扩展型IP访问列表也是通过listnumber(范围是100~199之间的数字)而表现其特点的。
因此,当运用访问列表时,还需要补充如下重要的规则:
在需要创建访问列表的时候,需要选择适当的listnumber参数。
----
(2)允许/拒绝数据包通过
----在标准型IP访问列表中,使用permit语句可以使得和访问列表项目匹配的数据包通过接口,而deny语句可以在接口过滤掉和访问列表项目匹配的数据包。
sourceaddress代表主机的IP地址,利用不同掩码的组合可以指定主机。
----为了更好地了解IP地址和通配符掩码的作用,这里举一个例子。
假设您的公司有一个分支机构,其IP地址为C类的192.46.28.0。
在您的公司,每个分支机构都需要通过总部的路由器访问Internet。
要实现这点,您就可以使用一个通配符掩码0.0.0.255。
因为C类IP地址的最后一组数字代表主机,把它们都置1即允许总部访问网络上的每一台主机。
因此,您的标准型IP访问列表中的access-list语句如下:
----access-list1permit192.46.28.00.0.0.255
----注意,通配符掩码是子网掩码的补充。
因此,如果您是网络高手,您可以先确定子网掩码,然后把它转换成可应用的通配符掩码。
这里,又可以补充一条访问列表的规则5。
----(3)指定地址
----如果您想要指定一个特定的主机,可以增加一个通配符掩码0.0.0.0。
例如,为了让来自IP地址为192.46.27.7的数据包通过,可以使用下列语句:
----Access-list1permit192.46.27.70.0.0.0
----在Cisco的访问列表中,用户除了使用上述的通配符掩码0.0.0.0来指定特定的主机外,还可以使用"host"这一关键字。
例如,为了让来自IP地址为192.46.27.7的数据包通过,您可以使用下列语句:
----Access-list1permithost192.46.27.7
----除了可以利用关键字"host"来代表通配符掩码0.0.0.0外,关键字"any"可以作为源地址的缩写,并代表通配符掩码0.0.0.0255.255.255.255。
例如,如果希望拒绝来自IP地址为192.46.27.8的站点的数据包,可以在访问列表中增加以下语句:
----Access-list1denyhost192.46.27.8
----Access-list1permitany
----注意上述2条访问列表语句的次序。
第1条语句把来自源地址为192.46.27.8的数据包过滤掉,第2条语句则允许来自任何源地址的数据包通过访问列表作用的接口。
如果改变上述语句的次序,那么访问列表将不能够阻止来自源地址为192.46.27.8的数据包通过接口。
因为访问列表是按从上到下的次序执行语句的。
这样,如果第1条语句是:
----Access-list1permitany
----的话,那么来自任何源地址的数据包都会通过接口。
----(4)拒绝的奥秘
----在默认情况下,除非明确规定允许通过,访问列表总是阻止或拒绝一切数据包的通过,即实际上在每个访问列表的最后,都隐含有一条"denyany"的语句。
假设我们使用了前面创建的标准IP访问列表,从路由器的角度来看,这条语句的实际内容如下:
----access-list1denyhost192.46.27.8
----access-list1permitany
----access-list1denyany
----在上述例子里面,由于访问列表中第2条语句明确允许任何数据包都通过,所以隐含的拒绝语句不起作用,但实际情况并不总是如此。
例如,如果希望来自源地址为192.46.27.8和192.46.27.12的数据包通过路由器的接口,同时阻止其他一切数据包通过,则访问列表的代码如下:
----access-list1permithost192.46.27.8
----access-list1permithost192.46.27.12
----注意,因为所有的访问列表会自动在最后包括该语句.
----顺便讨论一下标准型IP访问列表的参数"log",它起日志的作用。
一旦访问列表作用于某个接口,那么包括关键字"log"的语句将记录那些满足访问列表中"permit"和"deny"条件的数据包。
第一个通过接口并且和访问列表语句匹配的数据包将立即产生一个日志信息。
后续的数据包根据记录日志的方式,或者在控制台上显示日志,或者在内存中记录日志。
通过CiscoIOS的控制台命令可以选择记录日志方式。
扩展型IP访问列表
----扩展型IP访问列表在数据包的过滤方面增加了不少功能和灵活性。
除了可以基于源地址和目标地址过滤外,还可以根据协议、源端口和目的端口过滤,甚至可以利用各种选项过滤。
这些选项能够对数据包中某些域的信息进行读取和比较。
扩展型IP访问列表的通用格式如下:
----access-list[listnumber][permit|deny]
----[protocol|protocolkeyword]
----[sourceaddresssource-wildcardmask][sourceport]
----[destinationaddressdestination-wildcardmask]
----[destinationport][logoptions]
----和标准型IP访问列表类似,"listnumber"标志了访问列表的类型。
数字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-list101permithost192.78.46.8
----access-list101denyhost192.78.46.12
----回答是否定的。
第一条语句允许所有的IP流量、同时包括TCP流量通过指定的主机地址。
这样,第二条语句将不起任何作用。
可是,如果改变上面2条语句的次序
反向访问列表
有5个VLAN,分别为管理(63)、办公(48)、业务(49)、财务(50)、家庭(51)。
要求:
管理可以访问其它,而其它不能访问管理,并且其它VLAN之间不能互相访问!
其它的应用不受影响,例如通过上连进行INTERNET的访问
方法一:
只在管理VLAN的接口上配置,其它VLAN接口不用配置。
在入方向放置reflect
ipaccess-listextendedinfilter
permitipanyanyreflectcciepass
!
在出方向放置evaluate
ipaccess-listextendedoutfilter
evaluatecciepass
denyip10.54.48.00.0.0.255any
denyip10.54.49.0.0.0.0.255any
denyip10.54.50.00.0.0.255any
denyip10.54.51.00.0.0.255any
permitipanyany
!
应用到管理接口
intvlan63
ipaccess-groupinfilterin
ipaccess-groupoutfilterout
方法二:
在管理VLAN接口上不放置任何访问列表,而是在其它VLAN接口都放。
以办公VLAN为例:
在出方向放置reflect
ipaccess-listextendedoutfilter
permitipanyanyreflectcciepass
!
在入方向放置evaluate
ipaccess-listextendedinfilter
denyip10.54.48.00.0.0.25510.54.49.00.0.0.255
denyip10.54.48.00.0.0.25510.54.50.00.0.0.255
denyip10.54.48.00.0.0.25510.54.51.00.0.0.255
denyip10.54.48.00.0.0.25510.54.63.00.0.0.255
evaluatecciepass
permitipanyany
!
应用到办公VLAN接口:
intvlan48
ipaccess-groupinfilterin
ipaccess-groupoutfilterout
总结:
1)Reflect放置在允许的方向上(可进可出)
2)放在管理VLAN上配置简单,但是不如放在所有其它VLAN上直接。
3)如果在内网口上放置:
在入上设置Reflect
如果在外网口上放置:
在出口上放置Reflect
LANWAN
-
inboundoutbound
4)reflect不对本地路由器上的数据包跟踪,所以对待进入的数据包时注意,要允许一些数据流进入
关于访问列表的in/out
不管在那个端口启用,就在那个端口下ipaccess-groupxin/out
所谓IN,就是在数据包进入路由器之前作访问表的对照,如果是OUT,就是数据可以先进路由器,然后在出路由器时检查访问列表,所以默认是IN.
例如,假如你的例子中,E口是指向内网,并用IN,就是数据包----来自内网----在进入路由器之前并检查.
一般访问列表中,最后默认为DENY ANY,所以一般都要在列表最后一项加,access-listxxxpermitipanyany
从IOS12.0开始路由器新增加了一种基于时间的访问列表。
通过它,可以根据一天中的不同时间,或者根据一星期中的不同日期,当然也可以二者结合起来,控制对网络数据包的转发。
一、使用方法
这种基于时间的访问列表就是在原来的标准访问列表和扩展访问列表中加入有效的时间范围来更合理有效的控制网络。
它需要先定义一个时间范围,然后在原来的各种访问列表的基础上应用它。
并且,对于编号访问表和名称访问表都适用。
二、使用规则
用time-range命令来指定时间范围的名称,然后用absolute命令或者一个或多个periodic命令来具体定义时间范围。
IOS命令格式为:
time-rangetime-range-nameabsolute[starttimedate][endtimedate]periodicdays-of-theweekhh:
mmto[days-of-theweek]hh:
mm
我们分别来介绍下每个命令和参数的详细情况
time-range:
用来定义时间范围的命令
time-range-name:
时间范围名称,用来标识时间范围,以便于在后面的访问列表中引用
absolute:
该命令用来指定绝对时间范围。
它后面紧跟这start和end两个关键字。
在这两个关键字后面的时间要以24小时制、hh:
mm(小时:
分钟)表示,日期要按照日/月/年来表示。
可以看到,他们两个可以都省略。
如果省略start及其后面的时间,那表示与之相联系的permit或deny语句立即生效,并一直作用到end处的时间为止;若省略如果省略end及其后面的时间,那表示与之相联系的permit或deny语句在start处表示的时间开始生效,并且永远发生作用,当然把访问列表删除了的话就不会起作用了。
怎么样,看明白了吗?
上面讲的就是命令和基本参数为了便于理解,我们看两个例子。
1、如果要表示每天的早8点到晚8点就可以用这样的语句:
absolutestart8:
00end20:
00
2、再如,我们要使一个访问列表从2006年10月1日早5点开始起作用,直到2006年10月31日晚24点停止作用,语句如下:
absolutestart5:
001December2000end24:
0031December2000
这样一来,我们就可以用这种基于时间的访问列表来实现,而不用半夜跑到办公室去删除那个访问列表了。
这对于网络管理员来说,是个很好的事情。
如果你恰好是网管。
。
哇。
。
。
什么也不要讲了,快回去好好配置吧:
)。
好了接下来,让我们接着看下一个periodic命令及其参数。
一个时间范围只能有一个absolute语句,但是可以有几个periodic语句。
periodic:
主要是以星期为参数来定义时间范围的一个命令。
它的参数主要有宾Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday中的一个或者几个的组合,也可以是daily(每天)、weekday(周一到周五)或者weekend(周末)。
例一:
带Established选项的扩展访问列表
拓扑:
R2-(S2/0)-----------------(S2/0)-R1(S2/1)---------------(S2/1)-R3
带有Established的扩展访问列表允许内部用户访问外部网络,而拒绝外部网络访问内部网络,而没带Established的标准访问列表和扩展访问列表没有这个特性.这个示例首先用OSPF来使全网互联.
R1:
r1#shrun
*Mar100:
25:
17.275:
%SYS-5-CONFIG_I:
Configuredfromconsolebyconsole
Buildingconfiguration...
Currentconfiguration:
1410bytes
!
version12.2
servicetimestampsdebugdatetimemsec
servicetimestampslogdatetimemsec
noservicepassword-encryption
!
hostnamer1
!
loggingqueue-limit100
!
ipsubnet-zero
!
!
!
ipauditnotifylog
ipauditpomax-events100
mplsldploggingneighbor-changes
!
!
!
!
!
!
!
!
!
!
!
!
novoicehpicapturebuffer
novoicehpicapturedestination
!
!
mtareceivemaximum-recipients0
!
!
!
!
interfaceLoopback0
ipaddress1.1.1.1255.255.255.0
!
interfaceFastEthernet0/0
noipaddress
shutdown
duplexauto
speedauto
!
interfaceFastEthernet1/0
noipaddress
shutdown
duplexauto
speedauto
!
interfaceSerial2/0
ipaddress12.1.1.1255.255.255.0
encapsulationframe-relay
ipospfnetworkpoint-to-point
serialrestart_delay0
frame-relaymapip12.1.1.2102broadcast
noframe-relayinverse-arp
!
interfaceSerial2/1
ipaddress13.1.1.1255.255.255.0
encapsulationframe-relay
ipospfnetworkpoint-to-point
serialrestart_delay0
frame-relaymapip13.1.1.3113broadcast
!
interfaceSerial2/2
noipaddress
shutdown
serialrestart_delay0
!
interfaceSerial2/3
noipaddress
shutdown
serialrestart_delay0
!
routerospf10
log-adjacency-changes
network0.0.0.0255.255.255.255area0
!
iphttpserver
noiphttpsecure-server
ipclassless
!
!
!
!
!
callrsvp-sync
!
!
mgcpprofiledefault
!
!
!
dial-peercorcustom
!
!
!
!
!
linecon0
lineaux0
linevty04
nologin
!
!
end
您能走多远,关键看与谁同行!
UID
28
帖子
4251
精华
24
累计RGB
47352
阅读权限
150
来自
锐捷网络
在线时间
313小时
注册时间
2007-11-7
最后登录
2009-12-10
查看详细资料
引用报告回复TOP
BEN
管理员
累计RGB
47352
RGB余额
7250
注册时间
2007-11-7
最后登录
2009-12-10
发短消息
加为好友
当前离线
7#大中小发表于2009-6-1716:
18只看该作者
R2:
r2#shrun
Buildingconfiguration...
*Mar100:
27:
29.871:
%SYS-5-CONFIG_I:
Configuredfromconsolebyconsole
Currentconfiguration:
1298bytes
!
version12.2
servicetimestampsdebugdatetimemsec
servicetimestampslogdatetimemsec
noservicepassword-encryption
!
hostnamer2
!
loggingqueue-limit100
!
ipsubnet-zero
!
!
!
ipauditnotifylog
ipauditpomax-events100
mplsldploggingneighbor-changes
!
!
!
!
!
!
!
!
!
!
!
!
novoicehpicapturebuffer
novoicehpicapturedestination
!
!
mtareceivemaximum-recipient