本文檔介紹了 IP 訪問控制列表 (ACL) 如何能過濾網絡流量。其中還包含 IP ACL 類型的簡要描述、 功能可用性以及網絡使用示例。訪問軟件顧問(僅限註冊用戶)工具為了確定某些的支持更加先進的Cisco IOS IP ACL功能。
RFC 1700 包含通用端口的指定編號。 RFC 1918 包含專用 Internet 的地址分配,通常是在 Internet 上不可見的 IP 地址。
注意: 除過濾 IP 數據流外,ACL 還可用於其他用途,例如,定義網絡地址轉換 (NAT) 或加密的數 據流、或者過濾非 IP 協議(如 AppleTalk 或 IPX)。有關這些功能的詳細信息不在本文檔的討論範 圍之內。
先決條件
要求
本文檔沒有任何特定的前提條件。討論的概念是存在Cisco IOS軟件版本8.3或以上。這在每個訪問 列表功能下都有標註。
使用的組件
本文檔將討論各種類型的 ACL。其中某些類型存在於 Cisco IOS 軟件版本 8.3 及更高版本中,而其 他類型則在更高的軟件版本中引入。這一點在討論每種類型時都有標註。
本文檔中的信息都是基於特定實驗室環境中的設備編寫的。本文檔中使用的所有設備最初均採用原 始(默認)配置。如果您使用的是真實網絡,請確保您已經了解所有命令的潛在影響。
規則
有關文檔規則的詳細信息,請參閱 Cisco 技術提示規則。
ACL 概念
此部分闡述了 ACL 概念。
掩碼
掩碼與 IP 地址一起用於 IP ACL 中,以指定應該允許和拒絕哪些內容。用於配置接口 IP 地址的掩 碼以 255 開頭,大的數值列於左邊,例如,IP 地址 209.165.202.129 對應掩碼為 255.255.255.224。 IP ACL 的掩碼則相反,如掩碼 0.0.0.255。它有時稱為反掩碼或通配符掩碼。如 果將掩碼的值分解為二進制(0s 和 1s),其結果可以確定處理數據流時所要考慮的地址位。 A 0 表 示這些地址位必須要考慮(完全匹配);掩碼中的 a 1 表示“忽略”。下表進一步說明了這一概念。
從二進制掩碼可以看出,前三組(八位字節)必須與給定的二進製網絡地址 (00001010.00000001.00000001) 完全匹配。最後一組數字為“忽略”(.11111111)。因此,所有以 10.1.1. 開頭的數據流都視為匹配,因為最後一個八位組為“忽略”。因此,通過該掩碼,從 10.1.1.1 到 10.1.1.255 (10.1.1.x) 的網絡地址均可處理。將 255.255.255.255 減去正常掩碼可確定 ACL 反掩碼。在本示例中,確定的反掩碼將用於正常掩碼 為 255.255.255.0 的網絡地址 172.16.1.0。 ●255.255.255.255 - 255.255.255.0(正常掩碼)= 0.0.0.255(反掩碼) 請注意以下這些 ACL 等量。 ●源地址/源地址通配符 0.0.0.0/255.255.255.255 表示“任意”。
● 源地址/通配符 10.1.1.2/0.0.0.0 與“主機 10.1.1.2”相同。
ACL 匯總
注意: 子網掩碼也可表示為固定長度掩碼。例如,192.168.10.0/24 代表 192.168.10.0 255.255.255.0。
此列表說明瞭如何將一系列網絡匯總為單個網絡以進行 ACL 優化。請考慮以下這些網絡。192.168.32.0/24
192.168.33.0/24
192.168.34.0/24
192.168.35.0/24
192.168.36.0/24
192.168.37.0/24
192.168.38.0/24
192.168.39.0/24
每個網絡的前兩個八位組和最後一個八位組都是相同的。該表說明瞭如何將這些網絡匯總為單個網路。
按照八位組的位位置和每個位的地址值,可將以上網絡的第三個八位組寫成如下表所示。
由於前五位匹配,因此可將以上八個網絡匯總為一個網絡(192.168.32.0/21 或 192.168.32.0 255.255.248.0)。三個低位的所有八個可能的組合則與相關的網絡範圍有關。以下命令定義了一個 允許該網絡的 ACL。將 255.255.255.255 減去 255.255.248.0(正常掩碼),即可得到 0.0.7.255。access-list acl_permit permit ip 192.168.32.0 0.0.7.255
請考慮以下這組網絡以進行進一步說明。
192.168.146.0/24
192.168.147.0/24
192.168.148.0/24
192.168.149.0/24
每個網絡的前兩個八位組和最後一個八位組都是相同的。該表格說明瞭如何對這些進行匯總。
按照八位組的位位置和每個位的地址值,可將以上網絡的第三個八位組寫成如下表所示。
不同於前一個示例,您不能匯總這些網絡到單個網絡。如果他們匯總對單個網絡,他們變為 192.168.144.0/21,因為有五個位類似在第三個八位位組。這匯總的網絡192.168.144.0/21報導範圍 從192.168.144.0的網絡到192.168.151.0。在這些中, 192.168.144.0、192.168.145.0、 192.168.150.0和192.168.151.0網絡不在四網絡給的列表。為了報導有問題的特定的網絡,您需要 至少兩匯總的網絡。給的四網絡可以匯總到這兩網絡:
➝對於網絡192.168.146.x和192.168.147.x,所有位配比除了最後一個,是“不關心”。可以將此寫 為 192.168.146.0/23(或 192.168.146.0 255.255.254.0)。
➝對於網絡192.168.148.x和192.168.149.x,所有位配比除了最後一個,是“不關心”。可將此寫為 192.168.148.0/23(或 192.168.148.0 255.255.254.0)。該輸出可為上述網絡定義一個匯總 ACL。
➝對於網絡192.168.148.x和192.168.149.x,所有位配比除了最後一個,是“不關心”。可將此寫為 192.168.148.0/23(或 192.168.148.0 255.255.254.0)。該輸出可為上述網絡定義一個匯總 ACL。
!--- This command is used to allow access access for devices with IP !--- addresses in the range from 192.168.146.0 to 192.168.147.254. access-list 10 permit 192.168.146.0 0.0.1.255
!--- This command is used to allow access access for devices with IP !--- addresses in the range from 192.168.148.0 to 192.168.149.254 access-list 10 permit 192.168.148.0 0.0.1.255
處理 ACL
進入路由器的數據流將按照 ACL 條目在路由器中的順序與 ACL 條目相比較。新的語句會添加到列 表末尾。路由器會繼續查看,直到出現匹配。如果路由器到達列表末端時還未找到匹配,數據流將 被拒絕。因此,應將經常發生匹配的條目置於列表頂部。對於不允許的數據流,將默認拒絕。如果 單條目的 ACL 中僅包含一個拒絕條目,其作用將是拒絕所有數據流。您必須在 ACL 中至少包含一 條允許語句,否則所有數據流都會受阻。這兩個 ACL(101 和 102)的作用相同。
進入路由器的數據流將按照 ACL 條目在路由器中的順序與 ACL 條目相比較。新的語句會添加到列 表末尾。路由器會繼續查看,直到出現匹配。如果路由器到達列表末端時還未找到匹配,數據流將 被拒絕。因此,應將經常發生匹配的條目置於列表頂部。對於不允許的數據流,將默認拒絕。如果 單條目的 ACL 中僅包含一個拒絕條目,其作用將是拒絕所有數據流。您必須在 ACL 中至少包含一 條允許語句,否則所有數據流都會受阻。這兩個 ACL(101 和 102)的作用相同。
!--- This command is used to permit IP traffic from 10.1.1.0 !--- network to 172.16.1.0 network. All packets with a source !--- address not in this range will be rejected. access-list 101 permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255
!--- This command is used to permit IP traffic from 10.1.1.0 !--- network to 172.16.1.0 network. All packets with a source !--- address not in this range will be rejected. access-list 102 permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 access-list 102 deny ip any any
在本示例中,最後一個條目已足夠。不需要前三個條目,因為 TCP 包括 Telnet,而 IP 包括 TCP、 用戶數據報協議 (UDP) 和 Internet 控制消息協議 (ICMP)。
!--- This command is used to permit Telnet traffic !--- from machine 10.1.1.2 to machine 172.16.1.1. access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet
!--- This command is used to permit tcp traffic from !--- 10.1.1.2 host machine to 172.16.1.1 host machine. access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1
!--- This command is used to permit tcp traffic from !--- 10.1.1.2 host machine to 172.16.1.1 host machine. access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1
!--- This command is used to permit udp traffic from !--- 10.1.1.2 host machine to 172.16.1.1 host machine. access-list 101 permit udp host 10.1.1.2 host 172.16.1.1
!--- This command is used to permit ip traffic from !--- 10.1.1.0 network to 172.16.1.10 network. access-list 101 permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255
除定義 ACL 源地址和目標地址外,還可定義端口、ICMP 消息類型和其他參數。要了解有關通用端 口的信息,請參閱 RFC 1700。有關 ICMP 消息類型的說明,請參閱 RFC 792。
路由器可顯示有關某些通用端口的描述性文本。請使用 ?,以獲得幫助。
access-list 102 permit tcp host 10.1.1.1 host 172.16.1.1 eq ? bgp Border Gateway Protocol (179) chargen Character generator (19) cmd Remote commands (rcmd, 514)
在配置過程中,路由器還會將數值轉換為更加方便的值。以下示例中,鍵入 ICMP 消息類型編號後 ,路由器將此編號轉換成了一個名稱。
access-list 102 permit icmp host 10.1.1.1 host 172.16.1.1 14 變為access-list 102 permit icmp host 10.1.1.1 host 172.16.1.1 timestamp-reply
應用 ACL
您可以定義 ACL 而無需將其應用。但在應用於路由器接口之前 ACL 並不會生效。較好的做法是 ,在與源數據流最近的接口上應用 ACL。如本例所示,當您嘗試阻止數據流從源位置傳輸到目標位 置時,可在路由器 A 的 E0 上應用入站 ACL,而不是在路由器 C 的 E1 上應用出站列表。默認情況 下,每個訪問列表在其末尾都會有 deny ip any any。如果數據流與DHCP 請求有關,且未得到明確允許,則該數據流將會丟失,因為當您查看IP 中的DHCP 請求時,源地址為s=0.0.0.0(Ethernet1/0),d=255.255 .255.255,len 604,rcvd 2 UDP src=68,dst=67。請注意,源 IP 地址為 0.0.0.0,而目標地址為 255.255.255.255。源端口為 68,目標端口為 67。因此,應該在 訪問列表中允許這種數據流,否則數據流會由於語句末尾的默認拒絕而丟失。
注意: 要使 UDP 數據流通過,ACL 還必須明確允許 UDP 數據流。
定義輸入、輸出、入站、出站、源和目標
路由器使用“輸入”、“輸出”、“源”和“目標”作為引用術語。路由器上的數據流可以比作高速公路上的 交通。如果您是賓夕法尼亞州的一名執法人員,想攔住從馬里蘭州開往紐約的卡車,則卡車的源位 置是馬里蘭,目標位置是紐約。路障可設在賓夕法尼亞州 – 紐約邊界(出界)或馬里蘭州 – 賓夕法 尼亞州邊界(入界)。
涉及到路由器時,這些術語有以下幾種含義。
輸出 — 已通過路由器且離開接口的數據流。源位置是它在路由器另一端曾經所在的位置,而目標位置是它要到達的位置。
輸入 — 到達接口並通過路由器的數據流。源位置是它曾經所在的位置,目標位置是在路由器另 一端它要到達的位置。
入站 — 如果是入站訪問列表,則當路由器接收到數據包時,Cisco IOS 軟件將檢查訪問列表中 的條件語句,看是否有匹配。如果數據包被允許,則軟件將繼續處理該數據包。如果數據包被 拒絕,則軟件會丟棄該數據包。
出站 — 如果是出站訪問列表,則當軟件到接收數據包並將群其路由至出站接口後,軟件將檢查 訪問列表中的條件語句,看是否有匹配。如果數據包被允許,則軟件會發送該數據包。如果數 據包被拒絕,則軟件會丟棄該數據包。
輸入 ACL 的源位置在其應用的接口分段上,目標位置在其他任意接口上。輸出 ACL 的源位置在除 其應用的接口之外的任意接口的分段上,目標位置在其應用的接口上。
入站 — 如果是入站訪問列表,則當路由器接收到數據包時,Cisco IOS 軟件將檢查訪問列表中 的條件語句,看是否有匹配。如果數據包被允許,則軟件將繼續處理該數據包。如果數據包被 拒絕,則軟件會丟棄該數據包。
出站 — 如果是出站訪問列表,則當軟件到接收數據包並將群其路由至出站接口後,軟件將檢查 訪問列表中的條件語句,看是否有匹配。如果數據包被允許,則軟件會發送該數據包。如果數 據包被拒絕,則軟件會丟棄該數據包。
輸入 ACL 的源位置在其應用的接口分段上,目標位置在其他任意接口上。輸出 ACL 的源位置在除 其應用的接口之外的任意接口的分段上,目標位置在其應用的接口上。
編輯 ACL
編輯 ACL 時需要特別注意。例如,如果您打算從此處所示的編號 ACL 中刪除特定的某一行,則整 個 ACL 將被刪除。
!--- The access-list 101 denies icmp from any to any network !--- but permits IP traffic from any to any network.
router#configure terminal Enter configuration commands, one per line. End with CNTL/Z.
router( config)#access-list 101 deny icmp any any
router(config)#access-list 101 permit ip any any
router(config)#^Z
router#show access-list Extended IP access list 101 deny icmp any any permit ip any any
router# *Mar 9 00:43:12.784: %SYS-5-CONFIG_I: Configured from console by console router#configure terminal Enter configuration commands, one per line. End with CNTL/Z.
router(config)#no access-list 101 deny icmp any any
router(config)#^Z router#show access-list
router# *Mar 9 00:43:29.832: %SYS-5-CONFIG_I: Configured from console by console
將路由器的配置複製到 TFTP 服務器或文本編輯器(如記事本),以編輯編號 ACL。然後進行任意 更改並將配置複製迴路由器。
您也可以這樣操作。
router(config)#ip accesslist extended test !--- Permits IP traffic from 2.2.2.2 host machine to 3.3.3.3 host machine.
router(config-ext-nacl)#permit ip host 2.2.2.2 host 3.3.3.3 !--- Permits www traffic from 1.1.1.1 host machine to 5.5.5.5 host machine.
router(config-ext-nacl)#permit tcp host 1.1.1.1 host 5.5.5.5 eq www !--- Permits icmp traffic from any to any network.
router(config-extnacl)#permit icmp any any !--- Permits dns traffic from 6.6.6.6 host machine to 10.10.10.0 network.
router(config-ext-nacl)#permit udp host 6.6.6.6 10.10.10.0 0.0.0.255 eq domain
router(config-ext-nacl)#^Z
1d00h: %SYS-5-CONFIG_I: Configured from console by consoles-l
router#show access-list Extended IP access list test permit ip host 2.2.2.2 host 3.3.3.3 permit tcp host 1.1.1.1 host 5.5.5.5 eq www permit icmp any any permit udp host 6.6.6.6 10.10.10.0 0.0.0.255 eq domain
刪除的任意內容將從 ACL 中移除,添加的任意內容將加至 ACL 末尾。
router#configure terminal Enter configuration commands, one per line. End with CNTL/Z.
router(config)#ip access-list extended test !--- ACL entry deleted.
router(config-ext-nacl)#no permit icmp any any !--- ACL entry added.
router(config-ext-nacl)#permit gre host 4.4.4.4 host 8.8.8.8
router(config-ext-nacl)#^Z
1d00h: %SYS-5-CONFIG_I: Configured from console by consoles-l
router#show access-list Extended IP access list test permit ip host 2.2.2.2 host 3.3.3.3 permit tcp host 1.1.1.1 host 5.5.5.5 eq www permit udp host 6.6.6.6 10.10.10.0 0.0.0.255 eq domain permit gre host 4.4.4.4 host 8.8.8.8
還可以按照Cisco IOS 中的序列號將ACL 行添加到標準編號ACL 或擴展編號ACL 中。以下是一個 配置示例:
Router(config)#access-list 101 permit tcp any any
Router(config)#access-list 101 permit udp any any
Router(config)#access-list 101 permit icmp any any
Router(config)#exit
Router# 發出show access -list 命令以查看ACL 條目。這裡還顯示了 10、20 和 30 等序列號。
Router#show access-list Extended IP access list 101 10 permit tcp any any 20 permit udp any any 30 permit icmp any any 為訪問列表 101 添加序列號為 5 的條目。
示例 1:
Router#configure terminal Enter configuration commands, one per line. End with CNTL/Z.
Router(config)#ip access-list extended 101
Router(config-ext-nacl)#5 deny tcp any any eq telnet
Router(config-ext -nacl)#exit Router(config)#exit
Router# 在show access-list 命令輸出中,序列號為5 的ACL 被添加為訪問列表101 的第一個條目。
Router#show access-list Extended IP access list 101 5 deny tcp any any eq telnet 10 permit tcp any any 20 permit udp any any 30 permit icmp any any
Router#
Router(config)#ip access-list extended 101
Router(config-ext-nacl)#5 deny tcp any any eq telnet
Router(config-ext -nacl)#exit Router(config)#exit
Router# 在show access-list 命令輸出中,序列號為5 的ACL 被添加為訪問列表101 的第一個條目。
Router#show access-list Extended IP access list 101 5 deny tcp any any eq telnet 10 permit tcp any any 20 permit udp any any 30 permit icmp any any
Router#
示例 2:
internetrouter#show access-lists Extended IP access list 101 10 permit tcp any any 15 permit tcp any host 172.162.2.9 20 permit udp host 172.16.1.21 any 30 permit udp host 172.16.1.22 any internetrouter#configure terminal Enter configuration commands, one per line. End with CNTL/Z. internetrouter(config)#ip access-list extended 101
internetrouter(config-ext-nacl)#18 per tcp any host 172.162.2.11
internetrouter(config-ext-nacl)#^Z
internetrouter#show access-lists Extended IP access list 101 10 permit tcp any any 15 permit tcp any host 172.162.2.9 18 permit tcp any host 172.162.2.11 20 permit udp host 172.16.1.21 any 30 permit udp host 172.16.1.22 any
internetrouter#
同樣,您還可以用下列方式配置標準訪問列表:
internetrouter(config-ext-nacl)#18 per tcp any host 172.162.2.11
internetrouter(config-ext-nacl)#^Z
internetrouter#show access-lists Extended IP access list 101 10 permit tcp any any 15 permit tcp any host 172.162.2.9 18 permit tcp any host 172.162.2.11 20 permit udp host 172.16.1.21 any 30 permit udp host 172.16.1.22 any
internetrouter#
同樣,您還可以用下列方式配置標準訪問列表:
internetrouter(config)#access-list 2 permit 172.16.1.2
internetrouter(config)#access-list 2 permit 172.16.1.10
internetrouter(config)#access-list 2 permit 172.16.1.11
internetrouter#show access-lists Standard IP access list 2 30 permit 172.16.1.11 20 permit 172.16.1.10 10 permit 172.16.1.2
internetrouter(config)#ip access-list standard 2
internetrouter(config-std-nacl)#25 per 172.16.1.7
internetrouter(config-std-nacl)#15 per 172.16.1.16
internetrouter#show accesslists Standard IP access list 2 15 permit 172.16.1.16 30 permit 172.16.1.11 20 permit 172.16.1.10 25 permit 172.16.1.7 10 permit 172.16.1.2
標準訪問列表的主要區別在於Cisco IOS 是按IP地址的降序添加條目,而不是按序列號。
本示例顯示了不同的條目,例如,如何允許 IP 地址 (192.168.100.0) 或網絡 (10.10.10.0)。
internetrouter(config)#access-list 2 permit 172.16.1.10
internetrouter(config)#access-list 2 permit 172.16.1.11
internetrouter#show access-lists Standard IP access list 2 30 permit 172.16.1.11 20 permit 172.16.1.10 10 permit 172.16.1.2
internetrouter(config)#ip access-list standard 2
internetrouter(config-std-nacl)#25 per 172.16.1.7
internetrouter(config-std-nacl)#15 per 172.16.1.16
internetrouter#show accesslists Standard IP access list 2 15 permit 172.16.1.16 30 permit 172.16.1.11 20 permit 172.16.1.10 25 permit 172.16.1.7 10 permit 172.16.1.2
標準訪問列表的主要區別在於Cisco IOS 是按IP地址的降序添加條目,而不是按序列號。
本示例顯示了不同的條目,例如,如何允許 IP 地址 (192.168.100.0) 或網絡 (10.10.10.0)。
internetrouter#show access-lists Standard IP access list 19 10 permit 192.168.100.0 15 permit 10.10.10.0, wildcard bits 0.0.0.255 19 permit 201.101.110.0, wildcard bits 0.0.0.255 25 deny any
在訪問列表2 中添加條目,以允許IP 地址172.22.1.1:
internetrouter(config)#ip access-list standard 2
internetrouter(config-std-nacl)#18 permit 172.22.1.1
此條目添加到了列表頂部,目的是為特定 IP 地址(而不是網絡)賦予優先級。
internetrouter#show access-lists Standard IP access list 19 10 permit 192.168.100.0 18 permit 172.22.1.1 15 permit 10.10.10.0, wildcard bits 0.0.0.255 19 permit 201.101.110.0, wildcard bits 0.0.0.255 25 deny any
注意: 如ASA /PIX 防火牆之類的安全設備不支持以上ACL。
在訪問列表2 中添加條目,以允許IP 地址172.22.1.1:
internetrouter(config)#ip access-list standard 2
internetrouter(config-std-nacl)#18 permit 172.22.1.1
此條目添加到了列表頂部,目的是為特定 IP 地址(而不是網絡)賦予優先級。
internetrouter#show access-lists Standard IP access list 19 10 permit 192.168.100.0 18 permit 172.22.1.1 15 permit 10.10.10.0, wildcard bits 0.0.0.255 19 permit 201.101.110.0, wildcard bits 0.0.0.255 25 deny any
注意: 如ASA /PIX 防火牆之類的安全設備不支持以上ACL。
1. 訪問列表應用於加密映射時更改訪問列表的指南如果向現有的訪問列表配置中增加條目,則無需刪除加密映射。如果直接向其中增加條目且不 刪除加密映射,這也是受支持且可以接受的。
2.如果需要在現有的訪問列表中修改或刪除訪問列表條目,則必須從接口刪除加密映射。刪除加 密映射後,可對訪問列表做任意更改並重新添加加密映射。如果做了更改(如刪除訪問列表 )但未刪除加密映射,則不受支持且會導致無法預測的行為。
故障排除
如何從接口刪除 ACL?
要從接口刪除 ACL,請進入配置模式並在 access-group 命令前輸入 no,如本示例所示。interface <interface> no ip access-group <acl-number> in|out
如果被拒絕的數據流過多該如何處理?
如果被拒絕的數據流過多,請檢查列表的邏輯,或嘗試定義並應用其他更寬鬆的列表。 show ip access-lists 命令可提供數據包計數,其中顯示匹配的 ACL 條目。
除特定於端口的信息外,各 ACL 條目末尾的 log 關鍵字還可顯示 ACL 編號以及數據包是被允許還 是被拒絕。
注意: 在 Cisco IOS 軟件版本 11.2 及更高版本,以及專門為服務提供商市場開發的某些基於 Cisco IOS 軟件版本 11.1 的軟件中,則使用了 log-input 關鍵字。舊版本的軟件不支持該關鍵字。此關鍵字的用法包括適用的輸入接口和源 MAC 地址。
如何在使用 Cisco 路由器的數據包級別上進行調試?
以下程序說明了調試過程。在開始之前,請確保當前未應用 ACL,已有一個 ACL,而且未禁用快速 交換。
注意: 在調試流量較大的系統時請務必謹慎。請使用 ACL 調試特定的數據流。但是,請確定進程 和數據流。
1. 請使用 access-list 命令捕獲所需的數據。在本示例中,為目標地址 10.2.6.6 或源地址 10.2.6.6 設置了數據捕獲。 access-list 101 permit ip any host 10.2.6.6 access-list 101 permit ip host 10.2.6.6 any
2. 禁用相關接口上的快速交換。如果未禁用快速交換,您將只能看到第一個數據包。 config interface no ip route-cache
3. 請在啟用模式下使用 terminal monitor 命令,以顯示 debug 命令的輸出以及當前終端和會話的 系統錯誤消息。
4. 請使用 debug ip packet 101 或 debug ip packet 101 detail 命令以開始調試進程。
4. 請使用 debug ip packet 101 或 debug ip packet 101 detail 命令以開始調試進程。
5. 請在啟用模式下執行 no debug all 命令和 interface configuration 命令以停止調試進程。
6. 重新啟動高速緩存。
config interface ip route-cache
IP ACL 的類型
本部分文檔將介紹各種 ACL 類型。
網絡圖
標準 ACL
標準 ACL 是最早的 ACL 類型。它們可追溯到 Cisco IOS 軟件版本 8.3。標準 ACL 通過將 IP 數據 包源地址與 ACL 中配置的地址進行比較來控制數據流。
以下是標準 ACL 的命令語法格式。
access-list access-list-number {permit|deny} {host|source source-wildcard|any}
在所有軟件版本中, access-list-number 可以是 1 到 99 的任何數。在 Cisco IOS 軟件版本 12.0.1 中,標準 ACL 開始使用附加的編號(1300 到 1999)。這些附加的編號被稱為擴展 IP ACL。 Cisco IOS 軟件版本 11.2 在標準 ACL 中增加了使用列表名稱的功能。
source/source-wildcard 設置 0.0.0.0/255.255.255.255 可指定為 any。如果設置全部為零,則可以 省略。因此,主機 10.1.1.2 0.0.0.0 與主機 10.1.1.2 相同。
定義 ACL 後,必須將其應用於接口(入站或出站)。在早期軟件版本中,如果未指定關鍵字“輸出 ”或“輸入”,則默認為“輸出”。在更高的軟件版本中則必須指定該方向。
以下是標準 ACL 的一個用例,目的是阻止來自源地址 10.1.1.x 以外的所有數據流。interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group 1 in access-list 1 permit 10.1.1.0 0.0.0.255
擴展 ACL
擴展 ACL 是在 Cisco IOS 軟件版本 8.3 中引入的。擴展 ACL 通過將 IP 數據包的源地址和目標地址 與 ACL 中配置的地址進行比較來控制數據流。以下是擴展 ACL 的命令語法格式。考慮到空間問題,這裡作換行處理。
IP
access-list access-list-number [dynamic dynamic-name [timeout minutes]] {deny|permit} protocol source source-wildcard destination destination-wildcard [precedence precedence] [tos tos] [log|log-input] [time- range time-range-name]
ICMP
access-list access-list-number [dynamic dynamic-name [timeout minutes]] {deny|permit} icmp source source-wildcard destination destination-wildcard [icmp-type [icmp-code] |icmp-message] [precedence precedence] [tos tos] [log|log-input] [time-range time-range-name]
TCP
access-list access-list-number [dynamic dynamic-name [timeout minutes]] {deny|permit} tcp source source-wildcard [operator [port]] destination destination-wildcard [operator [port]] [established] [precedence precedence ] [tos tos] [log|log-input] [time-range time-range-name]
UDP
access-list access-list-number [dynamic dynamic-name [timeout minutes]] {deny|permit} udp source source-wildcard [operator [port]] destination destination-wildcard [operator [port]] [precedence precedence] [tos tos] [log|log-input] [time-range time-range-name]
在所有軟件版本中, access-list-number 可以是100到199。在 Cisco IOS 軟件版本 12.0.1 中,擴展 ACL 開始使用附加的編號(2000 到 2699)。這些附加的編號被稱為擴展 IP ACL。 Cisco IOS 軟件 版本 11.2 在擴展 ACL 中增加了使用列表名稱的功能。
值 0.0.0.0/255.255.255.255 可指定為 any。定義 ACL 後,必須將其應用於接口(入站或出站)。在早期軟件版本中,如果未指定關鍵字“輸出”或“輸入”,則默認為“輸出”。在更高的軟件版本中則必 須指定該方向。
interface <interface> ip access-group {number|name} {in|out}
該擴展ACL 用於允許10.1.1.x 網絡(內部)上的數據流並接收外部ping 響應,同時它還會阻止來自外部人員未經請求發送的ping,而允許所有其他的數據流。
interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0 ip access-group 101 in access-list 101 deny icmp any 10.1.1.0 0.0.0.255 echo access-list 101 permit ip any 10.1.1.0 0.0.0.255
注意: 某些應用程序(如網絡管理)需要使用ping 以實現keepalive 功能。這種情況下,您可能希 望限制對入站 ping 的阻止或更詳細地指定允許/拒絕的 IP。
鎖和密鑰(動態 ACL)
鎖和密鑰(亦稱動態 ACL)是在 Cisco IOS 軟件版本 11.1 中引入的。此功能依賴於 Telnet、身份 驗證(本地或遠程)以及擴展 ACL。鎖和密鑰配置從應用擴展 ACL 開始,以阻止數據流通過路由器。想要穿越路由器的用戶將被擴展 ACL 阻止,直至 Telnet 到路由器並經過身份驗證。然後 Telnet 連接會斷開,一個單條目的動態 ACL 將會添加至已存在的擴展 ACL 中。這將在特定時間段允許數據流;可以設置空閒超時和絕對 超時。
以下是含本地身份驗證的鎖和密鑰配置的命令語法格式。
username user-name password password interface <interface> ip access-group {number|name} {in|out}
此命令中的單條目 ACL 將會在身份驗證之後動態添加至已存在的 ACL 中。
access-list access-list-number dynamic name {permit|deny} [protocol] {source sourcewildcard|any} {destination destination-wildcard|any} [precedence precedence][tos tos][established] [log|log-input] [operator destination-port|destination port] line vtyline_range login local
以下是鎖和密鑰的一個基本示例。
username test password 0 test !--- Ten (minutes) is the idle timeout. username test autocommand access-enable host timeout 10 interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip accessgroup 101 in access-list 101 permit tcp any host 10.1.1.1 eq telnet !--- 15 (minutes) is the absolute timeout. access-list 101 dynamic testlist timeout 15 permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 line vty 0 4 login local
位於10.1. 1.2 的用戶通過Telnet 連接登錄到10.1.1.1 之後,動態ACL 將得到應用。然後連接斷開 ,用戶即可進入 172.16.1.x 網絡。
命名 IP ACL
命名 IP ACL 是在 Cisco IOS 軟件版本 11.2 中引入的。它允許為標準和擴展 ACL 指定名稱而不是 編號。以下是命名 IP ACL 的命令語法格式。ip access-list {extended|standard} name
以下是 TCP 示例:
{permit|deny} tcp source source-wildcard [operator [port]] destination destination-wildcard [operator [port]] [established] [precedence precedence] [tos tos] [log] [time-range time-rangename]
以下是命名ACL 的一個用例,目的是阻止從主機10.1.1.2 到主機172.16.1.1 的Telnet 連接以外的所有數據流。
interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group in_to_out in ip accesslist extended in_to_out permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet
擴展 ACL
擴展 ACL 是在 Cisco IOS 軟件版本 8.3 中引入的。擴展 ACL 通過將 IP 數據包的源地址和目標地址 與 ACL 中配置的地址進行比較來控制數據流。以下是擴展 ACL 的命令語法格式。考慮到空間問題,這裡作換行處理。
IP
access-list access-list-number [dynamic dynamic-name [timeout minutes]] {deny|permit} protocol source source-wildcard destination destination-wildcard [precedence precedence] [tos tos] [log|log-input] [time- range time-range-name]
ICMP
access-list access-list-number [dynamic dynamic-name [timeout minutes]] {deny|permit} icmp source source-wildcard destination destination-wildcard [icmp-type [icmp-code] |icmp-message] [precedence precedence] [tos tos] [log|log-input] [time-range time-range-name]
TCP
access-list access-list-number [dynamic dynamic-name [timeout minutes]] {deny|permit} tcp source source-wildcard [operator [port]] destination destination-wildcard [operator [port]] [established] [precedence precedence ] [tos tos] [log|log-input] [time-range time-range-name]
UDP
access-list access-list-number [dynamic dynamic-name [timeout minutes]] {deny|permit} udp source source-wildcard [operator [port]] destination destination-wildcard [operator [port]] [precedence precedence] [tos tos] [log|log-input] [time-range time-range-name]
在所有軟件版本中, access-list-number 可以是100到199。在 Cisco IOS 軟件版本 12.0.1 中,擴展 ACL 開始使用附加的編號(2000 到 2699)。這些附加的編號被稱為擴展 IP ACL。 Cisco IOS 軟件 版本 11.2 在擴展 ACL 中增加了使用列表名稱的功能。
值 0.0.0.0/255.255.255.255 可指定為 any。定義 ACL 後,必須將其應用於接口(入站或出站)。在早期軟件版本中,如果未指定關鍵字“輸出”或“輸入”,則默認為“輸出”。在更高的軟件版本中則必 須指定該方向。
interface <interface> ip access-group {number|name} {in|out}
該擴展ACL 用於允許10.1.1.x 網絡(內部)上的數據流並接收外部ping 響應,同時它還會阻止來自外部人員未經請求發送的ping,而允許所有其他的數據流。
interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0 ip access-group 101 in access-list 101 deny icmp any 10.1.1.0 0.0.0.255 echo access-list 101 permit ip any 10.1.1.0 0.0.0.255
注意: 某些應用程序(如網絡管理)需要使用ping 以實現keepalive 功能。這種情況下,您可能希 望限制對入站 ping 的阻止或更詳細地指定允許/拒絕的 IP。
鎖和密鑰(動態 ACL)
鎖和密鑰(亦稱動態 ACL)是在 Cisco IOS 軟件版本 11.1 中引入的。此功能依賴於 Telnet、身份 驗證(本地或遠程)以及擴展 ACL。鎖和密鑰配置從應用擴展 ACL 開始,以阻止數據流通過路由器。想要穿越路由器的用戶將被擴展 ACL 阻止,直至 Telnet 到路由器並經過身份驗證。然後 Telnet 連接會斷開,一個單條目的動態 ACL 將會添加至已存在的擴展 ACL 中。這將在特定時間段允許數據流;可以設置空閒超時和絕對 超時。
以下是含本地身份驗證的鎖和密鑰配置的命令語法格式。
username user-name password password interface <interface> ip access-group {number|name} {in|out}
此命令中的單條目 ACL 將會在身份驗證之後動態添加至已存在的 ACL 中。
access-list access-list-number dynamic name {permit|deny} [protocol] {source sourcewildcard|any} {destination destination-wildcard|any} [precedence precedence][tos tos][established] [log|log-input] [operator destination-port|destination port] line vtyline_range login local
以下是鎖和密鑰的一個基本示例。
username test password 0 test !--- Ten (minutes) is the idle timeout. username test autocommand access-enable host timeout 10 interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip accessgroup 101 in access-list 101 permit tcp any host 10.1.1.1 eq telnet !--- 15 (minutes) is the absolute timeout. access-list 101 dynamic testlist timeout 15 permit ip 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 line vty 0 4 login local
位於10.1. 1.2 的用戶通過Telnet 連接登錄到10.1.1.1 之後,動態ACL 將得到應用。然後連接斷開 ,用戶即可進入 172.16.1.x 網絡。
命名 IP ACL
命名 IP ACL 是在 Cisco IOS 軟件版本 11.2 中引入的。它允許為標準和擴展 ACL 指定名稱而不是 編號。以下是命名 IP ACL 的命令語法格式。ip access-list {extended|standard} name
以下是 TCP 示例:
{permit|deny} tcp source source-wildcard [operator [port]] destination destination-wildcard [operator [port]] [established] [precedence precedence] [tos tos] [log] [time-range time-rangename]
以下是命名ACL 的一個用例,目的是阻止從主機10.1.1.2 到主機172.16.1.1 的Telnet 連接以外的所有數據流。
interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group in_to_out in ip accesslist extended in_to_out permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet
自反 ACL
自反 ACL 是在 Cisco IOS 軟件版本 11.3 中引入的。自反 ACL 允許根據上層會話信息過濾 IP 數據 包。它們通常用於允許出站數據流,並限制對路由器內部發起的會話響應的入站數據流。自反 ACL 只能通過擴展命名 IP ACL 進行定義,無法通過編號或標準命名 IP ACL 或其他協議 ACL 進行定義。自反 ACL 可與其他標準和靜態擴展 ACL 結合使用。
以下是各種自反 ACL 命令的語法。
interface ip access-group {number|name} {in|out} ip access-list extended name permit protocol any any reflect name [timeoutseconds] ip access-list extended name evaluate name
以下示例將允許ICMP 出站和入站數據流,但只允許源自內部的TCP 數據流,其他數據流都將被拒絕。
ip reflexive-list timeout 120 interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0 ip access-group inboundfilters in ip access-group outboundfilters out ip access-list extended inboundfilters permit icmp 172.16.1.0 0.0.0.255 10.1.1.0 0.0.0.255 evaluate tcptraffic !--- This ties the reflexive ACL part of the outboundfilters ACL, !--- called tcptraffic, to the inboundfilters ACL.
ip access-list extended outboundfilters permit icmp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 permit tcp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 reflect tcptraffic
自反 ACL 是在 Cisco IOS 軟件版本 11.3 中引入的。自反 ACL 允許根據上層會話信息過濾 IP 數據 包。它們通常用於允許出站數據流,並限制對路由器內部發起的會話響應的入站數據流。自反 ACL 只能通過擴展命名 IP ACL 進行定義,無法通過編號或標準命名 IP ACL 或其他協議 ACL 進行定義。自反 ACL 可與其他標準和靜態擴展 ACL 結合使用。
以下是各種自反 ACL 命令的語法。
interface ip access-group {number|name} {in|out} ip access-list extended name permit protocol any any reflect name [timeoutseconds] ip access-list extended name evaluate name
以下示例將允許ICMP 出站和入站數據流,但只允許源自內部的TCP 數據流,其他數據流都將被拒絕。
ip reflexive-list timeout 120 interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0 ip access-group inboundfilters in ip access-group outboundfilters out ip access-list extended inboundfilters permit icmp 172.16.1.0 0.0.0.255 10.1.1.0 0.0.0.255 evaluate tcptraffic !--- This ties the reflexive ACL part of the outboundfilters ACL, !--- called tcptraffic, to the inboundfilters ACL.
ip access-list extended outboundfilters permit icmp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 permit tcp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 reflect tcptraffic
使用時間範圍基於時間的 ACL
基於時間的 ACL 是在 Cisco IOS 軟件版本 12.0.1.T 中引入的。儘管與擴展 ACL 在功能上類似,但 它們可根據時間進行訪問控制。為了實施基於時間的 ACL,需要創建指定每天和每週特定時間的時 間範圍。時間範圍通過名稱來定義,然後被相應的功能引用。因此,函數本身將會受到時間限制。時間範圍依賴於路由器的系統時鐘。可以使用路由器時鐘,但是此功能與網絡時間協議 (NTP) 同步 搭配使用時效果最佳。
以下是基於時間的 ACL 命令。
!--- Defines a named time range. time-range time-range-name
!--- Defines the periodic times. periodic days-of-the-week hh:mm to [days-of-the-week] hh: mm
!--- Or, defines the absolute times. absolute [start time date] [end time date]
!--- The time range used in the actual ACL. ip access-list name|number <extended_definition>time-rangename_of_time- range
!--- Defines a named time range. time-range time-range-name
!--- Defines the periodic times. periodic days-of-the-week hh:mm to [days-of-the-week] hh: mm
!--- Or, defines the absolute times. absolute [start time date] [end time date]
!--- The time range used in the actual ACL. ip access-list name|number <extended_definition>time-rangename_of_time- range
在本示例中,允許在星期一、星期三和星期五的營業時間內從內部網絡到外部網絡的Telnet 連接:
interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group 101 in access-list 101 permit tcp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 eq telnet time-range EVERYOTHERDAY time-range EVERYOTHERDAY periodic Monday Wednesday Friday 8:00 to 17:00
interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group 101 in access-list 101 permit tcp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 eq telnet time-range EVERYOTHERDAY time-range EVERYOTHERDAY periodic Monday Wednesday Friday 8:00 to 17:00
帶有註釋的 IP ACL 條目
帶有註釋的 IP ACL 條目是在 Cisco IOS 軟件版本 12.0.2.T. 中引入的。註釋使 ACL 更加容易理解 並且可用於標准或擴展 IP ACL。
以下是帶有註釋的命名 IP ACL 命令語法。ip access-list {standard|extended} access-list-name remark remark
以下是帶有註釋的編號 IP ACL 命令語法。access-list access-list-number remark remark
以下示例將對編號 ACL 添加註釋。interface Ethernet0/0 ip address 10.1.1.1 255.255.255.0 ip access-group 101 in access-list 101 remark permit_telnet access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet
基於上下文的訪問控制
基於上下文的訪問控制 (CBAC) 是在 Cisco IOS 軟件版本 12.0.5.T 中引入的,它需要使用 Cisco IOS 防火牆特性集。 CBAC 會檢查通過防火牆的數據流,找到並管理 TCP 和 UDP 會話的狀態信息 。使用此狀態信息的目的是在防火牆訪問列表中創建臨時空缺。為此,請按數據流起始流向配置 ip inspect 列表,以允許返回的數據流和來自可允許會話(受保護內部網絡發起的會話)的其他數據連 接。
以下是 CBAC 的語法。ip inspect name inspection-name protocol [timeoutseconds]
以下是使用 CBAC 檢查出站數據流的示例。如果沒有 CBAC 空缺位置給返回數據流,則擴展 ACL 111 通常會阻止除 ICMP 外的返回數據流。
ip inspect name myfw ftp timeout 3600 ip inspect name myfw http timeout 3600 ip inspect name myfw tcp timeout 3600 ip inspect name myfw udp timeout 3600 ip inspect name myfw tftp timeout 3600 interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0 ip access- group 111 in ip inspect myfw out access-list 111 deny icmp any 10.1.1.0 0.0.0.255 echo access-list 111 permit icmp any 10.1.1.0 0.0.0.255
身份驗證代理
身份驗證代理是在 Cisco IOS 軟件版本 12.0.5.T 中引入的。它要求擁有 Cisco IOS 防火牆特性集。身份驗證代理用於對入站或/和出站用戶進行身份驗證。通常被 ACL 阻止的用戶可讓瀏覽器通過防 火牆並在 TACACS+ 或 RADIUS 服務器上進行身份驗證。服務器會將附加 ACL 條目傳遞到路由器 中,以便在身份驗證後允許用戶通過。
身份驗證代理類似於鎖和密鑰(動態 ACL)。兩者的區別如下:
1. 鎖和密鑰通過到路由器的 Telnet 連接啟用。身份驗證代理則是通過 HTTP 在路由器上啟用。
2. 身份驗證代理必須使用外部服務器。
3. 通過身份驗證代理可添加多個動態列表。鎖和密鑰只能添加一個。
4. 身份驗證代理有絕對超時,但沒有空閒超時。鎖和密鑰兩者均有。
請參閱 Cisco 安全集成軟件配置手冊,查看身份驗證代理的示例。
Turbo ACL
Turbo ACL 是在 Cisco IOS 軟件版本 12.1.5.T 中引入的,應用於 7200、7500 和其他高端平台上。 Turbo ACL 功能旨在更有效地處理 ACL 以提高路由器性能。
請使用 access-list compiled 命令查看 turbo ACL。以下是已編譯 ACL 的示例。access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 eq telnet access-list 101 permit tcp host 10.1.1.2 host 172.16.1.1 eq ftp access-list 101 permit udp host 10.1.1.2 host 172.16.1.1 eq syslog access- list 101 permit udp host 10.1.1.2 host 172.16.1.1 eq tftp access-list 101 permit udp host 10.1.1.2 host 172.16.1.1 eq ntp
定義標準ACL 或擴展ACL 之後,可使用global configuration 命令進行編譯。
!--- Tells the router to compile. access-list compiled Interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0
!--- Tells the router to compile. access-list compiled Interface Ethernet0/1 ip address 172.16.1.2 255.255.255.0
!--- Applies to the interface. ip access-group 101 in
show access-list compiled 命令可顯示有關ACL 的統計數據。
基於時間的分佈式 ACL
基於時間的分佈式 ACL 是在 Cisco IOS 軟件版本 12.2.2.T 中引入的,目的是在啟用了 VPN 的 7500 系列路由器上實施基於時間的 ACL。在引入基於時間的分佈式 ACL 功能之前,Cisco 7500 系 列路由器的闆卡並不支持基於時間的 ACL。配置了基於時間的 ACL 後,它們便可像正常 ACL 一樣 運行。如果為闆卡上的接口配置了基於時間的 ACL,則交換到接口中的數據包並不會通過闆卡進行 分佈式交換,而是轉發到路由處理器中進行處理。基於時間的分佈式 ACL 和基於時間的 ACL 語法相同,但添加了與路由處理器和闆卡之間的處理器 間通信 (IPC) 消息狀態有關的命令。debug time-range ipc show time-range ipc clear time-range ipc
基於時間的分佈式 ACL 是在 Cisco IOS 軟件版本 12.2.2.T 中引入的,目的是在啟用了 VPN 的 7500 系列路由器上實施基於時間的 ACL。在引入基於時間的分佈式 ACL 功能之前,Cisco 7500 系 列路由器的闆卡並不支持基於時間的 ACL。配置了基於時間的 ACL 後,它們便可像正常 ACL 一樣 運行。如果為闆卡上的接口配置了基於時間的 ACL,則交換到接口中的數據包並不會通過闆卡進行 分佈式交換,而是轉發到路由處理器中進行處理。基於時間的分佈式 ACL 和基於時間的 ACL 語法相同,但添加了與路由處理器和闆卡之間的處理器 間通信 (IPC) 消息狀態有關的命令。debug time-range ipc show time-range ipc clear time-range ipc
接收 ACL
接收 ACL 旨在通過防止路由器的千兆路由處理器 (GRP) 收到不必要和潛在非法數據流來提高 Cisco 12000 路由器的安全性。接收 ACL 作為一個特殊的放棄被添加到 Cisco IOS 軟件版本 12.0.21S2 的維護扼殺中,並集成到了 12.0(22)S 中。請參閱 GSR:接收訪問控制列表以了解更多 信息。
基礎架構保護 ACL
基礎架構 ACL 旨在通過明確允許僅授權的數據流傳輸至基礎架構設備且同時允許所有其他中轉數據 流,將對基礎架構的直接攻擊的風險和有效性降至最低。有關基礎架構 ACL 的詳細信息,請參閱保 護您的核心:基礎架構保護訪問控制列表以了解更多信息。
中轉 ACL
由於中轉 ACL 明確規定僅允許所需的數據流進入網絡,因此它們可用於提高網絡安全性。請參閱中 轉訪問控制列表:在網絡邊緣執行過濾以了解更多信息。