访问控制列表
访问控制列表是网络中最核心的流量控制工具,它像网络中的防火墙规则或交通警察,基于预先定义的条件来允许(permit) 或拒绝(deny) 数据包的通过。
一、ACL的核心概念
1. 工作原理
-
逐条匹配,首次命中即执行:ACL按从上到下的顺序逐条检查数据包。一旦匹配某条规则,就立即执行
permit或deny操作,不再继续检查后续规则。 -
隐式拒绝所有:每个ACL的最后都有一条看不见的
deny any。如果数据包没有匹配任何显式规则,将被自动拒绝。 -
方向性:ACL必须应用在接口的特定方向上:
-
入方向(in):数据包进入接口时进行检查
-
出方向(out):数据包离开接口时进行检查
-
2. ACL类型概览
| 类型 | 编号范围 | 匹配依据 | 应用场景 |
|---|---|---|---|
| 标准ACL | 1-99, 1300-1999 | 仅源IP地址 | 简单过滤,控制“谁”能访问 |
| 扩展ACL | 100-199, 2000-2699 | 源IP、目标IP、协议、端口等 | 精细控制,控制“谁能访问什么服务” |
| 命名ACL | 自定义名称 | 同标准或扩展 | 更易管理,可编辑单条 |
二、标准ACL:控制“谁”能访问
只关注源IP地址。通常部署在靠近目标的地方。
语法格式
access-list <1-99> {permit | deny} <源IP地址> [通配符掩码]
关键参数:通配符掩码
-
不是子网掩码!用
0表示“必须匹配”,1表示“不关心”。 -
简便算法:
通配符掩码 = 255.255.255.255 - 子网掩码 -
例子:匹配
192.168.1.0/24网段 →192.168.1.0 0.0.0.255
配置实例
! 例1:允许特定主机,拒绝整个网段,允许其他所有 access-list 10 permit host 192.168.1.100 ! 允许该主机 access-list 10 deny 192.168.2.0 0.0.0.255 ! 拒绝整个192.168.2.0/24网段 access-list 10 permit any ! 允许其他所有IP(避免隐式拒绝) ! 例2:只允许来自192.168.0.0/16的流量 access-list 20 permit 192.168.0.0 0.0.255.255 ! 注意:没有permit any → 所有其他流量被隐式拒绝 ! 应用到接口 interface GigabitEthernet0/0 ip access-group 10 in ! 在入方向应用ACL 10
三、扩展ACL:精细控制“谁能访问什么”
可以匹配源IP、目标IP、协议类型、端口号等。通常部署在靠近源的地方,减少不必要的流量传输。
语法格式
access-list <100-199> {permit | deny} <协议> <源IP> <源通配符> [源端口] <目标IP> <目标通配符> [目标端口] [其他选项]
常用协议和端口关键字
| 协议 | 端口/关键字 | 说明 |
|---|---|---|
| tcp | eq 80 |
HTTP |
| tcp | eq 443 |
HTTPS |
| tcp/udp | eq 53 |
DNS |
| udp | eq 67 eq 68 |
DHCP |
| icmp | - | Ping使用的协议 |
| ip | - | 任何IP协议 |
配置实例
! 例1:允许内网访问外网Web,但禁止访问特定服务器 access-list 101 permit tcp 192.168.1.0 0.0.0.255 any eq 80 ! 允许HTTP access-list 101 permit tcp 192.168.1.0 0.0.0.255 any eq 443 ! 允许HTTPS access-list 101 deny ip 192.168.1.0 0.0.0.255 host 10.1.1.100 ! 禁止访问特定服务器 access-list 101 permit ip any any ! 允许其他所有流量 ! 例2:更精细的端口控制 access-list 102 permit tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 22 ! 允许10网段访问20网段的SSH access-list 102 permit icmp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 echo-reply ! 只允许ping回复 access-list 102 deny icmp any any ! 禁止所有其他ICMP(如ping请求) access-list 102 permit ip any any ! 允许其他IP流量 ! 应用到接口 interface GigabitEthernet0/1 ip access-group 101 out ! 在出方向应用
四、命名ACL:更灵活的现代方式
可以用名称代替数字,且支持编辑单条规则(数字ACL只能整体删除重建)。
语法格式
ip access-list {standard | extended} <名称>
配置实例
! 创建命名扩展ACL ip access-list extended FIREWALL_RULES permit tcp 192.168.1.0 0.0.0.255 any eq www permit tcp 192.168.1.0 0.0.0.255 any eq 443 deny tcp any any eq 3389 ! 禁止所有RDP访问 permit ip any any ! 可以插入或删除单条规则 ip access-list extended FIREWALL_RULES no deny tcp any any eq 3389 ! 删除第三条规则 15 deny udp any any eq 1434 ! 在第15行插入新规则(如果不指定行号,默认加在末尾) ! 应用到接口(与数字ACL相同) interface Vlan10 ip access-group FIREWALL_RULES in
五、ACL的黄金法则与最佳实践
1. 规则顺序至关重要
! ❌ 错误顺序:这条permit any会让后面的规则永远无效 access-list 110 permit ip any any access-list 110 deny tcp any any eq 23 ! ✅ 正确顺序:先具体,后通用 access-list 110 deny tcp any any eq 23 ! 先拒绝Telnet access-list 110 permit ip any any ! 再允许其他
2. 标准ACL vs 扩展ACL的部署位置
经验法则:
-
标准ACL:放置在被保护资源附近(因为只根据源地址过滤,放太近会过度限制)
-
扩展ACL:放置在尽可能靠近流量源的地方(避免无用流量占用带宽)
3. 方向性正确理解
interface GigabitEthernet0/0 ip address 192.168.1.1 255.255.255.0 ! 情况1:阻止外部访问内部服务器 ip access-group BLOCK_OUTSIDE in ! 检查从外部进入接口的包 ! 情况2:阻止内部用户访问特定网站 ip access-group BLOCK_SITES out ! 检查从接口出去到外部的包
4. 常用ACL模板
! 模板1:基本互联网访问控制 ip access-list extended INTERNET_ACCESS permit tcp 192.168.0.0 0.0.255.255 any eq 80 permit tcp 192.168.0.0 0.0.255.255 any eq 443 permit udp 192.168.0.0 0.0.255.255 any eq 53 permit icmp any any echo-reply ! 只允许ping回复 permit icmp any any time-exceeded ! 允许TTL超时(用于traceroute) deny ip any any log ! 拒绝其他所有并记录日志 ! 模板2:服务器保护 ip access-list extended PROTECT_SERVER permit tcp host 192.168.1.100 any established ! 允许服务器响应外部请求 permit tcp any host 192.168.1.100 eq 80 ! 允许HTTP访问 permit tcp any host 192.168.1.100 eq 443 ! 允许HTTPS访问 deny ip any host 192.168.1.100 log ! 拒绝其他所有并记录 permit ip any any ! 允许其他流量通过
5. 验证与排错命令
! 查看ACL配置 show access-lists ! 查看所有ACL及匹配计数 show ip access-list 101 ! 查看特定ACL show ip interface GigabitEthernet0/0 ! 查看接口应用的ACL ! 查看匹配统计(非常有用的排错工具) access-list 101 permit tcp 192.168.1.0 0.0.0.255 any eq 80 ! 输出示例: ! 10 permit tcp 192.168.1.0 0.0.0.255 any eq www (25 matches) ! 匹配计数会显示每条规则被命中的次数 ! 实时监控 debug ip packet detail 101 ! 调试ACL 101的匹配情况(生产环境慎用)
六、实际应用场景
场景1:控制VLAN间访问
! 允许VLAN10访问VLAN20的Web,但禁止其他访问 ip access-list extended VLAN10_TO_20 permit tcp 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 eq 80 deny ip 192.168.10.0 0.0.0.255 192.168.20.0 0.0.0.255 permit ip any any interface Vlan10 ip access-group VLAN10_TO_20 in
场景2:防止常见攻击
! 阻止IP欺骗(外部接口不应收到源地址为内部的包) ip access-list extended ANTISPOOF deny ip 192.168.0.0 0.0.255.255 any ! 内部地址不应从外网来 deny ip 10.0.0.0 0.255.255.255 any ! 私有地址不应从外网来 permit ip any any interface GigabitEthernet0/0 ! 外网接口 ip access-group ANTISPOOF in
场景3:限制管理访问
! 只允许特定管理主机通过SSH访问路由器 ip access-list standard MGMT_ACCESS permit host 192.168.100.100 ! 管理主机 deny any log ! 拒绝其他并记录 line vty 0 4 access-class MGMT_ACCESS in ! 应用到VTY线路 transport input ssh ! 只允许SSH
七、常见错误与注意事项
-
忘记隐含的deny any:测试时总发现某些流量不通?检查是否遗漏了最后的
permit any。 -
ACL应用方向错误:
! 想阻止内网访问外网不良网站,但应用错了方向 interface GigabitEthernet0/0 ! 内网接口 ip access-group BLOCK_SITES in ❌ 应该用out!
-
未考虑已有连接:ACL默认不跟踪连接状态。如果只允许内网访问外网Web,还需要允许返回流量:
permit tcp any any established ! 允许已建立的TCP连接返回
-
影响路由协议:如果ACL应用在运行OSPF/EIGRP的接口,要确保允许这些协议:
permit ospf any any ! OSPF使用协议号89 permit eigrp any any ! EIGRP使用协议号88
最后黄金法则:在应用ACL到生产环境前,先用permit ip any any测试连通性,然后逐步添加限制规则,并始终使用log关键字监控匹配情况。
ACL是网络安全的基石,掌握它需要理论加实践。从简单的标准ACL开始,逐步过渡到复杂的扩展ACL,重点关注规则顺序和部署位置这两个最关键的因素。
浙公网安备 33010602011771号