数据来源
1、ACL的过滤条件:
ACL基于IP包头的IP地址、四层TCP/UDP头部的端口号、以及其他数据进行过滤,可以基于三层和四层做过滤。
2、配置位置:
ACL可以在路由器上配置,也可以在防火墙上配置(一般称为策略)。
3、ACL主要分为两大类:标准ACL和扩展ACL。
1)标准ACL:
- 表号范围为1-99。
- 只能基于源IP地址对数据包进行过滤。
- 可以使用命令进行配置,例如:
access-list 表号 permit/deny 源IP或源网段 反子网掩码
。 - 反子网掩码用于匹配条件,与0对应的需要严格匹配,与1(255)对应的忽略。
示例:
en # 进入特权模式
conf t # 进入全局配置模式
access-list 1 deny 10.0.0.0 0.0.255.255 # 拒绝匹配10.0.0.0/16范围的IP地址
access-list 1 deny 10.1.1.1 0.255.255.255 # 拒绝源IP为10开头的所有地址
access-list 1 deny host 10.1.1.1 # 拒绝源IP为10.1.1.1的主机(host 可以代替反子网掩码:0.0.0.0)
access-list 1 deny any # 拒绝所有流量
access-list 1 permit any # 允许所有流量通过
完整的案例:(拒绝源ip为10.1.1.1和20.1.1.0网段的所有包通过,其他放行)
conf t
access-list 1 deny host 10.1.1.1
access-list 1 deny 20.1.1.0 0.0.0.255
access-list 1 permit any
2)扩展ACL:
- 表号范围为100-199。
- 可以基于源IP、目标IP、端口号、协议等对数据包进行过滤。
- 可以使用命令进行配置,例如:
access-list 表号 permit/deny 协议 源IP或源网段 反子网掩码 目标IP或目标网段 反子网掩码 [eq 端口号]
。 - 常用协议有tcp、udp、icmp和ip(只有TCP/UDP协议才有端口号)。
示例:
acc 100 permit tcp host 10.1.1.1 host 20.1.1.3 eq 80 # 允许源IP为10.1.1.1访问目标IP为20.1.1.3的主机的TCP协议的80端口
acc 100 permit icmp host 10.1.1.1 host 20.1.1.3 # 允许源IP为10.1.1.1 ping目标IP为20.1.1.3的主机
acc 100 deny ip host 10.1.1.1 20.1.1.0 0.0.0.255 # 禁止源IP为10.1.1.1的主机访问20.1.1.0/24网段
acc 100 permit ip any any # 允许所有流量通过
# 查看ACL表:
show ip access-list 表号 # 可以查看指定表号的ACL表,不写则查看所有表
# 将ACL表应用到接口:
int f0/x
ip access-group 表号 in/out # 将ACL表应用于接口的入方向或出方向 (in表示进入接口的流量,out表示离开接口的流量)
no ip access-group 表号 in/out # 从接口上移除ACL表,注意表仍然存在并可以应用于其他接口
# 例如,如果要将ACL表编号为100应用到接口的进方向,可以使用以下命令:
ip access-group 100 in
如何查看ACL表和将ACL表应用到接口的方法:
- 查看ACL表:使用命令
show ip access-list 表号
,可以查看指定表号的ACL表。 - 将ACL表应用到接口:使用命令
int f0/x
进入接口配置模式,然后使用命令ip access-group 表号 in/out
将ACL表应用到接口的入方向或出方向。取消应用则使用命令no ip access-group 表号 in/out
。
4、ACL原理
-
ACL表必须应用到接口的进或出方向才能生效。
-
一个接口的一个方向只能应用一张ACL表。
-
进还是出方向的应用取决于流量控制总方向。
-
ACL表严格自上而下检查每一条规则,因此要注意规则的书写顺序。
-
每一条ACL规则由条件和动作组成,如果某个数据包不满足某个条件,则继续检查下一条规则,只有满足条件的数据包才会执行相应的动作。
-
标准ACL应尽量靠近目标位置进行配置。
-
wencoll小原理:
- 首先确定ACL配置的位置(哪个路由器?哪个接口的哪个方向?)
- 其次考虑如何编写ACL规则
- 如何编写ACL规则:
- 首先确定是否允许所有流量或拒绝所有流量
- 然后按照严格控制的顺序编写规则
-
一般情况下,标准ACL或扩展ACL一旦创建,无法修改或删除某一条规则,只能添加新的规则。如果想要修改或删除某一条规则,需要删除整张ACL表并重新编写。
- 删除ACL表的命令:
conf t
-->no access-list 表号
- 删除ACL表的命令:
-
命名ACL:
- 作用:可以对标准ACL或扩展ACL进行自定义命名
- 优点:自定义命名更易于辨认和记忆,可以任意修改、删除或插入规则
- 命令示例:
en # 进入特权模式 conf t # 进入全局配置模式 ip access-list extended 表名 # 创建自定义的ACL表,表名为"表名"(例如:kz-80-oa)。如果表已存在,则进入该表。 permit/deny 协议 源IP或源网段 反子网掩码 目标IP或目标网段 反子网掩码 [eq 端口号] # 设置一条扩展ACL过滤条目。协议指定要过滤的协议类型,源IP或源网段与反子网掩码指定源地址范围,目标IP或目标网段与反子网掩码指定目标地址范围,[eq 端口号](可选)指定端口号。 exit # 退回上一级配置模式 do show ip access-list 表IP # 查看ACL表的信息,表IP是可选参数,如果不指定则显示所有ACL表的信息。
IP或目标网段 反子网掩码 [eq 端口号] exit do show ip access-list 表IP(可选)
例子:
如果要删除某一条目
ip access-list extended kz-80-oa # 进入要删除的表kz-80-oa
no 20 # 删除ID为20的条目
exit # 退到上一级
do show ip access-list 表IP # 表IP 是可选的,不写就查看所有表
向ACL表插入条目
ip access-list extended kz-80-oa # 进入要修改的表kz-80-oa
15 permit tcp 192.16.0.0 0.0.255.255 host 10.1.1.1 eq 80 # 在ID为15的位置插入条目
5、实验
实验要求:(使用标准ACL实现)
- 要求10网段禁止访问整个50网段,访问其他不受影响
- 要求40.1.1.1PC禁止访问50网段,其他访问不受影响
- 要求10.1.1.1禁止访问40网段,其他不受影响
步骤:
1)让设备能够互通(配置IP和路由)
配置路由器端口IP命令
en # 进入特权模式
conf t # 进入全局配置模式
int Fa0/x # 进入需要配置的端口
ip add IP 子网掩码 # 配置IP,如: ip add 30.1.1.254 255.255.255.0
no shut # 开启端口
配置路由表
en # 进入特权模式
conf t # 进入全局配置模式
ip route IP 子网掩码 下一跳IP # 配置路由,这里的下一跳IP就是下一个路由器接口的IP
最后测试网络连通性,命令:ping 目标ip
2)实现10网段禁止访问整个50网段,访问其他不受影响
配置ACL表思路,因为是使用标准的ACL只能根据源ip进行过滤,无法根据目标IP之类的过滤,又不能影响访问其他的,所以这里的ACL表最后要应用在里50网段最近路由器的出接口。
创建ACL表1
en # 进入特权模式
conf t # 进入全局配置模式
acc 1 deny 10.0.0.0 0.255.255.255 # 过滤10网段的包,只检查ip的第一位数字
acc 1 permit any # 其他放行,注意这一句放行所有如果不加,其他网段的包也会被拦截
show ip access-list 1 # 查看表1,非特权模式命令最前面要加 do
将ACL表应用到接口:
int fa1/0
ip access-group 1 out # out 接口出方向
测试
路由器回馈的错误信息是哪个接口出去的就是哪个接口回包,所以这下图中显示的是20.1.1.1回馈的错误包:“目标主机不可达”
3)实现40.1.1.1PC禁止访问50网段,其他访问不受影响
注意:一个接口的一个方向只能应用一张表, 所以按照现在的网络规划图最好的方法是往ACL表1的过滤10网段后面加过滤40.1.1.1的条件。
但是一般情况下,标准或扩展acl一旦编写号,无法修改/删除某一条,只能不断的往后添加新的条目,如想修改或删除,只能删除整张表,重新写,所以先删除表1
en # 进入特权模式
conf t # 进入全局配置模式
no access-list 1 # 删除除指定的表
acc 1 deny 10.0.0.0 0.255.255.255 # 过滤10网段的包,只检查ip的第一位数字
acc 1 deny 40.1.1.1 0.0.0.0 # 过滤40.1.1.1的包,检查全部ip
简写:access-list 1 deny host 40.1.1.1
acc 1 permit any # 其他放行
show ip access-list 1 # 查看表1,非特权模式命令最前面要加 do
将ACL表应用到接口:
int fa1/0
ip access-group 1 out # out 接口出方向
测试
4)实现10.1.1.1禁止访问40网段,其他不受影响
创建ACL表2
en # 进入特权模式
conf t # 进入全局配置模式
acc 2 deny 10.1.1.1 0.0.0.0 # 过滤10.1.1.1的包,检查全部IP
acc 2 permit any # 其他放行,注意这一句放行所有如果不加,其他网段的包也会被拦截
show ip access-list 2 # 查看表1,非特权模式命令最前面要加 do
将ACL表应用到接口:
int fa0/0
ip access-group 2 in # in 接口入方向,直接在第3个路由器的fa0/0接口的入方向实现拦截因为后面都是40网段的,没必要让10.1.1.1的数据数据包进入路由器
测试