ACL(访问控制列表)

ACL(访问控制列表)

  ACL的两大主要功能:
   ·流量控制
   ·匹配感兴趣流
  概念:
    访问控制列表(Access Control List ACL)是路由器和交换机接口的指令列表,用来控制端口进出的数据包
  分类(包括命名ACL):

标准 扩展ACL AppleTalk IPX
数值编号 1-99和1300~1999 100-199和2000-2699 600~699 800~899
备注 AppleTalk是由Apple公司创建的一组网络协议的名字,它用于 Apple系列的个人计算机 IPX是指互联网分组交换协议,提供分组寻址和选择路由的功能,保证可靠到达,相当于数据报的功能

  3P原则:
   ·基于每种协议设置一个ACL(per protocol)
   ·基于每个方向设置一个ACL(per direction)
   ·基于每个接口设置一个ACL(per interface)

  工作原理:
   ·入站ACL:对到来的分组进行处理后在路由到主站接口。效率高。
   ·出站ACL:对分组路由到出站接口,然后根据ACL对其进行处理
   ·ACL要么应用于入站数据流要么应用到出站数据流
   ·ACL顺序:从上到下、每次一条语句

  匹配原则:
ACL(访问控制列表)

  配置需知:

  • 每个端口、每个方向、每条协议只能运用一条访问列表
  • 访问列表的内容决定了数据的控制顺序
  • 具有严格限制条件的语句应放在最前面
  • 在访问列表中的最后一条隐含声明为:deny any
  • 访问列表不能过滤路由器自己产生的数据

  配置方向:ACL(访问控制列表)
IN方向是我们数据包入接口的 ,OUT的方向是出接口的,我们要根据实际情况来配置IN或者OUT
等会我也会说什么时候使用IN 什么时候使用OUT(我也是根据个人的理解来和大家说)

  标准访问控制列表命令详解:

//标准ACL
access-list {1~99 | 1300~1999 } permit|deny {host|any|IP地址}
//命名标准ACL
ip access-list standard { 1~99 | 1300~1999}   //输入即可进入access-group 模式 在里面配置控制条目 为什么要用命名ACL 等会做实验我会和大家说的

  标准访问控制列表实验:

拓扑图:
ACL(访问控制列表)

基本配置命令:

R1:
ena
conf t
hostname R1
int g0/0
ip add	 192.168.1.254 255.255.255.0
no sh
exit
int g0/1
ip add 12.1.1.1 255.255.255.0
no sh
exit


R2
ena
conf t
hostname R2
int g0/0
ip add 12.1.1.2 255.255.255.0
no sh
exit
ip route 192.168.1.0 255.255.255.0 12.1.1.1
exit

从题目要求得知我们要禁止PC去ping R2 所以我们要做限制(我们先使用标准ACL进行限制) 至于方向可以是in也可以是out对吧 那我们先使用out的吧!

R1上做:

#禁止192.168.1.1 

#HOST写法
R1(config)# access-list 1 deny host 192.168.1.1  
//host为单主机(就不用写网段了) host的子网就为0.0.0.0 为单个主机

#IP写法
access-list 1 deny 192.168.1.1 0.0.0.0 
//反掩码形式(255.255.255.255-255.255.255.255) 为0.0.0.0 为单个IP 但我们只需要对一个IP进行限制是直接使用HOST即可


#execute开始运用(IN/OUT)
这次我们使用OUT 顺便和大家讲一下IN/OUT的区别
R1(config-if)#ip access-group 1 out

再查看我们的ACL:
R1#show ip access-lists 
Standard IP access list 1
    10 deny   192.168.1.1 (20 matches) #这里的20 matches 是指已经拦截了20个数据包了 20是因为我之前就ping过了
R1#

那么OUT方向会导致什么呢?
  会占用路由器CPU资源 你想想看 IN的方向我直接就可以把它干掉 为什么还要进一步查路由表 再封装 然后在OUT接口发出去时再干掉
  演示(这里我用PT模拟器来实现一下–让大家看的更清楚):
     先点开Simulation(模拟)
ACL(访问控制列表)
再使用PC1在终端窗口输入ping 12.1.1.2 然后先发送给网关(如果不知道网关的MAC地址则先发送ARP包来获取网关的MAC) 所以我们要先点击继续
ACL(访问控制列表)
在PT模拟器中我们可以看到的 包进入路由器 在要出去时才干掉它的(其实没有必要)大家想想一个数据包我原本就不让它访问 为什么不在他进来的时候就把它干掉呢?
ACL(访问控制列表)
当我们把接口应用到g0/0的in方向会是怎么样的呢?(在数据一进来就干掉它会发送什么呢)
ACL(访问控制列表)
图虽然和上面相同,但大家要理解,虽然两个都能实现 但你想想一个小偷 进来你家 你是想在大门口就把他干掉 还是在等他在你家客厅逛了一大圈要出去的时候才把他干掉?

当然也可以在G0/0口应用out但没有必要 因为会影响到两个路由器的带宽和提高CPU的占用率

然后我们再使用PC2去ping R2 看看有没有被限制(正常的会是不会被限制的)
ACL(访问控制列表)
结果被干掉了(为什么呢?我上面也说了(ACL默认最后一条为拒绝所有)
那我们要写一条允许所有

Router(config)#access-list 1 permit any
//然后我们再查看允许ACL
Router#show access-lists 
Standard IP access list 1
    10 deny host 192.168.1.1 (201 match(es))
    20 permit any

Router#

再使用PC2 ping 12.1.1.2 欸 可以~
ACL(访问控制列表)

再查看一下ACL

Router#show access-lists 
Standard IP access list 1
    10 deny host 192.168.1.1 (201 match(es))
    20 permit any (4 match(es)) 
//允许了4个包(大家知道是什么吗? 4个ICMP包 1个ARP包 每次增加10(seq)

Router#

那我们为什么要使用命名访问控制列表呢?
ACL(访问控制列表)
假设环境
   小王根据公司要求 限制PC1不让他 ping 通12.1.1.2 只让PC2 ping 通12.1.1.2


拓扑还是上面的,但小王配置命令如下:

R1(config)#access-list 1 deny host 192.168.1.1
R1(config)#access-list 1 deny host 192.168.1.2
R1(config)#access-list 1 permit any 

大家发现没有 小王他一激动配置错了 原本是禁止192.168.1.1 结果打错了 两台电脑都做了限制都ping不通了
但小王想到 可以把他删除了啊  no [命令]
R1(config)#no access-list 1 deny host 192.168.1.2

小王自信满满的show了一下结果:
R1#show access-lists 
R1#
(啥也没有了) 这是为什么呢???

小王使用?查看
R1(config)#no access-list 1 ?
  <cr>
R1(config)#no access-list 1 
结果发现标准访问控制列表只能删除这个表项 这就是我们需要命名访问控制列表的第一个理由
第二个路由呢 就是当一个拓扑大起来 我们难道使用数值来表示我们的表项吗?1代表什么 100又代表什么?简单来说就是可读性差

修改后
R1(config)#ip access-list standard Limit_PC1
//经过命名后 阅读性变好了
R1(config-std-nacl)#deny host 192.168.1.1
R1(config-std-nac1)#deny host 192.168.1.2 
//你没有看错 小王还是写多了
R1(config-std-nacl)#permit any
#应用到接口
R1(config)#int g0/0
R1(config-if)#ip access-group 1 in
#小王发现可以进入命名ACL配置 再删除对应的命令 且不会删除全部
R1(config)#ip access-list standard Limit_PC1
R1(config-std-nac1)#no deny host 192.168.1.2 
#再进行查看
R1#show access-lists 
Standard IP access list Limit_PC1
    10 deny host 192.168.1.1
    30 permit any
//20不见了 是因为被我们删除了
R1#

小王的进步:
   小王在上面的学习中,得知了这么样删除ACL 和该怎么使用控制ACL

公司的进一步要求:
   经过小王的设置使PC1 ping 不通 R2的12.1.1.2 但也访问不到Internet 严重影响了PC1同事的办公

拓扑图(在上面的基础上加了台服务器(模拟Internet) 把设备换了一下 大家自己先配好IP
ACL(访问控制列表)
按照小王之前的配置

R1(config)#ip access-list standard Limit_PC1
R1(config-std-nacl)#deny host 192.168.1.1
R1(config-std-nacl)#permit any
R1(config)#int f0/0
R1(config-if)#ip access-group Limit_PC1 in

我们使用PC1去ping 12.1.1.2(当然ping不通 但ping 23.1.1.254 本应该ping的通 但也ping不通了 因为标准ACL是基于源进行限制)
ACL(访问控制列表)
deny host 192.168.1.1 是直接将PC1禁止了 而且是PC1发送数据出去的R1的f0/0口 也就是R1只要收到来着PC1(192.168.1.1)的数据就直接丢弃)

两种方法:
1.应用接口的位置
2.扩展ACL

方法一:
小王发现可以应用到R1的f0/1啊 这样在出的f0/1做限制 也就等于不让PC1(192.168.1.1)访问
ACL(访问控制列表)
这样就可以ping的通Server(模拟Internet) 但这样会占用R1的资源 我们在上面也说过了 经过你的前门 客厅 你才在后门要走 才干他

方法二:
小王想到可以使用扩展ACL(基于协议、端口号、源目进行限制)
根据题目要求:PC1不能访问R1的12.1.1.2/24

ip access-list extended Limit_PC1
 deny icmp host 192.168.1.1 host 12.1.1.2
 permit ip any any
int f0/0
 ip access-group Limit_PC1 in

ACL(访问控制列表)

扩展ACL实验
拓扑图:
ACL(访问控制列表)
要求:
1.PC1不能ping通服务器
2.PC2不能访问服务器网页

ip access-list extended Limit
 deny icmp host 192.168.1.1 host 23.1.1.1
 deny tcp host 192.168.1.2 host 23.1.1.1 eq www
 permit ip any any
int f0/0
 ip access-group Limit in
上一篇:EMQ X:发布订阅ACL


下一篇:如何解决ORACLE11G里面ORA-24247 网络访问被访问控制列表 (ACL) 拒绝 错误