centos 編譯安裝net-snmp 5.6.2


1、准備環境
yum -y install make gcc gcc-c++ gcc-g77 openssl openssl-devel

常用lib安裝可參照本文

2、編譯和安裝
首先我們需要下載Net-SNMP的源代碼,
官方地址:
http://sourceforge.net/projects/net-snmp/files/net-snmp/

下載net-snmp-5.6.2

下載地址:http://pan.baidu.com/s/1gd5TLT5

接下來對下載的源代碼包進行解壓縮,
tar xzvf net-snmp-5.6.2.1.tar.gz

然后通過configure來生成編譯規則,

cd net-snmp-5.6.2.1

./configure \
--prefix=/server/snmp \
--with-mib-modules=ucd-snmp/diskio \
--with-default-snmp-version="3" \
--with-sys-contact=yjken \
--with-sys-location="shanghai" \
--with-logfile="/server/snmp/log/snmpd.log" \
--with-persistent-directory="/var/net-snmp"

注意,以上的

--with-mib-modules=ucd-snmp/diskio

選項,可以讓服務器支持磁盤I/O監控。
回車出現下面問題,可以直接回車而不用回答,系統會采用默認信息,其中日志文件默認安裝在/var/log/snmpd.log.數據存貯目錄默認存放在/var/net-snmp下。

配置默認snmp協議版本(1,2c,3),配置為v3版的話,支持登錄驗證功能,相對來說更安全了
--with-default-snmp-version="3"

配置該設備的聯系人信息,也可以是郵箱地址
--with-sys-contact=yjken

配置該系統設備的地理位置
--with-sys-location="shanghai"

配置日志文件位置
--with-logfile="/server/snmp/log/snmpd.log"

配置數據存儲目錄
--with-persistent-directory="/var/net-snmp"

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

make && make install

到現在為止,我們已經有了可以運行的SNMP代理程序,它位於/server/snmp/sbin/snmpd,在啟動它之前,我們還要進行一些必要的設置。

3、設置安全的驗證方式
將SNMP代理程序暴露給網絡上的所有主機是很危險的,為了防止其它主機訪問你的SNMP代理程序,我們需要在SNMP代理程序上加入身份驗證機制。 SNMP支持不同的驗證機制,這取決於不同的SNMP協議版本,v2c版本的驗證機制比較簡單,它基於明文密碼和授權IP來進行身份驗證,而v3版本則通 過用戶名和密碼的加密傳輸來實現身份驗證,我們建議使用v3,當然,只要按照以下的介紹進行配置,不論是v2c版本還是v3版本,都可以保證一定的安全 性,你可以根據情況來選擇。
注意一點,SNMP協議版本和SNMP代理程序版本是兩回事,剛才說的v2c和v3是指SNMP協議的版本,而Net-SNMP是用來實現SNMP協議的程序套件。

v2c

先來看如何配置v2c版本的SNMP代理,我們來創建snmpd的配置文件,默認情況下它是不存在的,我們來創建它,如下:

vi /server/snmp/share/snmp/snmpd.conf

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

rocommunity yjken 127.0.0.1
rocommunity yjken 192.168.0.230

注意:添加用戶時,請確保snmp服務沒有運行,否則無法添加。
注意,這里的"rocommunity"表示這是一個只讀的訪問權限,其它客戶端只能從你的服務器上獲取信息,而不能對服務器進行任何設置。
緊接着的"yjken"相當於密碼,很多平台喜歡使用"public"這個默認字符串。這里的"yjken"只是一個例子,你可以設置其它字符串作為密碼。
最右邊的"127.0.0.1,192.168.0.230"代表指定的監控點IP,這意味着只有IP為"127.0.0.1" 或 "192.168.0.230"的機器有權限來訪問你的SNMP代理程序。
所以,以上這段配置中,只有"yjken"是需要你進行修改的,從客戶端訪問時,需要提供這個字符串。

v3

當然,我們建議您使用v3版本來進行身份驗證。對於一些早期版本的Linux分發版,其內置的SNMP代理程序可能並不支持v3,所以我們建議您按照前邊介紹的方法,編譯和安裝最新的Net-Snmp。
v3支持另一種驗證方式,需要創建一個v3的帳號,我們同樣修改以下配置文件(默認情況下它是不存在的,我們來創建它。):

注意:我曾經安裝的v2版協議,卻用了默認的配置文件,總是報錯,快漰潰了,就是因為默認的配置文件是v3格式的配置語法,v3版協議配置語法與v2版的不同了!

vi /server/snmp/share/snmp/snmpd.conf

然后添加一個只讀帳號,

rouser yjken auth

注意:添加用戶時,請確保snmp服務沒有運行,否則無法添加。
可以看到,在v3中,"rouser"用於表示只讀帳號類型,隨后的"yjken"是指定的用戶名,后邊的"auth"指明需要驗證。
接下來,需要先運行一下:

/server/snmp/sbin/snmpd -c /server/snmp/share/snmp/snmpd.conf &

執行后會生成/var/net-snmp/snmpd.conf配置文件,再使用命令結束這個進程:

killall -9 snmpd

接着我們還要添加"yjken"這個用戶到配置文件中,這就是v3中的特殊機制,我們打開配置文件:
net-snmp版本為5.6.2的可以寫入/var/net-snmp/snmpd.conf這個文件,而版本為5.6.2.1的,則須要寫入/server/snmp/share/snmp/snmpd.conf 這個文件中

#5.6.2
vi /var/net-snmp/snmpd.conf
這個文件會在snmpd啟動的時候被自動調用,我們需要在它里邊添加創建用戶的指令
#Only "createUser" tokens should be placed here by snmpd administrators
createUser yjken MD5 mypassword

#5.6.2.1
vi /server/snmp/share/snmp/snmpd.conf
這個文件會在snmpd啟動的時候被自動調用,我們需要在它里邊添加創建用戶的指令
createUser yjken MD5 mypassword

#執行一下命令
/server/snmp/sbin/snmpd -c /server/snmp/share/snmp/snmpd.conf &

這行配置的意思是創建一個名為"yjken"的用戶,密碼為"mypassword",並且用MD5進行加密傳輸。這里要提醒的是:
密碼至少要有8個字節
這是SNMP協議的規定,如果小於8個字節,通信將無法進行。
值得注意的是,一旦snmpd啟動后,出於安全考慮,以上這行配置會被snmpd自動刪除,當然,snmpd會將這些配置以密文的形式記錄在其它文件中,重新啟動snmpd是不需要再次添加這些配置的,除非你希望創建新的用戶。

4、啟動SNMP代理程序
經過配置后,現在可以啟動snmpd,

/server/snmp/sbin/snmpd -c /var/net-snmp/snmpd.conf &

如果要關閉,則可以直接kill這個進程,

killall -9 snmpd

5、將snmpd加入開機啟動
進入源碼目錄,如/root/net-snmp-5.6.2目錄,將啟動配置文件范例復制到/etc/init.d/目錄:

cp /root/net-snmp-5.6.2/dist/snmpd-init.d /etc/init.d/snmpd

修改/etc/init.d/snmpd文件
將其中的
vi /etc/init.d/snmpd

prog="/usr/local/sbin/snmpd"

修改為

prog="/server/snmp/sbin/snmpd"

將其中的

[ -x $prog -a -f /usr/local/share/snmp/snmpd.conf ] || exit 0

修改為

[ -x $prog -a -f /var/net-snmp/snmpd.conf ] || exit 0

如果不修改/etc/init.d/snmpd文件,則創建軟連接
ln -fs /server/snmp/sbin/snmpd /usr/local/sbin/snmpd

ln -fs /var/net-snmp/snmpd.conf /usr/local/share/snmp/snmpd.conf
or
ln -fs /server/snmp/share/snmp/snmpd.conf /usr/local/share/snmp/snmpd.conf

加入系統啟動項
echo "/etc/init.d/snmpd start" >> /etc/rc.local

服務控制:
設置好上面的內容就可以用下列命令控制服務了。
啟動:

/etc/init.d/snmpd start

停止:

/etc/init.d/snmpd stop

重新啟動:

/etc/init.d/snmpd restart

服務狀態:

/etc/init.d/snmpd status

6、增強的安全機制
有了以上的驗證機制,你就可以放心的使用SNMP代理了。但是,如果你的SNMP代理程序版本較低,可能會有一些別有用心的破壞者利用一些固有的漏洞進行 破壞,比如發送較長的數據導致SNMP代理程序內存泄漏或者拒絕服務等,為此,你還可以使用防火牆(iptables)來進行增強的安全過濾。
在Linux中,我們用iptables來實現防火牆,一般情況下,除了流入指定端口的數據包以外,我們應該將其它流入的IP數據包拋棄。你可能已經配置了一定的防火牆規則,那么只要增加針對SNMP的規則即可。
SNMP代理程序默認監控在udp161端口,為你的iptables增加以下規則:

如果192.168.0.230不是該監控機IP的話,需要設置防火牆
iptables -A INPUT -i eth0 -p udp -s 192.168.0.230 --dport 161 -j ACCEPT

以上設置中假設服務器外網網卡是eth0,你可以根據實際情況來修改。
這樣一來,192.168.0.230這台機器可以發送UDP數據包到你的服務器的161端口,與SNMP代理程序進行通信。

7、測試:
ln -fs /server/snmp/bin/* /usr/local/bin/

v2 輸入 snmpget -v2c -cyjken localhost .1.3.6.1.2.1.1.1.0
v3 輸入 snmpget -v3 -cyjken -uyjken -lauthNoPriv -aMD5 -Amypassword localhost .1.3.6.1.2.1.1.1.0
snmpwalk -v3 -cyjken -uyjken -lauthNoPriv -aMD5 -Amypassword localhost .1.3.6.1.2.1.1.1.0
如果能夠得到數據則表明安裝已經成功

附Security Levels in SNMPv3安全文檔:
http://www.webnms.com/simulator/help/sim_network/netsim_conf_snmpv3.html#security_levels


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM