如何安装和在Ubuntu 14.04配置SNMP程序和客户端

SNMP是创建作为管理和基础设施监控远程系统的标准方法的网络协议。在前面的指南中,我们讨论了协议,版本差异,以及如何沟通工作的关键属性。在本指南中,我们将安装并以此来演示如何使用SNMP来操纵远程系统配置在两个Ubuntu的14.04服务器SNMP组件。

介绍

作为系统管理员的很大一部分是收集有关您的服务器和基础架构的准确信息。 有许多工具和选项用于收集和处理此类信息。 他们中许多人都在一个名为SNMP技术构建。

SNMP代表简单的网络管理协议。 这是服务器可以共享关于其当前状态的信息的方式,并且还是管理员可以通过其修改预定义值的通道。 虽然协议本身很简单,但是实现SNMP的程序的结构可能非常复杂。

在我们过去的指南中,我们了解了SNMP协议的基础知识 在本指南中,我们将开始演示如何设置使用SNMP进行通信的工具。 我们将使用两个Ubuntu 14.04服务器来演示,但大多数其他系统应该能够进行一些修改。

安装SNMP守护程序和实用程序

我们可以通过在某些Ubuntu系统上安装守护程序和工具来开始探索如何在系统上实现SNMP。

我们将使用两个服务器,一个包含管理器部分,而另一个服务器将有代理。 我们可以选择在管理器计算机上安装代理,但保持它们分离,这使得更容易展示每个组件提供的功能。

在第一台服务器上,更新apt数据库并安装管理器组件。 伴随着这一点,我们也将下载另一个包叫做snmp-mibs-downloader其中包含有关标准MIB,使我们通过名字来访问大多数MIB树的一些专有信息:

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

在我们的第二个服务器上,我们将与之交互的服务器将运行守护进程,我们可以通过键入以下命令来安装必要的组件:

sudo apt-get update
sudo apt-get install snmpd

现在您已经安装了这些组件,我们需要配置我们的设置。

配置SNMP管理器

正如我们上面提到的,大部分的工作发生在代理组件,所以我们的配置实际上很容易在这台机器上。 我们只需要修改一个文件,以确保我们的客户端可以使用我们安装的额外MIB数据。

打开/etc/snmp/snmp.conf在使用sudo特权文本编辑器文件中:

sudo nano /etc/snmp/snmp.conf

在此文件中,有几条注释和一条未注释的行。 要允许管理员导入MIB文件,我们只需要注释掉mibs :行:

#mibs :

保存并在完成后关闭文件。

我们现在已经完成配置管理器部分,但我们仍然需要使用此服务器来帮助我们配置我们的代理计算机。

配置SNMP代理计算机

作为真正的客户端 - 服务器系统,代理计算机没有配置其自己的SNMP设置所需的任何外部工具。 我们可以修改一些配置文件进行一些更改,但我们需要做的大部分更改将通过从我们的管理服务器连接到我们的代理服务器来完成。

要开始,在代理计算机上,我们需要使用sudo权限打开守护程序的配置文件:

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 priv
rwuser demo priv

完成这些更改后,保存并关闭文件。

要实现这些更改,请重新启动snmpd服务:

sudo service snmpd restart

现在,从安装管理软件的机器上,我们可以连接到我们的代理服务器来创建我们的常规用户。

我们将为此使用snmpusm工具,其用于用户管理。 您需要知道代理服务器的IP地址才能正常工作。

在开始之前,我们将讨论发送SNMP命令的一般结构。

SNMP命令的一般结构

当使用包含在工具套件snmp包( net-snmp软件套件),你会发现你必须调用命令的方式来几个模式。

您必须做的第一件事是使用您希望与之通信的SNMP守护程序进行身份验证。 这通常涉及提供相当多的信息。 常见的如下:

  • -v版本 :该标志用于指定你想使用SNMP协议的版本。 我们将在本指南中使用v3。
  • -c社区 :该标志,如果您使用SNMP V1或V2式社区字符串进行身份验证使用。 由于我们使用v3风格的基于用户的身份验证,我们不需要这样。
  • -u用户-NAME:该参数用于指定您希望作为验证的用户名。 要使用SNMP读取或修改任何内容,您必须使用已知用户名进行身份验证。
  • -l LEVEL:这是用来指定要与连接的安全级别。 可能的值是noAuthNoPriv无验证和不加密, authNoPriv进行身份验证,但是没有加密,并authPriv进行身份验证和加密。 您使用的用户名必须配置为在您指定的安全级别操作,否则认证将不会成功。
  • -a协议 :此参数用于指定所使用的身份验证协议。 可能的值是MD5SHA 它必须与创建用户时指定的信息相匹配。
  • -x协议 :该参数用于指定所使用的加密协议。 可能的值是DESAES 它必须与创建用户时指定的信息相匹配。 每当用户的权限规范已经这是必要的priv后,使得加密强制性的。
  • -A PASSPHRASE:这是用来给用户创建时指定的认证密码。
  • -X PASSPHRASE:这是用户创建时所指定的加密密码。 如果没有指定但是给出了加密算法,则将使用认证密码。 时,这种需要-x给出参数或每当用户的权限规范有一个priv后,需要加密。

使用这些信息,我们可以开始构造我们的命令。 鉴于我们如何设置我们的引导用户,我们将使用该帐户的命令将如下所示:

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

例如,从管理服务器,您可以通过键入以下内容进行测试,以确保您的引导帐户可用:

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.0
SNMPv2-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守护程序的服务器进行身份验证,我们可以继续创建我们的常规用户帐户。

设置常规用户帐户

虽然我们规定的特权为demo我们的用户帐户snmpd.conf文件,我们还没有实际创建该用户还没有。 我们将使用bootstrap用户成为我们的新用户的模板。

在管理服务器上,我们可以创建使用该模板用户snmpusm工具和通用语法如下:

snmpusm authentication_info remote_host create new_user existing_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_password remote_host sysUpTime.0

您应该返回一个值,表示上次重新启动远程SNMP守护程序的时间:

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

创建客户端配置文件

你可能已经注意到,所有的SNMP命令的认证详细信息将对每个请求是相当静态的。 而不是在每次都输入这些,我们可以创建一个客户端配置文件,其中将包含我们连接的凭据。

客户端配置文件可以放置在两个不同的位置,具体取决于您希望共享它的广泛程度。

如果你想与你的管理机器上的任何有效用户共享您的登录凭据,您可以将您的配置细节到全局snmp.conf文件。 您需要使用sudo权限打开该文件:

sudo nano /etc/snmp/snmp.conf

但是,如果你想独自定义用户的身份验证凭据,您可以创建一个隐藏的.snmp你的用户的主目录内的目录,并创建文件有:

mkdir ~/.snmp
cd ~/.snmp
nano snmp.conf

无论您决定在何处放置配置,内容将是相同的。

我们用来验证的命令在下表中。 在右栏中,您可以看到,应该用来设置内的配置细节指令名snmp.conf文件:

命令标志 描述 翻译snmp.conf指令
-u 用户名 要认证的SNMPv3用户名。 defSecurityName USERNAME
-l authPriv 要验证的安全级别。 defSecurityLevel authPriv
-a MD5 要使用的身份验证协议。 defAuthType MD5
-x DES 要使用的隐私(加密)协议。 defPrivType DES
-A PASSPHRASE 提供的用户名的身份验证密码。 defAuthPassphrase PASSPHRASE
-X PASSPHRASE 所提供用户名的隐私密码。 defPrivPassphrase PASSPHRASE

利用这些信息,你可以构造一个适当的snmp.conf文件。 对于我们的指南,这将看起来像这样:

defSecurityName demo
defSecurityLevel authPriv
defAuthType MD5
defPrivType DES
defAuthPassphrase my_new_password
defPrivPassphrase my_new_password

完成后,保存并关闭文件。

现在,您可以发出命令而不提供身份验证详细信息。 您只需要SNMP命令,主机和命令参数。

而不是键入:

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

我们可以简单地键入:

snmpget remote_host sysUpTime.0

正如您所看到的,这大大减少了我们在每个请求中需要提供的信息量。

删除引导帐户

现在,您的一般帐户配置正确,我们可以删除bootstrap帐户,因为它是相当不安全的。

在您的代理服务器上,打开/etc/snmp/snmpd.conf再次文件使用sudo的特权。

查找并注释掉(或删除)两者,我们先前添加引用的线条bootstrap用户:

#createUser bootstrap MD5 temp_password DES
#rwuser bootstrap priv

保存并关闭文件。

现在,重新启动SNMP守护程序:

sudo service snmpd restart

这将履行没有的建议createUser正常指令snmpd.conf文件。 它还将从该临时用户中删除特权。

如果你想彻底删除bootstrap从usmUserTable用户,可以通过发出从管理服务器命令这样做:

snmpusm remote_host delete bootstrap

您将收到以下回复:

User successfully deleted.

结论

在这一点上,您应该有一个完全配置的客户端 - 服务器设置,什么可以使用SNMP协议安全地通信。 您可以在其他主机上轻松添加其他后台驻留程序,并在整个基础架构上配置帐户访问。

在接下来的指南中,我们就去了一些的NET-SNMP工具的基本用法 ,我们一直努力着。 我们将演示如何一个一个或批量检索值以及如何修改数据。