1. 程式人生 > >ACL訪問控制列表工作原理及詳解

ACL訪問控制列表工作原理及詳解

訪問控制列表(ACL)是應用在路由器介面的指令列表(即規則)。這些指令列表用來告訴路由器,那些資料包可以接受,那些資料包需要拒絕。

訪問控制列表(ACL)的工作原理

ACL使用包過濾技術,在路由器上讀取OSI七層模型的第3層和第4層包頭中的資訊。如源地址,目標地址,源埠,目標埠等,根據預先定義好的規則,對包進行過濾,從而達到訪問控制的目的。

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

出:已經過路由器的處理,正離開路由器的資料包。

入:已到達路由器介面的資料包。將被路由器處理。

如果對路由器的某介面應用了ACL,那麼路由器對資料包應用該組規則進行順序匹配,使用匹配即停止的,不匹配則使用預設規則的方式來過濾資料包。如下圖:

訪問控制列表的型別

標準訪問控制列表:根據資料包的源IP地址來允許或拒絕資料包,標準訪問控制列表的訪問控制列表號是1-99。

擴充套件訪問控制列表:根據資料包的源IP地址,目的IP地址,指定協議,埠和標誌,來允許或拒絕資料包。擴充套件訪問控制列表的訪問控制列表號是100-199

配置標準控制列表

建立標準ACL的語法如下:

Router(config)#access-list access-list-number {permit|deny} source [souce-wildcard]

下面是命令引數的詳細說明

access-list-number:訪問控制列表號,標準ACL取值是1-99。

permit|deny:如果滿足規則,則允許/拒絕通過。

source:資料包的源地址,可以是主機地址,也可以是網路地址。

source-wildcard:萬用字元掩碼,也叫做反碼,即子網掩碼去反值。如:正常子網掩碼255.255.255.0取反則是0.0.0.255。

刪除已建立的標準ACL語法如下:

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

列如:建立一個ACL允許192.168.1.0網段的所有主機。

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

列如:建立一個ACL允許某個主機。

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

列如:建立一個預設ACL拒絕所有主機訪問。

Router(config)#access-list 1 deny any

注意:上述中的關鍵字host可以指定一個主機地址,而不用寫子網反碼,而any可以代表所有主機。

配置擴充套件訪問控制列表

建立擴充套件的ACL語法如下:

Router(config)#access-list access-list-number {permit|deny} protocol {source souce-wildcard destination destination-wildcard} [operator operan]

下面是命令引數的詳細說明

access-list-number:訪問控制列表號,擴充套件ACL取值是100-199。

permit|deny:如果滿足規則,則允許/拒絕通過。

protocol:用來指定協議的型別,如IP,TCP,UDP,ICMP等。

source、destination:源和目的,分別用來標示源地址和目的地址。

souce-wildcard、destination-wildcard:子網反碼,souce-wildcard是源反碼,destination-wildcard是目標反碼。

operator operan:lt(小於)、gt(大於)、eq(等於)、neq(不等於)一個埠號。

刪除已建立的擴充套件ACL語法如下:

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

列如:允許192.168.1.0/24訪問192.168.2.0/24,而拒絕其他所有主機訪問。

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 101 deny ip any any

列如:拒絕網路192.168.1.0/24訪問FTP伺服器192.168.2.100/24,而允許其他主機訪問。

Router(config)#access-list 102 deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.100 eq 21

Router(config)#access-list 102 permit ip any any

列如:禁止網路192.168.1.0/24中的主機ping同伺服器192.168.2.200/24,而允許其它主機訪問。

Router(config)#access-list 103 deny icmp 192.168.1.0 0.0.0.255 host 192.168.1.200 echo

Router(config)#access-list 103 permit ip any any

將建立好的ACL應用與路由器的介面上

不管是標準ACL還是擴充套件ACL只有將建立好的ACL應用與路由器的介面上才算是有效的。語法如下:

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

引數解釋如下:

access-list-number:建立ACL時指定的訪問控制列表號

in:應用到入站介面。

out:應用出站介面。

取消介面上的ACL應用可以使用如下命令:

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

可以使用show access-lists命令檢視ACL配置。

注意:不管是標準ACL或者是擴充套件ACL,只要應用了該規則就不可以在向裡面新增新的規則了,只能是刪除整個ACL。這樣很不方便我們管理ACL,那麼我們改這麼辦呢?下面我們來講解命名訪問控制列表。

配置命名訪問控制列表

所謂的命名控制列表就是給控制列表取個名字,而不是想上面所述的使用訪問控制列表號。我們通過命令訪問控制列表可以很方便的管理ACL規則,可以隨便新增和刪除規則,而無需刪除整個訪問控制列表了。

建立命名訪問控制列表的語法如下:

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

下面是命令引數的詳細說明

standard:建立標準的命名訪問控制列表。

extended:建立擴充套件的命名訪問控制列表。

access-list-name:命名控制列表的名字,可以是任意字母和數字的組合。

標準命名ACL語法如下:

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

擴充套件命名ACL語法如下:

Router(config-ext-nacl)#[Sequence-Number] {permit|deny} protocol {source souce-wildcard destination destination-wildcard} [operator operan]

無論是配置標準命名ACL語句還是配置擴充套件命名ACL語句,都有一個可選引數Sequence-Number。Sequence-Number引數表明了配置的ACL語句在命令ACL中所處的位置,預設情況下,第一條為10,第二條為20,以此類推。Sequence-Number可以很方便地將新新增的ACL語句插於到原有的ACL列表的指定位置,如果不選擇Sequence-Number,預設新增到ACL列表末尾並且序列號加10。

刪去以建立的命名ACL語法如下:

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

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

如果要刪除某一ACL語句,可以使用“no Sequence-Number”或“no ACL”語句兩種方式。

列如:將一條新新增的ACL加入到原有標準命名ACL的序列15的位置。內容為允許主機192.168.1.1/24訪問Internet。

Router(config)#ip access-list standard test1

Router(config-std-nacl)#15 permit host 192.168.1.1

列如:建立擴充套件命名ACL,內容為拒絕192.168.1.0/24訪問FTP伺服器192.168.2.200/24,允許其他主機。

Router(config)#ip access-list extended test2

Router(config-ext-nacl)#deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.200 eq 21

Router(config-ext-nacl)#permit ip any any

將命名ACL應用於介面語法如下:

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

取消命名ACL的應用語法如下:

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