複製鏈接
請複製以下鏈接發送給好友

訪問列表

鎖定
一個訪問列表是一組按順序排列的過濾器,每台過濾器是由匹配標準和一個過濾動作構成的。過濾動作不是許可就是拒絕;而過濾標準既可以用像源地址一樣簡單的參數,也可以複雜到使用諸如源和目的地址、協議類型、端門號或套接字(socket)和某些標記狀態(如TCPACK位)等參數的組合。
路由器交換機所保持的列表用來針對一些進出路由器或交換機的服務(如組織某個IP地址的分組從路由器或交換機的特定端口出發)做訪問控制。訪問列表本質上是一系列對數據包進行分類的條件。
中文名
訪問列表
外文名
access list
重要性質
順序性(從上到下按順序執行)
定    義
它是一組按順序排列的過濾器
類    型
標準訪問列表和擴展訪問列表
本    質
系列對數據包進行分類的條件

訪問列表定義

一個訪問列表是一組按順序排列的過濾器,每台過濾器是由匹配標準和一個過濾動作構成的。過濾動作不是許可就是拒絕;而過濾標準既可以用像源地址一樣簡單的參數,也可以複雜到使用諸如源和目的地址、協議類型、端門號或套接字(socket)和某些標記狀態(如TCPACK位)等參數的組合。 [1] 
一個數據包從棧頂進入過濾器,在每台過濾器中匹配的標準將被應用,如果發生匹配,那麼指定的許可或拒絕動作將被執行;如果匹配沒有發生,數據包將向下移動到棧中下一台過濾器並再次重複匹配過程。
路由器交換機所保持的列表用來針對一些進出路由器或交換機的服務(如組織某個IP地址的分組從路由器或交換機的特定端口出發)做訪問控制

訪問列表順序性

訪問列表是從上到下按順序執行的,這一概念很重要:或許訪問列表發生故障的最普遍原因就是,過濾器的放置順序出現錯誤。按順序的訪問列表的第一個匹配項總是被執行的,在第一個匹配項匹配成功後,訪問列表其餘的匹配項將被忽略。 [1] 

訪問列表類型

access-list(訪問列表)最基本的有兩種,分別是標準訪問列表和擴展訪問列表,二者的區別主要是前者是基於源地址的數據包過濾,而後者是基於目標地址、源地址和網絡協議及其端口的數據包過濾。 [2] 
標準型IP訪問列表
1. 標準型IP訪問列表的格式如下:
---- access-list[list number][permit|deny][source address]
---- [address][wildcard mask][log]
---- 下面解釋一下標準型IP訪問列表的關鍵字和參數。首先,在access和list這2個關鍵字之間必須有一個連字符"-";其次,list number的範圍在0~99之間,這表明該access-list語句是一個普通的標準型IP訪問列表語句。因為對於Cisco IOS,在0~99之間的數字指示出該訪問列表和IP協議有關,所以list number參數具有雙重功能: (1)定義訪問列表的操作協議; (2)通知IOS在處理access-list語句時,把相同的list number參數作為同一實體對待。正如本文在後面所討論的,擴展型IP訪問列表也是通過list number(範圍是100~199之間的數字)而表現其特點的。因此,當運用訪問列表時,還需要補充如下重要的規則: 在需要創建訪問列表的時候,需要選擇適當的list number參數。
2.允許/拒絕數據包通過
---- 在標準型IP訪問列表中,使用permit語句可以使得和訪問列表項目匹配的數據包通過接口,而deny語句可以在接口過濾掉和訪問列表項目匹配的數據包。source address代表主機的IP地址,利用不同掩碼的組合可以指定主機。
---- 為了更好地瞭解IP地址和通配符掩碼的作用,這裏舉一個例子。假設您的公司有一個分支機構,其IP地址為C類的192.46.28.0。在您的公司,每個分支機構都需要通過總部的路由器訪問Internet。要實現這點,您就可以使用一個通配符掩碼 0.0.0.255。因為C類IP地址的最後一組數字代表主機,把它們都置1即允許總部訪問網絡上的每一台主機。因此,您的標準型IP訪問列表中的access-list語句如下:
---- access-list 1 permit 192.46.28.0 0.0.0.255
---- 注意,通配符掩碼是子網掩碼的補充。因此,如果您是網絡高手,您可以先確定子網掩碼,然後把它轉換成可應用的通配符掩碼。這裏,又可以補充一條訪問列表的規則5。
3.指定地址
---- 如果您想要指定一個特定的主機,可以增加一個通配符掩碼0.0.0.0。例如,為了讓來自IP地址為192.46.27.7的數據包通過,可以使用下列語句:
---- Access-list 1 permit 192.46.27.7 0.0.0.0
---- 在Cisco的訪問列表中,用户除了使用上述的通配符掩碼0.0.0.0來指定特定的主機外,還可以使用"host"這一關鍵字。例如,為了讓來自IP地址為192.46.27.7的數據包通過,您可以使用下列語句:
---- Access-list 1 permit host 192.46.27.7
---- 除了可以利用關鍵字"host"來代表通配符掩碼0.0.0.0外,關鍵字"any"可以作為源地址的縮寫,並代表通配符掩碼0.0.0.0 255.255.255.255。例如,如果希望拒絕來自IP地址為192.46.27.8的站點的數據包,可以在訪問列表中增加以下語句:
---- Access-list 1 deny host 192.46.27.8
---- Access-list 1 permit any
---- 注意上述2條訪問列表語句的次序。第1條語句把來自源地址為192.46.27.8的數據包過濾掉,第2條語句則允許來自任何源地址的數據包通過訪問列表作用的接口。如果改變上述語句的次序,那麼訪問列表將不能夠阻止來自源地址為192.46.27.8的數據包通過接口。因為訪問列表是按從上到下的次序執行語句的。這樣,如果第1條語句是:
---- Access-list 1 permit any
---- 的話,那麼來自任何源地址的數據包都會通過接口。
4.拒絕的奧秘
---- 在默認情況下,除非明確規定允許通過,訪問列表總是阻止或拒絕一切數據包的通過,即實際上在每個訪問列表的最後,都隱含有一條"deny any"的語句。假設我們使用了前面創建的標準IP訪問列表,從路由器的角度來看,這條語句的實際內容如下:
---- access-list 1 deny host 192.46.27.8
---- access-list 1 permit any
---- access-list 1 deny any
---- 在上述例子裏面,由於訪問列表中第2條語句明確允許任何數據包都通過,所以隱含的拒絕語句不起作用,但實際情況並不總是如此。例如,如果希望來自源地址為192.46.27.8和192.46.27.12的數據包通過路由器的接口,同時阻止其他一切數據包通過,則訪問列表的代碼如下:
---- access-list 1 permit host 192.46.27.8
---- access-list 1 permit host 192.46.27.12
---- 注意,因為所有的訪問列表會自動在最後包括該語句.
---- 順便討論一下標準型IP訪問列表的參數"log",它起日誌的作用。一旦訪問列表作用於某個接口,那麼包括關鍵字"log"的語句將記錄那些滿足訪問列表中"permit"和"deny"條件的數據包。第一個通過接口並且和訪問列表語句匹配的數據包將立即產生一個日誌信息。後續的數據包根據記錄日誌的方式,或者在控制枱上顯示日誌,或者在內存中記錄日誌。通過Cisco IOS的控制枱命令可以選擇記錄日誌方式。 [3] 
擴展型IP訪問列表
擴展型IP訪問列表在數據包的過濾方面增加了不少功能和靈活性。除了可以基於源地址和目標地址過濾外,還可以根據協議、源端口和目的端口過濾,甚至可以利用各種選項過濾。這些選項能夠對數據包中某些域的信息進行讀取和比較。擴展型IP訪問列表的通用格式如下:
---- access-list[list number][permit|deny]
---- [protocol|protocol key word]
---- [source address source-wildcard mask][source port]
---- [destination address destination-wildcard mask]
---- [destination port][log options]
---- 和標準型IP訪問列表類似,"list number"標誌了訪問列表的類型。數字100~199用於確定100個惟一的擴展型IP訪問列表。"protocol"確定需要過濾的協議,其中包括IP、TCP、UDP和ICMP等等。
---- 如果我們回顧一下數據包是如何形成的,我們就會了解為什麼協議會影響數據包的過濾,儘管有時這樣會產生副作用。圖2表示了數據包的形成。請注意,應用數據通常有一個在傳輸層增加的前綴,它可以是TCP協議或UDP協議的頭部,這樣就增加了一個指示應用的端口標誌。當數據流入協議棧之後,網絡層再加上一個包含地址信息的IP協議的頭部。
由於IP頭部傳送TCP、UDP、路由協議和ICMP協議,所以在訪問列表的語句中,IP協議的級別比其他協議更為重要。但是,在有些應用中,您可能需要改變這種情況,您需要基於某個非IP協議進行過濾
例子
---- 為了更好地説明,下面列舉2個擴展型IP訪問列表的語句來説明。假設我們希望阻止TCP協議的流量訪問IP地址為192.78.46.8的服務器,同時允許其他協議的流量訪問該服務器。那麼以下訪問列表語句能滿足這一要求嗎?
---- access-list 101 permit host 192.78.46.8
---- access-list 101 deny host 192.78.46.12
---- 回答是否定的。第一條語句允許所有的IP流量、同時包括TCP流量通過指定的主機地址。這樣,第二條語句將不起任何作用。可是,如果改變上面2條語句的次序即可實現目標。

訪問列表監視和計費

在不必顯示路由器完整配置的前提下,能夠檢查一個甚至所有訪問列表是非常有用的。命令show ip access-list可以顯示路由器上所有IP訪問列表的簡化語法。如果觀察一個特定的訪問列表,可以通過指定名字和標號。如果沒有輸入關鍵字ip(show access-list),那麼所有訪問列表都將被顯示出來。 [4] 
跟蹤被訪問列表拒絕的數據包作為安全計劃或編制策略能力的一部分,這是很有用的。命令ip accouting access-violations可以配置在獨立的接口上,用來創建所有在該接口被訪問列表拒絕的數據包的數據庫。可以使用show ip accounting access-violations來檢查數據庫,結果可以顯示出匹配該地址的源和目標地址、數據包數、字節數以及拒絕該數據的訪問列表編號。命令clear ip accounting可以清楚計費數據庫。 [4] 
參考資料
  • 1.    周家慶主編.網絡工程 交換與路由技術.杭州:浙江大學出版社,2014:244-251
  • 2.    王繼龍,安淑梅,邵丹編著.局域網安全管理實踐教程.北京:清華大學出版社,2009:22-23
  • 3.    訪問控制列表  .51CTO[引用日期2012-12-22]
  • 4.    周家慶主編.交換與路由技術 .杭州:浙江大學出版社,2014:266-268