以下的示例采用SUSE10 Linux環(huán)境,但它同樣適用于其它Linux發(fā)行版。
首先我們需要下載Net-SNMP的源代碼,選擇一個(gè)版本,比如5.4.2.1,地址如下:
http://sourceforge.net/projects/net-snmp/files/net-snmp/5.4.2.1/
接下來(lái)對(duì)下載的源代碼包進(jìn)行解壓縮,如下:
suse10:~ # tar xzvf net-snmp-5.4.2.1.tar.gz
然后通過(guò)configure來(lái)生成編譯規(guī)則,如下:
suse10:~ # cd net-snmp-5.4.2.1 suse10:~ # ./configure --prefix=/usr/local/snmp --with-openssl=/usr/ --with-mib-modules=ucd-snmp/diskio
注意,以上的
--with-mib-modules=ucd-snmp/diskio
選項(xiàng),可以讓服務(wù)器支持磁盤I/O監(jiān)控。
接下來(lái),開始編譯和安裝:
suse10:~ # make suse10:~ # make install
到現(xiàn)在為止,我們已經(jīng)有了可以運(yùn)行的SNMP代理程序,它位于/usr/local/snmp/sbin/snmpd,在啟動(dòng)它之前,我們還要進(jìn)行一些必要的設(shè)置。
將SNMP代理程序暴露給網(wǎng)絡(luò)上的所有主機(jī)是很危險(xiǎn)的,為了防止其它主機(jī)訪問你的SNMP代理程序,我們需要在SNMP代理程序上加入身份驗(yàn)證機(jī)制。SNMP支持不同的驗(yàn)證機(jī)制,這取決于不同的SNMP協(xié)議版本,監(jiān)控寶目前支持v2c和v3兩個(gè)版本,其中v2c版本的驗(yàn)證機(jī)制比較簡(jiǎn)單,它基于明文密碼和授權(quán)IP來(lái)進(jìn)行身份驗(yàn)證,而v3版本則通過(guò)用戶名和密碼的加密傳輸來(lái)實(shí)現(xiàn)身份驗(yàn)證,我們建議使用v3,當(dāng)然,只要按照以下的介紹進(jìn)行配置,不論是v2c版本還是v3版本,都可以保證一定的安全性,你可以根據(jù)情況來(lái)選擇。
注意一點(diǎn),SNMP協(xié)議版本和SNMP代理程序版本是兩回事,剛才說(shuō)的v2c和v3是指SNMP協(xié)議的版本,而Net-SNMP是用來(lái)實(shí)現(xiàn)SNMP協(xié)議的程序套件,目前它的最新版本是剛才提到的5.4.2.1。
v2c
先來(lái)看如何配置v2c版本的SNMP代理,我們來(lái)創(chuàng)建snmpd的配置文件,默認(rèn)情況下它是不存在的,我們來(lái)創(chuàng)建它,如下:
suse10:~ # vi /usr/local/snmp/share/snmp/snmpd.conf
然后我們需要?jiǎng)?chuàng)建一個(gè)只讀賬號(hào),也就是read-only community,在snmpd.conf中添加以下內(nèi)容:
rocommunity jiankongbao 60.195.249.83 rocommunity jiankongbao 60.195.252.107 rocommunity jiankongbao 60.195.252.110
注意,這里的“rocommunity”表示這是一個(gè)只讀的訪問權(quán)限,監(jiān)控寶只可以從你的服務(wù)器上獲取信息,而不能對(duì)服務(wù)器進(jìn)行任何設(shè)置。
緊接著的“jiankongbao”相當(dāng)于密碼,很多平臺(tái)喜歡使用“public”這個(gè)默認(rèn)字符串。這里的“jiankongbao”只是一個(gè)例子,你可以設(shè)置其它字符串作為密碼。
最右邊的“60.195.249.83,60.195.252.107,60.195.252.110”代表指定的監(jiān)控點(diǎn)IP,這些IP地址是監(jiān)控寶專用的監(jiān)控點(diǎn),這意味著只有監(jiān)控寶有權(quán)限來(lái)訪問你的SNMP代理程序。
所以,以上這段配置中,只有“jiankongbao”是需要你進(jìn)行修改的,同時(shí)在監(jiān)控寶上添加服務(wù)器的時(shí)候,需要提供這個(gè)字符串。
v3
當(dāng)然,我們建議您使用v3版本來(lái)進(jìn)行身份驗(yàn)證。對(duì)于一些早期版本的Linux分發(fā)版,其內(nèi)置的SNMP代理程序可能并不支持v3,所以我們建議您按照前邊介紹的方法,編譯和安裝最新的Net-Snmp。
v3支持另一種驗(yàn)證方式,需要?jiǎng)?chuàng)建一個(gè)v3的賬號(hào),我們同樣修改以下配置文件:
suse10:~ # vi /usr/local/snmp/share/snmp/snmpd.conf
然后添加一個(gè)只讀賬號(hào),如下:
rouser jiankongbao auth
可以看到,在v3中,“rouser”用于表示只讀賬號(hào)類型,隨后的“jiankongbao”是指定的用戶名,后邊的“auth”指明需要驗(yàn)證。
接下來(lái),我們還要添加“jiankongbao”這個(gè)用戶,這就是v3中的特殊機(jī)制,我們打開以下配置文件:
suse10:~ # vi /var/net-snmp/snmpd.conf
這個(gè)文件會(huì)在snmpd啟動(dòng)的時(shí)候被自動(dòng)調(diào)用,我們需要在它里邊添加創(chuàng)建用戶的指令,如下:
createUser jiankongbao MD5 mypassword
這行配置的意思是創(chuàng)建一個(gè)名為“jiankongbao”的用戶,密碼為“mypassword”,并且用MD5進(jìn)行加密傳輸。這里要提醒的是:
密碼至少要有8個(gè)字節(jié)
這是SNMP協(xié)議的規(guī)定,如果小于8個(gè)字節(jié),通信將無(wú)法進(jìn)行。
值得注意的是,一旦snmpd啟動(dòng)后,出于安全考慮,以上這行配置會(huì)被snmpd自動(dòng)刪除,當(dāng)然,snmpd會(huì)將這些配置以密文的形式記錄在其它文件中,重新啟動(dòng)snmpd是不需要再次添加這些配置的,除非你希望創(chuàng)建新的用戶。
以上配置中的用戶名、密碼和加密方式,在監(jiān)控寶添加服務(wù)器的時(shí)候需要添加。
經(jīng)過(guò)配置后,現(xiàn)在可以啟動(dòng)snmpd,如下:
/usr/local/snmp/sbin/snmpd
如果要關(guān)閉,則可以直接kill這個(gè)進(jìn)程,如下:
killall -9 snmpd
有了以上的驗(yàn)證機(jī)制,你就可以放心的使用SNMP代理了。但是,如果你的SNMP代理程序版本較低,可能會(huì)有一些別有用心的破壞者利用一些固有的漏洞進(jìn)行破壞,比如發(fā)送較長(zhǎng)的數(shù)據(jù)導(dǎo)致SNMP代理程序內(nèi)存泄漏或者拒絕服務(wù)等,為此,你還可以使用防火墻(iptables)來(lái)進(jìn)行增強(qiáng)的安全過(guò)濾。
在Linux中,我們用iptables來(lái)實(shí)現(xiàn)防火墻,一般情況下,除了流入指定端口的數(shù)據(jù)包以外,我們應(yīng)該將其它流入的IP數(shù)據(jù)包拋棄。你可能已經(jīng)配置了一定的防火墻規(guī)則,那么只要增加針對(duì)SNMP的規(guī)則即可。
SNMP代理程序默認(rèn)監(jiān)控在udp161端口,為你的iptables增加以下規(guī)則:
iptables -A INPUT -i eth0 -p udp -s 60.195.249.83 --dport 161 -j ACCEPT iptables -A INPUT -i eth0 -p udp -s 60.195.252.107 --dport 161 -j ACCEPT iptables -A INPUT -i eth0 -p udp -s 60.195.252.110 --dport 161 -j ACCEPT
以上設(shè)置中假設(shè)服務(wù)器外網(wǎng)網(wǎng)卡是eth0,你可以根據(jù)實(shí)際情況來(lái)修改。
這樣一來(lái),只有監(jiān)控寶的專用監(jiān)控器可以發(fā)送UDP數(shù)據(jù)包到你的服務(wù)器的161端口,與SNMP代理程序進(jìn)行通信。
CentOS及其它RedHat系列產(chǎn)品提供了net-snmp的二進(jìn)制包。我們可以直接從源里安裝。
shell> yum install net-snmp net-snmp-devel net-snmp-utils
說(shuō)明:net-snmp-devel是為了使用net-snmp-config, net-snmp-utils是為了使用snmpwalk。
在筆者的試驗(yàn)環(huán)境下,CentOS下的net-snmp無(wú)法在selinux環(huán)境下正常使用v3。如果您想使用snmp v3,請(qǐng)先禁用selinux。
shell> net-snmp-config --create-snmpv3-user -ro -A snmp@jiankongbao -a MD5 jiankongbao
以上命令,創(chuàng)建一個(gè)snmpv3用戶,只讀,使用MD5,用戶名為jiankongbao,密碼為snmp@jiankongbao。 感謝網(wǎng)友 doguo_m@163.com 的指正。
注意:運(yùn)行之前請(qǐng)先停用net-snmp服務(wù)。
shell> service snmpd stop
運(yùn)行 Net-SNMP 服務(wù)的方法比較簡(jiǎn)單,不過(guò)Net-SNMP服務(wù)的名字是snmpd。
shell> service snmpd start
您可能需要把它加入開機(jī)自動(dòng)運(yùn)行服務(wù)列表。
shell> chkconfig snmpd on
我們可以使用 snmpwalk 來(lái)檢測(cè)snmp服務(wù)是否正常開啟。
shell> snmpwalk -v 3 -u jiankongbao -a MD5 -A "snmp@jiankongbao" -l authNoPriv 127.0.0.1 sysDescr
如果一切正常,就會(huì)返回正常結(jié)果。有關(guān)snmpwalk的參數(shù)說(shuō)明,請(qǐng)參見其man文檔。
Net-SNMP 使用 udp 協(xié)議,161端口。同時(shí),我們會(huì)從以下三個(gè)IP訪問您的服務(wù)器。
一個(gè)可能的配置文件是:
-I INPUT -p udp -s 60.195.249.83 --dport 161 -j ACCEPT -I INPUT -p udp -s 60.195.252.107 --dport 161 -j ACCEPT -I INPUT -p udp -s 60.195.252.110 --dport 161 -j ACCEPT
聯(lián)系客服