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

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

訪問控制列表,即Access Control List,以下簡稱ACL,是路由器、交換機等網絡設備上最常用的功能之一。可以說大多數的網絡協議都跟ACL有着千絲萬縷的聯繫,所以要弄清楚ACL的用法非常重要。

實際上,ACL的本質就是用於描述一個IP數據包、以太網數據幀若干特徵的集合。然後根據這些集合去匹配網絡中的流量(由大量數據包組成),同時根據策略來“允許”或者“禁止”。

ACL的基本原理

如圖:

1、ACL由若干條件,並按照一定的順序而成,同時每個條件都對應了一個策略:允許或者禁止。

2、收到一個數據幀之後,ACL會按照從上到下的順序逐一匹配:

  ●一個條件不匹配就查看下一個;

  ●任意一個條件匹配後就按照指定的策略執行,並跳出匹配;

  ●所有條件都不匹配時,默認禁止,即deny

 
根據條件描述的不同,我們通常可以將IP ACL分爲基本型擴展型兩種。

其中基本型只能就數據包的源ip地址進行匹配;

而擴展型ACL就可以對源IP、目的IP、協議號(判斷tcp/udp/icmp等)、源端口號、目的端口號、QoS參數(tos、precedence)等參數來進行定義,同時在匹配時,還可以根據路由器系統時間(time-range)來變化、還可以選擇是否生成日誌(log)等,功能非常強大。

顯然標準型ACL功能非常簡單,而擴展型ACL功能非常強大;但是功能越強大,匹配的越詳細,對於路由器等網絡設備的性能要求越高,或者對於網速的拖慢越明顯。組網時需要酌情使用。

不過有一點,兩種類型的ACL在原理上是完全一致的。

標準型ACL只能匹配源IP地址,在實際操作中,有三種匹配方式:

1、any,任意地址

2、<net><mask>,指定ip網段

3、src_range,指定ip地址範圍

 

配置模板:

ip access-list standard <name>                //建立一個標準型的ACL,名字自定

  {permit | deny} any

  {permit | deny} <network> <net-mask>

  {permit | deny} src_range <start-ip> <end-ip>

 
例1:我們需要設置某局域網中只有192.168.1.0網段的用戶能夠上網(理論上有254個用戶),那麼應該是

ip access-list standard test

  permit 192.168.1.0 255.255.255.0

  deny any(隱含生效,無需配置)

例2:我們需要設置某局域網中只有192.168.1.2~192.168.1.80的用戶能夠上網(理論上有79個用戶),本網段的其他用戶無法上網,那麼應該是

ip access-list standard test

  permit src_range 192.168.1.2 192.168.1.80

  deny any(隱含生效)

例3:我們需要讓某局域網中只有192.168.1.0網段用戶上網,但是192.168.1.33這個ip地址的用戶要禁止(財務禁止上網)(理論上有253個用戶),那麼應該是

ip access-list standard test

  deny 192.168.1.33 255.255.255.255

  permit 192.168.1.0 255.255.255.0

  deny any(隱含生效)

注意:

例3中,要表示單個主機的話,掩碼必須是4個255,即32位掩碼;

同時所有的例子中,各個條目的先後順序不能搞錯,想想看爲什麼?

擴展型ACL可匹配的條目比較多,前面已經說過,但世紀上最常用的項目也就是源、目的IP,源、目的端口號,以及ip協議號(種類)這5種,這5種就可以用來滿足絕大多數的應用。

由於匹配的條目比較多,在一個條件中,這些項目也是有前後順序的,爲:

協議號,源ip地址,源端口號,目的ip地址,目的端口號

其中,協議號必須寫(ip、icmp、tcp、udp等);

源ip地址也必須寫,其表示方式也有三種,與標準acl相同(如果不想匹配,以any來代替);

源端口號可以不寫,表示any;

目的ip地址必須寫;

目的端口號必須寫(當協議號爲tcp/udp時,源和目的端口號中至少應當寫一個)

配置模板:

ip access-list extended <name>

  {permit | deny} {ip | icmp | tcp | udp} {any | network | src_range} [src_port] {any | network | src_range} [dst_port]
 
例1:網絡中除了正常的web訪問、郵件收發,其他所有的應用都要禁止

ip access-list extended test

  permit tcp any any eq 80

  permit tcp any any eq 25

  permit tcp any any eq 110

  deny ip any any(隱含生效,後面不再貼出來了)

例2:禁止本網(192.168.1.0)到172.16.11.0網段的訪問,其他的不受限制

ip access-list extended test

  deny ip 192.168.1.0 255.255.255.0 172.16.11.0 255.255.0.0

  permit ip any any(本條必須寫,想想看爲什麼)

例3:網絡中,要禁止所有用戶去ping、telnet、http訪問某服務器(dns服務器,ip爲192.168.1.3),但要其正常提供服務

ip access-list extended test

  deny icmp any 192.168.1.3 255.255.255.255 

  deny tcp any 192.168.1.3 255.255.255.255 eq 23

  deny tcp any 192.168.1.3 255.255.255.255 eq 80

  permit ip any any

 
注意:在設置擴展型ACL時,要特別注意各個條件之間的關係,如果是“包含”的話,要把範圍小的條目寫在前面。

常見的包含關係例如:

icmp包含tcp、udp和icmp;

192.168.0.0 255.255.0.0包含192.168.1.0 255.255.255.0

192.168.1.0 255.255.255.0包含 range 192.168.1.1 192.168.1.10

不指定端口(port any)包含具體指定的端口,如tcp 80

等等

按照前面的介紹,我們瞭解了ACL的基本原理、配置使用和常見分類,但是他們有什麼用呢?
從配置的角度來看,上面的ACL寫好之後,啥用都沒有。原因是因爲沒有調用
具體而言,由哪個模塊來調用,就決定了它將起到什麼作用,這也是ACL應用廣泛的根本原因。

常見的調用ACL的模塊有:

包過濾:ip access-group

網絡地址轉換:NAT

策略路由:PBR

ip服務質量:QoS

動態路由過濾:RIP/OSPF等

但作爲最基本的應用,還是access-group。其調用方法非常簡單,但關鍵要確定兩個因素:

1、具體的接口

一般選擇什麼接口呢?一般的原則是離開要被控制的主機更近的那個口。

如:PCA--------<F0/0>Router<F0/1>--------ServB

在這個邏輯拓撲中,要禁止PCA去訪問ServB,那麼顯然在F0/0口上調用更加合適;

2、方向

雖然有in和out兩種方向可選,但我們建議使用in方向。注意,這裏的方向跟兩個主機之間的源、目的地址相對關係有關。

如上面的邏輯拓撲中,如果是F0/0的in方向上,PCA是源;而在F0/1的in方向,ServB則是源。使用時,請一定要注意

配置模板:

interface fastethernet 0/0

  ip access-group <name> in

注意:一個接口的一個方向上只能同時調用一個ACL條目!!!

使用時的若干注意點:在不影響網絡正常運行,且能夠達到預期目的的情況下,應當做到
1、ACL的條目數儘量少(建議總的數量不要超過10條)
2、合併ACL條目
如deny ip 192.168.1.0 255.255.255.0 any和deny 192.168.2.0 255.255.255.0可以合併爲192.168.0.0 255.255.255.192
3、儘量選擇ACL的in方向調用
4、注意ACL中有隱含生效的deny ip any any(不用配置)
如:ip access-list standard test
        deny ip 192.168.1.11 255.255.255.255
        deny ip 192.168.1.22 255.255.255.255

這個acl的作用就是禁止所有的ip進行通訊。
要改變這種情況的話,需要在最後增加一個permit ip any any。

 
博達路由器上面還有一種特殊的ACL,名爲FastAccess,它相當於一種另外的“標準型”訪問列表,它只能判斷TCP、UDP、icmp協議的目的端口號
這種ACL只適用於BDCOM路由器,通常用來禁止一些危險的、常見的病毒傳播端口等。
FastAccess這種ACL的基本原理跟前面基本一致,只是可匹配的項目種類有所不同。
且只能設置爲deny策略,不能設置爲permit(不deny就是permit),且沒有默認隱含deny的規則
 
 
下面是配置模板:
interface Fastethernet 0/0                //接口模式中配置
  ip fastaccess deny tcp 135
  ip fastaccess deny tcp 139
  ip fastaccess deny tcp 445
  ip fastaccess deny tcp 1025
  ip fastaccess deny tcp 1433
  ip fastaccess deny tcp 4444
  ip fastaccess deny tcp 5554
  ip fastaccess deny tcp 9996
  ip fastaccess deny udp 69
  ip fastaccess deny udp 1434
前面講的都是IP ACL,是屬於網絡層次的第三層,即網絡層。
 
一般只是路由器、三層交換機上纔可能會這樣設置,當然防火牆設備可能也會有類似的機制,但通常多位GUI圖形化配置頁面。
 
那麼如果要在二層交換機上面配置ACL來過來一些用戶流量該怎麼做呢?
顯然因爲層次不同的原因,IP ACL就不能用了,這需要用到另外的一種MAC ACL,即二層訪問控制列表
mac acl的原理跟一樓的基本原理完全一致,但它只能匹配源和目的mac地址。
另外,由於mac acl相對較爲簡單,就不在區分基本和擴展等類型了。
下面是配置模板,大家一看就明瞭:
mac access-list <name>

  permit {host <src.MAC.Addr> | any} {host <dst.MAC.Addr> | any}
  deny {host <src.MAC.Addr> | any} {host <dst.MAC.Addr> | any}
!
interface Fastethernet 0/1
  mac access-group <name>
 
注意:
1、mac acl中同樣有隱含的deny any any規則存在,使用時要注意
2、mac acl在調用時沒有方向參數的,原因是默認在in方向生效。
 

 

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