介绍
作为系统管理员的一大部分是收集有关您的服务器和基础设施的准确信息. 有许多工具和选项用于收集和处理此类信息。
SNMP是简单的网络管理协议,它是服务器可以共享当前状态信息的一种方式,也是管理员可以修改预定义值的渠道,虽然协议本身非常简单,但实施SNMP的程序结构可能非常复杂。
在我们最后的指南中,我们了解了 SNMP协议的基础知识。 在本指南中,我们将开始展示如何设置使用SNMP进行通信的工具。
安装 SNMP Daemon 和实用程序
我们可以开始探索如何在某些Ubuntu系统上安装DAEMON和工具来实现SNMP。
我们将使用两个服务器,其中一个将包含管理器部分,而另一个服务器将有代理人。
在第一个服务器上,更新 apt 数据库并安装管理器组件. 与此同时,我们还将下载另一个名为snmp-mibs-downloader
的包,其中包含一些关于标准 MIB 的专有信息,允许我们以名字访问大多数 MIB 树:
1sudo apt-get update
2sudo apt-get install snmp snmp-mibs-downloader
在我们的第二个服务器上,我们将与之互动的服务器将运行戴蒙,我们可以通过键入安装所需的组件:
1sudo apt-get update
2sudo apt-get install snmpd
现在你已经安装了这些组件,我们需要配置我们的设置。
配置 SNMP 管理器
正如我们上面提到的,大部分工作发生在代理组件中,所以我们的配置实际上在这个机器上相当简单,我们只需要修改一个文件以确保我们的客户端可以使用我们安装的额外MIB数据。
在你的文本编辑器中打开 /etc/snmp/snmp.conf
文件,使用 sudo 权限:
1sudo nano /etc/snmp/snmp.conf
要让管理员导入MIB文件,我们只需要评论‘mibs :’行:
1#mibs :
保存并关闭文件,当你完成。
我们现在已经完成了管理器部分的配置,但我们仍然需要使用这个服务器来帮助我们配置我们的代理计算机。
配置 SNMP 代理机
作为一个真正的客户端服务器系统,代理计算机没有任何必要的外部工具来配置自己的SNMP设置,我们可以修改一些配置文件以进行一些更改,但我们需要做的大多数更改将通过从我们的管理服务器连接到我们的代理服务器来完成。
要开始,在我们的代理计算机上,我们需要打开戴蒙的配置文件与sudo特权:
1sudo nano /etc/snmp/snmpd.conf
在内部,我们将不得不做出一些更改,这些更改将主要用于启动我们的配置,以便我们可以从我们的其他服务器管理它。
首先,我们需要更改agentAddress
指令。目前,它设置为仅允许来自本地计算机的连接。我们需要评论当前的线条,并对下面的线条发表评论,允许所有连接(我们将很快锁定):
1# Listen for connections from the local system only
2#agentAddress udp:127.0.0.1:161
3# Listen for connections on all interfaces (both IPv4 *and* IPv6)
4agentAddress udp:161,udp6:[::1]:161
接下来,我们将需要暂时插入一个CreateUser
行,这些指令通常不会保留在这个文件中,但我们会在一瞬间再次删除它,所以它不太重要。
我们正在创建的用户将被称为bootstrap
,并将被用作创建我们的第一个真正
用户的模板。
当定义新用户时,您必须指定身份验证类型(MD5 或 SHA),并提供至少 8 个字符的密码语句。如果您计划使用加密来传输,就像我们一样,您还必须指定隐私协议(DES 或 AES)和可选的隐私协议密码语句。
我们的用户创建线将看起来像这样:
1createUser bootstrap MD5 temp_password DES
现在我们已经指定了一个新用户,我们需要设置该用户的访问级别,我们将为我们的bootstrap
用户设置这个级别,以及我们将创建的新用户,称为演示
。
如果我们想将用户限制在MIB的特定部分,我们可以指定用户应该在行末端访问的最高级别的OID。
對於我們的目的,我們的兩條線將是相當簡單的:
1rwuser bootstrap priv
2rwuser demo priv
完成这些更改后,保存并关闭文件。
要实施这些更改,请重新启动snmpd
服务:
1sudo service snmpd restart
现在,您安装管理软件的机器,我们可以连接到我们的代理服务器来创建我们的常规用户。
我们将使用用于用户管理的snmpusm
工具进行此操作,您需要知道您的代理服务器的IP地址才能正常运作。
在我们开始之前,我们将讨论发送 SNMP 命令的总体结构。
SNMP命令的总体结构
在使用「snmp」包(「net-snmp」软件包)中包含的工具套件时,您将注意到您必须调用命令的方式的一些模式。
您必须做的第一件事是通过您想要通信的 SNMP 示威者进行身份验证,这通常涉及提供一些信息。
- -v VERSION:此旗帜用于指定您想要使用的 SNMP 协议的版本. 我们将在本指南中使用v3。 (_ ( )* **-c Community :如果使用 SNMP v1 或 v2 风格的社区字符串进行认证,则使用此旗. 由于我们正在使用基于 v3 的基于用户的认证, 我们不需要这个 。 (_) ( ) -u USER-NAME: 此参数用于指定您想要认证的用户名 。 要使用 SNMP 读取或修改任何内容, 您必须使用已知的用户名认证 。 (_) ( ) **-l LEVEL :用于指定您正在连接的安全级别。 可能的值是:无认证和无加密的 " noAuthNoPriv " ;无认证和无加密的 " authNoPriv " ;以及认证和加密的 " authPriv " 。 您使用的用户名必须配置为您指定的安全级别, 否则认证将不会成功 。 ( ) * ** 议定书:此参数用于指定所使用的_认证_协议。 可能的数值是 " MD5 " 或 " SHA " 。 这必须与创建用户时指定的信息相匹配 。
- 页:1 协议**:此参数用于指定所使用的_加密_协议. 可能的价值是 " DES " 或 " AES " 。 这必须与创建用户时指定的信息相匹配. 当用户的特权规格在
priv
之后,使加密成为强制性的,就有必要这样做。 (_) ( )* -A PASSPHRASE:用于给出用户创建时指定的认证密码句. - -X PASSPHRASE:这是用户创建时指定的加密密码句. 如果没有指定但给出了加密算法,将使用认证密码句. 当给出了
-x'参数时,或者当用户的特权规格在其之后有
priv',需要加密时,就要求这样做。 (_) (英语)
根据我们如何设置我们的bootstrap用户,我们将与该帐户使用的命令将看起来像这样:
1snmp_command -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host snmp_sub_command_or_options
例如,从您的管理服务器,您可以通过键入测试,以确保您的bootstrap帐户可用:
1snmpget -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
1SNMPv2-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
文件中指定了演示
用户帐户的权限,但我们还没有创建这个用户,我们将使用bootstrap
用户作为新用户的模板。
在管理服务器上,我们可以使用snmpusm
工具和以下通用语法从模板中创建用户:
1snmpusm authentication_info remote_host create new_user existing_user
因此,使用我们所知道的有关我们需要传递的身份验证旗帜,并利用我们已经拥有的用户帐户(‘bootstrap’),我们可以创建一个适合我们已经定义的用户特权的用户(‘demo’)。
命令将看起来像这样:
1snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host create demo bootstrap
您应该收到以下信息:
1User successfully created.
但是,它仍然使用与bootstrap
帐户相同的身份验证信息,我们应该将密码更改为其他东西,这次我们将使用demo
帐户进行身份验证,请记住,密码必须至少长8个字符:
1snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host passwd temp_password my_new_password
你应该收到以下消息回来:
1SNMPv3 Key(s) successfully changed.
我们可以通过询问我们的远程服务器 SNMP 服务运行了多久来测试我们的新身份证和密码,我们将使用snmpget
命令从另一台机器中获取单个值。
这一次,我们将利用我们下载的额外的 MIB 定义,我们可以使用这些定义来请求值以名称,而不是 OID 数字 ID。
1snmpget -u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password remote_host sysUpTime.0
您应该返回一个代表远程 SNMP 示范器上次重新启动的值:
1DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (383018) 1:03:50.18
创建客户端配置文件
您可能在这一点上注意到,您的所有SNMP命令的身份验证细节在每个请求中都相当静态,而不是每次键入这些,我们可以创建一个客户端配置文件,其中包含我们正在连接的凭证。
客户端配置文件可以放置在两个不同的位置,这取决于您想要共享的宽度。
如果您想与您的管理机器上的任何有效用户共享登录凭证,您可以将配置详细信息放入全球 snmp.conf
文件中。
1sudo nano /etc/snmp/snmp.conf
但是,如果您只想为您的用户定义身份验证凭证,则可以在您的用户主目录中创建隐藏的 .snmp
目录,并在那里创建该文件:
1mkdir ~/.snmp
2cd ~/.snmp
3nano snmp.conf
无论您决定在哪里设置配置,内容都将是一样的。
在右侧的列中,你可以看到应该用来设置这些配置细节的指令名称在snmp.conf
文件中:
Command Flag | Description | Translated snmp.conf directive |
---|---|---|
-u USERNAME | The SNMPv3 username to authenticate as. | defSecurityName USERNAME |
-l authPriv | The security level to authenticate with. | defSecurityLevel authPriv |
-a MD5 | The authentication protocol to use. | defAuthType MD5 |
-x DES | The privacy (encryption) protocol to use. | defPrivType DES |
-A PASSPHRASE | The authentication passphrase for the supplied username. | defAuthPassphrase PASSPHRASE |
-X PASSPHRASE | The privacy passphrase fro the supplied username. | defPrivPassphrase PASSPHRASE |
使用这些信息,你可以构建一个适当的 snmp.conf
文件. 对于我们的指南,这将看起来像这样的:
1defSecurityName demo
2defSecurityLevel authPriv
3defAuthType MD5
4defPrivType DES
5defAuthPassphrase my_new_password
6defPrivPassphrase my_new_password
完成后,保存并关闭文件。
现在,您可以发出命令而不提供身份验证详细信息,您只需要 SNMP 命令、主机和命令参数。
代替打字:
1snmpget -u demo -l authPriv -a MD5 -x DES -A my_new_password -X my_new_password remote_host sysUpTime.0
我们可以简单地类型:
1snmpget remote_host sysUpTime.0
正如您所看到的,这大大减少了我们需要在每个请求中提供的信息量。
删除 Bootstrap 帐户
现在您的常规帐户已正确配置,我们可以删除bootstrap
帐户,因为它相当不安全。
在你的代理服务器上,用 sudo 权限再次打开 /etc/snmp/snmpd.conf
文件。
查找并评论(或删除)我们之前添加的两个行,引用bootstrap
用户:
1#createUser bootstrap MD5 temp_password DES
2#rwuser bootstrap priv
保存并关闭文件。
现在,重新启动 SNMP DAEMON:
1sudo service snmpd restart
这将满足在正常的snmpd.conf
文件中没有createUser
指令的建议,还会删除该临时用户的特权。
如果您想从 usmUserTable 中完全删除bootstrap
用户,您可以通过从管理服务器发出此命令:
1snmpusm remote_host delete bootstrap
您将收到以下答案:
1User successfully deleted.
结论
在此时,您应该有一个完全配置的客户端服务器设置,可以使用SNMP协议安全地通信,您可以轻松地在其他主机上添加额外的戴蒙,并在整个基础设施上配置帐户访问。
在下一个指南中,我们将讨论一些我们一直在使用的 net-snmp 工具的基本用途,我们将展示如何单一或批量获取值,以及如何修改数据。