中小企業(yè)網絡管理:ACL訪問控制列表
現(xiàn)在網絡是越來越復雜,網絡數(shù)據也呈現(xiàn)出多樣化,作為網絡管理員必須能夠拒絕不良的訪問,同時又要允許正常的訪問。當然現(xiàn)在有很多技術都可以實現(xiàn),我們今天來看在企業(yè)網絡管理中怎么利用Cisco路由ACL來實現(xiàn)訪問控制。
路由器為了過濾數(shù)據包,需要配置一系列的規(guī)則,以決定什么樣的數(shù)據包能夠通過,什么樣的數(shù)據包不應該通過;這些規(guī)則就是通過ACL來定義的。
ACL全稱是:AccessControlList,中文就是訪問控制列表。ACL是由permit或deny語句組成的一系統(tǒng)有順序的規(guī)則組成,這些規(guī)則根據數(shù)據包的源地址、目標地址、端口號等來描述。ACL通過這些規(guī)則對數(shù)據包進行分類,并將規(guī)則應用到路由器的某個接口上,這樣路由器就可以根據這些規(guī)則來判斷哪些數(shù)據包可以接收,哪些數(shù)據包需要拒絕。從而實現(xiàn)網絡的安全性,因此我們總結ACL主要目的很簡單就是允許、拒絕數(shù)據包通過路由器;允許或拒絕Telnet會話的建立。
當然路由器上默認是沒有ACL的也就是說默認情況下任何數(shù)據包都可以通過。就像如果你們單位沒有保安,那么任何人的出入都不會受到限制。那么就會給單位的財產帶來不安全的因素。因此,可以在單位門口設置一個保安部,那么這個保安就會看如果是本單位的人進入,直接通過,如果不是就要盤問一番,如果是“良民”就大大的放行,如果是“日軍”,就統(tǒng)統(tǒng)的“八個牙路”那么同理我們也可以在路由器的某個接口上設置這么一個保安,檢查通過該接口上的每一個數(shù)據包,符合某個條件的通過,或者是符合某個條件的不允許通過。從而實現(xiàn)對數(shù)據包過濾的作用。
我們所說的ACL分為兩種:標準和擴展
標準ACL,如下圖所示:
▲標準ACL
大家從圖中可以看出,標準ACL只檢查數(shù)據包中的源地址,至于數(shù)據幀頭是HDLC,數(shù)據報頭是TCP,標準ACL統(tǒng)統(tǒng)不管,就認一個源IP頭,也就是說標準ACL只會檢查IP數(shù)據包的源地址,然后根據是否滿足條件來決定是允許還是拒絕整個協(xié)議集。
擴展ACL,如下圖所示:
▲擴展ACL
擴展ACL比標準ACL檢查的東西要多,檢查源地址、目的地址、協(xié)議以及相應端口;即擴展ACL可以結合這四個參數(shù)來決定是允許還是拒絕某個特殊的協(xié)議如TCP,UDP,ICMP等等。所以擴展ACL的功能比標準ACL的功能要強!
那么如何定義標準或者是擴展ACL呢?
ACL的定義可以分為兩類:1使用數(shù)字號碼范圍來定義2使用名字來定義
1.使用數(shù)字號碼范圍定義:
標準ACL的范圍是1-99,擴展范圍1300-1999
擴展ACL范圍是100-1999,擴展范圍2000-2699
在此為什么使用擴展范圍呢,主要是因為現(xiàn)在的網絡規(guī)模和網絡的復雜性都在增加,原來的號碼范圍可能已經不能滿足需要,所以推出擴展范圍。
2.使用名字來定義
我們前面所介紹的標準ACL還是擴展ACL有一個使用起來很不方便的地方,就是如果在設置ACL的時候,如果發(fā)現(xiàn)中間有某個設置的不正確,希望刪除某一條,是做不到的,那么就可以使用命名ACL,可以為每個ACL定義一個形象的名字。好處是可以對ACL中的每一個具體的規(guī)則進行處理,但如果是使用數(shù)字的話,只能是刪除全部規(guī)則,不能刪除其中一個規(guī)則。這樣的話在大型網絡中就不是很方便,而使用命名ACL可以解決這個問題:語法也很簡單:
(config)#ipaccess-listextended/standareddufei注意:標準和擴展都可以創(chuàng)建命名ACL
然后在創(chuàng)建規(guī)則:如
Permit10.10.10.100.0.0.0
Perimit20.20.20.20.0.0.0.0
Deny30.30.30.300.0.0.0
那如果我們希望刪除其中一個如***個,則使用nopermit10.10.10.100.0.0.0即可,其他的仍然存在。
訪問控制列表還涉及到一個進站和出站的問題,也就是數(shù)據包的流向是進方向還是出方向。當然是進還是出要看具體情況,有的時候可以應用在任何一個上面。有的時候就必須唯一確定。
我們看一下出站方向上的ACL應用,我們還是從一個圖入手,如下圖所示:
▲ACL應用
分析:
1.數(shù)據包通過入站接口進入路由器,此時開始查找路由表中是否有匹配的路由條目,如果沒有,則直接將其丟棄。這一步和ACL還沒有任何關系,只是沒有相應路由,就無法轉發(fā)數(shù)據包,所以在此也需要說明一點,ACL也必須在數(shù)據包能夠被路由的基礎之上才起作用。
2.如果路由表中有相應的路由條目才被路由到一個相應的接口上。
3.查看該接口是否有ACL的配置,如果沒有則立即被轉發(fā),如果設置了ACL,則檢查該數(shù)據包是否匹配ACL規(guī)則。如果匹配并規(guī)則中明確該數(shù)據包可以正常轉發(fā)。否則丟棄!注意:如果ACL測試規(guī)則中沒有明確指定數(shù)據包通過,則說明此數(shù)據包沒有與相關的規(guī)則匹配,那么還有一個隱含的規(guī)則就是denyall,這一點和微軟的ISA是一樣的,安裝好防火墻就有一個默認規(guī)則拒絕一切,可以說是“六親不認”!
下面咱們就來細說一下ACL規(guī)則測試,如下圖:
▲ACL規(guī)則
如圖所示,在ACL中可以有多個規(guī)則。如圖:假設在ACL中有三個明確規(guī)則,則數(shù)據包進入后首先匹配***個規(guī)則,如果數(shù)據包匹配該規(guī)則并設置為permit,則數(shù)據包被轉發(fā),如果數(shù)據包也匹配該規(guī)則,但卻被設置為deny,則數(shù)據包直接被丟棄。
如果***個規(guī)則不匹配則該數(shù)據包繼續(xù)向前走,此時再檢查是否匹配第二個規(guī)則,如果匹配并設置為permit,則該數(shù)據包被轉發(fā),如果匹配但被設置為deny則被丟棄。
如果第二個規(guī)則也不匹配則繼續(xù)向前走,此時遇到第三個規(guī)則,同時還是檢查是否匹配,如果匹配并設置為permit,同樣也可以被轉發(fā),如果被設置為deny,則被丟棄。如果第三個是規(guī)則是***一個,該數(shù)據包都沒有匹配,
注意:
1.規(guī)則***千萬不要忘記還有一個隱含規(guī)則:DenyALL!!!
2.在此還需要注意,Cisco的ACL規(guī)則完全是按照規(guī)則編寫的順序進行的。所以最精確的規(guī)則應當寫在最上方,否則將被大范圍的規(guī)則所覆蓋而導致設置失效。如拒絕一臺主機訪問外網,必須先寫拒絕這一臺,然后再寫運行所有,那如果順序錯了,運行所有在上面,拒絕一臺在下面,系統(tǒng)會檢查一個數(shù)據包,發(fā)現(xiàn)任何一個數(shù)據包都可以通過,就直接轉發(fā)了,下面的一條就不起作用了!
3.必須先創(chuàng)建ACL,再應用到相應的接口上
4.ACL不能過濾路由器自己產生的數(shù)據。
ACL理論東西沒有太多,也很簡單,下面咱們來看一下標準控制列表的配置過程,其實不論是標準還是擴展ACL的配置主要就是兩個命令
1設置訪問控制列表
Router(config)#access-listacl_numberpermit|deny{}
2在接口上應用訪問控制列表
Ipaccess-groupacl_numberin|out
這里可以是某個接口,也可以是VTY,Qos等應用中。其中in代表是入站方向,out代表的是出站方向。
那么標準ACL就顯得更簡單了,如:
Access-listacl_number{permit|deny}source[mask]
其中acl_number指的是ACL編號范圍:1-99或1300-1999
Permit表示通過
Deny表示拒絕
Source代表的是源地址,可以是某一個主機或是一個網段
Mask掩碼,但需要注意的是ACL支持的是反掩碼,所以在設置的時候一定要注意。
但我們有時候可能會在source前面加上host或是any,這又是什么用意呢?
Host不是必須的,但是當匹配一個特定的主機地址時是非常有用的。也就是使用host的時候是匹配的某一個具體的主機,是一個精確匹配,此時的反掩碼則0.0.0.0
如:
1Access-list10permit10.10.10.00.0.0.255表示的是一個網段10.10.10.0,表示匹配該網段的所有數(shù)據報文。
2access-list10permit10.10.10.100.0.0.0表示匹配源地址是10.10.10.10這一個具體的主機,這個語句可以寫成access-list10permithost10.10.10.10
Any也不是必須的,但是如果是匹配所有報文時是非常有用的,表示匹配所有的地址,是0.0.0.0255.255.255.255的簡寫
如:
Access-list10permit0.0.0.0255.255.255.255表示所有數(shù)據包通過,此語句可以寫成:
Access-list10permitany#p#
下面結合幾個小實例來看一下標準ACL的具體配置過程:
我們所參考的拓撲圖如下:
▲實驗拓撲圖
我們結合這個拓撲來做三個實驗:
實例1:我們只允許192.168.10.0與192.168.20.0兩個網段可以通訊
Router>en
Router#conft
Enterconfigurationcommands,oneperline.EndwithCNTL/Z.
Router(config)#interfacefa0/0
Router(config-if)#ipaddress192.168.10.1255.255.255.0
Router(config-if)#noshutdown
Router(config-if)#exit
Router(config)#interfacefa0/1
Router(config-if)#ipaddress192.168.20.1255.255.255.0
Router(config-if)#noshutdown
Router(config-if)#exit
Router(config)#interfacee1/0
Router(config-if)#ipaddress192.168.30.1255.255.255.0
Router(config-if)#noshutdown
現(xiàn)在默認情況下,三個網段之間是可以進行正常通訊的,如圖:
▲配置前
那么下面我們怎么做才能只讓10.0和20.0通訊呢,具體配置如下:
Router>enable
Router#conft
Router(config)#access-list1permit192.168.10.00.0.0.255
Router(config)#access-list2permit192.168.20.00.0.0.255
Router(config)#interfacefa0/0
Router(config-if)#ipaccess-group2out
Router(config-if)#exit
Router(config)#interfacefa0/1
Router(config-if)#ipaccess-group1out
Router(config-if)#exit
Router(config)#
然后測試如下:
▲配置后
剛才我們是匹配的整個網段,下面咱們看如何匹配一個具體的主機:
實例2:我們不允許192.168.10.10可以訪問非192.168.20.0網段,也就是不允許192.168.10.10這一臺機器訪問192.168.30.0網段
具體配置如下:
Router>enable
Router#conft
Router(config)#access-list1deny192.168.10.100.0.0.0
Router(config)#access-list1permitany
Router(config)#interfacee0/2
Router(config-if)#ipaccess-group1out
此時再來測試:
▲禁止某一主機
大家可以看到和192.168.20.0網段通訊沒有問題,但是和192.168.30.0網段就不行,這就是對某一臺機器進行精確匹配,那么如果我們把192.168.10.10的IP改為192.168.10.100又如何呢?
▲調整IP
發(fā)現(xiàn)又可以通訊了,因為和我們所設置的規(guī)則不匹配了!
同時我們也是通過幾個實例來具體看一下擴展ACL的配置,關于標準ACL與擴展ACL的區(qū)別,我們在前面已經做了介紹,在此不再累述,下面看具體的匹配命令;
1創(chuàng)建ACL:
Access-listACL_numberpermit|denyprotocolsourewildcard[port]destinationwaildcard[port]
大家一看就覺得比標準ACL要復雜點,這要可以指定源地址,目標地址,使用的協(xié)議以及使用的端口號等,當然還可以使用log來指定日志服務器,在此不作講解!
2在接口上應用ACL
Ipaccess-groupACL_numberin|out
下面咱們還是通過具體的實例來掌握擴展ACL的應用
實例3:我們拒絕192.168.20.0telnet到192.168.10.0上的任何一個主機上!
▲拓撲圖
具體配置如下:
Router>enable
Router#confterminal
Router(config)#access-list101denytcp192.168.20.00.0.0.255192.168.10.00.0.0.255eq23
Router(config)#access-list101permitipanyany
注意:默認有一個denyall
接下來要應用以相應的接口上,例如出端口E0/0
Router(config)#interfacee0/0
Router(config-if)#ipaccess-group101out
配置還是很簡單的!
只不過需要注意有的服務是有輔助端口的,所以一定要把輔助端口一起封!
如,如果需要封FTP服務器,則需要使用兩條語句:
Router(config)#access-list100denytcp192.168.20.00.0.0.255192.168.10.00.0.0.255eq21
Router(config)#access-list100denytcp192.168.20.00.0.0.255192.168.10.00.0.0.255eq20
查看某上端口上應用的訪問控制列表,我們可以使用命令:show ip interface接口,如圖:
▲查看接口
還可以查看所有的訪問控制列表:show access-lists
▲查看ACL表#p#
反向ACL的用途
反向訪問控制列表屬于ACL的一種高級應用。一般使用在源訪問對方可以,但反之不行。如A訪問B節(jié)點可以,但是B不能訪問A節(jié)點。如我們在Router1上可以telnet到Router2,但Router2不能telnet1上。那有人可能要問這是怎么實現(xiàn)的,在這里我們就以ping為例講一下其中的原理,我們知道Ping使用的是icmp協(xié)議,但同樣是icmp協(xié)議,它所使用的類型是不同的,簡單說我們ping對方,是發(fā)出一個icmprequest類型的數(shù)據包,但是對方回來的是則是攜帶了我們request標志的reply類型的包,所以我們如果只希望ApingB,不讓BpingA,就可以這么判斷,如果ApingB,發(fā)現(xiàn)回來的ICMP包是攜帶了A的request標簽則允許通過,否則拒絕,就OK了!也可以用于保護網絡的安全性,如我們只能由內部網絡始發(fā)的,外部網絡的響應流量可以進入,由外部網絡始發(fā)的流量如果沒有得到一個明確的允許,是禁止進入的。說白了,就是內網可以訪問外網,但外網不能訪問內網,如圖所示:
▲拓撲圖
如,咱們看一個實例:我們希望內網的192.160.10.0網段可以訪問(ping)外網的192.160.20.0,但是外網不能ping內網。這里需要使用ReflexiveACL技術,基中包含兩個部分,一部分是outbound的配置,另一部分是inbound的配置。工作流程:由內網始發(fā)的數(shù)據到達路由器后,路由器會生成一個三層和四層的臨時訪問表,在此會將其中的一些參數(shù)作一些更改,如源IP和目標IP,源端口和目標端口適當作些對調操作。這樣的話,當數(shù)據包從外網再進入內網的時候會檢查此表,如果匹配上,則路由器才會允許此數(shù)據進入內網。
ACL應用位置:
標準的ACL的應用位置應該是離目的近的地方,而擴展的ACL則應該是離源近的地方對于標準的ACL來說,僅定義了它的源,如果你把它放在離源近的地方,那么它會把所有該源的流量給阻斷,或者產生其他的效果.為了避免這種情況產生,所以將標準的ACL放置在離目標較近的地方,也就是遠源端.但是對于擴展的來說,我們定義了它的源IP,目標IP,源端口,目標端口,以及協(xié)議,這種完全可以進行精確的匹配,所以不用擔心它會對不需要控制的流量產生影響,而將其放在近源端口,這樣也可以在一定程度上面節(jié)約帶寬。
基于時間的ACL:
顧名思義是根據時間對ACL進行配置,如我們單位規(guī)定禁止在上網班時間使用QQ,MSN等等操作。如:我們禁止在上午9:00--下午17:00訪問互聯(lián)網上的Web站點即(http:80/https:443)
基于時間的訪問控制列表由兩部分組成,***部分是定義時間段,第二部分是用擴展訪問控制列表定義規(guī)則。這里我們主要講解下定義時間段,具體格式如下:
time-range時間段名稱
absolutestart[小時:分鐘][日月年][end][小時:分鐘][日月年]
當然也可以使用Periodic:為周期性重復使用的時間范圍的定義。完整格式為periodic日期關鍵字開始時間結束時間
例如:time-rangedufei
absolutestart9:001may2009end12:001may2010
意思是定義了一個時間段,名稱為dufei,并且設置了這個時間段的起始時間為2009年5月1日9點,結束時間為2010年5月1日中午9點。我們通過這個時間段和擴展ACL的規(guī)則結合就可以指定出針對自己公司時間段開放的基于時間的訪問控制列表了。當然我們也可以定義工作日和周末。下面看一個小例子:
目的:我們部分規(guī)定只允許192.168.15.0網段的用戶在周末訪問192.168.10.10(娛樂服務器)上的FTP資源,工作時間不能下載該FTP資源。
路由器配置命令:
ime-rangeftptime定義時間段名稱為ftptime
periodicweekend00:00to23:59定義具體時間范圍,為每周周末(6,日)的0點到23點59分。當然可以使用periodicweekdays定義工作日或跟星期幾定義具體的周幾。
access-list101denytcpany192.168.10.100.0.0.0eqftptime-rangeftptime設置ACL
access-list101permitipanyany設置ACL,容許其他時間段和其他條件下的正常訪問。
inte1
ipaccess-group101out應用ACL
在VTY上應用標準ACL:
我們可以利用ACL來控制對VTY的訪問,ACL可以用在VTY上,我們在第二節(jié)中介紹過VTY,其實也就是對Cisco設備的Telnet操作,一般我們說可以將ACL應用在5個VTY虛擬終端上。但是要注意的是Cisco是否僅支持5個VTY,這要根據路由器的版本和內存和決定,所以在設置ACL的時候一定要先弄清楚VTY的數(shù)量)
將ACL應用在VTY上,可以實現(xiàn)不考慮路由器的物理接口的拓撲來實現(xiàn)對路由器的遠程控制。但是要注意的是在此只能使用標準ACL。
那么具體設置命令也很簡單:我們前面是在某個接口上設置ACL,所以必須使用interface命令進行接口模式,而在此需要進入vty線路模式。在應用的時候是使用access-class而不是ipaccess-group;我們來具體看一下:
1進行線路模式
命令:linevtyvty-_number|vry_range
在此可以一個具體終端或指定的一個地址范圍,一定要注意事先查清VTY的數(shù)量
2應用ACL:
命令:access-classACL_numberin|out
我們來看一個具體的配置實例:
實例:我們拒絕R3路由器遠程Telnet到R1路由器上
▲實驗拓撲圖
配置前提是已經使用OSPF協(xié)議實現(xiàn)了全網互通!
R1路由器的配置:
R1#enable
R1#conft
R1(config)#interfacefa0/1
R1(config-if)#ipaddress192.168.10.1255.255.255.0
R1(config-if)#noshutdown
R1(config-if)#exit
R1(config)#interfacefa0/0
R1(config-if)#ipaddress192.168.100.100255.255.255.0
R1(config-if)#exit
R1(config)#routerospf1
R1(config-router)#network192.168.100.00.0.0.255area0
R1(config-router)#network192.168.10.00.0.0.255area0
R1(config-router)#end
至于R2與R3的配置在此不再詳細描述!
我們可以在R1上查看路由信息:
▲R1上的路由信息
并且實現(xiàn)全網全通:
▲全網通暢
再往下,我們準備開啟R1的telnet功能:
R1#configuret
R1(config)#usernamedufeipassworddufei
R1(config)#linevty04
R1(config-line)#loginlocal
此時我們到R3上遠程Telnet測試是否成功!
R3>enable
R3#tel
R3#telnet192.168.10.1
Trying192.168.10.1...Open
UserAccessVerification
Username:dufei
Password:
R1>
▲telnet登錄
OK!登錄成功,下面我們就來看一下如何拒絕R3的遠程Telnet.
R1(config)#access-list10denyhost192.168.20.2
R1(config)#access-list10permitany
R1(config)#linevty04
R1(config-line)#access-class10in
R1(config-line)#exit
然后R3再次Telnet到R1上,見到下圖
▲成功登錄
但是我們使用R2是可以Telnet到R1上的,如圖所示:
▲ACL設置生效
至此,實驗完畢,ACL的基本應用就這么簡單。