ACL 是路由器/交換機實現流量分類、安全過濾、策略路由、QoS 分類的基石工具。本文系統講解 ACL 定義、執行邏輯、類型編號體系、標準/擴展 ACL 創建語法、隱含拒絕機制、工程應用場景與最佳實踐。
一、ACL 本質與執行邏輯
- 定義:管理員定義的有序規則集,控制數據包進出接口
- 非自動生成:需人工配置,無動態學習能力
- 順序執行:自上而下逐條匹配,首匹配原則 — 命中即執行動作 (permit/deny),停止後續匹配
- 隱含拒絕:所有 ACL 末尾隱含 `deny any`(IPv4)或 `deny ip any any`,無匹配即拒絕
- 接口綁定:每接口、每協議、每方向 (in/out) 僅可應用一條 ACL
二、ACL 類型編號體系
| 協議/類型 | 標準 ACL 編號 | 擴展 ACL 編號 | 備註 |
| IP | 1-99 | 100-199 | Cisco 傳統編號 |
| IPX | 800-899 | 1000-1099 | 已淘汰 |
| AppleTalk | 600-699 | — | 已淘汰 |
| 命名 ACL (IOS 11.2+):支持 1-199 編號範圍內自定義名稱,增強可讀性與管理 |
三、標準 ACL 創建語法與實例
access-list access-list-number {permit | deny} source [source-wildcard]
| 參數 | 說明 |
| access-list-number | 1-99 |
| permit | deny | 允許/拒絕動作 |
| source | 源 IP 地址 |
| source-wildcard | 反掩碼:0=必須匹配,1=不關心(如 0.0.0.255 表示匹配最後 8 位任意) |
實例:拒絕 204.59.144.0/24 訪問,允許其他
access-list 1 deny 204.59.144.0 0.0.0.255
access-list 1 permit any
! 接口應用
interface GigabitEthernet0/0
ip access-group 1 in
四、擴展 ACL 創建語法(核心技能)
access-list access-list-number {permit | deny} protocol source source-wildcard
destination destination-wildcard
[precedence precedence] [tos tos] [fragments]
[log | log-input] [time-range time-range-name]
關鍵字段解析
- protocol:ip/tcp/udp/icmp/ospf/eigrp/編號 (0-255)
- source/destination:IP/網段/any/host x.x.x.x
- 端口操作符 (TCP/UDP):eq/neq/gt/lt/range
- ICMP 類型/代碼:echo-reply(0)、echo(8)、unreachable(3) 等
- fragments:專門匹配非首片分片(安全審計關鍵)
- log/log-input:匹配時記錄日誌(含接口/源 MAC),慎用高頻流量
- time-range:基於時間策略動態生效
實例:允許內網 192.168.1.0/24 訪問 Web 服務器 203.0.113.10 (80/443),記錄拒絕日誌
access-list 101 permit tcp 192.168.1.0 0.0.0.255 host 203.0.113.10 eq 80
access-list 101 permit tcp 192.168.1.0 0.0.0.255 host 203.0.113.10 eq 443
access-list 101 deny ip any any log
interface GigabitEthernet0/1
ip access-group 101 out
五、工程應用場景與最佳實踐
| 場景 | ACL 類型 | 關鍵要點 |
| 邊界防火牆基礎過濾 | 擴展 ACL | 拒絕私有地址偽造、保留地址、明顯攻擊特征;允許業務流量 |
| 管理平面保護 | 標準/擴展 ACL | 僅允許管理網段 SSH/HTTPS/SNMP 訪問設備接口 IP |
| VTY 線路限制 | 標準 ACL | `access-class 10 in` 限制 Telnet/SSH 來源 |
| 策略路由 (PBR) | 擴展 ACL | 匹配流量 `set ip next-hop` 實現業務分流 |
| QoS 分類 | 擴展 ACL | 匹配業務流量 `class-map` → `policy-map` 標記/隊列 |
| NAT 過濾 | 標準/擴展 ACL | `ip nat inside source list 1 interface ...` 控制哪些流量做 NAT |
| 路由過濾/重分發 | 標準/擴展 ACL | `distribute-list`、`route-map match ip address` |
六、進階技巧與避坑指南
- 編輯現有 ACL:命名 ACL 支持 `ip access-list extended NAME` 下 `sequence-number` 編輯;編號 ACL 需刪除重建
- 反掩碼計算:`wildcard = 255.255.255.255 - mask`,如 /26 → 0.0.0.63
- 隱含拒絕陷阱:至少以 `permit any` 結尾,否則所有流量被阻斷
- 方向語義:`in` = 進接口前過濾;`out` = 路由決策後、出接口前過濾
- 性能考量:高頻匹配條目前置;避免過長 ACL 影響轉發延遲;TCAM 容量規劃
- IPv6 ACL:`ipv6 access-list NAME`,無編號區分,僅命名,語法類似擴展 ACL
ACL 看似簡單,實則是網絡工程師「寫策略」的核心編程語言。精通匹配邏輯、掌握工程模式、養成文檔化習慣,才能駕馭複雜網絡環境下的流量控制藝術。