訪問控制列表簡稱爲ACL:
訪問控制列表使用包過濾技術,在路由器上讀取第三層及第四層包頭中的信息如源地址,目的地址,源端口,目的端口等,根據預先定義好的規則對包進行過濾,從而達到訪問控制的目的。該技術初期僅在路由器上支持,近些年來已經擴展到三層交換機,部分最新的二層交換機也開始提供ACL的支持了
訪問控制列表的原理:
對路由器接口來說有兩個方向:
出:已經經路由器的處理,正離開路由器接口的數據包
入:已經到達路由器接口的數據包,將被路由器處理
匹配順序爲:“自上而下,依次匹配”,默認爲拒絕
訪問控制列表的類型:
標準訪問控制列表:一般應用在out出站接口,建議配置在離目標端最近的路由上
擴展訪問控制列表:配置在離源端最近的路由上,一般應用在入站in方向
命名訪問控制列表:允許在標準和擴展訪問列表中使用名稱代替表號
訪問控制列表使用原則:
1:最小特權原則:只給受控對象完成任務所必須的最小的權限。也就是說被控制的總規則是各個規則的交集,只滿足部分條件的是不容許通過規則的
2:最靠近受控對象原則:所有的網絡層訪問權限控制,也就是說在檢查規則時是採用自上而下在ACL中一條條檢測的,只要發現符合條件了就立刻轉發,而不繼續檢測下面的ACL語句
3:默認丟棄原則:在CISCO路由交換設備中默認最後一句爲ACL中加入了deny any any,也就是丟棄所有不符合條件的數據包,這一點要特別注意,雖然我們可以修改這個默認,但未改前一定要引起重視
由於ACL是使用包過濾技術來實現的,過濾的依據又僅僅只是第三層和第四層包頭中的部分信息,這種技術具有一些固有的侷限性,如無法識別到具體的人,無法識別到應用內部的權限級別等,因此,要達到端到端的權限控制目的,需要和系統級及應用級的訪問權限控制結合使用
一:標準訪問列表
訪問控制列表ACL分很多種,不同場合應用不同種類的ACL,其中最簡單的就是標準訪問控制列表,標準訪問控制列表是通過使用IP包中的源IP地址進行過濾,使用訪問控制列表號1到99來創建相應的ACL
它的具體格式:
access-list access-list-number [permit|deny] [sourceaddress][wildcard-mask]
access-list-number 爲1-99 或者 1300-1999之間的數字,這個是訪問列表號
例如:access-list 10 deny host 192.168.1.1這句命令是將所有來自192.168.1.1地址的數據包丟棄
當然我們也可以用網段來表示,對某個網段進行過濾,命令如下:access-list 10 deny 192.168.1.0 0.0.0.255
通過上面的配置將來自192.168.1.0/24的所有計算機數據包進行過濾丟棄,爲什麼後頭的子網掩碼錶示的是0.0.0.255呢?這是 因爲cisco規定在ACL中用反向掩瑪表示子網掩碼,反向掩碼爲0.0.0.255的代表他的子網掩碼爲255.255.255.0
提示:對於標準訪問控制列表來說,默認的命令是host,也就是說access-list 10 deny 192.168.1.1表示的是拒絕192.168.1.1這臺主機數據包通訊,可以省去我們輸入host命令
標準訪問列表配置實例:
r1(config)#access-list 10 deny 192.168.2.0 0.0.0.255
r1(config)#access-list 10 permit any
r1(config)#int f0/0
r1(config-subif)#ip access-group 10 out
上面配置的含義是阻止來自網段192.168.2.0的機器從int f0/0端口出去,訪問列表在配置好之後,要把它在端口上應用,否則配置了還是無效的
注意事項:
1、標準訪問列表,一般來說配置儘量靠近目的端
2、配置的第二條命令中的any相當於 0.0.0.0 255.255.255.255
3、一定要加pemint any,使其他的網絡可通
4、訪問列表是從上到下一條一條進行匹配的,所以在設置訪問列表的時候要注意順序,如果從第一條匹配到最後一條還是不知道要怎麼做,路由器就會丟棄這個數據包,也就是爲什麼上面的例子中上一定要加permit any
5、如果只阻止一個主機,那可以用 host 192.168.1.12 或者 192.168.1.12 0.0.0.0,這兩種配置是等價的
刪除已建立的標準ACL
r1(config)#no access-list access-list-number
對標準的ACL來說,不能刪除單個ACL語句,只能刪除整個ACL
總結:標準ACL佔用路由器資源很少,是一種最基本最簡單的訪問控制列表格式,應用比較廣泛,經常在要求控制級別較低的情況下使用,如果要更加複雜的控制數據包的傳輸就需要使用擴展訪問控制列表了,他可以滿足我們到端口級的要求
二:擴展訪問控制列表
上面我們提到的標準訪問控制列表是基於IP地址進行過濾的,是最簡單的ACL,那麼如果我們希望將過濾細到端口怎麼辦呢?或者希望對數據包的目的地址進行過濾,這時候就需要使用擴展訪問控制列表了,使用擴展IP訪問列表可以有效的容許用戶訪問物理LAN而並不容許他使用某個特定服務(例如WWW,FTP),擴展訪問控制列表使用的ACL號爲100到199
擴展訪問控制列表的格式:
access-list access-list-number {permit/deny} protocol +源地址+反碼 +目標地址+反碼+operator operan(It小於,gt大於,eq等於,neq不等於;具體可?)+端口號
1、擴展訪問控制列表號的範圍是100-199或者2000-2699
2、因爲默認情況下,每個訪問控制列表的末尾隱含deny all,所以在每個擴展訪問控制列表裏面必須有:access-list 110 permit ip any any
3、不同的服務要使用不同的協議,比如TFTP使用的是UDP協議
4、更多注意事項可以參考上面標準訪問控制列表部分
實例一:access-list 101 deny tcp any host 192.168.1.1 eq www //將所有主機訪問192.168.1.1這個地址網頁服務(WWW)TCP連接的數據包丟棄
提示:同樣在擴展訪問控制列表中也可以定義過濾某個網段,當然和標準訪問控制列表一樣需要我們使用反向掩碼定義IP地址後的子網掩碼
擴展訪問控制列表配置實例:
r2(config)#access-list 110 deny tcp any host 192.168.1.12 eq www
r2(config)#access-list 110 deny tcp any host 192.168.1.12 eq ftp
r2(config)#int f0/0
r2(config-if)#ip access-group 110 out
上面配置的含義是拒絕訪問192.168.1.12的www和ftp服務
實例二:
路由器連接了二個網段,分別爲172.16.4.0/24,172.16.3.0/24,在172.16.4.0/24網段中有一臺服務器提供WWW服務,IP地址爲172.16.4.13,
要求:禁止172.16.3.0的計算機訪問172.16.4.0的計算機,包括那臺服務器,不過惟獨可以訪問172.16.4.13上的WWW服務,而其他服務不能訪問
路由器配置命令:
access-list 101 permit tcp any 172.16.4.13 0.0.0.0 eq www //設置ACL 101,容許源地址爲任意IP,目的地址爲172.16.4.13主機的80端口即WWW服務,由於cisco默認添加deny any的命令,所以ACL只寫此一句即可
進入相應端口
ip access-group 101 out //將ACL 101應用到端口
設置完畢後172.16.3.0的計算機就無法訪問172.16.4.0的計算機了,就算是服務器172.16.4.13開啓了FTP服務也無法訪問,惟獨可以訪問的就是172.16.4.13的WWW服務了
刪除已建立的擴展標準ACL
刪除和標準一樣,不能單條刪除,只能刪除整個ACL
總結:擴展ACL功能很強大,他可以控制源IP,目的IP,源端口,目的端口等,能實現相當精細的控制,擴展ACL不僅讀取IP包頭的源地址/目的地址,還要讀取第四層包頭中的源端口和目的端口的IP,不過他存在一個缺點,那就是在沒有硬件ACL加速的情況下,擴展ACL會消耗大量的路由器CPU資源,所以當使用中低檔路由器時應儘量減少擴展ACL的條目數,將其簡化爲標準ACL或將多條擴展ACL合一是最有效的方法
三:命名訪問控制列表
不管是標準訪問控制列表還是擴展訪問控制列表都有一個弊端,那就是當設置好ACL的規則後發現其中的某條有問題,希望進行修改或刪除的話只能將全部ACL信息都刪除,也就是說修改一條或刪除一條都會影響到整個ACL列表,這一個缺點影響了我們的工作,爲我們帶來了繁重的負擔,不過我們可以用基於名稱的訪問控制列表來解決這個問題
命名訪問控制列表格式:
ip access-list {standard/extended} access-list-name(可有字母,數字組合的字符串)
例如:ip access-list standard softer //建立一個名爲softer的標準訪問控制列表
命名訪問控制列表使用方法:
r1(config)#ip access-list standard 自定義名
r1(config-std-nac1)#11 permit host +ip //默認情況下第一條爲10,第二條爲20,如果不指定序列號,則新添加的ACL被添加到列表的末尾
r1(config-std-nac1)#deny any
對於命名ACL來說,可以向之前的ACL中插入ACL,刪除也可以刪除單條ACL,
如:r1(config)#ip access-list standard benet
r1(config-std-nasl)#no 11
使用show access-lists可查看配置的ACL信息
總結:如果設置ACL的規則比較多的話,應該使用基於名稱的訪問控制列表進行管理,這樣可以減輕很多後期維護的工作,方便我們隨時進行調整ACL規則
四:反向訪問控制列表
反向訪問控制列表屬於ACL的一種高級應用,他可以有效的防範病毒,通過配置反向ACL可以保證A.B兩個網段的計算機互相PING,A可以PING通B而B不能PING通A
說得通俗些的話就是傳輸數據可以分爲兩個過程,首先是源主機向目的主機發送連接請求和數據,然後是目的主機在雙方建立好連接後發送數據給源主機,反向ACL控制的就是上面提到的連接請求
反向訪問控制列表的格式:
反向訪問控制列表格式非常簡單,只要在配置好的擴展訪問列表最後加上established即可
反向訪問控制列表配置實例:
路由器連接了二個網段,分別爲172.16.4.0/24,172.16.3.0/24,在172.16.4.0/24網段中的計算機都是服務器,我們通過反向ACL設置保護這些服務器免受來自172.16.3.0這個網段的病毒攻擊
要求:禁止病毒從172.16.3.0/24這個網段傳播到172.16.4.0/24這個服務器網段
路由器配置命令:
access-list 101 permit tcp 172.16.3.0 0.0.0.255 172.16.4.0 0.0.0.255 established //定義ACL 101,容許所有來自172.16.3.0網段的計算機訪問172.16.4.0網段中的計算機,前提是TCP連接已經建立了的,當TCP連接沒有建立的話是不容許172.16.3.0訪問172.16.4.0的
進入路由相應端口
ip access-group 101 out //將ACL 101應用到端口
設置完畢後病毒就不會輕易的從172.16.3.0傳播到172.16.4.0的服務器區了,因爲病毒要想傳播都是主動進行TCP連接的,由於路由器上採用反向ACL禁止了172.16.3.0網段的TCP主動連接,因此病毒無法順利傳播
提示:檢驗反向ACL是否順利配置的一個簡單方法就是拿172.16.4.0裏的一臺服務器PING在172.16.3.0中的計算機,如果可以PING通的話再用172.16.3.0那臺計算機PING172.16.4.0的服務器,PING不通則說明ACL配置成功
通過上文配置的反向ACL會出現一個問題,那就是172.16.3.0的計算機不能訪問服務器的服務了,假如圖中172.16.4.13提供了WWW服務的話也不能正常訪問,解決的方法是在established那句前頭再添加一個擴展ACL規則
例如:access-list 101 permit tcp 172.16.3.0 0.0.0.255 172.16.4.13 0.0.0.0 eq www
這樣根據“最靠近受控對象原則”即在檢查ACL規則時是採用自上而下在ACL中一條條檢測的,只要發現符合條件了就立刻轉發,而不繼續檢測下面的ACL語句,172.16.3.0的計算機就可以正常訪問該服務器的WWW服務了,而下面的established防病毒命令還可以正常生效
五:定時訪問控制列表
設置步驟:
1、定義時間段及時間範圍
2、ACL自身的配置,即將詳細的規則添加到ACL中
3、宣告ACL,將設置好的ACL添加到相應的端口中
定義時間範圍的名稱:
r1(config)#time-range time-range-name定義一個時間週期
r1(config-time-range)#periodic(週期) days-of-the-week hh:mm to [days-of-the-week] hh:mm
其中days-of-the-week的取值有
Monday Tuesday Wednesday Thursday Friday Saturday Sunday{週一到週日}
daily(每天)weekdays(在平日)weekend(週末)
定義一個絕對時間:
r1(config)#time-range time-range-name
r1(config-time-range)#absolute [start hh:mm day month year] [end hh:mm day month year]
在擴展ACL中引入時間範圍
r1(config)#access-list access-list-number {permit|deny} protocol {source ip + 反碼 destination ip + 反碼 +operator+time-range+time-range-name}
定時訪問控制列表實例:
路由器連接了二個網段,分別爲172.16.4.0/24,172.16.3.0/24,在172.16.4.0/24網段中有一臺服務器提供FTP服務,IP地址爲172.16.4.13,
要求:只容許172.16.3.0網段的用戶在週末訪問172.16.4.13上的FTP資源,工作時間不能下載該FTP資源
路由器配置命令:
time-range softer //定義時間段名稱爲softer
periodic weekend 00:00 to 23:59 //定義具體時間範圍,爲每週週末(六,日)的0點到23點59分。當然可以使用periodic weekdays定義工作日或跟星期幾定義具體的周幾
access-list 101 permit tcp any 172.16.4.13 0.0.0.0 eq ftp time-range softer //設置ACL,禁止在時間段softer範圍內訪問172.16.4.13的FTP服務
access-list 101 deny ip any any //設置ACL,容許其他時間段和其他條件下的正常訪問
進入相應端口。
ip access-group 101 out //應用到端口
基於時間的ACL比較適合於時間段的管理,通過上面的設置172.16.3.0的用戶就只能在週末訪問服務器提供的FTP資源了,平時無法訪問
六:訪問控制列表流量記錄
網絡管理員就是要能夠合理的管理公司的網絡,俗話說知己知彼方能百戰百勝,所以有效的記錄ACL流量信息可以第一時間的瞭解網絡流量和病毒的傳播方式,下面這篇文章就爲大家簡單介紹下如何保存訪問控制列表的流量信息,方法就是在擴展ACL規則最後加上LOG命令
實現方法:
log 192.168.1.1 //爲路由器指定一個日誌服務器地址,該地址爲192.168.1.1
access-list 101 permit tcp any 172.16.4.13 0.0.0.0 eq www log //在希望監測的擴展ACL最後加上LOG命令,這樣就會把滿足該條件的信息保存到指定的日誌服務器192.168.1.1中
提示:如果在擴展ACL最後加上log-input,則不僅會保存流量信息,還會將數據包通過的端口信息也進行保存,使用LOG記錄了滿足訪問控制列表規則的數據流量就可以完整的查詢公司網絡哪個地方流量大,哪個地方有病毒了,簡單的一句命令就完成了很多專業工具才能完成的工作