LINUX配置SNMP配置

当咱们遇到设备出现故障或须要进行管理时,咱们总要去单独进入到该设备中去进行操做检测,这样既浪费时间又以为工做量大,snmp协议能够帮咱们解决这个问题,在众多的设备和服务器等组成的网络中,咱们能够经过在一台主机上搭建nms服务器经过其余设备或主机上的agent机制利用snmp协议来完成对整个网络中的设备的状态监控,时时刻刻向nms发送trap信息,trap信息反映各设备的及时事件,它就像交通中心同样,时刻反映给咱们各个设备的运行状态,方便咱们去管理网络。linux

 

关于snmp:vim

目前网络中用得最普遍的网络管理协议是 SNMP  (Simple  Network  Management Protocol,简单网络管理协议)。SNMP  是被普遍接受并投入使用的工业标准,用于保证管理信息在网络中任意两点间传送,便于网络管理员在网络上的任何节点检索信息、修改信息、定位故障、完成故障诊断、进行容量规划和生成报告。SNMP 采用轮询机制,只提供最基本的功能集,特别适合在小型、快速和低价格的环境中使用。SNMP 的实现基于无链接的传输层协议UDP,所以能够实现和众多产品的无障碍链接。安全

 

工做机制:服务器

SNMP 分为 NMS 和Agent 两部分:NMS  (Network Management Station,网络管理站)是运行客户端程序的工做站,目前经常使用的网管平台有QuidView、Sun NetManager 和 IBM NetView。Agent 是运行在网络设备上的服务器端软件。NMS 能够向Agent 发出GetRequest、GetNextRequest 和 SetRequest 报文,Agent接收到 NMS  的这些请求报文后,根据报文类型进行 Read  或 Write  操做,生成Response 报文,并将报文返回给 NMS。Agent 在设备发生异常状况或状态改变时(如设备从新启动),也会主动向 NMS 发送Trap 报文,向 NMS 汇报所发生的事件网络

SNMP Agent 支持 SNMP v3 版本,兼容 SNMP v1 版本、SNMP v2C版本ide

SNMP v3 采用用户名和密码认证方式。网站

SNMP v一、SNMP v2C 采用团体名(Community Name)认证,非设备承认团体名的SNMP 报文将被丢弃。ui

Trap 是被管理设备不经请求,主动向 NMS 发送的信息,用于报告一些紧急的重要事件加密

 

Linux SNMPspa

如下的示例采用CentOS Linux环境,但它一样适用于其它Linux发行版。

 

编译和安装

请使用root帐号或者使用sudo权限安装,不然会提示权限错误。

首先咱们须要下载Net-SNMP的源代码,请选择一个相对比较新的SNMP版本,例如5.7.2(当前最新版本),地址以下:

http://nchc.dl.sourceforge.net/project/net-snmp/net-snmp/5.7.2/net-snmp-5.7.2.tar.gz

 

使用wget下载代码:

root@snmp~# wget http://nchc.dl.sourceforge.net/project/net-snmp/net-snmp/5.7.2/net-snmp-5.7.2.tar.gz


接下来对下载的源代码包进行解压缩,以下:

root@snmp~# tar xzvf net-snmp.tar.gz


而后经过源码的configure来生成编译的Makefile规则,以下:

root@snmp~# cd net-snmp-5.7.2
root@snmp~# ./configure --prefix=/usr/local/snmp --with-mib-modules=ucd-snmp/diskio -enable-mfd-rewrites

 

请注意参数:

--prefix=/usr/local/snmp
选项,选择snmp的安装路径。

--with-mib-modules=ucd-snmp/diskio
选项,可让服务器支持磁盘I/O监控。

–enable-mfd-rewrites


选项,容许用新的MFD重写mid模块,这样编译的snmp就能支持64位的计数器,能正常采集到流量。

SNMP在安装时须要选择使用的协议版本,包含三个选项:1,2(for 2c)和3。咱们强烈推荐用户选择 3 版本!为了安全, 1 版本不能添加snmp监控,因此不推荐使用!其余选项直接跳过就能够啦。

 

接下来,开始编译和安装:

root@snmp~# make
root@snmp~# make install
到如今为止,咱们已经拥有了能够运行的SNMP程序,它位于/usr/local/snmp/sbin/snmpd,在启动它以前,咱们还要进行一些必要的设置。

 

设置安全的验证方式

将SNMP代理程序暴露给网络上的全部主机是很危险的,为了防止其它您不容许的主机访问你的SNMP代理程序,咱们须要在SNMP代理程序上加入身份验证机制。

SNMP支持不一样的验证机制,这取决于不一样的SNMP协议版本。

请注意,SNMP协议版本和SNMP程序版本是两回事,刚才说的v2c和v3是指SNMP通用协议的版本,而Net-SNMP是实现SNMP协议进行通讯的程序套件,目前它的最新版本是5.7.2。

 

★ v2c

先来看如何配置v2c版本的SNMP配置,2c版本的SNMP配置有两种配法,在此咱们只介绍最简单的配置方式,若是想了解更多,请您自行查找。

若是您是按照咱们刚才教由你的方式进行的手工编译的SNMP,首先咱们来建立snmpd的配置文件,若是不存在,请在如下目录建立它以下所示:

root@snmp~# vim /usr/local/snmp/share/snmp/snmpd.conf


而后咱们须要建立一个只读账号,也就是read-only community,在snmpd.conf中添加如下内容:

rocommunity yunjiankong default
注意:添加用户时,请在添加完成后重启snmp服务,这样添加才会成功。同时因为云监控可能会变更监测点的IP,到时候就须要从新设置,还请注意

这里的“rocommunity”表示这是一个只读的访问权限,云监控只能够从你的服务器上获取信息,而不能对服务器进行任何设置。

紧接着的“yunjiankong”叫作community,至关于snmp的密码,不少平台喜欢使用“public”这个默认字符串。这里的“yunjiankong”只是一个样例,请务必将此字符串设置复杂,请不要使用默认的public,咱们的样例yunjiankong等字串

最右的“default”表明云监控能访问您的服务器的SNMP,目前云主机监控处于不断迭×××发状态,因此咱们暂时还未最终肯定客户端的固定IP(目前暂有:101.199.100.150(新加入), 220.181.150.98, 180.153.229.230,220.181.150.125, 103.28.10.223。可是会常常变更,还请关注咱们的官方说明)

 

若是想限定指定IP访问您的SNMP,只须要将default替换成您想要被访问的IP,多行须要填写多个:

rocommunity yunjiankong 101.199.100.150
rocommunity yunjiankong 220.181.150.98
rocommunity yunjiankong 180.153.229.230
# 更多IP请按以上格式填写


因此,以上这段配置中,只有“yunjiankong”是须要你进行修改的(若是指定IP,会在之后会可能须要修改),同时在云监控上添加服务器并选择2c版本时,只须要您提供这个字串做为密码便可。

 

★ v3

固然,咱们强烈建议您使用v3版原本进行身份验证。对于一些早期版本的Linux分发版,其内置的SNMP程序可能并不支持v3,因此咱们建议您按照前边介绍的方法,编译和安装最新的Net-Snmp。

v3使用的是另外一种验证方式,会比v2c版本复杂一些,咱们须要建立一个v3的账号,咱们一样修改如下配置文件:

root@snmp~#  vim /usr/local/snmp/share/snmp/snmpd.conf


而后添加一个只读账号,以下:

rouser yunjiankong auth
注意:添加用户时,请确保snmp服务没有运行,不然没法添加。

在v3中,“rouser”用于表示只读账号类型,随后的“yunjiankong”是指定的用户名,后边的“auth”指明须要验证。

 

接下来,咱们还要添加“yunjiankong”这个用户,这就是v3中的特殊机制,咱们打开如下配置文件:

root@snmp~#  vim /var/net-snmp/snmpd.conf


这个文件会在snmpd启动的时候被自动调用,咱们须要在它里边添加建立用户的指令,以下:

createUser yunjiankong MD5 mypassword
这行配置的意思是建立一个名为“yunjiankong”的用户,密码为“mypassword”,而且用MD5进行加密传输。这里要提醒的是:

密码至少要有8个字节

这是SNMP协议的规定,若是小于8个字节,通讯将没法进行。

 

值得注意的是,一旦snmpd启动后,出于安全考虑,以上这行配置会被snmpd自动删除,固然,snmpd会将这些配置以密文的形式记录在其它文件中,从新启动snmpd是不须要再次添加这些配置的,除非你但愿建立新的用户。

以上配置中的用户名、密码和加密方式,在云监控添加服务器的时候须要添加。

 

启动SNMP代理程序

通过配置后,如今能够启动snmpd  (最好使用绝对路径启动),以下:

/usr/local/snmp/sbin/snmpd
若是要关闭,则能够直接kill这个进程,以下:

killall -9 snmpd


加强的安全机制

请注意,此步并非必需要进行的步骤,建议若是您了解linux网络防火墙(iptables)才进行设置,不然可能致使您的网站没法被访问到。正常状况下若是不暴露您的服务器ip的状况下,snmp是很是安全的。

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

 

在Linux中,咱们用iptables来实现防火墙,通常状况下,除了流入指定端口的数据包之外,咱们应该将其它流入的IP数据包抛弃。你可能已经配置了必定的防火墙规则,那么只要增长针对SNMP的规则便可。

 

SNMP代理程序默认监控在udp161端口,为你的iptables增长如下规则:

iptables -A INPUT -i eth0 -p udp -s 220.181.150.98 --dport 161 -j ACCEPT
iptables -A INPUT -i eth0 -p udp -s 180.153.229.230 --dport 161 -j ACCEPT
以上设置中假设服务器外网网卡是eth0,你能够根据实际状况来修改。

 

这样一来,只有专用监控器能够发送UDP数据包到你的服务器的161端口,与SNMP代理程序进行通讯。

 

可使用自建的监控器来监控服务器运行实时状况,也能够借助第三方监控器来监控。