標籤:blog http 使用 os io 檔案 資料 for
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