Chapter10 Managing Traffic with Access Lists
Introduction to Access Lists
访问列表(access list,ACL)的主要作用是过滤你不想要的数据包.设置ACL 的一些规则:
1.按顺序的比较,先比较第一行,再比较第二行..直到最后1 行
2.从第一行起,直到找到1 个符合条件的行;符合以后,其余的行就不再继续比较下去
3.默认在每个ACL 中最后1 行为隐含的拒绝(deny),如果之前没找到1 条许可(permit)语句,意味着包将被丢弃.所以每个ACL 必须至少要有1 行permit 语句,除非你想想所有数据包丢弃
2 种主要的访问列表:
1.标准访问列表(standard access lists):只使用源IP 地址来做过滤决定
2.扩展访问列表(extended access lists):它比较源IP 地址和目标IP 地址,层3 的协议字段,层4端口号来做过滤决定
利用ACL 来过滤,必须把ACL 应用到需要过滤的那个router 的接口上,否则ACL 是不会起到过滤作用的.而且你还要定义过滤的方向,比如是是想过滤从Internet 到你企业网的数据包呢,还是想过滤从企业网传出到Internet 的数据包呢?方向分为下面2 种:
1.inbound ACL:先处理,再路由
2.outbound ACL:先路由,再处理
一些设置ACL 的要点:
1.每个接口,每个方向,每种协议,你只能设置1 个ACL
2.组织好你的ACL 的顺序,比如测试性的最好放在ACL 的最顶部
3.你不可能从ACL 从除去1 行,除去1 行意味你将除去整个ACL,命名访问列表(named access lists)例外(稍后介绍命名访问列表)
4.默认ACL 结尾语句是deny any,所以你要记住的是在ACL 里至少要有1 条permit 语句
5.记得创建了ACL 后要把它应用在需要过滤的接口上
6.ACL 是用于过滤经过router 的数据包,它并不会过滤router 本身所产生的数据包
7.尽可能的把IP 标准ACL 放置在离目标地址近的地方;尽可能的把IP 扩展ACL 放置在离源地址近的地方
Standard Access Lists
介绍ACL 设置之前先介绍下通配符掩码(wildcard masking).它是由0和255的4个8位位组组成的.0代表必须精确匹配,255 代表随意,比如:172.16.30.0 0.0.0.255,这个告诉router前3位的8位位组必须精确匹配,后1位8位位组的值可以为任意值.如果你想指定172.16.8.0到172.16.15.0,则通配符掩码为0.0.7.255(15-8=7)
配置IP 标准ACL,在特权模式下使用access-lists [ACL No.] [permit/deny] [any/host]命令.ACL号为1到99和1300到1999;permit/deny 分别为允许和拒绝;any 为任何主机,host 为具体某个主机(需要跟上IP 地址)或某1段
Lab_A(config)#access-list ?
<1-99> IP standard access list
<100-199> IP extended access list
<1000-1099> IPX SAP access list
<1100-1199> Extended 48-bit MAC address access list
<1200-1299> IPX summary address access list
<1300-1999> IP standard access list (expanded range)
<200-299> Protocol type-code access list
<2000-2699> IP extended access list (expanded range)
<300-399> DECnet access list
<600-699> Appletalk access list
<700-799> 48-bit MAC address access list
<800-899> IPX standard access list
<900-999> IPX extended access list
Standard Access List Example
如图,router 有3 个LAN 的连接1 个Internet 的连接.现在,销售部的用户不允许访问金融部的用户,但是允许他们访问市场部和Internet 连接.配置如下:
Router(config)#access-list 10 deny 172.16.40.0 0.0.0.255
Router(config)#access-list 10 permit any
注意隐含的deny any,所以末尾这里我们要加上permit any,
any 等同于0.0.0.0 255.255.255.255.
接下来把ACL应用在接口上,之前说过了尽可能的把IP标准ACL放置在离目标地址近的地方,所以使用ip access-group 命令把ACL 10 放在E1 接口,方向为出,即out.
Router(config)#int e1
Router(config-if)#ip access-group 10 out
----------------------------------------------------------------------------------------------------
Eg2:要求阻止4个LAN访问internet
Router(config)#access-list 1 deny 172.16.128.0 0.0.31.255
Router(config)#access-list 1 deny 172.16.48.0 0.0.15.255
Router(config)#access-list 1 deny 172.16.192.0 0.0.63.255
Router(config)#access-list 1 deny 172.16.88.0 0.0.7.255
Router(config)#access-list 1 permit any
Router(config)#interface serial 0
Router(config-if)#ip access-group 1 out
Controlling VTY(Telnet) Access
使用IP 标准ACL 来控制VTY 线路的访问.配置步骤如下:
1.创建个IP 标准ACL 来允许某些主机可以telnet
2.使用access-class 命令来应用ACL 到VTY 线路上实例如下:
Router(config)#access-list 50 permit 172.16.10.3
Router(config)#line vty 0 4
Router(config-line)#access-class 50 in
如上,进入VTY 线路模式,应用ACL,方向为进来,即in.因为默认隐含的deny any,所以上面的例子,只允许IP 地址为172.16.10.3 的主机telnet 到router 上
Extended Access Lists
扩展ACL:access-list [ACL 号] [permit/deny] [协议] [源地址] [目标地址] [操作符] [端口] [log].
ACL 号的范围是100 到199 和2000 到2699;协议为TCP,UDP 等
操作符号有eq(表等于),gt(大于),lt(小于)和neq(非等于)等等;
log 为可选,表示符合这个ACL,就记录下这些日志
Lab_A(config)#access-list ?
<1-99> IP standard access list
<100-199> IP extended access list
<1000-1099> IPX SAP access list
<1100-1199> Extended 48-bit MAC address access list
<1200-1299> IPX summary address access list
<1300-1999> IP standard access list (expanded range)
<200-299> Protocol type-code access list
<2000-2699> IP extended access list (expanded range)
<300-399> DECnet access list
<600-699> Appletalk access list
<700-799> 48-bit MAC address access list
<800-899> IPX standard access list
<900-999> IPX extended access list
Lab_A(config)#access-list 110 ?
deny Specify packet
dynamic Specify a DYNAMIC list of PERMITs or DENYs
permit Specify packets to forward
Lab_A(config)#access-list 110 deny ?
<0-255> An IP protocol number
eigrp Cisco's EIGRP routing protocol
gre Cisco's GRE tunneling
icmp Internet Control Message Protocol
igmp Internet Gateway Message Protocol
igrp Cisco's IGRP routing protocol
ip Any Internet Protocol
ipinip IP in IP tunneling
nos KA9Q NOS compatible IP over IP tunneling
ospf OSPF routing protocol
tcp Transmission Control Protocol
udp User Datagram Protocol
Lab_A(config)#access-list 110 deny tcp ?
A.B.C.D Source address
any Any source host
host A single source host
Lab_A(config)#access-list 110 deny tcp any ?
A.B.C.D Destination address
Any Any destination host
eq Match only packets on a given port number
gt Match only packets with a greater port number
host A single destination host
lt Match only packets with a lower port number
neq Match only packets not on a given port number
range Match only packets in the range of port numbers
Lab_A(config)#access-list 110 deny tcp any host 172.16.30.2 ?
eq Match only packets on a given port number
established Match established connections
fragments Check fragments
gt Match only packets with a greater portnumber
log Log matches against this entry
log-input Log matches against this entry,including input interface
lt Match only packets with a lower port number
neq Match only packets not on a given port number
precedence Match packets with given precedence value
range Match only packets in the range of port numbers
tos Match packets with given TOS value
<cr>
Lab_A(config)#access-list 110 deny tcp any host 172.16.30.2 eq ?
<0-65535> Port number
bgp Border Gateway Protocol (179)
chargen Character generator (19)
cmd Remote commands (rcmd, 514)
daytime Daytime (13)
discard Discard (9)
domain Domain Name Service (53)
echo Echo (7)
exec Exec (rsh, 512)
finger Finger (79)
ftp File Transfer Protocol (21)
ftp-data FTP data connections (20, 21)
gopher Gopher (70)
hostname NIC hostname server (101)
ident Ident Protocol (113)
irc Internet Relay Chat (194)
klogin Kerberos login (543)
kshell Kerberos shell (544)
login Login (rlogin, 513)
lpd Printer service (515)
nntp Network News Transport Protocol (119)
pim-auto-RP PIM Auto-RP
pop2 Post Office Protocol v2 (109)
pop3 Post Office Protocol v3 (110)
smtp Simple Mail Transport Protocol (25)
sunrpc Sun Remote Procedure Call (111)
syslog Syslog (514)
tacacs TAC Access Control System (49)
talk Talk (517)
telnet Telnet (23)
time Time (37)
uucp Unix-to-Unix Copy Program (540)
whois Nicname (43)
www World Wide Web (HTTP, 80)
Extended Access List Example
假如要拒telnet 和FTP 到绝位于金融部的主机172.16.30.5,配置如下:
Router(config)#access-list 110 deny tcp any host 172.16.30.5 eq 21
Router(config)#access-list 110 deny tcp any host 172.16.30.5 eq 23
Router(config)#access-list 110 permit ip any any
记住默认隐含的deny all.应用到E1 接口,注意方向为out,如下:
Router(config)#int e1
Router(config-if)#ip access-group 110 out
----------------------------------------------------------------------------------------------------
Eg2:要求阻止E1和E2的所有远程连接访问,这时,如果采用一个列表将会产生时间延迟,所以使用2个表,这样延迟将会小很多。
Router(config)#access-list 110 deny tcp any 172.16.48.0 0.0.15.255 eq 23
Router(config)#access-list 110 deny tcp any 172.16.192.0 0.0.63.255 eq 23
Router(config)#access-list 110 permit ip any any
Router(config)#interface Ethernet 1
Router(config-if)#ip access-group 110 out
Router(config-if)#interface Ethernet 2
Router(config-if)#ip access-group 110 out
Named Access Lists
命名访问列表是创建标准和扩展访问列表的另外1 种方法.它允许你使用命名的方法来创建和应用标准或者扩展访问列表.使用ip access-list 命令来创建,如下:
Router(config)#ip access-list ?
extended Extended Acc
logging Control access list logging
standard Standard Access List
Router(config)#ip access-list standard ?
<1-99> Standard IP access-list number
WORD Access-list name
Router(config)#ip access-list standard Block
Router(config-std-nacl)#?
Standard Access List configuration commands:
Default Set a command to its defaults
deny Specify packets to reject
exit Exit from access-list configuration mode
no Negate a command or set its default
permit Specify packets to forward
Router(config-std-nacl)#deny 172.16.40.0 0.0.0.255
Router(config-std-nacl)#permit any
Router(config-std-nacl)#exit
Router(config)#^Z
Router#sh run
!
ip access-list standard BlockSales
deny 172.16.40.0 0.0.0.255
permit any
!
接下来应用到接口上,如下:
Router(config)#int 1
Router(config-if)#ip access-group Block out
Router(config-if)#^Z
Router#
Monitoring Access Lists
一些验证ACL 的命令,如下:
1.show access-list:显示router 上配置了的所有的ACL 信息,但是不显示哪个接口应用了哪个ACL 的信息
2.show access-list [number]:显示具体第几号ACL 信息,也不显示哪个接口应用了这个ACL
3.show ip access-list:只显示IP 访问列表信息
4.show ip interface:显示所有接口的信息和配置的ACL 信息
5.show ip interface [接口号]:显示具体某个接口的信息和配置的ACL 信息
6.show running-config:显示DRAM 信息和ACL 信息,以及接口对ACL 的应用信