访问控制列表(ACL
 
一、     概念
1、 ACL的功能有:包过滤、QOS(服务质量),按需拔号路由(DDR)、网络地址转换(NAT)、路由过滤,总的来讲,它的功能就相当于一个简单的防火墙
2、 访问列表分为两种:标准访问列表和扩展访问列表
Ø  标准访问列表:根据源IP地址来允许或拒绝流量,在创建它时用的数字号友为199,在放置标准访问列表到路由器的接口时,有一个原则那就是最好靠近目的端
Ø  扩展访问列表:根据源地址、子协议、源端口号、目的地址、目的端口号来许可或拒绝访问流量,在创建它时用的数字号码为100199,在放置扩展访问列表到路由器的接口时,有一个原则那就是最好靠近源端
3、 访问列表一旦开始使用,那么它的优先级是从上往下递减,但是访问列表有一个地方要注意的是默认在它的最低层,有一条拒绝所有的策略(也就是只要你启用了ACL,那么这条策略也就会随之而启用),所以在配置访问列表的时候,需要非常小心和灵活的去运用这条策略
 
二、     配置访问列表的命令规则
1、 标准访问列表(配置模式下)
Access-list 10 permit/deny 192.168.1.25 0.0.0.0(单独允许/拒绝一个IP192.168.1.25
Access-list 10 permit/deny host 192.168.1.25(单独允许/拒绝一个IP192.168.1.25
Access-list 10 permit/deny 192.168.1.0 0.0.0.255(允许/拒绝192.168.1.0这个子网,注意,这里需要用到通配掩码)
Access-list 10 permit/deny any(允许或拒绝所有)
当在配置完访问列表的时候,接下来要做的就是你需要将这个访问列表放到靠近目的端的路由器的接口上
In f0/1
Ip access-group 10 in/out (这里在最后有一个inout的选择,这个主要看你的流量在这个端口上是进还是出,如果是进,那就选in,如果是出,那就选out
2、扩展访问列表(在配置模式下)
Access-list 110 permit/deny tcp/IP /udp/icmp host 192.168.1.1 host 10.0.0.10 eq 80(这条策略的意思就是创建一个扩展访问列表名字叫110,它允许或者拒绝来自192.168.1.1的这台主机访问目标地址为10.0.0.10的这台主机的80端口)
在这里那个tcp/ip/udp/icmp,我们如何来选择那个是我们需要的呢
IP:允许或拒绝使用整个TCP/IP协议栈的源/目的地址
TCP:允许或拒绝使用基于TCP的应用程序的源/目的地址,最常见的应用程序有FTPWWWSMTPHTTP,这个TCP也是我们最常选择的,因为我们大部分的时候,都是为了去过滤一些IP地址访问某些应用程序的端口
UDP:允许或拒绝使用基于UDP的应用程序的源/目的地址,常见的应用程序有DNSTFTP
ICMP:允许或拒绝使用基于ICMP的应用程序的源/目的地址
在上面那条命令里的最后有一个eq 80,它的意思就是端口号等于80,当然了,这里也可以选择大于/小于(gt/lt
其实在扩展访问列表里,不仅可以允许或拒绝单台主机对另一台主机的访问,也可以允许或拒绝一个网段或一台主机对另一个网段或另一台主机的某个端口的访问,如:
Access-list 110 deny tcp 192.168.2.0 0.0.0.255 host 10.0.0.10 eq 21(拒绝192.168.2.0这个网段对主机10.0.0.10端口21的访问)
接下来要记得它默认还有一个拒绝所有的策略,如果你不希望把所有拒绝,那么要使用这个命令
Access-list 110 permit ip any any
最后就是在靠近源端的路由器的接口上应用这条策略
In f0/1
Ip access-group 110 in
那么,整个这个访问列表配置下来是这样的
Access-list 110 permit/deny tcp/IP /udp/icmp host 192.168.1.1 host 10.0.0.10 eq 80
Access-list 110 deny tcp 192.168.2.0 0.0.0.255 host 10.0.0.10 eq 21
Access-list 110 permit ip any any
In f0/1
Ip access-group 110 in
三、     配置限止VTP访问
Access-list 10 permit host 192.168.1.1
Line vty 0 4
Access-class 10 in
(这里有一个小注意,我们现在是配置了只允许一个IP192.168.1.1访问这台路由器,如果我们在考虑不周的情况下进行配置,当我们配置完这条策略后,有可能你会发现你的telnet会断掉,这是为什么,因为可能你现在正在进行远程的这台电脑的IP并不是192.168.1.1,那么你就被踢了出去,所以在配置限止VTY访问前,最好有一个好的习惯就是在运行一个这样的命令
Router#reload 3(这个命令的意思就是当路由器在3分钟之内没有管理员操作的话就自动重启,由于你没有保存刚才的配置,所以在3分钟后,当路由器重启时就会又恢复到原来的配置,但是也需要注意的是在配置完路由器后,一定要运行一条这样的命令reload cancel,要不然的话,出现的一个结果就是你的路由器会每隔3分钟重启一次)
四、     命名的访问表
1、 上述说的这些访问表的配置都是一些老式的IOS的配置,它有一个很大的bug就是当你想更改访问表的时候,你必须要删除某条访问表在重新创建,而新的IOS里面它就可以使用命名访问表,它的作用可以让你在不删除原访问表的情况下来单独移或添加除访问表的某行,甚至可以改变表行的顺序
2、 配置说明(在全局模式下)
Ip access-list standard test(创建一个标准访问表的名字叫test
接下来进入config-std-nacl模式下
10 permit host 10.0.0.1
20 permit host 192.168.1.1
15 permit host 10.2.2.2
(这里需要注意了,接下来的配置它是先以一个数字开始,然后在允许或者拒绝一些IP地址或IP地址段,这个数字默认情况下是以10为增量,当然了,你也可以在两个增量之间插入一些数字,比如上面的,它以10开始,那么下一行就是20,如果我突然想在1020之间插入一个表行,那么就将前面的数字配置成1020之间的一个数字)
3、如果想删除某个表行,则只需要在config-std-nacl下,用这条命令
No 15 (用一个no,在加上表行前面的数字就相当于删除了)
4、如果想要移动访问表1040下面,那么需要这个命令
5ip access-list resequence test 10 40
五、访问列表的验证
1、想查看所建的访问列表
Show ip access-lists
2、查看访问列表在路由器的口上的应用
Show ip interface
六、     实验
公司网络拓扑如下
CCNA学习笔记-访问控制列表_休闲
 
环境:
Ø  公司现在局域网内有两台路由器,R1R2R1R2F0/1端口分别连接一个交换机,然后交换机下面在连接客户端,R1R2F0/1端口的地址分别为172.16.200.1/24192.168.2.1/24
Ø  R1s0/0/0端口IP172.16.100.1,它连接合作公司的路由器R3s0/0/0,同时R2s0/0/1端口IP192.168.1.1,它也连接合作公司的路由器R3s0/0/1,;
Ø  合作公司内部局域网的地址段为10.0.0.0/24,它有一台web服务器,IP地址为10.0.0.10
要求:
Ø  公司内部局域网除了要和合作公司内部的局域网互相连通,但是有要求,192.168.1.0/24192.168.2.0/24这个网段不能够访问10.0.0.10合作公司的局域网,而合作公司可以访问我们公司所有的网络
Ø  172.16.200.0/24网段里,172.16.200.10这台机器不可以访问合作公司的服务器,其它的机器都可以
Ø  R1这台路由器只允许172.16.200.10这台机器远程tlenet
分析:首先要想做到这整个公司和合作公司网络互通,那么要做路由,我这里就采用RIP;其次,要禁止192.168.0.0访问10.0.0.0/24,就做一个标准的ACL,这个ACL最好做在R3上面,然后放到R3F0/1接口上面;接下来要想禁止172.16.200.10这台机器不可以访问10.0.0.1080端口,那么需要一个扩展的ACL,将它做在R1上面,应用在R1f0/1端口上面;最后只允许172.16.200.10远程telnetR1上面,那么需要在R1上面做一个标准的ACL
首先配置R1
R1(config)#router rip
R1(config-router)#version 2
R1(config-router)#no auto-summary
R1(config-router)#network 172.16.200.0
R1(config-router)#network 172.16.100.0
R1(config-router)#exit
R1(config)#access-list 100 deny tcp host 172.16.200.10 host 10.0.0.10 eq www
R1(config)#access-list 20 permit 172.16.200.10
R1(config)#exit
R1#
%SYS-5-CONFIG_I: Configured from console by console
R1#config ter
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#in f0/1
R1(config-if)#ip access-group 100 in
R1(config-if)#exit
R1(config)#line vty 0 4
R1(config-line)#access-class 20 in
R1(config-line)#exit
接下来配置R2
R2(config)#router rip
R2(config-router)#version 2
R2(config-router)#no auto-summary
R2(config-router)#network 192.168.1.0
R2(config-router)#network 192.168.2.0
然后配置R3
R3(config)#router rip
R3(config-router)#version 2
R3(config-router)#no auto-summary
R3(config-router)#network 10.0.0.0
R3(config-router)#network 172.16.100.0
R3(config-router)#network 192.168.1.0
R3(config-router)#exit
R3(config)#access-list 10 deny 192.168.0.0 0.0.255.255
R3(config)#access-list 10 permit any
R3(config)#exit
R3#
%SYS-5-CONFIG_I: Configured from console by console
R3#config ter
Enter configuration commands, one per line.  End with CNTL/Z.
R3(config)#in f0/1
R3(config-if)#ip access-group 10 out