SNMP概述
SNMP是标准的简单网络管理协议,已经被无数的设备用来作为监控协议,并且工作地非常可靠。监控宝就是通过SNMP来帮助您远程监控服务器性能。
监控宝对于SNMP的身份验证支持v2c和v3。我们提供了多项安全配置建议,包括v3的加密身份验证以及防火墙的保护。只需要您按照我们的指引来配置SNMP,您完全可以放心的使用SNMP。
为保证顺利安全的进行服务器性能监控,请在创建监控项目前安装配置好SNMP。下面举例说明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://www.net-snmp.org/download.html下自行查找。
默认安装就可以,请不要改变安装目录。
5、验证是否可以正常获取数据
在安装了采集器的服务器中,打开cmd窗口并执行如下命令:
snmpwalk -v2c -c public target_ip(请将target_ip换成您被监测机器的IP)
能够正常获取数据时,显示如下图所示的内容。
6、配置防火墙
另外,还要保证您的服务器已经打开了SNMP Service的端口,默认为UDP161。如果您启用了系统防火墙,则需要添加这个例外端口。
打开“本地连接→属性→高级→防火墙→例外”,添加端口即可(在安装测试中,建议先关闭其他的防火墙,以排除干扰因素),如下图所示。