首页 > 代码库 > SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)

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



SNMP安全配置的两种方法(也可同一时候兼顾配置两种方法)