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。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是否打開

netstat -ln | grep 161

2.安裝SNMP測試工具

yum install net-snmp-utils

3.本機測試SNMP數據(改動meidahua為配置的團體名(Community))

snmpwalk -v 2c -c meidahua localhost system

4.遠程測試SNMP數據(改動ip為serverip,snmpwalk命令須要安裝net-snmp)

snmpwalk -v 2c -c meidahua ip system

或者能夠用法一中的 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澤使用下列方式改動防火牆

-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 161 -j ACCEPT

重新啟動iptables

/etc/init.d/iptables restart

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代理程序進行通信。




免責聲明!

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



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