LINUX配置SNMP配置

當我們遇到設備出現故障或需要進行管理時,我們總要去單獨進入到該設備中去進行操作檢測,這樣既浪費時間又覺得工作量大,snmp協議可以幫我們解決這個問題,在衆多的設備和服務器等組成的網絡中,我們可以通過在一臺主機上搭建nms服務器通過其他設備或主機上的agent機制利用snmp協議來完成對整個網絡中的設備的狀態監控,時時刻刻向nms發送trap信息,trap信息反映各設備的及時事件,它就像交通中心一樣,時刻反映給我們各個設備的運行狀態,方便我們去管理網絡。

 

關於snmp:

目前網絡中用得最廣泛的網絡管理協議是 SNMP  (Simple  Network  Management Protocol,簡單網絡管理協議)。SNMP  是被廣泛接受並投入使用的工業標準,用於保證管理信息在網絡中任意兩點間傳送,便於網絡管理員在網絡上的任何節點檢索信息、修改信息、定位故障、完成故障診斷、進行容量規劃和生成報告。SNMP 採用輪詢機制,只提供最基本的功能集,特別適合在小型、快速和低價格的環境中使用。SNMP 的實現基於無連接的傳輸層協議UDP,因此可以實現和衆多產品的無障礙連接。

 

工作機制:

SNMP 分爲 NMS 和Agent 兩部分:NMS  (Network Management Station,網絡管理站)是運行客戶端程序的工作站,目前常用的網管平臺有QuidView、Sun NetManager 和 IBM NetView。Agent 是運行在網絡設備上的服務器端軟件。NMS 可以向Agent 發出GetRequest、GetNextRequest 和 SetRequest 報文,Agent接收到 NMS  的這些請求報文後,根據報文類型進行 Read  或 Write  操作,生成Response 報文,並將報文返回給 NMS。Agent 在設備發生異常情況或狀態改變時(如設備重新啓動),也會主動向 NMS 發送Trap 報文,向 NMS 彙報所發生的事件

SNMP Agent 支持 SNMP v3 版本,兼容 SNMP v1 版本、SNMP v2C版本

SNMP v3 採用用戶名和密碼認證方式。

SNMP v1、SNMP v2C 採用團體名(Community Name)認證,非設備認可團體名的SNMP 報文將被丟棄。

Trap 是被管理設備不經請求,主動向 NMS 發送的信息,用於報告一些緊急的重要事件

 

Linux SNMP

以下的示例採用CentOS Linux環境,但它同樣適用於其它Linux發行版。

 

編譯和安裝

請使用root賬號或者使用sudo權限安裝,否則會提示權限錯誤。

首先我們需要下載Net-SNMP的源代碼,請選擇一個相對比較新的SNMP版本,例如5.7.2(當前最新版本),地址如下:

http://nchc.dl.sourceforge.net/project/net-snmp/net-snmp/5.7.2/net-snmp-5.7.2.tar.gz

 

使用wget下載代碼:

root@snmp~# wget http://nchc.dl.sourceforge.net/project/net-snmp/net-snmp/5.7.2/net-snmp-5.7.2.tar.gz


接下來對下載的源代碼包進行解壓縮,如下:

root@snmp~# tar xzvf net-snmp.tar.gz


然後通過源碼的configure來生成編譯的Makefile規則,如下:

root@snmp~# cd net-snmp-5.7.2
root@snmp~# ./configure --prefix=/usr/local/snmp --with-mib-modules=ucd-snmp/diskio -enable-mfd-rewrites

 

請注意參數:

--prefix=/usr/local/snmp
選項,選擇snmp的安裝路徑。

--with-mib-modules=ucd-snmp/diskio
選項,可以讓服務器支持磁盤I/O監控。

–enable-mfd-rewrites


選項,允許用新的MFD重寫mid模塊,這樣編譯的snmp就能支持64位的計數器,能正常採集到流量。

SNMP在安裝時需要選擇使用的協議版本,包含三個選項:1,2(for 2c)和3。我們強烈推薦用戶選擇 3 版本!爲了安全, 1 版本不能添加snmp監控,所以不推薦使用!其他選項直接跳過就可以啦。

 

接下來,開始編譯和安裝:

root@snmp~# make
root@snmp~# make install
到現在爲止,我們已經擁有了可以運行的SNMP程序,它位於/usr/local/snmp/sbin/snmpd,在啓動它之前,我們還要進行一些必要的設置。

 

設置安全的驗證方式

將SNMP代理程序暴露給網絡上的所有主機是很危險的,爲了防止其它您不允許的主機訪問你的SNMP代理程序,我們需要在SNMP代理程序上加入身份驗證機制。

SNMP支持不同的驗證機制,這取決於不同的SNMP協議版本。

請注意,SNMP協議版本和SNMP程序版本是兩回事,剛纔說的v2c和v3是指SNMP通用協議的版本,而Net-SNMP是實現SNMP協議進行通信的程序套件,目前它的最新版本是5.7.2。

 

★ v2c

先來看如何配置v2c版本的SNMP配置,2c版本的SNMP配置有兩種配法,在此我們只介紹最簡單的配置方式,如果想了解更多,請您自行查找。

如果您是按照我們剛纔教由你的方式進行的手工編譯的SNMP,首先我們來創建snmpd的配置文件,如果不存在,請在以下目錄創建它如下所示:

root@snmp~# vim /usr/local/snmp/share/snmp/snmpd.conf


然後我們需要創建一個只讀帳號,也就是read-only community,在snmpd.conf中添加以下內容:

rocommunity yunjiankong default
注意:添加用戶時,請在添加完成後重啓snmp服務,這樣添加纔會成功。同時由於雲監控可能會變動監測點的IP,到時候就需要重新設置,還請注意

這裏的“rocommunity”表示這是一個只讀的訪問權限,雲監控只可以從你的服務器上獲取信息,而不能對服務器進行任何設置。

緊接着的“yunjiankong”叫做community,相當於snmp的密碼,很多平臺喜歡使用“public”這個默認字符串。這裏的“yunjiankong”只是一個樣例,請務必將此字符串設置複雜,請不要使用默認的public,我們的樣例yunjiankong等字串

最右的“default”代表雲監控能訪問您的服務器的SNMP,目前雲主機監控處於不斷迭×××髮狀態,所以我們暫時還未最終確定客戶端的固定IP(目前暫有:101.199.100.150(新加入), 220.181.150.98, 180.153.229.230,220.181.150.125, 103.28.10.223。但是會經常變動,還請關注我們的官方說明)

 

如果想限定指定IP訪問您的SNMP,只需要將default替換成您想要被訪問的IP,多行需要填寫多個:

rocommunity yunjiankong 101.199.100.150
rocommunity yunjiankong 220.181.150.98
rocommunity yunjiankong 180.153.229.230
# 更多IP請按以上格式填寫


所以,以上這段配置中,只有“yunjiankong”是需要你進行修改的(如果指定IP,會在以後會可能需要修改),同時在雲監控上添加服務器並選擇2c版本時,只需要您提供這個字串作爲密碼即可。

 

★ v3

當然,我們強烈建議您使用v3版本來進行身份驗證。對於一些早期版本的Linux分發版,其內置的SNMP程序可能並不支持v3,所以我們建議您按照前邊介紹的方法,編譯和安裝最新的Net-Snmp。

v3使用的是另一種驗證方式,會比v2c版本複雜一些,我們需要創建一個v3的帳號,我們同樣修改以下配置文件:

root@snmp~#  vim /usr/local/snmp/share/snmp/snmpd.conf


然後添加一個只讀帳號,如下:

rouser yunjiankong auth
注意:添加用戶時,請確保snmp服務沒有運行,否則無法添加。

在v3中,“rouser”用於表示只讀帳號類型,隨後的“yunjiankong”是指定的用戶名,後邊的“auth”指明需要驗證。

 

接下來,我們還要添加“yunjiankong”這個用戶,這就是v3中的特殊機制,我們打開以下配置文件:

root@snmp~#  vim /var/net-snmp/snmpd.conf


這個文件會在snmpd啓動的時候被自動調用,我們需要在它裏邊添加創建用戶的指令,如下:

createUser yunjiankong MD5 mypassword
這行配置的意思是創建一個名爲“yunjiankong”的用戶,密碼爲“mypassword”,並且用MD5進行加密傳輸。這裏要提醒的是:

密碼至少要有8個字節

這是SNMP協議的規定,如果小於8個字節,通信將無法進行。

 

值得注意的是,一旦snmpd啓動後,出於安全考慮,以上這行配置會被snmpd自動刪除,當然,snmpd會將這些配置以密文的形式記錄在其它文件中,重新啓動snmpd是不需要再次添加這些配置的,除非你希望創建新的用戶。

以上配置中的用戶名、密碼和加密方式,在雲監控添加服務器的時候需要添加。

 

啓動SNMP代理程序

經過配置後,現在可以啓動snmpd  (最好使用絕對路徑啓動),如下:

/usr/local/snmp/sbin/snmpd
如果要關閉,則可以直接kill這個進程,如下:

killall -9 snmpd


增強的安全機制

請注意,此步並不是必須要進行的步驟,建議如果您瞭解linux網絡防火牆(iptables)才進行設置,否則可能導致您的網站無法被訪問到。正常情況下如果不暴露您的服務器ip的情況下,snmp是非常安全的。

有了以上的驗證機制,你就可以放心的使用SNMP代理了。但是,如果你的SNMP代理程序版本較低,可能會有一些別有用心的破壞者利用一些固有的漏洞進行破壞,比如發送較長的數據導致SNMP代理程序內存泄漏或者拒絕服務等,爲此,你還可以使用防火牆(iptables)來進行增強的安全過濾。

 

在Linux中,我們用iptables來實現防火牆,一般情況下,除了流入指定端口的數據包以外,我們應該將其它流入的IP數據包拋棄。你可能已經配置了一定的防火牆規則,那麼只要增加針對SNMP的規則即可。

 

SNMP代理程序默認監控在udp161端口,爲你的iptables增加以下規則:

iptables -A INPUT -i eth0 -p udp -s 220.181.150.98 --dport 161 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 180.153.229.230 --dport 161 -j ACCEPT
以上設置中假設服務器外網網卡是eth0,你可以根據實際情況來修改。

 

這樣一來,只有專用監控器可以發送UDP數據包到你的服務器的161端口,與SNMP代理程序進行通信。

 

可以使用自建的監控器來監控服務器運行實時情況,也可以藉助第三方監控器來監控。


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