SNMP概述

SNMP是标准的简单网络管理协议,已经被无数的设备用来作为监控协议,并且工作地非常可靠。监控宝就是通过SNMP来帮助您远程监控服务器性能。

监控宝对于SNMP的身份验证支持v2c和v3。我们提供了多项安全配置建议,包括v3的加密身份验证以及防火墙的保护。只需要您按照我们的指引来配置SNMP,您完全可以放心的使用SNMP。

为保证顺利安全的进行服务器性能监控,请在创建监控项目前安装配置好SNMP。下面举例说明SNMP在不同服务器中的安装配置方法,请根据您使用的服务器选择查看的内容:

在Linux服务器(SUSE10)中安装配置SNMP代理

在Linux服务器(CentOS)中安装配置SNMP代理

在Linux服务器(Ubuntu)中安装配置SNMP代理

在Windows服务器(Windows Server 2003)中安装配置SNMP代理


在Linux服务器(SUSE10)中安装配置SNMP代理

本部分以SUSE10 Linux环境为例,介绍Linux服务器中SNMP的安装配置方法。

1、安装Net-SNMP

1)首先需要下载Net-SNMP的源代码,选择一个版本,比如5.7.1,地址如下:

http://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.1/

2)下载源代码后,通过如下命令解压缩安装包:

tar xzvf net-snmp-5.7.1.tar.gz

3)通过configure来生成编译规则,命令如下:

cd net-snmp-5.7.1./configure --prefix=/usr/local/snmp --with-mib-modules=ucd-snmp/diskio

上述命令中的“--with-mib-modules=ucd-snmp/diskio”选项,可以让服务器支持磁盘I/O监控。

4)通过如下命令编译和安装Net-SNMP:

make
make install

5)至此,我们已经完成了SNMP代理的安装,它位于/usr/local/snmp/sbin/snmpd下。

2、配置Net-SNMP

在启动Net-SNMP前,还需要进行一些必要的安全设置。因为将SNMP代理程序暴露给网络上的所有主机是很危险的,为了防止其它主机访问您的SNMP代理程序,需要在SNMP代理程序上加入身份验证机制。

不同的SNMP协议版本支持不同的验证机制,监控宝目前支持v2c和v3两个版本。其中v2c版本的验证机制比较简单,它基于明文密码和授权IP来进行身份验证,而v3版本则通过用户名和密码的加密传输来实现身份验证。

我们建议使用v3,当然,只要按照以下的介绍进行配置,不论是v2c版本还是v3版本,都可以保证一定的安全性,用户可以根据情况来选择。

注意一点,SNMP协议版本和SNMP代理程序版本是两回事,刚才说的v2c和v3是指SNMP协议的版本,而Net-SNMP是用来实现SNMP协议的程序套件。

1)配置v2c版本的SNMP代理

默认情况下snmpd的配置文件是不存在的,需要手动创建,命令如下:

vi /usr/local/snmp/share/snmp/snmpd.conf

在snmpd.conf中添加以下内容来创建一个只读帐号,也就是read-only community:

rocommunity jiankongbao 60.195.252.107
rocommunity jiankongbao 60.195.252.110
# 如果您使用的是采集器,此处的IP应该是安装采集器的服务器的IP

注意:添加用户时,请确保snmp服务没有运行,否则无法添加。

说明:

  • Rocommunity:表示这是一个只读的访问权限,监控宝只可以从您的服务器上获取信息,而不能对服务器进行任何设置。

  • Jiankongbao:相当于密码,很多平台喜欢使用“public”这个默认字符串。这里只是举个例子,您可以设置其它字符串作为密码。

  • 60.195.252.107,60.195.252.110:代表指定的监控点IP,这些IP地址是监控宝专用的监控点,这意味着只有监控宝有权限来访问你的SNMP代理程序。

注意:如果您使用的是采集器,IP地址应该是安装采集器的服务器的IP。

所以,以上这段配置中,只有“jiankongbao”是需要您进行修改的,同时在监控宝中创建服务器监控时,需要提供这个字符串。

2)配置v3版本的SNMP代理

我们建议用户使用v3版本来进行身份验证。对于一些早期版本的Linux分发版,其内置的SNMP代理程序可能并不支持v3,所以我们建议您按照前面介绍的方法,编译和安装最新的Net-Snmp。

v3支持另一种验证方式,配置过程如下:

① 创建一个v3的帐号,我们同样修改以下配置文件:

vi /usr/local/snmp/share/snmp/snmpd.conf

② 添加一个只读帐号,命令如下:

rouser jiankongbao auth

注意:添加用户时,请确保snmp服务没有运行,否则无法添加。

在v3中,“rouser”表示只读帐号类型,“jiankongbao”是指定的用户名,“auth”表示需要验证。

③ 添加“jiankongbao”这个用户,这就是v3中的特殊机制,打开以下配置文件:

vi /var/net-snmp/snmpd.conf

这个文件会在snmpd启动的时候被自动调用,我们需要在它里边添加创建用户的指令,如下:

createUser jiankongbao MD5 mypassword

这行配置的意思是创建一个名为“jiankongbao”的用户,密码为“mypassword”,并且用MD5进行加密传输。这里的用户名、密码和加密方式,在监控宝中创建服务器监控时需要提供。

这里要提醒的是:密码至少要有8个字节,这是SNMP协议的规定,如果小于8个字节,通信将无法进行。

需要注意的是,一旦启动snmpd,出于安全考虑,以上这行配置会被snmpd自动删除。当然,snmpd会将这些配置以密文的形式记录在其它文件中,重新启动snmpd是不需要再次添加这些配置的,除非你希望创建新的用户。

3、启动SNMP代理程序

SNMP代理程序的服务名称为snmpd,配置完成后启动SNMP代理程序,直接启动snmpd即可,命令如下:

/usr/local/snmp/sbin/snmpd

如果要关闭SNMP代理程序,则可以直接kill这个进程,命令如下:

Killall-9 snmpd

4、增强的安全机制

有了以上的验证机制,就可以放心的使用SNMP代理了。但是,如果您的SNMP代理程序版本较低,可能会有别有用心的破坏者利用一些固有的漏洞进行破坏,比如发送较长的数据导致SNMP代理程序内存泄漏或者拒绝服务等。为此,您还可以使用防火墙(iptables)来增强安全过滤。

在Linux中,我们用iptables来实现防火墙。一般情况下,除了流入指定端口的数据包以外,我们应该将其它流入的IP数据包抛弃。您可能已经配置了一定的防火墙规则,那么只要增加针对SNMP的规则即可。

SNMP代理程序默认监控在udp161端口,为iptables增加以下规则:

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应该是安装采集器的服务器的IP

以上设置中假设服务器外网网卡是eth0,您可以根据实际情况来修改。

这样一来,只有监控宝的专用监控器可以发送UDP数据包到您服务器的161端口,与SNMP代理程序进行通信。


在Linux服务器(CentOS)中安装配置SNMP代理

本部分以CentOS环境为例,介绍Linux服务器中SNMP的安装配置方法。

1、安装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。

2、配置Net-SNMP

在启动Net-SNMP前,为了防止其它主机访问您的SNMP代理程序,需要在SNMP代理程序上加入身份验证机制。

1)V2c验证方法

这里需要修改一个配置文件,首先需要清空snmpd.conf这个文件,接着需要写入配置信息,命令如下:

shell>> /etc/snmp/snmpd.conf
shell>> vim/etc/snmp/snmpd.conf
rocommunity public 127.0.0.1
rocommunity public 192.168.1.1
rocommunity public 192.168.1.2
# 如果您使用的是采集器,以下IP应该是安装采集器的服务器的IP
rocommunity public 60.195.252.107
rocommunity public 60.195.252.110

注意:请将192.168.1.1 替换为被监控服务器的IP,public可替换为您希望的字符串。

需说明的是,默认的配置文件里会有一些权限控制的配置,如果您有这个需求,请自行参考CentOS的man文档。

2)V3验证方法

有些CentOS环境下的net-snmp无法在selinux环境下正常使用v3。如果您想使用snmp v3,请先禁用selinux。

使用如下命令创建一个snmpv3用户(权限为只读,加密方式为MD5,用户名为jiankongbao,密码为snmp@jiankongbao):

shell> net-snmp-config --create-snmpv3-user -ro -A snmp@jiankongbao -a MD5 jiankongbao

运行之前请先停用net-snmp服务,否则无法添加,命令如下:

shell> service snmpd stop

3、运行Net-SNMP

运行 Net-SNMP 服务的方法比较简单,Net-SNMP服务名为snmpd,直接启动snmpd即可,命令如下:

shell> service snmpd start

您可能需要把它加入开机自动运行服务列表,命令如下:

shell> chkconfig snmpd on

4、检测Net-SNMP

启动Net-SNMP后,需要检测snmp服务是否正常开启。

1)V2c版本检测

使用如下命令查看161UDP端口是否打开:

shell>netstat –antupl

然后在另外任意一台机器上执行如下命令(请将commity换成您自己的字符串,tartget_ip换为被监控服务器的IP):

shell>snmpwalk -v2c –ccommity target_ip

如果出现长串数字,则说明mib没有安装好。

2)V3版本检测

我们可以使用snmpwalk来检测snmp服务是否正常开启,命令如下:

shell> snmpwalk -v 3 -u jiankongbao -a MD5 -A "snmp@jiankongbao" -l authNoPriv 127.0.0.1 sysDescr

如果一切正常,就会返回正常结果。有关snmpwalk的参数说明,请参见CentOS的man文档。

5、配置防火墙

除身份验证,您还可以使用防火墙(iptables)来增强安全过滤。

1)V2c配置

通常我们使用iptables,请确定iptables对配置文件中的机器IP没有做访问限制,使用如下命令查看:

shell>iptables -L -n

使用如下命令允许UDP的161端口:

shell>iptables -I INPUT -p udp --dport 161 -j ACCEPT

2)V3配置

Net-SNMP使用udp协议的161端口,同时我们会从以下两个IP访问您的服务器:

  • 60.195.252.107

  • 60.195.252.110

如果您使用的是内网采集器,我们会从安装采集器的服务器访问您的服务器。

一个可能的配置文件是:

-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

说明:以上只是一个可能的配置。请您在写之前明白每一句话的含义,而不是直接复制。


在Linux服务器(Ubuntu)中安装配置SNMP代理

本部分以Ubuntu环境为例,介绍Linux服务器中SNMP的安装配置方法,主要包括以下四步:

1、安装SNMP

安装SNMP时需要安装snmpd和snmp两个安装包,安装规则如下:

  • snmp,需要安装在安装了采集器的服务器上。

  • snmpd,需要安装在被监控的服务器上。

  • 安装了采集器的服务器需要监测自己时,两个安装包都需要安装。

安装之前,需要查看/etc/apt目录下的sources.list文件,确认安装源中是否有multiverse这个字段,例如:

deb http://hk.archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse

如果有,直接安装;如果没有需要手动添加,更新后再执行安装,命令如下:

apt-get update
#请根据需要选择安装哪个安装包
apt-get install snmp snmpd

2、配置并重启SNMP

重启SNMP前,为了防止其它主机访问您的SNMP代理程序,需要在SNMP代理程序上加入身份验证机制。

1)V2c验证方法

需要修改3个配置文件,首先分别清空snmp.conf和snmpd.conf这2个文件,再配置snmpd.conf这个文件,命令如下:

shell>> /etc/snmp/snmp.conf;> /etc/snmp/snmpd.conf
shell>vim/etc/snmp/snmpd.conf
rocommunity public 127.0.0.1
# 如果您使用的是采集器,以下IP应该是安装采集器的服务器的IP
Rocommunity public 60.195.252.107
Rocommunity public 60.195.252.110

如果您的/etc/default/snmpd中含有127.0.0.1字样,需要去掉127.0.0.1。

需说明的是,默认的配置文件里会有一些权限控制的配置,如果您有这个需求,请自行参考Ubuntu的man文档。

2)V3验证方法

使用如下命令创建一个snmpv3用户(权限为只读,加密方式为MD5,用户名为jiankongbao,密码为snmp@jiankongbao):

shell> net-snmp-config --create-snmpv3-user -ro -A snmp@jiankongbao -a MD5 jiankongbao

3)重启Net-SNMP

配置完成后需重启SNMP,命令如下:

shell>/etc/init.d/snmpd restart

3、验证Net-SNMP

启动SNMP后,需要检测snmp服务是否正常开启。

1)V2c版本检测

使用如下命令查看161UDP端口是否打开:

shell>netstat –antupl

然后在另外任意一台机器上执行如下命令(请将commity换成您自己的字符串,tartget_ip换成被监控服务器的IP):

shell>snmpwalk -v2c –ccommity target_ip

如果出现长串数字,则明说mib没有安装好。

2)V3版本检测

我们可以使用snmpwalk来检测snmp服务是否正常开启,命令如下:

shell> snmpwalk -v 3 -u jiankongbao -a MD5 -A "snmp@jiankongbao" -l authNoPriv 127.0.0.1 sysDescr

如果一切正常,就会返回正常结果。有关snmpwalk的参数说明,请参见Ubuntu的man文档。

4、配置防火墙

除身份验证,您还可以使用防火墙(iptables)来增强安全过滤。

1)V2c配置

通常我们使用iptables,请确定iptables对配置文件中的机器IP没有做访问限制,使用如下命令查看:

shell>iptables -L -n

使用如下命令允许UDP的161端口:

shell>iptables -I INPUT -p udp --dport 161 -j ACCEPT

2)V3配置

Net-SNMP使用udp协议的161端口,同时我们会从以下两个个IP访问您的服务器:

  • 60.195.252.107

  • 60.195.252.110

如果您使用的是内网采集器,我们会从安装采集器的服务器访问您的服务器。

一个可能的配置文件是:

-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

说明:以上只是一个可能的配置。请您在写之前明白每一句话的含义,而不是直接复制。


在Windows服务器(Windows Server 2003)中安装配置SNMP代理

本部分以Windows Server 2003为例,介绍Windows服务器中SNMP的安装配置方法。其它Windows服务器产品的配置方法类似。

SNMP包括服务端和客户端,安装规则如下:

  • 安装了内网采集器的服务器需要安装客户端

  • 被监测的服务器需要安装服务端

  • 安装了内网采集器的服务器需要监测自己时,需要安装客户端和服务端。

1、安装SNMP服务端

首先您必须确认当前的Windows组件中是否已经安装了SNMP协议,方法如下:

在控制面板中选择“添加或删除程序”,在打开的对话框中选择“添加/删除Windows组件”查看已安装的Windows组件,如下图所示。

查看“管理和监控工具”的详细信息,检查是否安装“简单网络管理协议(SNMP)”,如下图所示。

如果没有安装,则选中SNMP组件进行安装,安装期间您可能需要定位Windows安装盘。

2、配置服务端

SNMP组件安装成功后,在开始菜单中选择“管理工具→服务”,如下图所示。

在打开的对话框中找到SNMP Service,安装SNMP协议后,SNMP Service会默认启动,如下图所示。

需要注意的是,SNMP Trap Service是不需要开启的,如果它已被开启,请将其关闭。

双击SNMP Service配置其属性,在打开的对话框中选择“安全”选项卡,设置接受的团体名称并指定接受SNMP数据包的主机,如下图所示。

1)设置接受的团体名称

团体名称就是前边介绍过的SNMP v2c版本中的密码字符串,public只是一个例子,您可以填写其它字符串。

在监控宝中创建服务器监控项目时,选择2c协议后在 Community输入框中填写这个团体名称即可。

2)指定接受SNMP数据包的主机

选择“接受来自这些主机的SNMP数据包”来指定主机。

  • 使用内网采集器采集数据时,添加您的内网采集器所在服务器的IP地址,采集器需要具有访问这台服务器SNMP的权限。

  • 不使用内网采集器时,添加监控宝的SNMP监控器IP地址: 60.195.252.107、60.195.252.110。

3、启动服务端

配置完成后,保证SNMP Service已经开启即可。如果以后重启了服务器,请检查是否开启了SNMP Service。当然,如果该服务被关闭,监控宝会在服务器监控视图中提醒您。

4、安装客户端

安装了采集器的服务器需要安装客户端,即Net-SNMP,下载地址为:

http://jaist.dl.sourceforge.net/project/net-snmp/net-snmp%20binaries/5.6.1.1-binaries/net-snmp-5.6.1.1-1.x86.exe

如果上面地址失效,请到http://www.net-snmp.org/download.html下自行查找。

1459932004586914.png 默认安装就可以,请不要改变安装目录。

5、验证是否可以正常获取数据

在安装了采集器的服务器中,打开cmd窗口并执行如下命令:

snmpwalk -v2c -c public target_ip(请将target_ip换成您被监测机器的IP)

能够正常获取数据时,显示如下图所示的内容。

6、配置防火墙

另外,还要保证您的服务器已经打开了SNMP Service的端口,默认为UDP161。如果您启用了系统防火墙,则需要添加这个例外端口。

打开“本地连接→属性→高级→防火墙→例外”,添加端口即可(在安装测试中,建议先关闭其他的防火墙,以排除干扰因素),如下图所示。