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