访问控制列表

访问控制列表是网络中最核心的流量控制工具,它像网络中的防火墙规则或交通警察,基于预先定义的条件来允许(permit) 或拒绝(deny) 数据包的通过。


一、ACL的核心概念

1. 工作原理

  • 逐条匹配,首次命中即执行:ACL按从上到下的顺序逐条检查数据包。一旦匹配某条规则,就立即执行permitdeny操作,不再继续检查后续规则。

  • 隐式拒绝所有:每个ACL的最后都有一条看不见的deny any。如果数据包没有匹配任何显式规则,将被自动拒绝。

  • 方向性:ACL必须应用在接口的特定方向上:

    • 入方向(in):数据包进入接口时进行检查

    • 出方向(out):数据包离开接口时进行检查

2. ACL类型概览

 
类型编号范围匹配依据应用场景
标准ACL 1-99, 1300-1999 仅源IP地址 简单过滤,控制“谁”能访问
扩展ACL 100-199, 2000-2699 源IP、目标IP、协议、端口等 精细控制,控制“谁能访问什么服务”
命名ACL 自定义名称 同标准或扩展 更易管理,可编辑单条

二、标准ACL:控制“谁”能访问

只关注源IP地址。通常部署在靠近目标的地方。

语法格式

cisco
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

配置实例

cisco
! 例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、协议类型、端口号等。通常部署在靠近源的地方,减少不必要的流量传输。

语法格式

cisco
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协议

配置实例

cisco
! 例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只能整体删除重建)。

语法格式

cisco
ip access-list {standard | extended} <名称>

配置实例

cisco
! 创建命名扩展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. 规则顺序至关重要

cisco
! ❌ 错误顺序:这条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. 方向性正确理解

cisco
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模板

cisco
! 模板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. 验证与排错命令

cisco
! 查看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间访问

cisco
! 允许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:防止常见攻击

cisco
! 阻止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:限制管理访问

cisco
! 只允许特定管理主机通过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

七、常见错误与注意事项

  1. 忘记隐含的deny any:测试时总发现某些流量不通?检查是否遗漏了最后的permit any

  2. ACL应用方向错误:

    cisco
    ! 想阻止内网访问外网不良网站,但应用错了方向
    interface GigabitEthernet0/0  ! 内网接口
    ip access-group BLOCK_SITES in  ❌ 应该用out!
  3. 未考虑已有连接:ACL默认不跟踪连接状态。如果只允许内网访问外网Web,还需要允许返回流量:

    cisco
    permit tcp any any established  ! 允许已建立的TCP连接返回
  4. 影响路由协议:如果ACL应用在运行OSPF/EIGRP的接口,要确保允许这些协议:

    cisco
    permit ospf any any  ! OSPF使用协议号89
    permit eigrp any any ! EIGRP使用协议号88

最后黄金法则:在应用ACL到生产环境前,先用permit ip any any测试连通性,然后逐步添加限制规则,并始终使用log关键字监控匹配情况。

ACL是网络安全的基石,掌握它需要理论加实践。从简单的标准ACL开始,逐步过渡到复杂的扩展ACL,重点关注规则顺序和部署位置这两个最关键的因素。

posted @ 2026-01-05 11:49  古锁阳关  阅读(15)  评论(0)    收藏  举报