HCIA项目实践---ACL访问控制列表相关知识和配置过程
十 ACL访问控制列表
1 策略的概念
在网络连通之后, 把所有为了追求控制而实现的技术都叫策略
2 访问控制
在路由器流量流入或者流出的接口上,匹配流量,执行相应的动作。(流量流入或者流出的接口并不是一个固定的概念而是一个相对的概念)
用permit允许,deny表示拒绝。
3 匹配感兴趣流
ACL可以和其他的技术或协议结合使用,ACL只负责匹配流量,而其他技术来完成执行的动作。
4 ACL的匹配规则
自上而下,逐一匹配,如果没有匹配上,则继续向下匹配;如果匹配上了,就执行对应的动作,不再向下匹配。
5 不同厂商的匹配规则不同
思科设备:在ACL列表末尾隐含一条拒绝所有的规则。(写允许命令方便)
华为设备:在ACL列表末尾没有隐含规则。(写拒绝命令方便)
6 ACL的分类
基础ACL:仅关注数据包的源IP地址
基础ACL的位置原则:因为它只关心源IP,所以,应该放在越靠近目标的位置,避免对其他网段造成误伤。
高级ACL:不仅关注数据包中的源IP地址,还关注目标IP地址、协议以及端口号。
高级ACL列表的位置原则:因为高级ACL是精准匹配,所以不会出现“误伤”的情况,越靠近源越好,因为可以节约链路资源。
7 ACL的配置
(1)实验环境如下图所示:
用于实现需求一和需求二的拓扑图
A:配置路由器的IP地址
# 配置R1接口的IP地址 <Huawei>sys [Huawei]sysname r1 [r1]int g 0/0/0 [r1-GigabitEthernet0/0/0]ip add 192.168.1.1 24 [r1-GigabitEthernet0/0/0]int g 0/0/1 [r1-GigabitEthernet0/0/1]ip add 192.168.2.1 24 [r1-GigabitEthernet0/0/1]#配置R2接口的IP地址 <Huawei>sys [Huawei]sysname r2 [r2]int g 0/0/0 [r2-GigabitEthernet0/0/0]ip add 192.168.2.2 24 [r2-GigabitEthernet0/0/0] [r2-GigabitEthernet0/0/0]int g 0/0/1 [r2-GigabitEthernet0/0/1]ip add 192.168.3.1 24 [r2-GigabitEthernet0/0/1]
B:配置电脑的IP地址
PC1: 192.168.1.2 掩码:255.255.255.0 网关:192.168.1.1 PC2: 192.168.1.3 掩码:255.255.255.0 网关:192.168.1.1 PC3: 192.168.3.2 掩码:255.255.255.0 网关:192.168.3.1 PC4: 192.168.3.3 掩码:255.255.255.0 网关:192.168.3.1
C:现在需要网络能通(可以写静态,RIP或者OSPF)
# 用静态路由让网络可达 [r1]ip route-static 192.168.3.0 24 192.168.2.2 [r2]ip route-static 192.168.1.0 24 192.168.2.1
检测网络是否可达:
PC>ping 192.168.3.3 Ping 192.168.3.3: 32 data bytes, Press Ctrl_C to break From 192.168.3.3: bytes=32 seq=1 ttl=126 time=63 ms From 192.168.3.3: bytes=32 seq=2 ttl=126 time=78 ms From 192.168.3.3: bytes=32 seq=3 ttl=126 time=78 ms From 192.168.3.3: bytes=32 seq=4 ttl=126 time=78 ms From 192.168.3.3: bytes=32 seq=5 ttl=126 time=78 ms
D:在网络可达的基础上,做一些控制
需求一: PC1可以访问192.168.3.0/24网段,但是PC2不行
经过分析可知: (1)我们用基础ACL就可以搞定,因为基础ACL只关心“你”是谁,也就是只关心源IP,PC1发送的让通过,PC2发送的不让通过,不需要刚关注PC1或PC2访问的是谁。
(2)如果在R1的0/0/1接口做,需求一虽然能实现,但是如果拓扑图连的后面的更多路由器的话,会造成PC2不能访问后面的所有网段,这就是所谓的”误伤“。
(3)所以,做基础ACL的话,越靠近目标网段越好。
# 完成需求一的配置命令: #一:创建ACL列表 [r2]acl 2000 [r2-acl-basic-2000] #二:创建规则 [r2-acl-basic-2000]rule deny source 192.168.1.3 0.0.0.0 (0.0.0.0是通配符,由0和1组成,0对应的位置不可变,1对应的位置可变) (0.0.0.255的意思:只要是192.168.1.几来的信息都会被抓) (通配符不是由连续的1,0组成) #补充: #查看acl列表里规则的命令: [r2-acl-basic-2000]rule permit source any ---允许所有 [r2]disp [r2]display acl 2000 Basic ACL 2000, 2 rules Acl's step is 5 rule 5 deny source 192.168.1.3 0 rule 10 permit #为什么ACL列表里面是5,10而不是连续数字? 注意:华为设备的ACL规则默认以5为步调自动添加序号,目的是为了方便插入或者删除规则 [r2]acl 2000 [r2-acl-basic-2000]rule 7 deny source 192.168.1.2 0.0.0.0 [r2-acl-basic-2000]disp [r2-acl-basic-2000]display acl 2000 Basic ACL 2000, 3 rules Acl's step is 5 rule 5 deny source 192.168.1.3 0 rule 7 deny source 192.168.1.2 0 rule 10 permit 如果想删除那个规则,可以用: [r2-acl-basic-2000]undo rule 7 [r2-acl-basic-2000]display acl 2000 Basic ACL 2000, 2 rules Acl's step is 5 rule 5 deny source 192.168.1.3 0 rule 10 permit # 三:调用 [r2]int g 0/0/1 [r2-GigabitEthernet0/0/1]traffic-fil [r2-GigabitEthernet0/0/1]traffic-filter outbound acl 2000
四:测试
PC1可以通:
PC2不可以通:
需求二:PC1可以正常访问PC3,但是不能访问PC4
经过分析可知:这个实验需要用高级ACL做,因为不仅关心你是“谁”(源IP),而且关心目标IP(你要去哪)、协议以及端口号。
高级ACL不会产生“误伤”的情况下,越靠近源IP越好,可节省链路资源。
# 配置需求二的命令 #一、创建高级ACL列表 [r1]acl name xuqiuer 3000 [r1-acl-adv-xuqiuer] #二:创建规则 选协议的时候:目的是想让PC1和PC4彻底断开联系,因为很多协议都是基于IP之上的,所以控制IP就可以。 [r1-acl-adv-xuqiuer]rule deny ip source 192.168.1.2 0.0.0.0 destination 192.168. 3.3 0.0.0.0 [r1-acl-adv-xuqiuer] #三、调用 [r1]int g 0/0/0 [r1-GigabitEthernet0/0/0]traffic-filter inbound acl name xuqiuer [r1-GigabitEthernet0/0/0]
四、测试
需求三 :PC1可以ping通R2,但是不能telnetR2
此时用一台路由器代替PC
# 实现需求三的配置 # 一、开启PC2的Telnet服务功能 [r2]aaa [r2-aaa]local-user zhenzhen privilege level 15 password cipher 202419 ---创建用户名和密码 Info: Add a new user. [r2-aaa]local-user zhenzhen service-type telnet ---添加telnet服务类型 [r2-aaa] [r2-aaa]q [r2]user-interface vty 0 4 ---开启0到4五个vty虚拟登录端口 [r2-ui-vty0-4]authentication-mode aaa ---按照aaa的方式进行认证 [r2-ui-vty0-4] # 二、为了显示效果,用路由器模拟一台电脑 [zhenzhen]int g 0/0/0 [zhenzhen-GigabitEthernet0/0/0]ip add 192.168.1.10 24 ---配置IP地址 [zhenzhen-GigabitEthernet0/0/0] # 三、由于没有路由,所以需要写一条缺省路由,不限制目标,把数据包给R1,让它帮忙转发。(跨网段通信) [zhenzhen]ip route-static 0.0.0.0 0 192.168.1.1 (做完缺省,此时就可以通了) # 四、开始远程登录操作 <zhenzhen>telnet 192.168.2.2 Press CTRL_] to quit telnet mode Trying 192.168.2.2 ... Connected to 192.168.2.2 ... Login authentication Username:zhenzhen Password: # 五、拒绝PC1的telnet服务 注意:telnet协议是基于tcp的,实现需求三不能telnet服务,策略上也是利用高级ACL r1-acl-adv-3001]rule deny tcp source 192.168.1.10 0.0.0.0 destination 192.168.2.2 0.0.0.0 destination-port eq 23 不是1.10给2.2发送的所有tcp流量都取消,而是取消tcp里面的telnet流量,所以后面的目标端口号要写,并且eq表示等于目标端口号。 # 六、调用(一个接口的一个方向只能调用一张ACL列表,为了做这个实验先牺牲一下上面的ACL列表) [r1]int g 0/0/0 [r1-GigabitEthernet0/0/0]undo traffic-filter inbound [r1-GigabitEthernet0/0/0]traffic-filter inbound acl 3001 # 七、不能进行telnet服务,但是能ping通 <zhenzhen>telnet 192.168.2.2 Press CTRL_] to quit telnet mode Trying 192.168.2.2 ... Error: Can't connect to the remote host <zhenzhen>ping 192.168.2.2 PING 192.168.2.2: 56 data bytes, press CTRL_C to break Reply from 192.168.2.2: bytes=56 Sequence=1 ttl=254 time=70 ms Reply from 192.168.2.2: bytes=56 Sequence=2 ttl=254 time=50 ms Reply from 192.168.2.2: bytes=56 Sequence=3 ttl=254 time=50 ms Reply from 192.168.2.2: bytes=56 Sequence=4 ttl=254 time=70 ms Reply from 192.168.2.2: bytes=56 Sequence=5 ttl=254 time=50 ms