什么是簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)
什么是簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)
SNMP(Simple Network Management Protocol,簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)的前身是簡(jiǎn)單網(wǎng)關(guān)監(jiān)控協(xié)議(SGMP),用來(lái)對(duì)通信線路進(jìn)行管理。隨后,人們對(duì)SGMP進(jìn)行了很大的修改,特別是加入了符合Internet定義的SMI和MIB:體系結(jié)構(gòu),改進(jìn)后的協(xié)議就是著名的SNMP。SNMP的目標(biāo)是管理互聯(lián)網(wǎng)Internet上眾多廠家生產(chǎn)的軟硬件平臺(tái),因此SNMP受Internet標(biāo)準(zhǔn)網(wǎng)絡(luò)管理框架的影響也很大?,F(xiàn)在SNMP已經(jīng)出到第三個(gè)版本的協(xié)議,其功能較以前已經(jīng)大大地加強(qiáng)和改進(jìn)了。
簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)首先是由Internet工程任務(wù)組織(Internet Engineering Task Force)(IETF)的研究小組為了解決Internet上的路由器管理問(wèn)題而提出的。許多人認(rèn)為 SNMP在IP上運(yùn)行的原因是Internet運(yùn)行的是TCP/IP協(xié)議,然而事實(shí)并不是這樣。
SNMP被設(shè)計(jì)成與協(xié)議無(wú)關(guān),所以它可以在IP,IPX,AppleTalk,OSI以及其他用到的傳輸協(xié)議上被使用。
SNMP是一系列協(xié)議組和規(guī)范(見下表),它們提供了一種從網(wǎng)絡(luò)上的設(shè)備中收集網(wǎng)絡(luò)管理信息的方法。SNMP也為設(shè)備向網(wǎng)絡(luò)管理工作站報(bào)告問(wèn)題和錯(cuò)誤提供了一種方法。
從被管理設(shè)備中收集數(shù)據(jù)有兩種方法:一種是只輪詢(polling-only)的方法,另一種是基于中斷(interrupt-based)的方法。
如果你只使用只輪詢的方法,那么網(wǎng)絡(luò)管理工作站總是在控制之下。而這種方法的缺陷在于信息的實(shí)時(shí)性,尤其是錯(cuò)誤的實(shí)時(shí)性。你多久輪詢一次,并且在輪詢時(shí)按照什么樣的設(shè)備順序呢?如果輪詢間隔太小,那么將產(chǎn)生太多不必要的通信量。如果輪詢間隔太大,并且在輪詢時(shí)順序不對(duì),那么關(guān)于一些大的災(zāi)難性的事件的通知又會(huì)太饅。這就違背了積極主動(dòng)的網(wǎng)絡(luò)管理目的。
當(dāng)有異常事件發(fā)生時(shí),基于中斷的方法可以立即通知網(wǎng)絡(luò)管理工作站(在這里假設(shè)該設(shè)備還沒有崩潰,并且在被管理設(shè)備和管理工作站之間仍有一條可用的通信途徑)。然而,這種方法也不是沒有他的缺陷的,首先,產(chǎn)生錯(cuò)誤或自陷需要系統(tǒng)資源。如果自陷必須轉(zhuǎn)發(fā)大量的信息,那么被管理設(shè)備可能不得不消耗更多的時(shí)間和系統(tǒng)資源來(lái)產(chǎn)生自陷,從而影響了它執(zhí)行主要的功能(違背了網(wǎng)絡(luò)管理的原則2)。
而且,如果幾個(gè)同類型的自陷事件接連發(fā)生,那么大量網(wǎng)絡(luò)帶寬可能將被相同的信息所占用(違背了網(wǎng)絡(luò)管理的原則1)。尤其是如果自陷是關(guān)于網(wǎng)絡(luò)擁擠問(wèn)題的時(shí)候,事情就會(huì)變得特別糟糕??朔@一缺陷的一種方法就是對(duì)于被管理設(shè)備來(lái)說(shuō),應(yīng)當(dāng)設(shè)置關(guān)于什么時(shí)候報(bào)告問(wèn)題的閾值(threshold)。但不幸的是這種方法可能再一次違背了網(wǎng)絡(luò)管理的原則2,因?yàn)樵O(shè)備必須消耗更多的時(shí)間和系統(tǒng)資源,來(lái)決定一個(gè)自陷是否應(yīng)該被產(chǎn)生。
結(jié)果,以上兩種方法的結(jié)合:面向自陷的輪詢方法(trap-directed polling)可能是執(zhí)行網(wǎng)絡(luò)管理最為有效的方法了。一般來(lái)說(shuō),網(wǎng)絡(luò)管理工作站輪詢?cè)诒还芾碓O(shè)備中的代理來(lái)收集數(shù)據(jù),并且在控制臺(tái)上用數(shù)字或圖形的表示方式來(lái)顯示這些數(shù)據(jù)。這就允許網(wǎng)絡(luò)管理員分析和管理設(shè)備以及網(wǎng)絡(luò)通信量了。
被管理設(shè)備中的代理可以在任何時(shí)候向網(wǎng)絡(luò)管理工作站報(bào)告錯(cuò)誤情況,例如預(yù)制定閾值越界程度等等。代理并不需要等到管理工作站為獲得這些錯(cuò)誤情況而輪詢他的時(shí)候才會(huì)報(bào)告。這些錯(cuò)誤情況就是眾所周知的SNMP自陷(trap)。
在這種結(jié)合的方法中,當(dāng)一個(gè)設(shè)備產(chǎn)生了一個(gè)自陷時(shí),你可以使用網(wǎng)絡(luò)管理工作站來(lái)查詢?cè)撛O(shè)備(假設(shè)它仍然是可到達(dá)的),以獲得更多的信息。
簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議允許網(wǎng)絡(luò)管理工作站軟件與被管理設(shè)備中的代理進(jìn)行通信。這種通信可以包括來(lái)自管理工作站的詢問(wèn)消息、來(lái)自代理的應(yīng)答消息或者來(lái)自代理給管理工作站的自陷消息。為了保證因網(wǎng)絡(luò)管理而帶來(lái)的通信量是最小的(網(wǎng)絡(luò)管理原則1),SNMP使用了一種異步客戶機(jī)/服務(wù)器方法。這意味著一個(gè)SNMP實(shí)體(管理工作站或被管理設(shè)備)在發(fā)出一條消息后不需要等待一個(gè)應(yīng)答;然而,除了自陷的情況以外應(yīng)答都是要被產(chǎn)生的。如果需要的話該實(shí)體可以發(fā)送另一條消息,或者也可以繼續(xù)它預(yù)先被定義的功能。SNMPv1實(shí)現(xiàn)起來(lái)很簡(jiǎn)單并且對(duì)資源占用不多,它只有5個(gè)請(qǐng)求/響應(yīng)原語(yǔ):
get-request
set-request
get-next-request
get-reponse
trap
網(wǎng)絡(luò)管理工作站可以把感興趣的變量值提取到其應(yīng)用程序中,只要發(fā)出get-request或get-next-request報(bào)文即可。前者是指定對(duì)象的讀操作,后者則提供了一個(gè)樹遍歷操作符,便于確定一個(gè)代理進(jìn)程支持哪些對(duì)象。網(wǎng)絡(luò)管理工作站可以修改代理進(jìn)程中的變量值,只要發(fā)出set-request報(bào)文即可。
如果沒有發(fā)生錯(cuò)誤,代理進(jìn)程可以用get-reponse原語(yǔ)回答這些請(qǐng)求。另外,利用trap原語(yǔ),代理進(jìn)程可以異步地發(fā)送告警給網(wǎng)絡(luò)管理工作站,告訴它發(fā)生了某個(gè)滿足預(yù)設(shè)條件的事件。
SNMP結(jié)構(gòu)圖
實(shí)現(xiàn)中的經(jīng)驗(yàn)和設(shè)計(jì)過(guò)程中的不斷完善給SNMPv2帶來(lái)了協(xié)議改進(jìn)意見,即給網(wǎng)絡(luò)管理工作站增加一個(gè)成塊讀操作get-bulk-request報(bào)文。當(dāng)需要用一個(gè)請(qǐng)求原語(yǔ)提取大量數(shù)據(jù)(如讀取某個(gè)表的內(nèi)容)時(shí)就可以調(diào)用它以提高效率。SNMPv2也引進(jìn)管理進(jìn)程和管理進(jìn)程之間的通信進(jìn)行狀況報(bào)告,為此增加了一條原語(yǔ)inform-request,并把get-response簡(jiǎn)化成更加合理的名稱reponse。trap報(bào)文則已改為snmpv2-trap,并與所有的協(xié)議報(bào)文具有同樣的格式。
接入Internet的網(wǎng)絡(luò)面臨許多風(fēng)險(xiǎn),Web服務(wù)器可能面臨攻擊,郵件服務(wù)器的安全也令人擔(dān)憂。但除 此之外,網(wǎng)絡(luò)上可能還存在一些隱性的漏洞。大多數(shù)網(wǎng)絡(luò)總有一些設(shè)備運(yùn)行著SNMP服務(wù),許多時(shí)候這些SNMP服務(wù)是不必要的,但卻沒有引起網(wǎng)絡(luò)管理員的重視。
根據(jù)SANS協(xié)會(huì)的報(bào)告,對(duì)于接入Internet的主機(jī),SNMP是威脅安全的十大首要因素之一;同時(shí),SNMP還是Internet主機(jī)上最常見的服務(wù)之一。特別地,SNMP服務(wù)通常在位于網(wǎng)絡(luò)邊緣的設(shè)備(防火墻保護(hù)圈之外的設(shè)備)上運(yùn)行,進(jìn)一步加劇了SNMP帶來(lái)的風(fēng)險(xiǎn)。這一切聽起來(lái)出人意料,但其實(shí)事情不應(yīng)該是這樣的。
〖一、背景知識(shí)〗
SNMP開發(fā)于九十年代早期,其目的是簡(jiǎn)化大型網(wǎng)絡(luò)中設(shè)備的管理和數(shù)據(jù)的獲取。許多與網(wǎng)絡(luò)有關(guān)的軟件包,如HP的OpenView和Nortel Networks的Optivity Network Management System,還有Multi Router Traffic Grapher(MRTG)之類的免費(fèi)軟件,都用SNMP服務(wù)來(lái)簡(jiǎn)化網(wǎng)絡(luò)的管理和維護(hù)。
由于SNMP的效果實(shí)在太好了,所以網(wǎng)絡(luò)硬件廠商開始把SNMP加入到它們制造的每一臺(tái)設(shè)備。今天,各種網(wǎng)絡(luò)設(shè)備上都可以看到默認(rèn)啟用的SNMP服務(wù),從交換機(jī)到路由器,從防火墻到網(wǎng)絡(luò)打印機(jī),無(wú)一例外。
僅僅是分布廣泛還不足以造成威脅,問(wèn)題是許多廠商安裝的SNMP都采用了默認(rèn)的通信字符串(例如密碼),這些通信字符串是程序獲取設(shè)備信息和修改配置必不可少的。采用默認(rèn)通信字符串的好處是網(wǎng)絡(luò)上的軟件可以直接訪問(wèn)設(shè)備,無(wú)需經(jīng)過(guò)復(fù)雜的配置。
通信字符串主要包含兩類命令:GET命令,SET命令。GET命令從設(shè)備讀取數(shù)據(jù),這些數(shù)據(jù)通常是操作參數(shù),例如連接狀態(tài)、接口名稱等。SET命令允許設(shè)置設(shè)備的某些參數(shù),這類功能一般有限制,例如關(guān)閉某個(gè)網(wǎng)絡(luò)接口、修改路由器參數(shù)等功能。但很顯然,GET、SET命令都可能被用于拒絕服務(wù)攻擊(DoS)和惡意修改網(wǎng)絡(luò)參數(shù)。
最常見的默認(rèn)通信字符串是public(只讀)和private(讀/寫),除此之外還有許多廠商私有的默認(rèn)通信字符串。幾乎所有運(yùn)行SNMP的網(wǎng)絡(luò)設(shè)備上,都可以找到某種形式的默認(rèn)通信字符串。
SNMP 2.0和SNMP 1.0的安全機(jī)制比較脆弱,通信不加密,所有通信字符串和數(shù)據(jù)都以明文形式發(fā)送。攻擊者一旦捕獲了網(wǎng)絡(luò)通信,就可以利用各種嗅探工具直接獲取通信字符串,即使用戶改變了通信字符串的默認(rèn)值也無(wú)濟(jì)于事。
近幾年才出現(xiàn)的SNMP 3.0解決了一部分問(wèn)題。為保護(hù)通信字符串,SNMP 3.0使用DES(Data Encryption Standard)算法加密數(shù)據(jù)通信;另外,SNMP 3.0還能夠用MD5和SHA(Secure Hash Algorithm)技術(shù)驗(yàn)證節(jié)點(diǎn)的標(biāo)識(shí)符,從而防止攻擊者冒充管理節(jié)點(diǎn)的身份操作網(wǎng)絡(luò)。
雖然SNMP 3.0出現(xiàn)已經(jīng)有一段時(shí)間了,但目前還沒有廣泛應(yīng)用。如果設(shè)備是2、3年前的產(chǎn)品,很可能根本不支持SNMP 3.0;甚至有些較新的設(shè)備也只有SNMP 2.0或SNMP 1.0。
即使設(shè)備已經(jīng)支持SNMP 3.0,許多廠商使用的還是標(biāo)準(zhǔn)的通信字符串,這些字符串對(duì)黑客組織來(lái)說(shuō)根本不是秘密。因此,雖然SNMP 3.0比以前的版本提供了更多的安全特性,如果配置不當(dāng),其實(shí)際效果仍舊有限。
〖二、禁用SNMP〗
要避免SNMP服務(wù)帶來(lái)的安全風(fēng)險(xiǎn),最徹底的辦法是禁用SNMP。如果你沒有用SNMP來(lái)管理網(wǎng)絡(luò),那就沒有必要運(yùn)行它;如果你不清楚是否有必要運(yùn)行SNMP,很可能實(shí)際上不需要。即使你打算以后使用SNMP,只要現(xiàn)在沒有用,也應(yīng)該先禁用SNMP,直到確實(shí)需要使用SNMP時(shí)才啟用它。
下面列出了如何在常見的平臺(tái)上禁用SNMP服務(wù)。
■ Windows XP和Windows 2000
在XP和Win 2K中,右擊“我的電腦”,選擇“管理”。展開“服務(wù)和應(yīng)用程序”、“服務(wù)”,從服務(wù)的清單中選擇SNMP服務(wù),停止該服務(wù)。然后打開服務(wù)的“屬性”對(duì)話框,將啟動(dòng)類型該為“禁用”(按照微軟的默認(rèn)設(shè)置,Win 2K/XP默認(rèn)不安裝SNMP服務(wù),但許多軟件會(huì)自動(dòng)安裝該服務(wù))。
■ Windows NT 4.0
選擇“開始”→“設(shè)置”,打開服務(wù)設(shè)置程序,在服務(wù)清單中選擇SNMP服務(wù),停止該服務(wù),然后將它的啟動(dòng)類型該為禁用。
■ Windows 9x
打開控制面板的網(wǎng)絡(luò)設(shè)置程序,在“配置”頁(yè)中,從已安裝的組件清單中選擇“Microsoft SNMP代理”,點(diǎn)擊“刪除”。檢查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices和HKEY_LOCAL_MACHINE\ SOFTWARE\Microsoft\Windows\CurrentVersion\Run注冊(cè)鍵,確認(rèn)不存在snmp.exe。
■ Cisco Systems硬件
對(duì)于Cisco的網(wǎng)絡(luò)硬件,執(zhí)行“no SNMP-server”命令禁用SNMP服務(wù)。如果要檢查SNMP是否關(guān)閉,可執(zhí)行“show SNMP”命令。這些命令只適用于運(yùn)行Cisco IOS的平臺(tái);對(duì)于非IOS的Cisco設(shè)備,請(qǐng)參考隨機(jī)文檔。
■ HP硬件
對(duì)于所有使用JetDirect卡(絕大部分HP網(wǎng)絡(luò)打印機(jī)都使用它)的HP網(wǎng)絡(luò)設(shè)備,用telnet連接到JetDirect卡的IP地址,然后執(zhí)行下面的命令:
SNMP-config: 0
quit
這些命令將關(guān)閉設(shè)備的SNMP服務(wù)。但必須注意的是,禁用SNMP服務(wù)會(huì)影響服務(wù)的發(fā)現(xiàn)操作以及利用SNMP獲取設(shè)備狀態(tài)的端口監(jiān)視機(jī)制。
■ Red Hat Linux
對(duì)于Red Hat Linux,可以用Linuxconf工具從自動(dòng)啟動(dòng)的服務(wù)清單中刪除SNMP,或者直接從/etc/services文件刪除啟動(dòng)SNMP的行。對(duì)于其他Linux系統(tǒng),操作方法應(yīng)該也相似。
〖三、保障SNMP的安全〗
如果某些設(shè)備確實(shí)有必要運(yùn)行SNMP,則必須保障這些設(shè)備的安全。首先要做的是確定哪些設(shè)備正在運(yùn)行SNMP服務(wù)。除非定期對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行端口掃描,全面掌握各臺(tái)機(jī)器、設(shè)備上運(yùn)行的服務(wù),否則的話,很有可能遺漏一、二個(gè)SNMP服務(wù)。特別需要注意的是,網(wǎng)絡(luò)交換機(jī)、打印機(jī)之類的設(shè)備同樣也會(huì)運(yùn)行SNMP服務(wù)。確定SNMP服務(wù)的運(yùn)行情況后,再采取下面的措施保障服務(wù)安全。
■ 加載SNMP服務(wù)的補(bǔ)丁
安裝SNMP服務(wù)的補(bǔ)丁,將SNMP服務(wù)升級(jí)到2.0或更高的版本。聯(lián)系設(shè)備的制造商,了解有關(guān)安全漏洞和升級(jí)補(bǔ)丁的情況。
■ 保護(hù)SNMP通信字符串
一個(gè)很重要的保護(hù)措施是修改所有默認(rèn)的通信字符串。根據(jù)設(shè)備文檔的說(shuō)明,逐一檢查、修改各個(gè)標(biāo)準(zhǔn)的、非標(biāo)準(zhǔn)的通信字符串,不要遺漏任何一項(xiàng),必要時(shí)可以聯(lián)系制造商獲取詳細(xì)的說(shuō)明。
■ 過(guò)濾SNMP
另一個(gè)可以采用的保護(hù)措施是在網(wǎng)絡(luò)邊界上過(guò)濾SNMP通信和請(qǐng)求,即在防火墻或邊界路由器上,阻塞SNMP請(qǐng)求使用的端口。標(biāo)準(zhǔn)的SNMP服務(wù)使用161和162端口,廠商私有的實(shí)現(xiàn)一般使用199、391、705和1993端口。禁用這些端口通信后,外部網(wǎng)絡(luò)訪問(wèn)內(nèi)部網(wǎng)絡(luò)的能力就受到了限制;另外,在內(nèi)部網(wǎng)絡(luò)的路由器上,應(yīng)該編寫一個(gè)ACL,只允許某個(gè)特定的可信任的SNMP管理系統(tǒng)操作SNMP。例如,下面的ACL只允許來(lái)自(或者走向)SNMP管理系統(tǒng)的SNMP通信,限制網(wǎng)絡(luò)上的所有其他SNMP通信:
access-list 100 permit ip host w.x.y any
access-list 100 deny udp any any eq snmp
access-list 100 deny udp any any eq snmptrap
access-list 100 permit ip any any
這個(gè)ACL的第一行定義了可信任管理系統(tǒng)(w.x.y)。利用下面的命令可以將上述ACL應(yīng)用到所有網(wǎng)絡(luò)接口:
interface serial 0
ip access-group 100 in
總之,SNMP的發(fā)明代表著網(wǎng)絡(luò)管理的一大進(jìn)步,現(xiàn)在它仍是高效管理大型網(wǎng)絡(luò)的有力工具。然而,SNMP的早期版本天生缺乏安全性,即使最新的版本同樣也存在問(wèn)題。就象網(wǎng)絡(luò)上運(yùn)行的其他服務(wù)一樣,SNMP服務(wù)的安全性也是不可忽視的。不要盲目地肯定網(wǎng)絡(luò)上沒有運(yùn)行SNMP服務(wù),也許它就躲藏在某個(gè)設(shè)備上。那些必不可少的網(wǎng)絡(luò)服務(wù)已經(jīng)有太多讓人擔(dān)憂的安全問(wèn)題,所以最好關(guān)閉SNMP之類并非必需的服務(wù)——至少盡量設(shè)法保障其安全。
非常好我支持^.^
(3) 100%
不好我反對(duì)
(0) 0%
相關(guān)閱讀:
( 發(fā)表人:admin )