目前大多數(shù)的企事業(yè)單位和部門連Internet網(wǎng),通常都是一臺路由器與ISP連結(jié)實現(xiàn)。這臺路由器就是溝通外部Internet和內(nèi)部網(wǎng)絡(luò)的橋梁,如果這臺路由器能夠合理進(jìn)行安全設(shè)置,那么就可以對內(nèi)部的網(wǎng)絡(luò)提供一定安全性或?qū)σ延械陌踩嗔艘粚悠琳稀,F(xiàn)在大多數(shù)的路由器都是Cisco公司的產(chǎn)品或與其功能近似,本文在這里就針對Cisco路由器的安全配置進(jìn)行管理。
考慮到路由器的作用和位置,路由器配置的好壞不僅影響本身的安全也影響整個網(wǎng)絡(luò)的安全。目前路由器(以Cisco為例)本身也都帶有一定的安全功能,如訪問列表、加密等,但是在缺省配置時,這些功能大多數(shù)都是關(guān)閉的。需要進(jìn)行手工配置。怎樣的配置才能最大的滿足安全的需要,且不降低網(wǎng)絡(luò)的性能?本文從以下幾個部分分別加以說明:
一. 口令管理
口令是路由器是用來防止對于路由器的非授權(quán)訪問的主要手段,是路由器本身安全的一部分。最好的口令處理方法是將這些口令保存在TACACS+或RADIUS認(rèn)證服務(wù)器上。但是幾乎每一個路由器都要有一個本地配置口令進(jìn)行權(quán)限訪問。如何維護(hù)這部分的安全?
1. 使用enable secret
enable secret 命令用于設(shè)定具有管理員權(quán)限的口令。并且如果沒有enable secret,則當(dāng)一個口令是為控制臺TTY設(shè)置的,這個口令也能用于遠(yuǎn)程訪問。這種情況是不希望的。還有一點就是老的系統(tǒng)采用的是enable password,雖然功能相似,但是enable password采用的加密算法比較弱。
2. 使用service password-encryption
這條命令用于對存儲在配置文件中的所有口令和類似數(shù)據(jù)(如CHAP)進(jìn)行加密。避免當(dāng)配置文件被不懷好意者看見,從而獲得這些數(shù)據(jù)的明文。但是service password-encrypation的加密算法是一個簡單的維吉尼亞加密,很容易被破譯。這主要是針對enable password命令設(shè)置的口令。而enable secret命令采用的是MD5算法,這種算法很難進(jìn)行破譯的。但是這種MD5算法對于字典式攻擊還是沒有辦法。
所以不要以為加密了就可以放心了,最好的方法就是選擇一個長的口令字,避免配置文件被外界得到。且設(shè)定enable secret和service password-encryption。
二. 控制交互式訪問
任何人登錄到路由器上都能夠顯示一些重要的配置信息。一個攻擊者可以將路由器作為攻擊的中轉(zhuǎn)站。所以需要正確控制路由器的登錄訪問。盡管大部分的登錄訪問缺省都是禁止的。但是有一些例外,如直連的控制臺終端等。
控制臺端口具有特殊的權(quán)限。特別注意的是,當(dāng)路由器重啟動的開始幾秒如果發(fā)送一個Break信號到控制臺端口,則利用口令恢復(fù)程式可以很容易控制整個系統(tǒng)。這樣如果一個攻擊者盡管他沒有正常的訪問權(quán)限,但是具有系統(tǒng)重啟(切斷電源或系統(tǒng)崩潰)和訪問控制端口(通過直連終端、Modem、終端服務(wù)器)的能力就可以控制整個系統(tǒng)。所以必須保證所有連結(jié)控制端口的訪問的安全性。
除了通過控制臺登錄路由器外還有很多的方法,根據(jù)配置和操作系統(tǒng)版本的不同,可以支持如Telnet、rlogin、Ssh以及非基于IP的網(wǎng)絡(luò)協(xié)議如LAT、MOP、X.29和V.120等或者M(jìn)odem撥號。所有這些都涉及到TTY,本地的異步終端和撥號Modem用標(biāo)準(zhǔn)的"TTYs"。遠(yuǎn)地的網(wǎng)絡(luò)連結(jié)不管采用什么協(xié)議都是虛擬的TTYs,即"VTYs"。要控制路由器的訪問,最好就是控制這些TTYs或VTYs,加上一些認(rèn)證或利用login、no password命令禁止訪問。
1.控制TTY
缺省的情況下一個遠(yuǎn)端用戶可以連結(jié)到一個TTY,稱為"反向Telnet",允許遠(yuǎn)端用戶和連接到這個TTY上的終端或Modem進(jìn)行交互。但是這些特征允許一個遠(yuǎn)端用戶連接到一個本地的異步終端口或一個撥入的Modem端口,從而構(gòu)造一個假的登錄過程來偷盜口令或其他的非法活動。所以最好禁止這項功能,可以采用transport input none設(shè)置任何異步或Modem不接收來自網(wǎng)絡(luò)用戶的連結(jié)。如果可能,不要用相同的Modem撥入和撥出,且禁止反向Telnet撥入。
2.控制VTY
為了保證安全,任何VTY應(yīng)該僅允許指定的協(xié)議建立連結(jié)。利用transport input命令。如一個VTY只支持Telnet服務(wù),可以如下設(shè)置transport input telnet。如果路由器操作系統(tǒng)支持SSH,最好只支持這個協(xié)議,避免使用明文傳送的Telnet服務(wù)。如下設(shè)置:transport input ssh。也可以利用ip access-class限制訪問VTY的ip地址范圍。
因為VTYs的數(shù)目有一定的限制,當(dāng)所有的VTYs用完了,就不能再建立遠(yuǎn)程的網(wǎng)絡(luò)連結(jié)了。這就有可能被利用進(jìn)行Dos(拒絕服務(wù)攻擊)。這里攻擊者不必登錄進(jìn)入,只要建立連結(jié),到login提示符下就可以,消耗到所有的VTYs。對于這種攻擊的一個好的防御方法就是利用ip access-class命令限制最后一個VTYs的訪問地址,只向特定管理工作站打開。而其他的VTYs不限制,從而既保證了靈活性,也保證關(guān)鍵的管理工作不被影響。另一個方法是利用exec-timeout命令,配置VTY的超時。避免一個空閑的任務(wù)一直占用VTY。類似的也可以用service tcp-keepalives-in 保證Tcp建立的入連結(jié)是活動的,從而避免惡意的攻擊或遠(yuǎn)端系統(tǒng)的意外崩潰導(dǎo)致的資源獨占。更好的保護(hù)VTY的方法是關(guān)閉所有非基于IP的訪問,且使用IPSec加密所有的遠(yuǎn)端與路由器的連結(jié)。
三. 管理服務(wù)配置
許多的用戶利用協(xié)議如Snmp或Http來管理路由器。但是利用這些協(xié)議管理服務(wù)時,就會存在一定的安全問題。
1. Snmp
Snmp是最經(jīng)常用于路由器的管理的協(xié)議。目前使用最多的Snmp 版本1,但是這個版本的Snmp存在著很多的安全問題:
A. 使用明文認(rèn)證,利用"community"字符串。
B. 在周期性輪循時,重復(fù)的發(fā)送這些"community"。
C. 采用容易被欺騙的基于數(shù)據(jù)包的協(xié)議。
所以盡量采用Snmp V2,因為它采用基于MD5的數(shù)字認(rèn)證方式,并且允許對于不同的管理數(shù)據(jù)進(jìn)行限制。如果一定要使用Snmp V1,則要仔細(xì)的配置。如避免使用缺省的community如public,private等。避免對于每個設(shè)備都用相同的community,區(qū)別和限制只讀和讀寫commnity。對于Snmp V2,則可能的話對于不同的路由器設(shè)定不同的MD5安全值。還有就是最好使用訪問列表限定可以使用Snmp管理的范圍。
2. Http:
最近的路由器操作系統(tǒng)支持Http協(xié)議進(jìn)行遠(yuǎn)端配置和監(jiān)視。而針對Http的認(rèn)證就相當(dāng)于在網(wǎng)絡(luò)上發(fā)送明文且對于Http沒有有效的基于挑戰(zhàn)或一次性的口令保護(hù)。這使得用Http進(jìn)行管理相當(dāng)危險。
如果選擇使用Http進(jìn)行管理,最好用ip http access-class命令限定訪問地址且用ip http authentication命令配置認(rèn)證。最好的http認(rèn)證選擇是利用TACACS+或RADIUS服務(wù)器。
四. 日志
利用路由器的日志功能對于安全來說是十分重要的。Cisco路由器支持如下的日志
1. AAA日志:主要收集關(guān)于用戶撥入連結(jié)、登錄、Http訪問、權(quán)限變化等。這些日志用TACACS+或RADIUS協(xié)議送到認(rèn)證服務(wù)器并本地保存下來。這些可以用aaa accouting實現(xiàn)。
2. Snmp trap 日志:發(fā)送系統(tǒng)狀態(tài)的改變到Snmp 管理工作站。
3. 系統(tǒng)日志:根據(jù)配置記錄大量的系統(tǒng)事件。并可以將這些日志發(fā)送到下列地方:
a. 控制臺端口
b. Syslog 服務(wù)器
c. TTYs或VTYs
d. 本地的日志緩存。
這里最關(guān)心的就是系統(tǒng)日志,缺省的情況下這些日志被送到控制臺端口,通過控制臺監(jiān)視器來觀察系統(tǒng)的運行情況,但是這種方式信息量小且無法記錄下來供以后的查看。最好是使用syslog服務(wù)器,將日志信息送到這個服務(wù)器保存下來。
五.路由安全
1.防止偽造:
偽造是攻擊者經(jīng)常使用的方法。通過路由器的配置可以在一定程度上防止偽造。通常是利用訪問列表,限制通過的數(shù)據(jù)包的地址范圍。但是有下面幾點注意的。
A. 可以在網(wǎng)絡(luò)的任何一點進(jìn)行限制,但是最好在網(wǎng)絡(luò)的邊界路由器上進(jìn)行,因為在網(wǎng)絡(luò)內(nèi)部是難于判斷地址偽造的。
B. 最好對接口進(jìn)入的數(shù)據(jù)進(jìn)行訪問控制(用ip access-group list in)。因為輸出列表過濾只保護(hù)了位于路由器后的網(wǎng)絡(luò)部分,而輸入列表數(shù)據(jù)過濾還保護(hù)了路由器本身不受到外界的攻擊。
C. 不僅對外部的端口進(jìn)行訪問控制,還要對內(nèi)部的端口進(jìn)行訪問控制。因為可以防止來自內(nèi)部的攻擊行為。
下面是一個是一個訪問列表的例子:
ip access-list number deny icmp any any redirect 拒絕所有的Icmp 重定向
ip access-list number deny ip host 127.0.0.0 0.255.255.255 any 拒絕Loopback的數(shù)據(jù)包
ip access-list number deny ip 224.0.0.0 31.255.255.255 any 拒絕多目地址的數(shù)據(jù)包
除了訪問列表的限制外,還可以利用路由器的RPF檢查(ip verify unicast rpf)。這項功能主要用于檢查進(jìn)入接口的數(shù)據(jù)包的源地址,根據(jù)路由表判斷是不是到達(dá)這個源地址的路由是不是也經(jīng)過這個接口轉(zhuǎn)發(fā),如果不是則拋棄。這進(jìn)一步保證了數(shù)據(jù)源的正確性。但是這種方式不適合非對稱的路由,即A到B的路由與B到A的路由不相同。所以需要判斷清楚路由器的具體配置。
2.控制直接廣播
一個IP直接廣播是一個目的地為某個子網(wǎng)的廣播地址的數(shù)據(jù)包,但是這個發(fā)送主機的不與這個目的子網(wǎng)直接相連。所以這個數(shù)據(jù)包被路由器當(dāng)作普通包轉(zhuǎn)發(fā)直到目的子網(wǎng),然后被轉(zhuǎn)換為鏈路層廣播。由于Ip地址結(jié)構(gòu)的特性,只有直接連接到這個子網(wǎng)的路由器能夠識別一個直接廣播包。針對這個功能,目前存在一種攻擊稱為"smurf",攻擊者通過不斷的發(fā)送一個源地址為非法地址的直接廣播包到攻擊的子網(wǎng)。從而導(dǎo)致子網(wǎng)的所有主機向這個非法地址發(fā)送響應(yīng),最終導(dǎo)致目的網(wǎng)絡(luò)的廣播風(fēng)暴。
對于這種攻擊可以在路由器的接口上設(shè)置no ip directed-broadcast,但是這種直接廣播包,要被這個接口轉(zhuǎn)換成鏈路層的廣播而不是拋棄,所以為了更好防止攻擊,最好在將所有可能連接到目的子網(wǎng)的路由器都配置no ip directed-broadcast。
3. 防止路由攻擊
源路由攻擊一種常用攻擊方法,因為一些老的Ip實現(xiàn)在處理源路由包時存在問題,所以可能導(dǎo)致這些機器崩潰,所以最好在路由器上關(guān)閉源路由。用命令no ip source-route。
Icmp 重定向攻擊也是一種常用的路由攻擊方法。攻擊者通過發(fā)送錯誤的重定向信息給末端主機,從而導(dǎo)致末端主機的錯誤路由。這種攻擊可以通過在邊界路由器上設(shè)定過濾所有icmp重定向數(shù)據(jù)來實現(xiàn)。但是這只能阻止外部的攻擊者,如果攻擊者和目的主機在同一個網(wǎng)段則沒有辦法。
當(dāng)路由器采用動態(tài)協(xié)議時,攻擊者可以偽造路由包,破壞路由器的路由表。為了防止這種攻擊可以利用訪問列表(distribute-list in)限定正確路由信息的范圍。并且如果可能則采用認(rèn)證機制。如Rip 2或ospf支持認(rèn)證等。
六. 流量管理
目前大多數(shù)的Dos攻擊都是通過發(fā)送大量的無用包,從而占用路由器和帶寬的資源,導(dǎo)致網(wǎng)絡(luò)和設(shè)備過載,這種攻擊也稱為"洪泛攻擊"。對于這種攻擊的防范首先要明確瓶頸在哪里。例如:如果攻擊導(dǎo)致線路阻塞,則在線路的源路由節(jié)點進(jìn)行過濾可以有效的防止,但是在線路的目的路由端進(jìn)行過濾,就沒有什么效果。并且要注意路由器本身也可能成為攻擊的對象,而且這種情況更加糟糕。對于這種類型攻擊的防范有如下:
1. 網(wǎng)絡(luò)保護(hù):
利用路由器的Qos功能來分擔(dān)負(fù)載來防止一些洪泛攻擊。方式有WFQ,CAR,GTS等。但是要注意的是每種方式的應(yīng)用不同。如WFQ防止ping 攻擊比SYN攻擊更有效。所以要正確選擇方式,才能有效的防止攻擊。
2. 路由器本身保護(hù):
路由器雖然能保護(hù)網(wǎng)絡(luò)中其他部分避免過載,但是本身也需要保護(hù)不受到攻擊。應(yīng)有的安全配置有:
a. 采用CEF交換模式而不是傳統(tǒng)的路由表Cache方式,因為采用CEF方式,對于出現(xiàn)的新目的地不需要構(gòu)筑路由Cache入口。所以這種方式對于SYN攻擊能夠更好的防止(因為SYN攻擊用的是隨機的源地址)
b. 使用scheduler interval 或scheduler allocate。因為當(dāng)大量的數(shù)據(jù)包要路由器快速轉(zhuǎn)發(fā)情況下,可能路由器花費大量的時間處理網(wǎng)絡(luò)接口的中斷,導(dǎo)致其他的任務(wù)無法正常工作。為了避免這種情況,可以使用scheduler interval或scheduler allocate命令路由器在規(guī)定的時間間隔內(nèi)停止處理中斷去處理其他事件。這種方式的副作用很小,不會影響網(wǎng)絡(luò)的正常傳輸。
c. 設(shè)定缺省路由到空設(shè)備(ip route 0.0.0.0 0.0.0.0 null 0 255):
這個設(shè)置可以很好拋棄掉不可達(dá)的目的地值得數(shù)據(jù)包,增加路由器的性能。
七.服務(wù)管理
路由器通常都提供很多的服務(wù)如Finger、Telnet等,但是這些服務(wù)中一些能夠被攻擊者利用,所以最好禁止所有不需要的服務(wù)。
1.Cisco路由器提供一些基于TCP和UDP協(xié)議的小服務(wù)如:echo、chargen和discard。這些服務(wù)很少被使用,而且容易被攻擊者利用來越過包過濾機制。如echo服務(wù),就可以被攻擊者利用它發(fā)送數(shù)據(jù)包,好像這些數(shù)據(jù)包來自路由器本身。所以最好禁止這些服務(wù),可以利用no service tcp-small-servers 和 no service udp-small-servers命令來實現(xiàn)。
2.Finger、NTP、CDP:
Finger服務(wù)可能被攻擊者利用查找用戶和口令攻擊。NTP不是十分危險的,但是如果沒有一個很好的認(rèn)證,則會影響路由器正確時間,導(dǎo)致日志和其他任務(wù)出錯。CDP可能被攻擊者利用獲得路由器的版本等信息,從而進(jìn)行攻擊。所以對于上面的幾種服務(wù)如果沒有十分必要的需求,最好禁止他們。可以用no service finger、no ntp enabel、no cdp running(或no cdp enable )實現(xiàn)。
通過采用和遵循上面的配置就可以實現(xiàn)一個路由器的基本的安全,但是這對于一個嚴(yán)格要求的安全環(huán)境是不夠的,因為還有很多的攻擊無法從路由器上過濾,且對于來自內(nèi)部網(wǎng)絡(luò)的攻擊,路由器是無能力進(jìn)行保證的。但是通過一個路由器的安全配置,能夠為網(wǎng)絡(luò)的安全建立一個外部的屏障,減輕了內(nèi)部防火墻的負(fù)擔(dān),并且保證了路由器本身的安全。所以路由器的安全配置還是十分重要