CISCO訪問控制列表 企業網絡管理的必殺技

ACL(Access Control List,訪問控制列表)
技術從來都是一把雙刃劍,網絡應用與互聯網的普及在大幅提高企業的生產經營效率的同時,也帶來了諸如數據的安全性,員工利用互聯網做與工作不相干事等負面影響。如何將一個網絡有效的管理起來,儘可能的降低網絡所帶來的負面影響就成了擺在網絡管理員面前的一個重要課題。
  A公司的某位可憐的網管目前就面臨了一堆這樣的問題。A公司建設了一個企業網,並通過一臺路由器接入到互聯網。在網絡核心使用一臺基於IOS的多層交換機,所有的二層交換機也爲可管理的基於IOS的交換機,在公司內部使用了VLAN技術,按照功能的不同分爲了6個VLAN。分別是網絡設備與網管(VLAN1,10.1.1.0/24)、內部服務器(VLAN2)、Internet連接(VLAN3)、財務部(VLAN4)、市場部(VLAN5)、研發部門(VLAN6),出口路由器上Fa0/0接公司內部網,通過s0/0連接到Internet。每個網段的三層設備(也就是客戶機上的缺省網關)地址都從高位向下分配,所有的其它節點地址均從低位向上分配。該網絡的拓樸如下圖所示:


自從網絡建成後麻煩就一直沒斷過,一會兒有人試圖登錄網絡設備要搗亂;一會兒領導又在抱怨說互聯網開通後,員工成天就知道泡網;一會兒財務的人又說研發部門的員工看了不該看的數據。這些抱怨都找這位可憐的網管,搞得他頭都大了。那有什麼辦法能夠解決這些問題呢?答案就是使用網絡層的訪問限制控制技術――訪問控制列表(下文簡稱ACL)。
那麼,什麼是ACL呢?ACL是種什麼樣的技術,它能做什麼,又存在一些什麼樣的侷限性呢?
ACL的基本原理、功能與侷限性
  網絡中常說的ACL是Cisco IOS所提供的一種訪問控制技術,初期僅在路由器上支持,近些年來已經擴展到三層交換機,部分最新的二層交換機如2950之類也開始提供ACL的支持。只不過支持的特性不是那麼完善而已。在其它廠商的路由器或多層交換機上也提供類似的技術,不過名稱和配置方式都可能有細微的差別。本文所有的配置實例均基於Cisco IOS的ACL進行編寫。
基本原理:ACL使用包過濾技術,在路由器上讀取第三層及第四層包頭中的信息如源地址、目的地址、源端口、目的端口等,根據預先定義好的規則對包進行過濾,從而達到訪問控制的目的。
功能:網絡中的節點資源節點和用戶節點兩大類,其中資源節點提供服務或數據,用戶節點訪問資源節點所提供的服務與數據。ACL的主要功能就是一方面保護資源節點,阻止非法用戶對資源節點的訪問,另一方面限制特定的用戶節點所能具備的訪問權限。
配置ACL的基本原則:在實施ACL的過程中,應當遵循如下兩個基本原則:
u 最小特權原則:只給受控對象完成任務所必須的最小的權限
u 最靠近受控對象原則:所有的網絡層訪問權限控制
侷限性:由於ACL是使用包過濾技術來實現的,過濾的依據又僅僅只是第三層和第四層包頭中的部分信息,這種技術具有一些固有的侷限性,如無法識別到具體的人,無法識別到應用內部的權限級別等。因此,要達到end to end的權限控制目的,需要和系統級及應用級的訪問權限控制結合使用。

ACL配置技術詳解
“說那麼多廢話做什麼,趕快開始進行配置吧。”,A公司的網管說。呵呵,並不是我想說那麼多廢話,因爲理解這些基礎的概念與簡單的原理對後續的配置和排錯都是相當有用的。說說看,你的第一個需求是什麼。
“做爲一個網管,我不期望普通用戶能telnet到網絡設備”――ACL基礎
“補充一點,要求能夠從我現在的機器(研發VLAN的10.1.6.66)上telnet到網絡設備上去。”。hamm,是個不錯的主意,誰都不希望有人在自己的花園中撤野。讓我們分析一下,在A公司的網絡中,除出口路由器外,其它所有的網絡設備段的是放在Vlan1中,那個我只需要在到VLAN 1的路由器接口上配置只允許源地址爲10.1.6.66的包通過,其它的包通通過濾掉。這中只管源IP地址的ACL就叫做
標準IP ACL:
我們在SWA上進行如下的配置:
access-list 1 permit host 10.1.6.66
access-list 1 deny any
int vlan 1
ip access-group 1 out
這幾條命令中的相應關鍵字的意義如下:
access-list:配置均ACL的關鍵字,所有的ACL均使用這個命令進行配置。
access-list後面的1:ACL號,ACL號相同的所有ACL形成一個組。在判斷一個包時,使用同一組中的條目從上到下逐一進行判斷,一遇到滿足的條目就終止對該包的判斷。1-99爲標準的IP ACL號,標準IP ACL由於只讀取IP包頭的源地址部分,消耗資源少。
permit/deny:操作。Permit是允許通過,deny是丟棄包。
host 10.1.6.66/any:匹配條件,等同於10.1.6.66 0.0.0.0。剛纔說過,標準的ACL只限制源地址。Host 10.1.6.66(10.1.6.66 0.0.0.0)的意思是隻匹配源地址爲10.1.6.66的包。0.0.0.0是wildcards,某位的wildcards爲0表示IP地址的對應位必須符合,爲1表示IP地址的對應位不管是什麼都行。簡單點說,就是255.255.255.255減去子網掩碼後的值,0.0.0.0的wildcards就是意味着IP地址必須符合10.1.6.66,可以簡稱爲host 10.1.6.66。any表示匹配所有地址。
注意:IOS中的ACL均使用wildcards,並且會用wildcards對IP地址進行嚴格的對齊,如你輸入一條access-list 1 permit 10.1.1.129 0.0.0.31,在你show access-list看時,會變成access-list 1 permit 10.1.1.128 0.0.0.31,PIXOS中的ACL均使用subnet masks,並且不會進行對齊操作。更爲詳細的關於IP V4地址的資料可以參見拙著《IP v4基礎知識》[url]http://www.ultratechnology.net/showarticle.php?s=&articleid=60[/url] 一文
int vlan1///ip access-group 1 out:這兩句將access-list 1應用到vlan1接口的out方向。其中1是ACL號,和相應的ACL進行關聯。Out是對路由器該接口上哪個方向的包進行過濾,可以有in和out兩種選擇。
注意:這裏的in/out都是站在路由器或三層模塊(以後簡稱R)上看的,in表示從該接口進入R的包,out表示從該接口出去的包。
好了,這就是一個最基本的ACL的配置方法。什麼,你說普通用戶還能telnet到RTA?那你在int vlan3上現加一個ip access-group 1 out吧。Hammmm,等等,你這樣加上去普通用戶就訪問不了internet了。讓我們把剛纔的ACL去掉,重新寫一個。
回憶一下,我們的目的是除了10.1.6.66能夠進行telnet操作外,其它用戶都不允許進行telnet操作。剛纔我們說過,標準的IP ACL只能控制源IP地址,不能控制到端口。要控制到第四層的端口,就需要使用到:
擴展的IP ACL的配置
先看看配置實例吧。在SWA上進行如下配置:
int vlan 1
no ip access-group 1 out
exit
no access-list 1
access-list 101 permit tcp host 10.1.6.66 any eq telnet
access-list 101 deny tcp any any eq telnet
int vlan 1
ip access-group 101 out
int vlan 3
ip access-group 101 out
你應該注意到到這裏的ACL有一些變化了,現在對變化的部分做一些說明:
access-list 101:注意這裏的101,和剛纔的標準ACL中的1一樣,101是ACL號,表示這是一個擴展的IP ACL。擴展的IP ACL號範圍是100-199,擴展的IP ACL可以控制源IP、目的IP、源端口、目的端口等,能實現相當精細的控制,擴展ACL不僅讀取IP包頭的源地址/目的地址,還要讀取第四層包頭中的源端口和目的端口,的IP在沒有硬件ACL加速情況下,會消耗大量的CPU資源。
int vlan 1///no ip access-group 1 out///exit///no access-list 1:取消access-list 1,對於非命名的ACL,可以只需要這一句就可以全部取消。注意,在取消或修改一個ACL前,必須先在它所應用的接口上先把應用給no掉,否則會導致相當嚴重的後果。
tcp host 10.1.6.66 any eq telnet:匹配條件。完整格式爲:協議 源地址 源wildcards [關係] [源端口] 目的地址 目的wildcards [關係] [目的端口]。其中協議可以是IP、TCP、UDP、EIGRP等,[]內爲可選字段。僅在協議爲tcp/udp等具備端口號的協議纔有用。關係可以是eq(等於)、neq(不等於)、lt(大於)、range(範圍)等。端口一般爲數字的1-65535,對於周知端口,如23(服務名爲telnet)等可以用服務名代替。源端口和目的端口不定義時表示所有端口。
把這個ACL應用上去後,用戶們開始打電話來罵娘了,因爲他們都訪問不了Internet了,是哪裏出了問題了呢?
注意:所有的ACL,缺省情況下,從安全角度考慮,最後都會隱含一句deny any(標準ACL)或deny ip any any(擴展IP ACL)。所以在不瞭解業務會使用到哪些端口的情況下,最好在ACL的最後加上一句permit ip any any,在這裏就是access-list 101 permit ip any any。
現在用戶倒是能夠訪問Internet了,但我們的可憐的網管卻發現普通用戶還是能夠telnet到他的SWA上面,因爲SWA上面有很多個網絡接口,而且使用擴展的ACL會消耗很多的資源。有什麼簡單的辦法能夠控制用戶對網絡設備的Telnet訪問,而又不消耗太多的資源呢?這就需要使用到:
對網絡設備自身的訪問如何進行控制的技術
讓我們先把剛纔配置的ACL都取掉(具體配置略,不然後讀者會以爲我在騙稿費了。),再在每臺網絡設備上均進行如下配置:
access-list 1 permit host 10.1.6.66
line vty 0 4(部分設備是15)
access-class 1 in
這樣就行了,telnet都是訪問的設備上的line vty,在line vty下面使用access-class與ACL組進行關聯,in關鍵字表示控制進入的連接。
就這麼簡單?wk,你丫是不是在玩我們,爲什麼還要繞一大圈?臭雞蛋和爛西紅柿開始在70的腦袋上方狂飛。(5555555,偶也只是想向大家把ACL的基礎知識講的明白一些的嘛)。經過剛纔的配置,我們可以理出一個簡單的ACL配置步驟了:
u 分析需求,找清楚需求中要保護什麼或控制什麼;爲方便配置,最好能以表格形式列出。在本文的後面會舉例的。
u 分析符合條件的數據流的路徑,尋找一個最適合進行控制的位置;
u 書寫ACL,並將ACL應用到接口上;
u 測試並修改ACL。
當A公司的領導知道在網管能夠控制普通用戶對網絡設備的訪問後,我們的可憐的網管就收到了很多看起來很難的要求。領導要求網管:
“使用ACL技術對網絡訪問進行精細化控制”――ACL進階配置
命名的IP ACL
由於最近服務器網段的機器老是被人用telnet、rsh等手段進行***,我們只對員工開放web服務器(10.1.2.20)所提供的http、FTP服務器(10.1.2.22)提供的FTP服務和數據庫服務器(10.1.2.21:1521)。好吧,我們着手進行配置,可是我們的ACL剛寫到一半,發現前面寫的幾句好像有問題,一個no命令輸進去,整個ACL都沒了,唉,一切都得重來,難道就沒有一個變通的辦法麼?有,這裏我就需要用到:
命名的IP acl提供的兩個主要優點是:
l 解決ACL號碼不足的問題。
l 可以自由的刪除ACL中的一條語句,而不必刪除整個ACL。
命名的ACL的主要不足之處在於無法實現在任意位置加入新的ACL條目。比如上面那個例子中,我們進行了如下的配置:
ip access-list extend server-protect
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www
permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp
配置到這裏,我們發現permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521這句配錯了,我們得把它給取掉並重新配置,OK,我樣可以簡單的進行如下配置:
ip access-list extend server- protect
no permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521
permit tcp 10.1.0.0 0.0.0.255 host 10.1.2.21 eq 1521
exit
int vlan 2
ip access-group server- protect
就可以了。現在對命名的IP access-list的配置方法解釋如下:
ip access-list extend server-access-limit:ip access-list相當於使用編號的access-list中的access-list段。extend表明是擴展的ACL(對應地,standard表示標準的ACL)。server-access-limit是access-list的名字,相當於基於編號的ACL中的編號字段。
permit tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521:這一段和使用編號的access-list的後半段的意義相同,都由操作和條件兩段組成。
其實基於名字的IP ACL還有一個很好的優點就是可以爲每個ACL取一個有意義的名字,便於日後的管理與維護。所以Ultra工作室強烈建議各位看官在實際工作中均使用命名的ACL。
進一步完善對服務器數據的保護――ACL執行順序再探討
在服務器網段中的數據庫服務器中存放有大量的市場信息,市場部門的人員不希望研發部門訪問到數據庫服務器,經過協商,同意研發部門的領導的機器(IP地址爲10.1.6.33)可以訪問到數據庫服務器。這樣,我們的服務器網段的的訪問權限部分如下表所示:
協議
源地址
源端口
目的地址
目的端口
操作

TCP
10.1/16
所有
10.1.2.20/32
80
允許訪問

TCP
10.1/16
所有
10.1.2.22/32
21
允許訪問

TCP
10.1/16
所有
10.1.2.21/32
1521
允許訪問

TCP
10.1.6/24
所有
10.1.2.21/32
1521
禁止訪問

TCP
10.1.6.33/32
所有
10.1.2.21/32
1521
允許訪問

IP
10.1/16
N/A
所有
N/A
禁止訪問
於是,網管就在server-protect後面順序加了兩條語句進去,整個ACL變成了如下形式:
ip access-list extend server-protect
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp
deny tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521
permit tcp host 10.1.6.33 host 10.1.2.21 eq 1521
做完之後發現根本沒起到應有的作用,研發部門的所有機器還是可以訪問到數據庫服務器。這是爲什麼呢?
前面我們提到過,ACL的執行順序是從上往下執行,一個包只要遇到一條匹配的ACL語句後就會停止後續語句的執行,在我們的這個ACL中,因爲前面已經有了一條permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521語句。內部網上所有訪問10.1.2.21的1521端口的在這兒就全部通過了,跟本不會到後面兩句去比較。所以導致達不到我們的目的。應該把server-protect這個ACL按如下形式進行修改才能滿足我們的要求:
ip access-list extend server-protect
permit tcp host 10.1.6.33 host 10.1.2.21 eq 1521
deny tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www
permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp
這個例子告訴我們在寫ACL時,一定要遵循最爲精確匹配的ACL語句一定要寫在最前面的原則,只有這樣才能保證不會出現無用的ACL語句。
基於時間的ACL
在保證了服務器的數據安全性後,領導又準備對內部員工上網進行控制。要求在上班時間內(9:00-18:00)禁止內部員工瀏覽internet,禁止使用QQ、MSN。而且在2003年6月1號到2號的所有時間內都不允許進行上述操作。但在任何時間都可以允許以其它方式訪問Internet。天哪,這可叫人怎麼活呀,但領導既然這樣安排,也只好按指示做了。
首先,讓我們來分析一下這個需求,瀏覽internet現在基本上都是使用http或https進行訪問,標準端口是TCP/80端口和TCP/443,MSN使用TCP/1863端口,QQ登錄會使用到TCP/UDP8000這兩個端口,還有可能使用到udp/4000進行通訊。而且這些軟件都能支持代理服務器,目前的代理服務器主要佈署在TCP 8080、TCP 3128(HTTP代理)和TCP1080(socks)這三個端口上。這個需求如下表所示:
應用
協議
源地址
源端口
目的地址
目的端口
操作

IE
TCP
10.1/16
所有
所有
80
限制訪問

IE
TCP
10.1/16
所有
所有
443
限制訪問

MSN
TCP
10.1/16
所有
所有
1863
限制訪問

QQ
TCP
10.1/16
所有
所有
8000
限制訪問

QQ
UDP
10.1/16
所有
所有
8000
限制訪問

QQ
UDP
10.1/16
所有
所有
4000
限制訪問

HTTP代理
TCP
10.1/16
所有
所有
8080
限制訪問

HTTP代理
TCP
10.1/16
所有
所有
3128
限制訪問

Socks
TCP
10.1/16
所有
所有
1080
限制訪問

All other
IP
10.1/16
N/A
所有
N/A
允許訪問
然後,讓我們看看ACL應該在哪個位置配置比較好呢?由於是對訪問Internet進行控制,涉及到的是公司內部所有的網段,這們這次把ACL就放到公司的Internet出口處。在RTA上進行如下的配置,就能夠滿足領導的要求了:
time-range TR1
absolute start 00:00 1 June 2003 end 00:00 3 June 2003
periodic weekdays start 9:00 18:00
exit
ip access-list extend internet_limit
deny tcp 10.1.0.0 0.0.255.255 any eq 80 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 443 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 1863 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 8000 time-range TR1
deny udp 10.1.0.0 0.0.255.255 any eq 8000 time-range TR1
deny udp 10.1.0.0 0.0.255.255 any eq 4000 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 3128 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 8080 time-range TR1
deny tcp 10.1.0.0 0.0.255.255 any eq 1080 time-range TR1
permit ip any any
int s0/0
ip access-group internet_limit out
或int fa0/0
ip access-group internet_limit in
或者將ACL配置在SWA上,並
int vlan 3
ip access-group internet_limit out
呵呵,現在讓我們來看看在基於時間的訪問列表中都有哪些新內容吧:
time-range TR1:定義一個新的時間範圍,其中的TR1是爲該時間範圍取的一個名字。
absolute:爲絕對時間。只使用一次。可以定義爲1993-2035年內的任意一個時點。具體的用法請使用?命令查看。
Periodic:爲週期性重複使用的時間範圍的定義。完整格式爲periodic 日期關鍵字 開始時間結束時間。其中日期關鍵字的定義如下所示:
Monday 星期一
Tuesday 星期二
Wednesday 星期三
Thursday 星期四
Friday 星期五
Saturday 星期六
Sunday 星期天
daily 每天
weekdays 週一至五
weekend 週末
access-list 101 deny ip 10.1.0.0 0.0.255.255 any time-range TR1:注意這一句最後的time-range TR1,使這條ACL語句與time-range TR1相關聯,表明這條語句在time-range TR1所定義的時間範圍內才起作用。
注意:給出三種配置位置是幫助大家深刻理解關於in/out的區別的。acl是對從一個接上流入(in)或流出(out)路由器的包進行過濾的。
網管發問了,“你是怎麼找到這些應用的所使用的端口的?”。呵呵,在如下文件中可以找到大多數應用的端口的定義:
Win9x:%windir%\services
WinNT/2000/XP:%windir%\system32\drivers\etc\services
Linux:/etc/services
對於在services文件中找不到端口的應用,可以在運行程序的前後,運行netstat –ap來找出應用所使用的端口號。
使用IP ACL實現單向訪問控制
A公司準備實行薪資的不透明化管理,由於目前的薪資收入數據還放在財務部門的Vlan中,所以公司不希望市場和研發部門能訪問到財務部Vlan中的數據,另一方面,財務部門做爲公司的核心管理部門,又希望能訪問到市場和研發部門Vlan內的數據。我們的網管在接到這個需求後就在SWA上做了如下的配置:
ip access-list extend fi-access-limit
deny ip any 10.1.4.0 0.0.0.255
permit ip any any
int vlan 5
ip access-group fi-access-limit in
int vlan 6
ip access-group fi-access-limit in
配置做完後,測試了一下,市場和研發部門確實訪問不到財務部了,剛準備休息一下,財務部打電話過來說爲訪問不到市場與研發部門的數據了。這是怎麼回事呢?
讓我們回憶一下,在兩臺主機A與B之間要實現通訊,需要些什麼條件呢?答案是既需要A能向B發包,也需要B能向A發包,任何一個方向的包被阻斷,通訊都不能成功,在我們的例子中就存在這樣的問題,財務部訪問市場或研發部門時,包到到市場或研發部門的主機,由這些主機返回的包在到達路由器SWA時,由於普通的ACL均不具備檢測會話狀態的能力,就被deny ip any 10.1.4.0 0.0.0.255這條ACL給阻斷了,所以訪問不能成功。
要想實現真正意義上的單向訪問控制應該怎麼辦呢?我們希望在財務部門訪問市場和研發部門時,能在市場和研發部門的ACL中臨時生成一個反向的ACL條目,這樣就能實現單向訪問了。這裏就需要使用到反向ACL技術。我們可以按照如下配置實例就可以滿足剛纔的那個單向訪問需求:
ip access-list extend fi-main
permit tcp any 10.1.0.0 0.0.255.255 reflect r-main timeout 120
permit udp any 10.1.0.0 0.0.255.255 reflect r-main timeout 200
permit icmp any 10.1.0.0 0.0.255.255 reflect r-main timeout 10
permit ip any any
int vlan 4
ip access-group fi-main in
ip access-list extend fi-access-limit
uate r-main
deny ip any 10.1.4.0 0.0.0.255
permit ip any any
int vlan 5
ip access-group fi-access-limit in
int vlan 6
ip access-group fi-access-limit in
現在對反向ACL新增加的內容一一解釋如下:
n 新增了一個ACL(fi-main)並應用在具備訪問權限的接口下(財務部所在的vlan4)的in方向,使用該acl中具備reflect關鍵字的acl條目來捕捉建立反向ACL條目所需要的信息。我們將該ACL稱爲主ACL。
n reflect r-main timeout xxx:其中的reflect關鍵字表明該條目可以用於捕捉建立反向的ACL條目所需要的信息。r-main是reflect組的名字,具備相同reflect組名字的所有的ACL條目爲一個reflect組。timeout xxx表明由這條ACL條目所建立起來的反向ACL條目在沒有流量的情況下,多長時間後會消失(缺省值爲300秒),單位爲秒。
n uate r-main:我們注意到在fi-access-limit(我們把它稱爲反ACL)增加了這樣一句,這一句的意思是有符合r-main這個reflect組中所定義的acl條目的流量發生時,在uate語句所在的當前位置動態生成一條反向的permit語句。
反向ACL的侷限性:
n 必須使用命名的ACL,其實這不能叫侷限性,應該算注意事項吧;
n 對多通道應用程序如h323之類無法提供支持。
好了,到現在我們從IP ACL的基礎知識講起,中間講述了標準的IP ACL、擴展的IP ACL、基於名字的ACL、基於時間的ACL、反向ACL等諸多內容,這些ACL在ios的基本IP特性集中都能提供支持,在一般的企業網或校園網中也應該完全夠用了。如果各位看官還需要了解更加深入的知識,如CBAC之類能夠爲多通道應用程序提供良好支持的配置技術的,請參考《Cisco IOS Security Configuration Guide,Part 3: Traffic Filtering and Firewalls》。
“站住!”,70正想開溜,只聽那網管一聲大吼,“有什麼辦法能知道ACL都過濾了從哪兒來,到哪兒去的流量??”。呵呵,剛纔忘記說了,你只需要在需要記錄的acl條目的最後加一個log關鍵字,這樣在有符合該ACL條目數據包時,就會產生一條日誌信息發到你的設備所定義的日誌服務器上去。謝謝大家的捧場,本文到此爲止

 

訪問控制列表 企業網絡管理的必殺技(一)

大部分企業現在存在一種狀況,就是網絡訪問無序的狀態。如所有公司的員工都可以隨意反問財務部門的電腦;如在開集團的視頻會議的時候,其他員工下載電影或者遊戲浪費了寶貴的帶寬,導致視頻會議不怎麼連貫;如爲了管理的方便,大開Telnet端口,對於這個威脅視若無睹,等等。其實,對於這些問題,都可以通過訪問控制列表來實現。筆者將通過一系列的文章,來跟大家分享訪問控制列表的使用方法與使用技巧,跟大家一起利用訪問控制列表來提高網絡的管理。

  我們在企業日常網絡的管理中,經常會遇到一些進退兩難的問題。如我們即要保障網絡點暢通,同時,也必須設法拒絕那些不希望的網絡連接。雖然,我們也可以通過其他的一些方式,如密碼、權限、虛擬局域網等功能實現這些目的,但是,他們的管理往往是單一的,也就是說,只能實現一些獨立的管理功能,或者缺乏管理的靈活性。而訪問控制列表,則給我們網絡管理員提供了一個網絡控制的平臺。他就好象一個連通兩個國家的邊關要地,我們可以根據各種需要,允許某些人通過,而其他人則不允許,或者說有些人可以自由無阻的在兩個國家內通行,而有些人則必須憑證件才能夠通行;如當道路繁忙時,我們可以設置哪些人具有優先通行權;如我們可以設置每天的通行數量,等等。

  這個訪問控制列表是路由器上的一個服務,他結合路由器的基本功能,來實現對於訪問流量的過濾與控制。實際上,訪問控制列表就是一串連續的語句的集合,這些語句定義了哪些流量可以通過,哪些不可以通過;同時也定義了哪些流量具有優先性等等。

  具體的來說,訪問控制列表可以起到如下作用:

  1、 可以限制員工對外部網絡的有限訪問

  若在企業內網與外網的接口處,部署路由器的訪問控制列表的話,則可以決定哪種類型的通信流量杯轉發、哪些類型的通信流量被禁止等等。例如,我們可以允許只有Email的通信流量被允許,而其他類型的通信流量都會被路由器所禁止。根據這個控制規則,則就可以限制用戶內與外部網絡的訪問,只允許員工接收外部郵件,而不能進行其他的網絡訪問。通過類似的規則,還可以限制員工訪問外部的WEB服務器(禁止瀏覽網頁)、限制員工訪問FTP服務器(不允許像外部的FTP服務器上傳公司內部的資料,從而保護企業內部信息安全)、限制員工使用BT下載工具(BT工具由於其又是下載工具又是一個上載的服務器,會佔用比較大的帶寬,所以,應該禁止使用),等等。總之,若把帶有訪問控制列表的路由器部署在企業內網與外網的接口上,網絡管理員就可以根據協議、端口、IP地址等等各種參數以及相互的結合來對員工的網絡行爲進行管理控制。

 

訪問控制列表 企業網絡管理的必殺技(二)

案例一:拒絕某個IP地址訪問互聯網

  現在某個企業的網絡拓撲結構大致如下:

   

圖2


    
    公司的網絡結構比較簡單,一臺路由器連接交換機,然後再連接終端電腦,路由器作爲企業內網與外網連接的通信口。現在的問題是,企業在網絡管理員,可能需要限制某些IP地址,他們不能夠訪問互聯網。但是,他們可以訪問連接在路由器上的服務器。針對企業的這種需求,訪問控制列表該如何實現呢?下面我們就以拒絕一個IP地址爲例,談談該如何設置訪問控制列表,多個IP地址也是類似的道理。假設用戶電腦的IP地址爲192.168.0.10,我們現在需要拒絕這個IP地址訪問互聯網。

  首先,我們來看看訪問控制列表的設置。

  Access-list 1 deny host 192.168.0.10 0.0.0.0

  Access-list 1 permit 0.0.0.0 255.255.255.255

  只要在路由器上配置這兩條簡單的訪問控制列表語句,就可以達到限制192.168.0.10這個IP地址訪問互聯網。然後把這個訪問控制列表關聯到互聯網的出站端口即可。

  在寫以上的訪問控制列表語句的時候,我們需要注意以下幾點:

  1、要注意語句的順序。我們在上篇文章中,談到過訪問控制列表其實就是各種允許或者拒絕語句的集合。不過,其還有一個特點,就是其是根據從上到下的語句來判斷的。當第一個條件滿足時,就不會去判斷第二條語句。如現在有一個來自於192.168.0.10的數據包,他要發送到互聯網上。則在路由器進行檢查的時候,他從數據包中獲得IP地址,然後根據這個IP地址來覈對訪問控制列表。當他看到訪問控制列表中,第一條語句就是拒絕192.168.0.10這個IP地址訪問互聯網的話,則其就不會去判斷第二條語句/。假設我們現在把第一條語句跟第二條語句進行對換的話,又會有什麼結果發生呢?當路由器接到192.168.0.10發來的數據包,然後覈對訪問控制列表中的語句。而“Access-list 1 permit 0.0.0.0 255.255.255.255”這條語句的意思則是允許所有的IP地址從這個端口轉發出去。也就是說,也允許來自於192.168.0.10的數據包從這個端口出去。而這一條語句滿足的時候,第二條語句“Access-list 1 deny host 192.168.0.10 0.0.0.0”就不會被執行。此時,主機192.168.0.10就可以光明正大的訪問互聯網。這就達不到企業所期望的控制要求。所以,若訪問控制列表中的語句順序出現顛倒的話,則最後出現的結果可能是跟用戶預先期待的會大相徑庭。

  2、訪問控制列表的名字是用數字來表示的。如上面語句中的1,就表示這是一號訪問控制列表。把訪問控制列表關聯到具體的路由器端口時,也是利用這個數字進行關聯。不過這裏要注意一個潛規則。一般訪問控制列表分爲兩類,一是標準訪問控制列表,二是擴展的訪問控制列表。爲了管理的方便,一般1-99之間的數字用來表示是標準的訪問控制列表。而100到199之間,就表示路由器將用擴展的訪問控制列表條件來進行判斷。一般在定義訪問控制列表的時候,最好大家都要遵守這個規則。因爲有時會,可能不僅一個網絡管理員來管理路由器。

  3、訪問控制列表配置四步走。雖然在官方的文檔上,一般把訪問控制列表的配置分成兩步,不過,在實際工作中,筆者還是喜歡把他分爲四個步驟,如此的話,可以減少錯誤的發生。第一步就是書寫需求。從上面我們可以看出,訪問控制列表就是一條條條件語句的集合,而且對於條件的順序非常敏感。爲此,我們在做訪問控制列表之前,需要先對用戶的需求進行整理,先在紙上對於各條判斷語句做出順序的調整。第二步先在路由器模擬器上進行測試。因爲路由器的改動會影響整個網絡的運行,所以,在對路由器進行任何調整之前,筆者的建議是現在路由器的模擬器上進行測試。像CISCO就提供了一些很好的路由模擬器,企業可以在這些模擬器上測試自己配置的準確性。第三步在路由器上寫訪問控制列表語句。當測試沒有問題的時候,就把訪問控制列表語句移植到路由器上。第四步把訪問控制列表語句關聯到特定的端口。在訪問控制列表語句中,沒有指定這個訪問控制列表用於哪個端口。只有等訪問控制列表完成後,把這個訪問控制列表關聯到特定的路由器端口,這個訪問控制列表纔會起作用。

4、訪問控制列表建立之後,如果需要更改訪問控制列表,該怎麼辦呢?如我們現在想讓192.168.0.10這個Ip地址訪問互聯網,而是想禁止102.168.0.60這個IP地址。一般來說,用戶是不能直接更改這個訪問控制列表的,即使更改了也沒有作用。而是必須先用命令刪除整個訪問控制列表,然後再重新建立並進行端口的關聯。另外需要注意的是,沒一條新建的條件語句都被安置在訪問控制列表的最後面。還有就是,訪問控制列表建立之後,若想通過行序號刪除訪問控制列表中的某條語句,也是不可以的。如在上面這個訪問控制列表中,如果現在網絡管理員加入“Access-list 1 deny host 192.168.0.60 0.0.0.0”這條條件語句。網絡管理員原來的設想是同時拒絕192.168.0.10與192.168.0.60兩臺主機訪問互聯網絡,可是,若在原有的訪問控制列表中,加入語句的話,則會變爲:

  Access-list 1 deny host 192.168.0.10 0.0.0.0

  Access-list 1 permit 0.0.0.0 255.255.255.255

  Access-list 1 deny host 192.168.0.60 0.0.0.0

  而根據我們上面所講的訪問控制列表時按先後順序進行條件語句判斷的,由於第二條語句是允許所有的IP地址訪問互聯網絡,所以,第三條判斷語句永遠不會被執行。如此的話,就不能達到用戶的目的。

  如果現在網絡管理員想刪除第二條語句,然後建一條“Access-list 1 permit 0.0.0.0 255.255.255.255”語句,如此,順序不是對了嗎?這個設想是好的,但是,訪問控制列表時不能夠通過行序號來刪除某個行的條件語句。所以,如果用戶需要新加條件語句時,一般只有刪除原先的所有條件語句,然後重新建立。

  基於這個原因,所以,筆者不建議直接在路由器上編輯訪問控制列表。而是現在網絡管理的終端電腦上,利用記事本先編輯好訪問控制列表,然後再利用TFTP(簡單文本傳輸協議),把這訪問控制列表移植到路由器上。如此的話,就可以提高訪問控制列表編輯的效率,而且,通過簡單的複製、粘貼還可以減少錯誤的發生。

  5、若有多臺主機需要拒絕訪問互聯網,該如何處理呢?在企業網絡的實際管理中,往往不是一臺或者幾臺電腦不能訪問互聯網或者某個應用,而是某幾個部門的電腦不能訪問,如不能使用QQ等。遇到這種情況,若一個個的區制定IP地址,那顯然會非常的麻煩。此時,我們可以考慮,把這些不能夠訪問互聯網的電腦,對他們的IP地址盡心規劃,劃分成一個子網。然後再訪問控制列表中,對子網進行過濾,而不是對IP地址進行過濾。如現在網絡管理員希望對於192.168.4.0的子網進行管理,不允許他們訪問互聯網,但是訪問內部網絡是沒有限制的。此時,我們就可以按照如下的規則書寫訪問控制列表。

  Access-list 1 deny host 192.168.4.0 0.0.0.255

  Access-list 1 permit 0.0.0.0 255.255.255.255

  如此的話,只要數據包的IP地址屬於這個子網的,則路由器就會拒絕這些數據包通過其互聯網接口進行轉發。現在利用子網來進行過濾的話,我們只用了一條條件語句;而我們若利用單個IP地址來過濾的話,則這個子網內有多少主機就需要書寫多少條條件語句。而且,靈活性也很差。如以後我們還需要指定某些IP地址不能訪問互聯網的話,還必須對訪問控制列表進行調整。而我們若通過子網的形式進行過濾的話,以後遇到這種需求,只需要把用戶的電腦歸入到這個子網內,如此的話,在不調整原有訪問控制列表的情況下,也可以實現企業的網路管理需求。這明顯比按單個IP地址來進行過濾,要方便的多。

  上面筆者講述的是按IP地址或者子網來進行網絡過濾。不過,這有一個比較大的缺陷,這個過濾是“一棒子打死”的過濾方法。也就是說,根據IP地址過濾的話,則會過濾所有的網絡流量。被訪問控制列表列入黑名單的IP地址,不僅不能夠使用QQ等被禁止的網絡聊天工具,而且,也不能訪問互聯網的郵件等等。也就是說,不能根據協議的類型來管理網絡流量。而後面筆者要舉的擴展訪問控制列表的例子,就可以滿足企業根據協議對網絡流量進行管理的需求。

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