簡介
本檔案介紹常用IP存取控制清單(ACL)的組態範例,這些清單會過濾IP封包。
必要條件
需求
嘗試此組態之前,請確保符合以下要求:
請參閱新使用者的 IP 定址和子網路劃分以瞭解其他資訊 。
採用元件
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
IP存取控制清單會根據以下條件篩選封包:
- 來源位址
- 目的地位址
- 封包類型
- 以上項目的任意組合
為了過濾網路流量,ACL 會控制是否在路由器介面上轉送或封鎖路由的封包。您的路由器會檢查每個封包,以根據您在 ACL 中指定的標準來決定轉送或捨棄封包。ACL 標準包括:
完成以下步驟即可建構如本文件所示範例的 ACL:
- 建立 ACL。
- 將 ACL 套用至介面。
IP ACL 是套用至 IP 封包之 permit 和 deny 條件的循序集合。路由器會根據 ACL 中的條件來逐一測試封包。
第一個符項目會判斷 Cisco IOS® 軟體要接受或拒絕封包。由於Cisco IOS軟體會在第一個相符專案出現後停止條件測試,因此條件的順序非常重要。如果沒有相符的條件,路由器就會基於隱含的 deny all 子句而拒絕封包。
以下是可以在 Cisco IOS 軟體中設定的 IP ACL 範例:
- 標準型 ACL
- 延伸型 ACL
- 動態(鎖鑰型) ACL
- IP 命名型 ACL
- 自反型 ACL
- 使用時間範圍的時間型 ACL
- 備註型 IP ACL 項目
- 內容型 ACL
- 驗證代理
- 增強型 ACL
- 分散式時間型 ACL
本文件將討論一些常用的標準型和延伸型 ACL。請參閱設定 IP 存取清單,以取得更多有關 Cisco IOS 軟體支援之不同類型 ACL 以及如何設定和編輯 ACL 的資訊。
標準型ACL的命令語法格式為access-list access-list-number {permit|deny} {host|source source-wildcard|any}。
標準型 ACL 會將 IP 封包的來源位址與 ACL 中設定的位址進行比較,以便控制流量。
延伸型 ACL 會將 IP 封包的來源和目的地位址與 ACL 中設定的位址進行比較,以便控制流量。您也可以將延伸型 ACL 設定得更精細,並設定為依照標準過濾流量,例如:
- 通訊協定
- 連接埠號碼
- 區別服務代碼點 (DSCP) 值
- 優先順序值
- 同步序號 (SYN) 位元的狀態
延伸型 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][fragments]
網際網路控制訊息通訊協定 (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][fragments]
傳輸控制通訊協定 (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][fragments]
使用者資料包通訊協定 (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][fragments]
設定
這些組態範例使用的是最常見的 IP ACL。
允許特定主機存取網路
此影像顯示特定主機獲得存取網路的許可權。來源為主機 B 且目的地為 NetA 的所有流量允許通過,而來源為 NetB 且目的地為 NetA 的所有其他流量則遭到拒絕。
R1 表上的輸出顯示了網路如何對主機授予存取權限。此輸出顯示:
預設情況下,每個 ACL 的結尾都有一個隱含的 deny all 子句。任何未明確允許的內容均會遭到拒絕。
R1
hostname R1
!
interface ethernet0
ip access-group 1 in
!
access-list 1 permit host 192.168.10.1
注意:ACL會過濾從NetB到NetA的IP封包,但來源為主機B的封包除外。仍允許來源為主機B到NetA的封包。
注意:ACL access-list 1 permit 192.168.10.1 0.0.0.0是設定相同規則的另一種方式。
拒絕特定主機存取網路
下圖顯示,來源為主機B且目的地為NetA的流量會遭到拒絕,但是從NetB到NetA的所有其他流量都允許通過。
此組態會拒絕來自主機 192.168.10.1/32 的所有封包通過 R1 的乙太網路 0,但允許所有其他封包通過。因為每個 ACL 都有一個隱含的 deny all 子句,您必須使用命令 access list 1 permit any 來明確允許所有其他封包。
R1
hostname R1
!
interface ethernet0
ip access-group 1 in
!
access-list 1 deny host 192.168.10.1
access-list 1 permit any
注意:陳述式的順序對於ACL的運作至關重要。如果項目的順序顛倒(如以下命令所示),第一行就會比對每個封包的來源位址。因此,ACL 就無法阻擋主機 192.168.10.1/32 存取 NetA。
access-list 1 permit any
access-list 1 deny host 192.168.10.1
允許存取連續範圍的 IP 位址
下圖顯示,NetB中網路位址為192.168.10.0/24的所有主機都可以存取NetA中的網路192.168.200.0/24。
此組態會允許 IP 標頭中來源位址在網路 192.168.10.0/24 內、目的地為只在網路 192.168.200.0/24 內的 IP 封包存取 NetA。此 ACL 結尾有隱含的 deny all 子句,因此會拒絕所有其他流量經由 R1 的乙太網路 0 傳入。
R1
hostname R1
!
interface ethernet0
ip access-group 101 in
!
access-list 101 permit ip 192.168.10.0 0.0.0.255 192.168.200.0 0.0.0.255
注意:在命令access-list 101 permit ip 192.168.10.0 0.0.0.255 192.168.200.0 0.0.0.255中,「0.0.0.255」是網路192.168.10.0(掩碼為255.255.255.0)的反掩碼。ACL 會使用反向遮罩來瞭解網路位址中有多少位元需要比對。在上表中,ACL 會允許來源位址在 192.168.10.0/24 網路中、目的地位址在 192.168.200.0/24 網路之所有主機的封包。
請參閱設定 IP 存取清單的遮罩區段,以取得更多有關網路位址遮罩的資訊,並瞭解如何計算 ACL 所需的反向遮罩。
拒絕 Telnet 流量(TCP,連接埠 23)
為了滿足更高的資安標準,您可以停用公用網路對您私人網路的Telnet存取許可權。下圖顯示從NetB(公用)到NetA(私人)的Telnet流量如何遭到拒絕(但允許NetA對NetB發起和建立Telnet作業階段),而允許所有其他IP流量。
Telnet 會使用 TCP,連接埠 23。此組態顯示,所有目的地為 NetA 連接埠 23 的所有 TCP 流量都會遭到封鎖,但允許所有其他 IP 流量通過。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 deny tcp any any eq 23
access-list 102 permit ip any any
僅允許內部網路發起 TCP 作業階段
下圖顯示,來源為 NetA 且目的地為 NetB 的 TCP 流量會允許通過,但來源為 NetB 且目的地為 NetA 的 TCP 流量會遭到拒絕。
在此範例中,ACL 的用途如下:
此組態會允許資料包透過 R1 的介面乙太網路 0 傳入,但資料包必須符合以下條件:
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any any gt 1023 established
由於 IP 服務的大多數公認連接埠都使用小於 1023 的值,因此目的地連接埠小於 1023 或是未設定 ACK/RST 位元的任何資料包都會遭到 ACL 102 拒絕。因此,NetB的主機發起TCP連線並以小於1023的連線埠號碼傳送第一個TCP封包(未設定同步/啟動封包(SYN/RST)位元)時,就會遭到拒絕,且TCP作業階段會失敗。從 NetA 發起且目的地為 NetB 的 TCP 作業階段會獲得允許,因為它們已針對傳回封包設定 ACK/RST 位元,而且使用的連接埠值大於 1023。
請參閱 RFC 1700 以取得完整的連接埠清單。
拒絕 FTP 流量(TCP,連接埠 21)
下圖顯示,來源為NetB且目的地為NetA的FTP(TCP,連線埠21)和FTP資料(連線埠20)流量會遭到拒絕,但所有其他IP流量會允許通過。
FTP 使用連接埠 21 和連接埠 20。目的地為連接埠 21 和連接埠 20 的 TCP 流量會遭到拒絕,但所有其他流量會明確地允許通過。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 deny tcp any any eq ftp
access-list 102 deny tcp any any eq ftp-data
access-list 102 permit ip any any
允許 FTP 流量(主動式 FTP)
FTP 可以在兩種不同模式下運作,分別是主動和被動。
FTP 在主動模式下運作時,FTP 伺服器會將連接埠 21 用來進行控制,並將連接埠 20 用於資料。FTP 伺服器 (192.168.1.100) 位於 NetA 中。下圖顯示,來源為NetB且目的地為FTP伺服器(192.168.1.100)的FTP(TCP,連線埠21)和FTP資料(連線埠20)流量會允許通過,但所有其他IP流量會遭到拒絕。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any host 192.168.1.100 eq ftp
access-list 102 permit tcp any host 192.168.1.100 eq ftp-data established
!
interface ethernet1
ip access-group 110 in
!
access-list 110 permit host 192.168.1.100 eq ftp any established
access-list 110 permit host 192.168.1.100 eq ftp-data any
允許 FTP 流量(被動式 FTP)
FTP 可以在兩種不同模式下運作,分別是主動和被動。
FTP 在被動模式下運作時,FTP 伺服器會將連接埠 21 用來進行控制,並將大於或等於 1024 的動態連接埠用於資料。FTP 伺服器 (192.168.1.100) 位於 NetA 中。此圖顯示,來源為NetB且目的地為FTP伺服器(192.168.1.100)的FTP(TCP,連線埠21)和FTP資料(連線埠大於或等於1024)流量會允許通過,但所有其他IP流量會遭到拒絕。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any host 192.168.1.100 eq ftp
access-list 102 permit tcp any host 192.168.1.100 gt 1023
!
interface ethernet1
ip access-group 110 in
!
access-list 110 permit host 192.168.1.100 eq ftp any established
access-list 110 permit host 192.168.1.100 gt 1023 any established
允許 Ping (ICMP)
下圖顯示,來源為NetA且目的地為NetB的ICMP會允許通過,但來自NetB且目的地為NetA的ping會遭到拒絕。
此組態僅允許回應(ping 回覆)封包透過乙太網路 0 介面從 NetB 傳入 NetA 。但是,當 ping 來源是 NetB 且目的地為 NetA 時,此組態會封鎖所有回應請求 ICMP 封包。因此,NetA 中的主機可以 ping NetB 中的主機,但 NetB 中的主機無法 ping NetA 中的主機。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit icmp any any echo-reply
允許 HTTP、Telnet、郵件、POP3、FTP
下圖顯示,只有HTTP、Telnet、簡易郵件傳送通訊協定(SMTP)、POP3和FTP流量會允許通過,來源為NetB且目的地為NetA的其餘流量則遭到拒絕。
此組態允許目的地連接埠值與 WWW(連接埠 80)、Telnet(連接埠 23)、SMTP(連接埠 25)、POP3(連接埠 110)、FTP(連接埠 21)或 FTP 資料(連接埠 20)相符的 TCP 流量通過。請注意,ACL 結尾的隱含 deny all 子句會拒絕所有其他與 permit 子句不相符的流量。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit tcp any any eq www
access-list 102 permit tcp any any eq telnet
access-list 102 permit tcp any any eq smtp
access-list 102 permit tcp any any eq pop3
access-list 102 permit tcp any any eq 21
access-list 102 permit tcp any any eq 20
允許 DNS
下圖顯示,只有網域名稱系統(DNS)流量會允許通過,而來源為NetB且目的地為NetA的其餘流量則遭到拒絕。
此組態會允許目的地連接埠值 53 的 TCP 流量通過。ACL 結尾的隱含 deny all 子句會拒絕所有其他與 permit 子句不相符的流量通過。
R1
hostname R1
!
interface ethernet0
ip access-group 102 in
!
access-list 102 permit udp any any eq domain
access-list 102 permit udp any eq domain any
access-list 102 permit tcp any any eq domain
access-list 102 permit tcp any eq domain any
允許路由更新
將傳入 ACL 套用到介面時,請確保不會過濾掉路由更新。請使用以下清單中的相關 ACL 來允許路由通訊協定封包:
輸入以下命令可允許路由資訊通訊協定 (RIP):
access-list 102 permit udp any any eq rip
輸入以下命令可允許內部閘道路由通訊協定 (IGRP):
access-list 102 permit igrp any any
輸入以下命令可允許增強型 IGRP (EIGRP):
access-list 102 permit eigrp any any
輸入以下命令可允許開放最短路徑優先 (OSPF):
access-list 102 permit ospf any any
輸入以下命令可允許邊界閘道通訊協定 (BGP):
access-list 102 permit tcp any any eq 179
access-list 102 permit tcp any eq 179 any
依照 ACL 為流量偵錯
debug 命令的使用需要分配記憶體和處理能力等系統資源,而且在極端情況下可能會導致負荷過重的系統停滯。請謹慎使用 debug 命令。使用ACL可選擇性定義需要檢查的流量,以減少debug命令的影響。此類組態不會過濾任何封包。
此組態只會對主機 10.1.1.1 和 172.16.1.1 之間的封包啟用 debug ip packet 命令。
R1(config)#access-list 199 permit tcp host 10.1.1.1 host 172.16.1.1
R1(config)#access-list 199 permit tcp host 172.16.1.1 host 10.1.1.1
R1(config)#end
R1#debug ip packet 199 detail
IP packet debugging is on (detailed) for access list 199
請參閱有關 Debug 命令的重要資訊以瞭解其他有關 debug 命令的資訊。
請參閱瞭解 Ping 和 Traceroute 命令的使用 Debug 命令區段,以瞭解其他有關透過 debug 命令使用 ACL 的資訊。
MAC 位址過濾
您可以過濾具有特定 MAC 層站台來源或目的地位址的訊框。系統可以設定任意數量的位址,而且不會減損效能。若要依照 MAC 層位址進行過濾,請在全域組態模式下使用以下命令:
Router#config terminal
Router(config)#bridge irb
Router(config)#
bridge 1 protocol ieee
Router(config)#
bridge 1 route ip
將網橋協定應用於需要過濾流量的介面,以及使用命令bridge-group <group number> {input-address-list <ACL number>建立的訪問清單 | output-address-list <ACL number>}:
Router#config terminal
Router(config-if)#
interface fastEthernet0/0
Router(config-if)#
no ip address
Router(config-if)#
bridge-group 1 input-address-list 700
Router(config-if)#
exit
建立橋接虛擬介面,並套用指派給實體乙太網路介面的IP位址:
Router#config terminal
Router(config-if)#
int bvi1
Router(config-if)#
ip address 192.168.1.1 255.255.255.0
Router(config-if)#
exit
Router(config)#
access-list 700 deny aaaa.bbbb.cccc 0000.0000.0000
Router(config)#
access-list 700 permit 0000.0000.0000 ffff.ffff.ffff
透過此組態,路由器只會允許在存取清單 700 上設定的 MAC 位址。使用訪問清單命令access-list <ACL number> deny <mac address> 0000.0000.0000,拒絕無法訪問的MAC地址,然後允許使用其餘地址(例如,aaaa.bbbb.cccc)。
注意:請在存取清單中為每個MAC位址建立一行。
驗證
目前沒有適用於此組態的驗證程序。
疑難排解
目前沒有特定資訊可用於對此組態進行疑難排解。
相關資訊