32-訪問控制列表(ACL)

1. ACL技術

訪問控制列表(Access Control Lists,簡稱ACL)是一種包過濾技術(實際上就是一種防火牆技術),應用在防火牆或路由器等網絡設備,然後路由器會根據ACL指令是否允許或者拒絕轉發特定的數據。ACL技術同時也是一種基本的網絡安全技術,可用於實現網絡流量限制,網絡訪問控制,提高網絡安全性。

 

2. ACL實驗部署

關於R1,R2,R3設備的IP地址配置,大家可以根據上圖進行配置,這裏就直接跳過了......  然後分別給R1,R2,R3設備添加靜態路由信息。

 

 

R1設備添加靜態路由器,配置如下:

R1(config)#
R1(config)#ip route 3.3.3.3 255.255.255.255 12.1.1.2
R1(config)#ip route 33.3.3.3 255.255.255.255 12.1.1.2
R1(config)#
R1(config)#ip route 23.1.1.0 255.255.255.0 12.1.1.2
R1(config)#

 

R2設備添加靜態路由器,配置如下:

R2(config)#ip route 192.168.1.0 255.255.255.0 12.1.1.1
R2(config)#ip route 192.168.2.0 255.255.255.0 12.1.1.1
R2(config)#
R2(config)#ip route 3.3.3.3 255.255.255.255 23.1.1.3
R2(config)#ip route 33.3.3.3 255.255.255.255 23.1.1.3

 

 

R3設備添加靜態路由器,配置如下:

R3(config)#ip route 12.1.1.0 255.255.255.0 23.1.1.2
R3(config)#ip route 192.168.1.0 255.255.255.0 23.1.1.2
R3(config)#ip route 192.168.2.0 255.255.255.0 23.1.1.2
R3(config)#

 

測試R1和R3設備的網絡連通性:

R3#ping 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 28/36/44 ms
R3#ping 192.168.2.1



R1#ping 3.3.3.3

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 40/42/48 ms

 

 

R2用於模擬防火牆設備部署ACL技術要求192.168.1.0/24網段不能訪問外網,其他網段可以正常訪問外網,配置如下:

//這條命令的意思是拒絕源地址爲192.168.1.0網段的數據包通過
R2(config)#access-list 1 deny 192.168.1.0 0.0.0.255
//允許其他網段的數據包通過
R2(config)#access-list 1 permit any
//將配置好的ACL指令應用到f0/0接口中
R2(config)#int f0/0
R2(config-if)#ip access-group 1 in
R2(config-if)#exit
R2(config)#

這裏我們使用編號ACL技術,當在R2設備上這樣配置時:access-list 1 deny 192.168.1.0 0.0.0.255,路由器在收到源地址爲192.168.1.0網段的數據包時就會按照訪問控制列表(ACL)的指令執行,該數據報會被拒絕通過。ip access-group 1 in命令表示流量的出口方向,也就是f0/0口in方向的數據流量,這條ACL指令就會應用到f0/0接口中。

 

 

測試網絡連通性:

R1#ping 3.3.3.3 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
UUUUU
Success rate is 0 percent (0/5)
R1#
R1#
R1#ping 3.3.3.3 source 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 96/99/108 ms
R1#

當R2設備部署好ACL技術後,可以看到當192.168.1.0網段訪問外網時是不通的,U表示Unreachable,即數據不可達或者被禁止通過。

 

但是192.168.2.0網段依然是可以訪問外網的,編號標準 ACL 可以實現最基本的訪問限制和安全管理,但是對於一些限制要求比較高的場景下,例如根據目的地址,端口號和協議類型等,編號ACL就無法勝任,因爲編號ACL只能基於源ip地址進行過濾數據流量。

 

注意:每個接口,每個方向,每種協議,只能設置一個訪問控制列表(ACL)。

 

3. ACL的工作原理

通過前面的實驗已經瞭解ACL技術的作用,但是這還遠遠不夠,學習ACL的工作原理可以幫助我們配置功能更加強大的ACL,同時也方便排錯。

ACL指令是按順序執行的,先匹配第一行,再匹配第二行......直到最後一行。當找到一條符合條件的指令後,剩下的語句將不再執行。例如要求禁止192.168.0.0/16網段的192.168.1.0/24子網通過的話,假設當前ACL是這樣配置的:

R2(config)#access-list 1 permit 192.168.0.0 0.0.255.255 
R2(config)#access-list 1 deny 192.168.1.0 0.0.0.255

當R2設備收到192.168.0.32網段的數據包時,會順序匹配ACL列表中的第一行指令,發現該數據包是屬於192.168.0.0網段,ACL指令匹配成功,後面的指令將不再執行,那麼該網段的數據包將會被允許通過。爲了防止出現這種問題,調整好ACL指令的順序就顯得尤爲重要。

 

正確的寫法應該是這樣的:

R2(config)#access-list 1 deny 192.168.1.0 0.0.0.255
R2(config)#access-list 1 permit 192.168.0.0 0.0.255.255 

 

可以通過show命令查看訪問控制列表中的指令順序,如下所示:

R2#show access-lists 
Standard IP access list 1
    10 deny   192.168.1.0, wildcard bits 0.0.0.255
    20 permit any
R2#
R2#

 

 

4. ACL的種類

訪問控制列表分很多種,根據不同的應用場景有不同的訪問控制列表,一般分爲以下幾類:

1. 標準訪問控制列表(ACL):標準ACL是最簡單的一種,基於IP數據包的源地址進行數據過濾,其編號範圍是1-99或1300-1999,標準ACL的缺點是不易於管理,只能實現基本的限制和安全訪問。

 

 2. 擴展訪問控制列表(ACL):擴展ACL比標準ACL更加強大,具有靈活的可擴展性,它是基於協議類型,端口號,源IP地址和目的IP地址,TCP連接建立進行數據流量過濾,其編號範圍爲100-199或2000-2699。

 

3. 命名訪問控制列表(ACL):命名ACL可以通過自定義命名來代替數字編號,還可以刪除訪問控制列表中的某一條ACL指令,便於修改。通過ip access-list命令可以創建命名ACL。

 

前面的實驗已經學習過標準ACL技術,後面將繼續學習擴展ACL和命名ACL ......

 

5. 擴展ACL

還是基於前面的實驗,在R2設備上配置擴展ACL,例如現在的需求是允許內網192.168.1.0網段的ip地址訪問互聯網,但不允許192.168.2.0網段的IP地址訪問互聯網。

 

爲了完成這個要求,擴展ACL的具體配置如下:

R2#conf t
R2(config)#access-list 100 permit ip host 192.168.1.1 host 3.3.3.3
R2(config)#access-list 100 deny ip host 192.168.2.1 host 3.3.3.3
//把擴展編號ACL應用到f0/0口的in方向
R2(config)#int f0/0
R2(config-if)#ip access-group 100 in
R2(config)#exit
R2#

注意:in代表流量的進出方向,in代表進入f0/0口的流量。

 

 

Show命令查看R2設備的ACL指令列表,如下所示:

R2#show access-lists 
Extended IP access list 100
    10 permit ip 192.168.1.0 0.0.0.255 host 3.3.3.3
    20 deny ip 192.168.2.0 0.0.0.255 host 3.3.3.3
R2#

 

 

在R1設備上測試網絡連通性:

R1#ping 3.3.3.3 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 96/99/104 ms
R1#
R1#ping 3.3.3.3 source 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.1 
UUUUU
Success rate is 0 percent (0/5)
R1#

可以看到,擴展ACL比編號ACL更加強大,可以匹配源地址和目的地址,以及協議類型,能適應更爲複雜的網絡環境。

 

例如想要實現拒絕192.168.1.1發起的telnet的流量,可以在R2設備上這樣配置:

access-list 100 deny tcp host 192.168.1.1 any eq telnet

但擴展ACL同樣存在和編號ACL同樣的問題,那就是都不易於管理。

還有一個地方需要注意的是,ACL指令列表的末尾默認情況下都有一條deny any any 的語句,這條語句的意思是拒絕任何流量,如果你想允許其他流量通過時,爲了防止其他流量被拒絕通過,一般需要手動添加一條ACL語句:permit any any。

 

6. 命名ACL

命名ACL繼承了擴展ACL和標準ACL的靈活和可擴展性,同時還易於管理,可以增加或修改刪除某條ACL指令語句。

 

命名ACL的配置如下:

R2(config)#ip access-list ?
  extended    Extended Access List
  log-update  Control access list log updates
  logging     Control access list logging
  resequence  Resequence Access List
  standard    Standard Access List

配置命名ACL有以上幾種方式可以選擇,extended表示命名的擴展ACL,standard則表示命名的標準ACL。

 

 

命名的標準ACL

例如通過命名ACL方式來禁止192.168.1.0/24網段訪問外網,其他網段的可以訪問外網,在R2設備上配置命名的標準ACL:

R2(config)#
//標準ACL的命名爲DENY1
R2(config)#ip access-list standard DENY1
//拒絕192.168.1.0網段的流量通過
R2(config-std-nacl)#deny 192.168.1.0 0.0.0.255
R2(config-std-nacl)#permit any 
R2(config-std-nacl)#exit
R2(config)#int f0/0
R2(config-if)#ip access-group DENY1 in
R2(config-if)#exit
R2(config)#

 

Show命令查看ACL指令列表:

R2#show access-list  
Standard IP access list DENY1
//具體的ACL指令
    10 deny   192.168.1.0, wildcard bits 0.0.0.255
    20 permit any
R2#
R2#

Standard IP access list DENY1:說明這是一個命名的標準ACL,名字爲DENY1。

 

 

測試網絡連通性:

R1#ping 3.3.3.3 source 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 96/97/100 ms
R1#
R1#ping 3.3.3.3 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
UUUUU
Success rate is 0 percent (0/5)
R1#
R1#ping 33.3.3.3 sour
R1#ping 33.3.3.3 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 33.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
UUUUU
Success rate is 0 percent (0/5)
R1#

 

 

命名的擴展ACL

命名的擴展ACL的配置方式和標準ACL是類似的,現在通過命名的擴展ACL方式禁止192.168.2.0網段ping通外網的3.3.3.3地址,拒絕192.168.1.0網段telnet33.3.3.3的23號端口,具體配置如下:

R2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
//擴展ACL命名爲DENY2
R2(config)#ip access-list extended DENY2
//拒絕192.168.2.0網段ping通3.3.3.3
R2(config-ext-nacl)#deny icmp 192.168.2.0 0.0.0.255 host 3.3.3.3
//拒絕192.168.1.0網段遠程登錄33.3.3.3的23號端口
R2(config-ext-nacl)#deny tcp 192.168.1.0 0.0.0.255 host 33.3.3.3 eq 23
R2(config-ext-nacl)#permit ip any any 
R2(config-ext-nacl)#
R2(config)#int f0/0
R2(config-if)#ip access-group DENY2 in

需要注意的是:命名ACL在應用到接口中需要寫上自定義的名字,而不是編號。

 

R1遠程登錄R3設備,測試網絡連通性:

R1#telnet 33.3.3.3 /source-interface loopback 1
Trying 33.3.3.3 ... 
% Destination unreachable; gateway or host down

R1#
R1#ping 33.3.3.3 source 192.168.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 33.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 96/98/104 ms
R1#

從% Destination unreachable; gateway or host down結果來看,很明顯,192.168.1.1的遠程登錄請求被拒絕掉了,但是1.1依然可以ping通R3設備。

 

 

測試網絡連通性:

R1#ping 3.3.3.3 source 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.1 
UUUUU
Success rate is 0 percent (0/5)
R1#
R1#ping 33.3.3.3 source 192.168.2.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 33.3.3.3, timeout is 2 seconds:
Packet sent with a source address of 192.168.2.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 20/36/44 ms
R1#

另外,192.168.2.1也ping不通3.3.3.3地址的。

 

 

Show命令查看ACL狀態

R2#show ip access-lists 
Extended IP access list DENY2
    10 deny icmp 192.168.2.0 0.0.0.255 host 3.3.3.3 (15 matches)
    20 deny tcp 192.168.1.0 0.0.0.255 host 33.3.3.3 eq telnet (3 matches)
    30 permit ip any any (10 matches)
R2#
R2#

 

 

刪除一條ACL指令,再次查看ACL狀態:

R2(config)#ip access-list extended DENY2
R2(config-ext-nacl)#no 10
R2(config-ext-nacl)#exit
R2(config)#exit
R2#show ip access-lists 
Extended IP access list DENY2
    20 deny tcp 192.168.1.0 0.0.0.255 host 33.3.3.3 eq telnet (3 matches)
    30 permit ip any any (10 matches)
R2#

 

 

插入一條ACL指令,再次查看ACL狀態:

R2(config)#ip access-list extended DENY2
//插入一條ACL指令
R2(config-ext-nacl)#25 deny icmp 192.168.2.0 0.0.0.255 host 3.3.3.3
R2(config-ext-nacl)#exit
R2(config)#exit
R2#show ip access-lists 
Extended IP access list DENY2
    20 deny tcp 192.168.1.0 0.0.0.255 host 33.3.3.3 eq telnet (3 matches)
    25 deny icmp 192.168.2.0 0.0.0.255 host 3.3.3.3
    30 permit ip any any (10 matches)
R2#

注意:25 deny icmp 192.168.2.0 0.0.0.255 host 3.3.3.3,在這條ACL指令中,最前面的編號25代表ACL指令插入的位置,25則表示該ACL指令插入到編號20到30之間;如果是10的話,則表示該指令插入到編號20的前面。因此命名ACL在管理方面更具有優勢。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章