方法一(最簡單安裝):
安裝 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。username為jiankongbao。password為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 協議,161port。 同一時候,我們會從下面三個IP訪問您的server。
-
60.195.249.83自2012年2月21日起監控寶的這個IP不再使用了,假設實用監控寶的用戶能夠使用下列IP組合 -
60.195.252.107
-
60.195.252.110
一個可能的配置文件是:
# 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
說明:以上僅僅是一個可能的配置。請您在寫之前明確每一句話的含義,而不是直接復制。要不然假設這里異常的出現
-I INPUT -j DROP
時,您就僅僅能哭着罵我了,嘻嘻。
方法二:
二、snmp.conf文件介紹 (/etc/snmp/snmp.conf)
1.經常使用配置
community名字都不變,組名字也不變。僅僅加個view的范圍,給他配置個權限。
name | incl/excl | subtree | mask(optional) | |
view | all | included | .1 | 80 |
view all included .1 80
access notConfigGroup "" any noauth exact systemview none none 改為
access notConfigGroup "" any noauth exact all none none
2.具體解釋
# sec.name source community
com2sec notConfigUser default public
#定義community名稱為 public。映射到安全名 notConfigUser。
# groupName securityModel securityName
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
#定義安全usernamenotConfigUser映射到notConfigGroup組。
# Third, create a view for us to let the group have rights to:
#定義一個view,來決定notConfigUser能夠操作的范圍。
# Make at least snmpwalk -v 1 localhost -c public system fast again.
#定義可查看的snmp的范圍。
# name incl/excl subtree mask(optional)
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
# Finally, grant the group read-only access to the systemview view.
#給notConfigGroup組所定義view名 all 以僅僅讀權限
#access MyROGroup "" any noauth 0 all none none
3 配置步驟
1)首選是定義一個共同體名(community)。
這里是public,及能夠訪問這個public的username(sec name)。這里是notConfigUser。Public相當於用戶notConfigUser的password:)
# sec.name source community
com2sec notConfigUser default public
2)定義一個組名(groupName)
這里是notConfigGroup。及組的安全級別。把notConfigGroup這個用戶加到這個組中。
groupName securityModel securityName
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
3)定義一個可操作的范圍(view)名
這里是all,范圍是 .1
# name incl/excl subtree mask(optional)
view all included .1
4)定義notConfigUser這個組在all這個view范圍內可做的操作,這時定義了notConfigUser組的成員可對.1這個范圍做僅僅讀操作。
# group context sec.model sec.level prefix read write notif
access notConfigGroup "" any noauth exact all none none
ok,這樣我們的snmpd.conf文件就基本配成了
啟動/關閉 重新啟動:/etc/init.d/snmpd start/stop/restart
關閉進程:ps aux |grep snmp |grep -v grep |awk '{print $2}' |xargs kill
常見問題
錯誤1:
# snmpwalk -v 1 -c public localhost system
Cannot find module (IP-MIB): At line 0 in (none)
Cannot find module (IF-MIB): At line 0 in (none)
...
Cannot find module (SNMPv2-TM): At line 0 in (none)
system: Unknown Object Identifier (Sub-id not found: (top) -> system)
錯誤2:
qu@ubuntu:~$ snmpwalk -v 2c -c public 192.168.4.12
Timeout: No Response from 192.168.4.12
dunkel :
>
> The original problem was:
> "However if I run "snmpwalk -v 1 -c public 192.168.1.36 system" on the
> stable box, with 192.168.1.36 the IP address of the testing box, i get:
> Timeout: No Response from 192.168.1.36
>
> snmpd is up and running, I can ping both ways, there are no firewalls
> in place. What could be wrong?"
>
> The solution is:
> open snmpd.conf with your favourite editor and
> add these 2 lines:
> interface eth0
> agentaddress [ip address of your host]:[listening port - 161 is the default]
錯誤3:
sarge:/# snmpwalk -v 2c -c public localhost
Timeout: No Response from localhost
錯誤排除:
步驟1:
sarge:/# snmpd -f -Le
屏幕顯示(net-snmpd的log文件里是相同內容)
Warning: no access control information configured.
It is unlikely this agent can serve any useful purpose in this state.
Run "snmpconf -g basic_setup" to help you configure the snmpd.conf file for this agent.
Error opening specified endpoint "udp:161"
Server Exiting with code 1
新建文件夾
拷貝現有snmpd.conf 到/root/.snmp/snmpd.conf
步驟2:
snmpd -f -Le -Dread_config
讀配置文件,開頭顯示了默認的配置文件的路徑。
sarge:/# snmpd -f -Le -Dread_config
read_config: reading premib configuration tokens
read_config: config path used: /nfsroot/cq8401/bin/net-snmp/etc/snmp:/nfsroot/cq8401/bin/net-snmp/sh
are/snmp:/nfsroot/cq8401/bin/net-snmp/lib/snmp:/root/.snmp:/var/net-snmp
中間顯示了配置文件的內容。
首先查看在默認配置文件的路徑中是否有你的配置文件。
假設有,再在配置文件里配置權限。
小技巧:能夠使用snmpd -f -Le -Dread_config 命令來查看日志文件信息。排錯。
snmpd命令的實用選項:
-c FILE 指定文件為配置文件
-C 不讀取默認的配置文件
-d dump接收和發送SNMP數據包
-D TOKEN 對於給定的TOKEN(標志)打開調試信息 ( -Dmib_init)
-I [-]INITLIST 對於要初始化的MIB列表顯示
-M DIRLIST 指定MIB庫的路徑
-V 顯示具體信息
-Le 把錯誤信息輸出到日志中
-Lf FILE 把錯誤信息輸出到指定文件里
-m MIBLIST use MIBLIST instead of the default MIB list
或許在運行第四不步make后,過了一會兒程序退出,並提示一下錯誤:
Grep /usr/lib/libbeecrypt.la: No such file or directory
/bin/sed: can't read /usr/lib/libbeecrypt.la: No such file or directory
libtool: link: `/usr/lib/libbeecrypt.la' is not a valid libtool archive
make[1]: *** [libnetsnmpmibs.la] Error 1
make[1]:Leavingdirectory /email/share/ceno_soft/net-snmp-5.4.1/agent'
make: *** [subdirs] Error 1
解決方法
說明缺少libbeecrypt.la ,libbeecrypt.so等共享庫
假設確認系統中有libbeecrypt.la。或許他安裝在/usr/local以下,可嘗試:
ln -s /usr/local/lib/libbeecrypt.la /usr/lib/libbeecrypt.la
假設/usr/local以下沒有。那么你必須安裝beecrypt
下載路徑http://nchc.dl.sourceforge.net/sourceforge/beecrypt/beecrypt-4.1.2.tar.gz
解壓並安裝到/usr文件夾下:
tar -zxvf beecrypt-4.1.2.tar.gz
./configure -prefix=/usr
#默認是安裝在/usr/local,我們須要安裝在/usr文件夾下。假設沒有加這個參數須要做連接
ln -s /usr/local/lib/libbeecrypt.la /usr/lib/libbeecrypt.la
編譯並安裝beecrypt庫。先運行make編譯源代碼包文件編譯成功后運行安裝命令make install。其命令例如以下:
#make
#make install
好。beecrypt安裝完畢后,我們繼續NET-SNMP的編譯,運行一下make 命令。
當我們繼續make的時候,第一個錯消逝了。但不幸的是出現了一個新的錯誤,錯誤提演示樣例如以下:rpath -Wl,/usr/local/lib
/usr/bin/ld: cannot find –lelf
collect2: ld returned 1 exit status
make[1]: *** [snmpd] Error 1 make[1]: Leaving directory `/local/akazam/cacti/bak/net-snmp-5.4.2/agent'
make: *** [subdirs] Error 1
ke[1]: Leaving directory `/local/akazam/cacti/bak/net-snmp-5.4.2/agent
make: *** [subdirs] Error 1
解決方法
運行命令: ln -s /usr/lib/libelf.so.1 /usr/lib/libelf.so
測試SNMP
1.查看port是否打開
2.安裝SNMP測試工具
3.本機測試SNMP數據(改動meidahua為配置的團體名(Community))
4.遠程測試SNMP數據(改動ip為serverip,snmpwalk命令須要安裝net-snmp)
或者能夠用法一中的 snmpwalk snmp賬戶password 登錄 來檢測snmp服務是否正常開啟。IP切換成實際IP就可以。
shell> snmpwalk -v 3 -u jiankongbao -a MD5 -A "snmp@jiankongbao" -l authNoPriv 127.0.0.1 sysDescr
錯誤排除
防火牆禁止訪問
假設本地測試SNMP有數據,遠程測試SNMP無數據則因為server防火牆禁止了外部訪問serverudp 161port,則:
改動 /etc/sysconfig/iptables (或者:/etc/sysconfig/iptables-config ) 。添加例如以下規則:
限制僅僅同意特定IP訪問使用例如以下改動方式:
# 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不限制IP澤使用下列方式改動防火牆
重新啟動iptables
SNMPport安全配置-改動默認port:
最簡單的實現例如以下:
/usr/sbin/snmpd tcp:port號 或/usr/sbin/snmpd udp:port號
或vi /etc/rc.d/init.d/snmpd
改動前 OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"
改動后 OPTIONS=" tcp:9999 -Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"
/etc/rc.d/init.d/snmpd start即可了。
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
選項,能夠讓server支持磁盤I/O監控。
接下來,開始編譯和安裝:
suse10:~ # make suse10:~ # make install
到如今為止,我們已經有了能夠執行的SNMP代理程序,它位於/usr/local/snmp/sbin/snmpd,在啟動它之前。我們還要進行一些必要的設置。
設置安全的驗證方式
將SNMP代理程序暴露給網絡上的全部主機是非常危急的,為了防止其他主機訪問你的SNMP代理程序,我們須要在SNMP代理程序上增加身份驗證機制。SNMP支持不同的驗證機制。這取決於不同的SNMP協議版本號,監控寶眼下支持v2c和v3兩個版本號,當中v2c版本號的驗證機制比較簡單。它基於明文password和授權IP來進行身份驗證,而v3版本號則通過username和password的加密傳輸來實現身份驗證,我們建議使用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”表示這是一個僅僅讀的訪問權限,監控寶僅僅能夠從你的server上獲取信息,而不能對server進行不論什么設置。
緊接着的“jiankongbao”相當於password。非常多平台喜歡使用“public”這個默認字符串。這里的“jiankongbao”僅僅是一個樣例,你能夠設置其他字符串作為password。
最右邊的“60.195.249.83,60.195.252.107,60.195.252.110”代表指定的監控點IP,這些IP地址是監控寶專用的監控點,這意味着僅僅有監控寶有權限來訪問你的SNMP代理程序。
所以,以上這段配置中,僅僅有“jiankongbao”是須要你進行改動的,同一時候在監控寶上加入server的時候。須要提供這個字符串。
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”是指定的username,后邊的“auth”指明須要驗證。
接下來,我們還要加入“jiankongbao”這個用戶。這就是v3中的特殊機制,我們打開下面配置文件:
suse10:~ # vi /var/net-snmp/snmpd.conf
這個文件會在snmpd啟動的時候被自己主動調用,我們須要在它里邊加入創建用戶的指令,例如以下:
createUser jiankongbao MD5 mypassword
這行配置的意思是創建一個名為“jiankongbao”的用戶。密碼為“mypassword”。而且用MD5進行加密傳輸。這里要提醒的是:
password至少要有8個字節
這是SNMP協議的規定。假設小於8個字節。通信將無法進行。
值得注意的是,一旦snmpd啟動后,出於安全考慮,以上這行配置會被snmpd自己主動刪除,當然。snmpd會將這些配置以密文的形式記錄在其他文件里,又一次啟動snmpd是不須要再次加入這些配置的,除非你希望創建新的用戶。
以上配置中的username、password和加密方式,在監控寶加入server的時候須要加入。
啟動SNMP代理程序
經過配置后,如今能夠啟動snmpd,例如以下:
/usr/local/snmp/sbin/snmpd
假設要關閉。則能夠直接kill這個進程,例如以下:
killall -9 snmpd
增強的安全機制
有了以上的驗證機制。你就能夠放心的使用SNMP代理了。可是,假設你的SNMP代理程序版本號較低。可能會有一些別實用心的破壞者利用一些固有的漏洞進行破壞。比方發送較長的數據導致SNMP代理程序內存泄漏或者拒絕服務等,為此。你還能夠使用防火牆(iptables)來進行增強的安全過濾。
在Linux中,我們用iptables來實現防火牆,普通情況下,除了流入指定port的數據包以外,我們應該將其他流入的IP數據包拋棄。
你可能已經配置了一定的防火牆規則,那么僅僅要添加針對SNMP的規則就可以。
SNMP代理程序默認監控在udp161port,為你的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
以上設置中如果server外網網卡是eth0,你能夠依據實際情況來改動。
這樣一來,僅僅有監控寶的專用監控器能夠發送UDP數據包到你的server的161port。與SNMP代理程序進行通信。