如何在Ubuntu 14.04上安装并配置SNMP守护程序与客户端

来源:互联网 发布:袋鼠有多强壮知乎 编辑:程序博客网 时间:2024/06/10 09:09

提供:ZStack云计算

系列教程

本教程为利用SNMP监控并管理网络系列三篇中的第二篇。

内容简介

身为系统管理员,我们的主要工作之一就是收集与服务器及基础设施相关的准确信息。能够用于收集并处理此类信息的方案多种多样,而SNMP正是其中不少方案的基础所在。

SNMP代表简单网络管理协议。通过这种方式,服务器能够共享其现有状态信息,同时允许管理员修改预定义值。尽管这项协议本身非常简单,但使用SNMP的程序在架构方面则可以相当复杂。

在上一篇教程中,我们了解了SNMP协议基础。今天,我们将更进一步,了解如何设置工具以通过SNMP实现通信。我们将在示例中使用两台Ubuntu 14.04服务器。

安装SNMP守护程序与工具

我们首先将该守护程序与工具安装在Ubuntu系统当中。

这里我们将使用两台服务器,其一承载管理器部分,其二承载代理。当然,我们了可以将二者安装在同一设备上,但保持二者独立便于大家更好地理解并区分其功能。

第一台服务器上更新apt数据库并安装管理器组件。另外,我们还需要下载snmp-mibs-downloader软件包,其负责提供我们利用名称访问大部分MIB树时所必需的标准标准MIB专有信息:

sudo apt-get updatesudo apt-get install snmp snmp-mibs-downloader

在第二台服务器上,即运行守护程序并接受交互操作的设备,我们需要安装其它必要组件:

sudo apt-get updatesudo apt-get install snmpd

组件安装完成,接下来是配置工作。

配置SNMP管理器

如上所述,大部分工作都由代理组件完成,因此我们在管理设备上的配置非常简单。我们只需要修改一个文件以确保客户端能够使用已经安装的MIB数据即可。

以sudo权限打开/etc/snmp/snmp.conf文件:

sudo nano /etc/snmp/snmp.conf

在此文件中包含几条注释与一条非注释行。要让管理器导入该MIB文件,我们需要注释该mibs:行:

#mibs :

完成后保存并退出。

管理器部分已经配置完成,但我们还需要使用这台服务器帮助配置代理计算机。

配置SNMP代理设备

作为一套真正的客户端-服务器系统,代理计算机并不需要任何外部工具以实现SNMP配置。我们可以修复部分配置文件以进行变更,但大多数变更都可以立足于管理服务器接入代理服务器来实现。

首先在代理计算机上打开该守护程序的配置文件:

sudo nano /etc/snmp/snmpd.conf

这里我们需要进行几项变更。其主要负责引导配置,保证我们可从其它服务器上对其进行管理。

首先变更agentAddress指令。现在其被设置为只允许来自本地计算机的接入请求。我们需要注释掉该行,同时将其下的行取消注释,即允许全部接入请求(我们稍后再次将其锁定):

#  Listen for connections from the local system only#agentAddress  udp:127.0.0.1:161#  Listen for connections on all interfaces (both IPv4 *and* IPv6)agentAddress udp:161,udp6:[::1]:161

接下来,暂时接入一条createUser行。这些指令通常不会被包含在此文件当中,但我们稍后会将其移除,因此大家不必担心。

我们将创建的用户命名为bootstrap,其作为模板用于创建我们的第一个“真正”用户。SNMP软件包会利用单独的进程对用户属性进行克隆。

在定义新用户时,大家必须指定认证类型(MD5或者SHA)且密码长度至少为8个字符。如果大家打算使用加密传输,还需要指定隐私协议(DES或AES)并可选择使用隐私协议密码。如果不提供隐私协议密码,加密协议将直接使用认证密码。

我们的用户创建行如下所示:

createUser bootstrap MD5 temp_password DES

现在我们已经指定了新的用户,接下来需要设置其访问权限。这里需要设置的除了bootstrap用户之外,还需要指向之后将要创建的demo用户。我们允许二者使用rwuser指令进行读取与写入访问(rouser则代表只读访问)。

我们通过在用户后指定priv以强制使用加密机制。如果大家希望将用户限定至MIB中的特定部分,则可指定最高级OID以要求该用户只访问行中的末尾部分。

在本示例中,两行指定命令非常简单:

rwuser bootstrap privrwuser demo priv

完成上述变更后,保存并退出。

重启snmpd服务以应用变更:

sudo service snmpd restart

现在我们已经可以在安装有管理软件的服务器接入代理服务器,从而创建普通用户。

这里我们要使用snmpusm工具,其专门用于进行用户管理。要让这项功能正确起效,大家需要了解代理服务器的IP地址。

在开始之前,我们还要聊聊SNMP命令发送的常用结构。

SNMP命令的常用结构

要使用包含在smp软件包内的工具套件时(即net-snmp软件套件),大家需要注意调用各命令时的具体模式。

我们首先需要通过所要通信的目标SNMP守护程序的验证。我们往往需要为其提供多种信息,常见内容如下:

  • -v VERSION: 用于指定我们要使用的SNMP协议的具体版本。在本教程中,我们将使用v3。
  • -c COMMUNITY: 用于表明我们是否在使用SNMP v1或v2类字符串进行验证。由于我们使用的是v3类基于用户验证,因此不需要使用这一参数。
  • -u USER-NAME: 这一参数用于指定我们验证时使用的用户名。要利用SNMP进行读取或者修改操作,大家必须利用已知用户名进行验证。
  • -l LEVEL: 用于指定接入时的安全等级。将值设定为noAuthNoPriv代表不经验证及加密,authNoPriv则为验证但不加密,authPriv则为验证且加密。这里大家使用的用户名必须经过配置以符合安全级别要求,否则验证将无法成功。
  • -a PROTOCOL: 此参数用于指定所使用的验证协议。我们可以使用MD5或者SHA作为具体值。其必须匹配创建用户时所指定的信息。
  • -x PROTOCOL: 此参数用于指定所使用的加密协议。这里可以使用DES或者AES。其必须符合我们在创建用户时指定的信息。只要用户权限部分加注priv,则必须设定这项参数以实现加密。
  • -A PASSPHRASE: 用于提供我们在创建用户时所指定的验证密码。
  • -X PASSPHRASE: 代表我们在创建用户时指定的加密密码。如果不加指定但仍然提供加密算法,则默认使用验证密码。用户权限加注priv时必须使用-x参数以完成加密。

现在我们可以构建自己的命令了。考虑到我们设置的bootstrap用户,具体命令将如下所示:

snmp_command -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_hostsnmp_sub_command_or_options

例如,大家可以在自己的管理服务器上进行测试以确保bootstrap账户可用性:

snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host 1.3.6.1.2.1.1.1.0SNMPv2-MIB::sysDescr.0 = STRING: Linux target 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64

其中的1.3.6.1.2.1.1.1.0字符串为负责显示系统信息的OID。其基本上将返回远程系统上的uname -a输出结果。

现在我们已经正确验证了运行SNMP守护程序的服务器,接下来继续创建普通用户账户。

设置普通用户账户

虽然我们已经在snmpd.conf文件中为demo用户账户指定了权限,但还没有实际创建该用户。在这里,我们将使用bootstrap用户作为模板建立新用户。

在管理服务器上,我们可以利用snmpusm工具及以下语法利用模板创建用户:

snmpusm authentication_inforemote_host create new_userexisting_user

因此,使用之前提到的验证标记及已经拥有的bootstrap用户账户以创建符合权限要求的新用户demo。

具体命令如下:

snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host create demo bootstrap

这时大家应该看到以下信息:

User successfully created.

现在我们尼桑在远程服务器上建立了demo用户。不过它使用的仍然是与bootstrap账户相同的验证信息。我们需要变更密码内容。这一次,我们使用demo账户进行验证。请记住,密码长度至少为8位字符:

snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host passwd temp_password my_new_password

返回结果如下:

SNMPv3 Key(s) successfully changed.

我们可以查询远程服务器上的SNMP服务运行时长以测试新凭证及密码是否已经启用。我们这里使用snmpget命令从另一设备上获取这项单一值。

这一次,我们将使用所下载的MIB定义。我们可以使用这些定义根据名称而非OID数字ID提取该值。

snmpget -u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_passwordremote_host sysUpTime.0

:这里获得的返回值应为远程SNMP守护程序最后一次重启的时间:

DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (383018) 1:03:50.18

创建客户端配置文件

大家可能已经注意到了,这里全部SNMP命令中使用的验证在每次请求中都是静态的。相较于每次输入验证密码,我们可以创建一个客户端配置文件以包含接入所需要的凭证。

此客户端配置文件可安放于两个不同位置,具体取决于大家预期的共享范围。

如果大家希望与任意其它有效用户共享登录凭证,则可对全局snmp.conf文件进行配置:

sudo nano /etc/snmp/snmp.conf

不过如果大家希望为各个用户分别设定验证凭证,则可在用户主目录内创建一个隐藏的.snmp目录,并在这里创建该文件:

mkdir ~/.snmpcd ~/.snmpnano snmp.conf

无论如何决定,文件内容都是相同的。

我们可以使用以下命令完成上述目标。右侧一列中,大家可以看到可用于设定配置细节的各指令名称:

命令描述说明snmp.conf指令-u USERNAME 作为验证对象的SNMPv3用户名。 defSecurityNameUSERNAME-l authPriv 验证所使用的安全等级。 defSecurityLevel authPriv-a MD5 所使用的验证协议。 defAuthType MD5-x DES 所使用的隐私(加密)协议。 defPrivType DES-APASSPHRASE 提供给用户名的验证密码。 defAuthPassphrasePASSPHRASE-XPASSPHRASE 提供给用户名的隐私密码。 defPrivPassphrasePASSPHRASE

利用这些信息,大家就可以创建合适的snmpl.conf文件了。在本示例中,文件内容如下:

defSecurityName demodefSecurityLevel authPrivdefAuthType MD5defPrivType DESdefAuthPassphrase my_new_passworddefPrivPassphrase my_new_password

完成后保存并退出。

现在,大家可以在无需提供验证细节的前提下提交命令了。具体来讲,大家只需要提供SNMP命令、主机以及命令参数。

无需输入:

snmpget -u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_passwordremote_host sysUpTime.0

我们可以直接输入:

snmpget remote_host sysUpTime.0

如上所示,这能大大降低我们在每次请求中需要输入的信息量。

移除Bootstrap账户

现在我们的普通账户已经配置完成,可以移除存在安全隐患的bootstrap账户了。

在代理服务器上,以sudo权限打开/etc/snmp/snmpd.conf文件。

在其中找到并注释(或者移除)之前添加的引用bootstrap用户的两行:

#createUser bootstrap MD5 temp_password DES#rwuser bootstrap priv

保存并退出。

现在重启SNMP守护程序:

sudo service snmpd restart

建议大家不要在正常的snmpd.conf文件中包含createUser指令,另外临时用户的权限也需要剥夺。

如果大家希望将bootstrap用户从usmUserTable中彻底移除,则可在管理服务器上使用以下命令:

snmpusm remote_host delete bootstrap

返回结果如下:

User successfully deleted.

总结

现在大家应该已经完成了客户端-服务器配置工作,其能够利用SNMP协议实现安全通信。大家也可以轻松在另一主机上添加更多守护程序,并在整体基础设施内配置账户访问机制。

在下一篇教程中,我们将了解net-snmp工具基本使用方法。我们还将探讨如何逐个或批量检索值,以及如何修改数据。

本文来源自DigitalOcean Community。英文原文:How To Install and Configure an SNMP Daemon and Client on Ubuntu 14.04 By Justin Ellingwood

翻译:diradw

0 0
原创粉丝点击