1. 程式人生 > >訪問控制列表ACL的配置與應用

訪問控制列表ACL的配置與應用

訪問控制列表 標準acl 擴展acl 楊書凡 命名acl

訪問控制列表(Access Control List,ACL)是應用在路由器接口的指令列表(即規則)。這些指令列表用來告訴路由器,哪些數據包可以接收,哪些數據包需要拒絕。其基本原理如下:ACL使用包過濾技術,在路由器上讀取OSI七層模型的第三層及第四層包頭中的信息,如源地址、目的地址、源端口、目的端口等,根據預先定義好的規則,對包進行過濾,從而達到訪問控制的目的。

ACL通過在路由器接口處控制數據包的轉發還是丟棄,從而過濾通信流量。路由器根據ACL中指定的條件來檢測通過路由器的數據包,從而決定是轉發還是丟棄數據包。


ACL的類型

ACL可分為以下三種類型:

標準ACL:檢查數據包的源地址。其結果基於源網絡/子網/主機IP地址,來決定允許還是拒絕轉發數據包。它使用1-99之間的數字作為表號。

擴展ACL:對數據包的源地址與目標地址均進行檢查。它也能檢查特定的協議、端口號以及其他參數。它使用100-199之間的數字作為表號。

命名ACL:命名訪問控制列表允許在標準和擴展訪問控制列表中使用名稱代替表號。具有靈活性,可以單獨添加、刪除單條ACL語句,而不必刪除整個ACL。


ACL的工作原理

ACL是一組規則的集合,它應用在路由器的某個接口上。對路由器接口而言,訪問控制列表有兩個方向:

出:已經過路由器的處理,正離開路由器接口的數據包。

入:已到達路由器接口的數據包,將被路由器處理。

如果對接口應用了訪問控制列表,也就是說該接口應用了一組規則,那麽路由器將對數據包應用該組規則進行順序檢查。

(1)

如果匹配第1條規則,則不再往下檢查,路由器將決定該數據包允許通過或拒絕通過。

(2)如果不匹配第1條規則,則依次往下檢查,直到有任何一條規則匹配,路由器將決定該數據包允許通過或拒絕通過。

(3)如果最後沒有任何一條規則匹配,則路由器根據默認的規則將丟棄該數據包。

由此可見,數據包要麽被允許,要麽被拒絕。

技術分享

根據以上的檢查規則可知,在ACL中,各規則的放置順序是很重要的。一旦找到了某一匹配規則,就結束比較過程,不再檢查以後的其他規則。




標準ACL的配置

1. 創建ACL

創建標準ACL的命令語法如下:

 Router(config)# access-list access-list-number {permit | deny} source [source-wildcard] 
 
 access-list-number:訪問控制列表表號,對於標準ACL來說,該表號是1-99中的一個數字
 permit|deny:如果滿足測試條件,則允許/拒絕該通信流量
 source:數據包的源地址,可以是主機地址,也可以是網絡地址。
 source-wildcard:通配符掩碼,也叫做反碼。在用二進制0和1表示時,如果某位為1,表明這一位不需要進行匹配操作,如果為0,則表明這一位需要嚴格匹配

例如:允許來自網絡192.168.1.0/24和主機192.168.2.2的流量通過,標準ACL命令如下

  Router(config)# access-list 1 permit 192.168.1.0  0.0.0.255   
  Router(config)# access-list 1 permit 192.168.2.2  0.0.0.0

192.168.1.0/24的子網掩碼是255.255.255.0,那麽其反碼可以通過255.255.255.255減去255.2553.255.0得到0.0.0.255。

同樣,主機192.168.2.2的子網掩碼是255.255.255.255,那麽其反碼可以通過255.255.255.255減去255.255.255.255得到0.0.0.0。


(1)隱含的拒絕語句

每一個ACL都有一條隱含的拒絕語句,拒絕所有流量,語句如下:

Router(config)# access-list 1 deny 0.0.0.0 255.255.255.255

(2)關鍵字host、any

在上面的例子中,192.168.2.2 0.0.0.0可以用“host 192.168.2.2”來表示,相應的ACL可改寫為:

Router(config)# access-list 1 permit host 192.168.1.2

0.0.0.0 255.255.255.255可以使用關鍵字“any”來表示,相應的ACL可改寫為:

Router(config)# access-list 1 deny any

(3)刪除已建立的標準ACL

刪除語法如下:

Router(config)# no access-list access-list-number

對標準ACL來說,不能刪除單條ACL語句,只能刪除整個ACL。這意味著如果要改變一條或幾條ACL語句,必須先刪除整個ACL,然後再輸入所要的ACL語句。


2. 將ACL應用於接口

創建ACL後,只有將ACL應用於接口,ACL才會生效。命令語法如下

 Router(config-if)# ip access-group access-list-number {in| out}

參數in|out:用來指示該ACL是應用到入站接口(in),還是出站接口(out)。

要在接口上取消ACL的應用,可以使用如下命令:

 Router(config-if)# no ip access-group access-list-number {in| out}

註意:每個方向上只能有一個ACL,也就是每個接口最多只能有兩個ACL:一個入方向ACL,一個出方向ACL。


3. 標準ACL的配置實例

如圖所示,要求配置標準ACL實現:禁止PC2訪問PC1,而允許其他所有流量

技術分享

配置步驟如下:

(1)分析在哪個接口應用標準ACL

標準ACL既可以應用在入站接口,也可以應用在出站接口,二者有何不同呢?

路由器對進入的數據包先檢查入訪問控制列表,對允許傳輸的數據包才查詢路由表,而對於外出的數據包先查詢路由表,確定目標接口後才查看出訪問控制列表。因此應該盡量把訪問控制列表應用到入站接口,因為它比應用到出站接口效率更高:將要丟棄的數據包早路由器進行路由表查詢出路之前就拒絕掉。

(2)配置全網互通(略)

(3)配置標準ACL並應用到接口上。

 Router(config)# access-list 1 deny host 192.168.2.2  
 Router(config)# access-list 1 permit any             
 Router(config)# int f0/0                   
 Router(config-if)# ip access-group 1 in



(4)查看並驗證配置

使用show access-list命令查看ACL配置

Router# show access-lists

驗證配置

PC2不能ping通主機PC1,但PC3可以ping通主機PC1



擴展ACL的配置

1. 創建ACL

創建擴展ACL的命令語法如下:

 Router(config)# access-list access-list-number {permit|deny} protocol {source source-wildcard destination destination-wildcard} [operator operan]
 
 accessi-list-number:ACL表號,對於擴展ACL來說,是100-199的一個數字
 protocol:用來指定協議,如IP、TCP、UDP、ICMP等
 source、destination:源、目的,分別用來標識源地址、目的地址
 source-wildcard、destination-wildcard:反碼、目的反碼
 operator operan:lt(小於)、gt(大於)、eq(等於)、neq(不等於)一個端口

案例1:允許網絡192.168.1.0/24訪問網絡192.168.2.0/24的IP流量通過,而拒絕其它任何流量

Router(config)# access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
Router(config)# access-list 1.0 deny ip any any

案例2:拒絕網絡192.168.1.0/24訪問FTP服務器192.168.2.2/24的IP流量通過,而允許其他任何流量

Router(config)# access-list 102 deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.2 eq 21
Router(config)# access-list 102 permit ip any any

案例3:禁止網絡192.168.1.0/24中的主機ping通服務器192.168.2.2/24,而允許其他任何流量

Router(config)# access-list 103 deny icmp 192.168.1.0 0.0.0.255 host 192.168.2.2 echo
Router(config)# access-list 103 permit ip any any

2. 將ACL應用於接口

與標準ACL一樣,只有將ACL應用於接口,ACL才生效。配置命令與標準ACL一樣(略)


註意:擴展ACL和標準ACL一樣,也不能刪除單條ACL語句,只能刪除整個ACL



3. 擴展ACL的配置實例

如圖所示,要求配置擴展ACL實現:允許PC1訪問Web服務器的WWW服務,而禁止主機PC1訪問WWW服務器其他任何服務;允許主機PC1訪問網絡192.168.2.0/24

技術分享

配置步驟如下:

(1)分析在哪個接口應用擴展ACL

與標準ACL一樣,應盡量把ACL應用到入口。

最好把ACL應用到路由器R1的入口處,否則會浪費R2、R3的資源。也就是說,應該把ACL應用於離地址最近的路由器上


(2)配置全網互通(略)

(3)配置擴展ACL並應用到接口上。

R1(config)# access-list 101 permit tcp host 192.168.1.1 host 192.168.3.1 eq 80
R1(config)# access-list 101 deny ip host 192.168.1.1 host 192.168.3.1
R1(config)# access-list 101 permit ip host 192.168.1.1 192.168.2.0 0.0.0.255
R1(config)# int f0/0
R1(config-if)# ip access group 101 in


(4)查看並驗證配置

使用show access-list命令查看ACL配置

Router# show access-lists



命名ACL的配置

1. 創建ACL

創建命名ACL的命令語法如下:

 Router(config)# ip access-list {standard|extended} access-list-name
 
 standard|extended:決定是標準命名ACL、擴展命名ACL
 access-list-name:有字母、數字組成的字符串

(1)如果是標準命名ACL,命令語法如下:

Router(config-std-nacl)# [Sequence-Number] {permit|deny} source [source-wildcard]

(2)如果是擴展命名ACL,命令語法如下:

Router(config-ext-nacl)# [Sequence-Number] {permit|deny} source [source-wildcard destination destination-wildcard] [operator operan]
Sequence-Number:可選參數,表明配置的ACL語句在ACL中的位置,默認第一條為10,第二條20…

案例1:允許來自主機192.168.1.1/24的流量通過,而拒絕其它流量,使用標準命名ACL

Router(config)# ip access-list standard yangshufan
Router(config-std-nacl)# permit host 192.168.1.1    //默認ACL語句序列號為10
Router(config-std-nacl)# deny any                  //默認ACL語句序列號為20

更改需求,除了192.168.1.1/24外,還允許192.168.2.1/24的流量通過

Router(config)# ip access-list standard yangshufan
Router(config-std-nacl)# 15 permit host 192.168.2.1   //配置ACL語句序列號為15

案例2:拒絕網絡192.168.1.0/24訪問FTP服務器192.168.2.2/24的流量通過,而允許其他任何流量,使用擴展命名ACL

Router(config)# ip access-list extended yangshufan
Router(config-ext-nacl)# deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.2 eq 21
Router(config-ext-nacl)# permit ip any any


2. 刪除ACL

對於命名ACL,可以刪除單條ACL語句,而不必刪除整個ACL。並且,ACL語句可以有選擇的插入到列表某個位置,是ACL配置更加靈活方便

刪除已建立的命名ACL,命名語法如下:

Router(config)# no ip access-list {standard|extended} access-list-name

刪除某一ACL語句,有兩種方法:

例如:在案例1刪除ACL語句“permit host 192.168.1.1”

Router(config)# ip access-list standard yangshufan
Router(config-std-nacl)# no 10

還可以采用以下命令:

Router(config)# ip access-list standard yangshufan
Router(config-std-nacl)# no permit host 192.168.1.1


2. 將ACL應用於接口

創建命名ACL後,也必須將ACL應用於接口,ACL才生效。命令語法如下:

Router(config-if)# ip access-group access-list-name {in| out}

要在接口上取消ACL的應用,可以使用如下命令:

 Router(config-if)# no ip access-group access-list-name {in| out}


3. 擴展ACL的配置實例

(1)公司新建了一臺服務器(IP地址:192.168.100.100),出於安全考慮,要求如下:

* 192.168.1.0/24網段中除了192.168.1.5-192.168.1.8外,其他地址都不能訪問服務器

* 公司的其他網段都可以訪問服務器

配置ACL

Router(config)# ip access-list extended yangshufan
Router(config-ext-nacl)# permit ip host 192.168.1.5 host 192.168.100.100
Router(config-ext-nacl)# permit ip host 192.168.1.6 host 192.168.100.100
Router(config-ext-nacl)# permit ip host 192.168.1.7 host 192.168.100.100
Router(config-ext-nacl)# permit ip host 192.168.1.8 host 192.168.100.100
Router(config-ext-nacl)# deny ip 192.168.1.0 0.0.0.255 host 192.168.100.100
Router(config-ext-nacl)# permit any 192.168.100.100

使用show access-lists命令查看配置的ACL信息

技術分享

(2)網絡運行一段時間後,由於公司人員調整,需要變更訪問服務器的ACL,要求如下:

* 不允許192.168.1.6和192.168.1.8主機訪問服務器

* 允許192.168.1.10主機訪問服務器

ACL變更配置:

Router(config)# ip access-list extended yangshufan
Router(config-ext-nacl)# no 20
Router(config-ext-nacl)# no 40
Router(config-ext-nacl)# 15 permit ip host 192.168.1.10 host 192.168.100.100

再次查看配置的ACL信息,結果如下:

技術分享

註意:如果不指定序列號,新添加的ACL語句被添加到列表的末尾


本文出自 “楊書凡” 博客,請務必保留此出處http://yangshufan.blog.51cto.com/13004230/1958558

訪問控制列表ACL的配置與應用