1. 程式人生 > >淺談ACL(訪問控制列表)

淺談ACL(訪問控制列表)

精準 掩碼 數據包 過濾 列表 OSI七層 匹配 acc seq

ACL(訪問控制列表)是應用在路由器接口的指令列表。這些指令列表用來告訴路由器,那些數據包可以接收,那些數據包需要拒絕。
基本原理為:ACL使用包過濾技術,在路由器上讀取OSI七層模型的第三層及第四層包頭中的信息,如源地址、目的地址、源端口、目的端口等,根據預先定義好的規則,對包進行過濾,從而達到訪問控制的目的。
ACL通過在路由器接口處控制數據包是轉發還是丟棄來過濾通信流量。
路由器根據ACL中指定的條件來檢測通過路由器的數據包,從而決定是轉發還是丟棄數據包。
ACL有三種類型:
1、標準ACL:根據數據包的源IP地址來允許或拒絕數據包。標準ACL的訪問控制列表號是1~99。
2、擴展ACL:根據數據包的源IP地址、目的IP地址、指定協議、端口和標誌來允許或拒絕數據包。擴展ACL的訪問控制列表號是100~199.
3、命名ACL允許在標準ACL和擴展ACL中使用名稱代替表號。
ACL依靠規則對數據包執行檢查,而這些規則通過檢查數據包中的指定字段來允許或拒絕數據包。ACL通過五個元素來執行檢查,這些元素位於IP頭部和傳輸層頭部中。他們分別是源IP地址、目標IP地址、協議、源端口及目標端口。
技術分享圖片
如果對接口應用了ACL,也就是說該接口應用了一組規則,那麽路由器將對數據包應用該組規則進行檢查
技術分享圖片
1、如果匹配了第一條規則,則不再往下檢查,路由器將決定該數據包允許通過或拒絕通過。
2、如果不匹配第一條規則,則依次往下檢查,直到有任何一條規則匹配,路由器將決定該數據包允許通過或拒絕通過。
3、如果最後沒有任何一條規則匹配,則路由器根據默認規則將丟棄數據包。
所以,數據包要麽被允許,要麽被拒絕。
在ACL中,各規則的放置順序也是很重要的。一旦找到了某一匹配規則,就結束比較過程,不再檢查以後的其他規則。
創建標準ACL語法:
Router(config)#access-list 1~99 { permit | deny } 源網段地址或網段(若源地址為主機,則在地址前面需要加“host”;若源地址為網段,則要在網段地址後面加反掩碼,如/24的反掩碼就是0.0.0.255。

例如:Router(config)#access-list 1 permit 192.168.1.0 0.0.0.255 #表示為允許192.168.1.0/24網段地址的流量通過

Router(config)#access-list 1 permit host 192.168.2.1 #表示為允許主機192.168.2.1的流量通過。

每一個ACL都有一條隱含的拒絕語句,可以拒絕所有流量,所以在做ACL規則時建議以拒絕某個網段或主機的流量通過,然後再允許所有流量通過,如下:

Router(config)#access-list 1 deny host 192.168.1.2 #拒絕192.168.1.2網段的流量通過

Router(config)#access-list 1 permit any #允許所有主機的流量通過

當以上ACL規則應用到接口上時,效果為除了192.168.1.2的流量外都可以通過。

源地址可以用 “any”來表示為所有主機。

刪除ACL的規則時,在規則前加“no”即可,如:Router(config)# no access-list 1 #刪除表號為1的規則
技術分享圖片
一個ACL可以配置多條規則,但是一個接口,一個方向只能應用一個ACL。

配置好的ACL規則應用到接口上的語法如下:

Router(config)#int f0/1
Router(config-if)# ip access-list 1 in/out #把表號1的規則應用到進站(in)或出站(out)方向

擴展ACL的配置語法:
語法1:
Router(config)# access-list 101 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255 #創建一個表號為101的ACL,規則為允許192.168.1.0訪問192.168.2.0網段的流量通過

Router(config)# access-list 101 deny ip any any #拒絕所有流量通過

以上規則最終應用到接口上的效果為拒絕除了192.168.1.0訪問192.168.2.0的數據包以外的所有數據包通過

語法2:
Router(config)# access-list 101 deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.2 eq 21 #拒絕網絡192.168.1.0訪問主機192.168.2.2,tcp端口號21的流量通過

Router(config)# access-list 101 permit ip any any #允許所有流量通過

以上擴展ACL的規則為:拒絕網絡192.168.1.0訪問主機192.168.2.2,tcp端口號21的流量通過,而允許其他任何流量通過。其中命令最後的“eq”為等於XX端口號還有 lt (小於)、gt(大於)、neq(不等於)幾個選項。

擴展ACL與標準ACL的區別就是擴展ACL可以基於端口號、目標地址、協議,來更加精準的控制流量是允許還是拒絕通過。
刪除擴展ACL的規則的語句和刪除標準ACL一致。如:Router(config)# no access-list 101 #刪除表號為101的擴展ACL規則

命名ACL的配置
命名ACL在管理及維護方面更加方便,同時也支持友好的名稱作為ACL名稱,而不局限於使用ACL編號。
配置命名ACL的語法如下:
1、創建命名ACL:

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

2、如果是標準命名ACL,命令語法如下:

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

上述語法中Sequence-Number決定ACL語句在ACL列表中的位置

例如:配置規則,允許來自主機192.168.1.1/24的流量通過,而拒絕其他流量,標準命名ACL命令如下:
R1(config)#ip access-list standard test #創建名為test的標準命名ACL
R1(config-std-nacl)#permit host 192.168.1.1 #允許主機192.168.1.1的流量通過
R1(config-std-nacl)#deny any #拒絕其他流量
若退出後還要繼續修改規則,可直接在全局模式下執行:Router(config)# ip access-list standard test進入ACL命名ACL組,繼續寫入如:
Router(config-std-nacl)#15 permit host 192.168.2.1
然後查看:
Standard IP access list cisco
10 permit 192.168.1.1
15 permit 192.168.2.1
20 deny any

若要刪除ACL中某條規則的可以執行“no+規則編號”,如想刪除上面規則編號為10 的可以執行“no 10”
若要刪除上面已建立的命名ACL,命令語法如下:
R1(config)# no ip access-list standard test
創建擴展命名的ACL語法如下:

R1(config)#ip access-list extended test #創建名為test的擴展命名ACL

Router(config-ext-nacl)# deny tcp 192.168.1.0 0.0.0.255 host 192.168.2.2 eq 21 #禁止網絡192.168.1.0訪問主機192.168.2.2的21端口。其中以上命令最後的“eq”命令字的作用是等於XX端口號還有 lt (小於)、gt(大於)、neq(不等於)幾個選項。

Router(config-ext-nacl)# permit ip any any #允許所有流量通過

以上規則的作用是禁止192.168.1.0網絡訪問主機192.168.2.2的21端口,而允許其他任何流量通過。

淺談ACL(訪問控制列表)