简单网络管理协议(SNMP)是常见的一种监控手段,目前snmp定义了三个版本的网络管理协议:SNMP v1,SNMP v2,SNMP v3。SNMP v1,v2有很多共同的特征,SNMP v3 在先前的版本地基础上增加了安全和远程配置能力 。为了解决不同版本的兼容性问题,RFC3584定义了共存策略。目前大多数厂商普遍支持的版本是SNMPv1和v2,但从安全鉴别机制来看,二者表现较差。而SNMPv3采用了新的SNMP扩展框架,安全性较好,所以比较推荐,这里从安装和配置块简单介绍下snmp的配置和使用。

一、snmp的安装

安装必备套件net-snmp net-snmp-devel net-snmp-utils

  • net-snmp:提供了一个入口,使得监控服务器可以通过snmp协议从这个入口与被监控机器通信
  • net-snmp-devel: 是为了使用net-snmp-config, net-snmp-utils是为了使用snmpwalk
  • net-snmp-libs: 提供了运行需要的库文件
  • net-snmp-utils: 提供了一套工具,可以利用snmp协议进行通信,snmpget、snmpwalk命令都在该包中

在centos/redhat平台下通过如下命令安装:

1#  yum -y install net-snmp net-snmp-devel net-snmp-utils

二、配置snmp v3认证

1、简单认证

配置前,先使用service snmpd stop命令停止snmpd服务。不停止进行服务时行配置时,会提示“Apparently at least one snmpd demon is already running.You must stop them in order to use this command.” 。使用如下命令配置:

1[root@361way ~]# net-snmp-config --create-snmpv3-user -ro -a mypass -A MD5 myname
2#以下是提示信息,表示会在下面两个配置文件中增加的内容
3adding the following line to /var/lib/net-snmp/snmpd.conf:
4   createUser myname MD5 "mypass" DES
5adding the following line to /etc/snmp/snmpd.conf:
6   rouser myname

注意:net-snmp-config命令中–create-snmpv3-user对应的参数 -a是密码,-A是密码加密方式,而用户名跟在最后面-ro表示只读用户组,可以采集信息,但是不能更改系统设置;在snmpwalk测试的时候,-a表示加密方式,-A是密码,所以这一点很重要,注意和前者的区别。

接着我们使用snmpwalk或者snmpget获取信息,命令如下,发现会有如下提示:

1[root@361way ~]# snmpwalk -v3 -u myname -l auth -a MD5 -A mypass 127.0.0.1 if
2No log handling enabled - turning on stderr logging
3Error: passphrase chosen is below the length requirements of the USM (min=8).
4snmpwalk:  (The supplied password length is too short.)
5Error generating a key (Ku) from the supplied authentication pass phrase.

这个提示告诉我们密码长度至少要有8位。我们将刚刚两个配置文件中对应的行先删除掉,再使用上面的命令,把mypass改为mypassword执行后,再获取下。

 1[root@361way ~]# snmpwalk -v3 -u myname -l auth -a MD5 -A mypassword 127.0.0.1 if
 2IF-MIB::ifIndex.1 = INTEGER: 1
 3IF-MIB::ifIndex.2 = INTEGER: 2
 4IF-MIB::ifIndex.3 = INTEGER: 3
 5IF-MIB::ifDescr.1 = STRING: lo
 6IF-MIB::ifDescr.2 = STRING: eth0
 7IF-MIB::ifDescr.3 = STRING: eth1
 8IF-MIB::ifType.1 = INTEGER: softwareLoopback(24)
 9IF-MIB::ifType.2 = INTEGER: ethernetCsmacd(6)
10IF-MIB::ifType.3 = INTEGER: ethernetCsmacd(6)
11IF-MIB::ifMtu.1 = INTEGER: 65536
12IF-MIB::ifMtu.2 = INTEGER: 1500
13IF-MIB::ifMtu.3 = INTEGER: 1500
14IF-MIB::ifSpeed.1 = Gauge32: 10000000
15………………省略

2、加密认证

加密认证(privpass)我们可以理解为二次认证的方式,这种更安全。如果要创建带privpass验证,而且这个privpass也可以选择不同于密码的加密方式,比如,我密码采用MD5加密,而privpass采用AES加密,增加破解难度,那么可以这样写:

1net-snmp-config:
2--create-snmpv3-user [-ro] [-a authpass] [-x privpass] [-X DES] [-A MD5|SHA] [username]

还是刚刚的例子,如果使用privpass加密认证的话,需要使有如下命令创建:

1# net-snmp-config --create-snmpv3-user -ro -a mypassword -A MD5 -x myprivpass -X DES myname

通过snmpwalk获取时也需要指定:

1# snmpwalk -v3 -u myname -l authPriv -a MD5 -A mypassword -x DES -X myprivpass 127.0.0.1 if

注:除此之外还有种不认证也不加密的连接方式。snmpv3共有三种安全级别:分别为noAuthNoPriv(不认证也不加密)、authNoPriv(认证但是不加密)、authPriv(既认证又加密)。这里我们提到的是后两种。

3、snmpwalk连接snmpv3与snmpv2的区别

snmpv2c/v1里我们一般会使用一个public串的概念去连接,具体如下:

1-c COMMUNITY          set the community string

snmpwalk V3验证常用参数:

1-v 1|2c|3             specifies SNMP version to use
2-u USER-NAME          set security name (e.g. bert)
3-l LEVEL              set security level (noAuthNoPriv|authNoPriv|authPriv)
4-a PROTOCOL           set authentication protocol (MD5|SHA)
5-A PASSPHRASE         set authentication protocol pass phrase
6-x PROTOCOL           set privacy protocol (DES|AES)
7-X PASSPHRASE         set privacy protocol pass phrase

4、iptables配置

snmp协议使用的udp161端口,所以在防火墙上需要开启161 udp的端口访问权限,如下:

1# iptables -A INPUT -i eth0 -p udp -s x.x.x.x --dport 161 -j ACCEPT