如何在 Ubuntu 18.04 上安装和配置 SNMP 守护进程和客户端

作者选择了 Internet Archive作为 Write for Donations计划的一部分接受捐赠。

介绍

作为系统管理员的一大部分是收集有关您的服务器和基础设施的准确信息. 有许多工具和选项来收集和处理此类信息。

SNMP是简单的网络管理协议,它是服务器可以共享当前状态信息的一种方式,也是管理员可以修改预定义值的渠道。虽然协议本身很轻,但实施SNMP的程序结构可以迅速复杂化。

在本指南中,您将设置使用SNMP进行通信的工具,您将使用两个Ubuntu 18.04服务器进行演示,其中一台将包含 SNMP manager,该工具将与代理商交谈,以实现网络设备,这将被称为 manager server。另一台服务器将有 SNMP agent,该服务器将执行管理服务器的命令。

前提条件

要遵循本教程,您将需要:

步骤 1 — 安装 SNMP Daemon 和实用程序

您可以开始探索 SNMP 如何在系统上实现,通过在 Ubuntu 服务器上安装 DAEMON 和工具。

从本地机器登录到管理器服务器**作为您的非根用户:

1[environment local]
2ssh your_username@manager_server_ip_address

更新 [APT 包管理器] 的包索引(https://andsky.com/tech/tutorials/package-management-basics-apt-yum-dnf-pkg):

1sudo apt update

接下来,安装SNMP软件:

1sudo apt install snmp snmp-mibs-downloader

snmp包提供一系列命令行工具,用于向代理人发出SNMP请求. snmp-mibs-downloader包将有助于安装和管理管理网络对象的管理信息库(MIB)(https://andsky.com/tech/tutorials/an-introduction-to-snmp-simple-network-management-protocol#snmp-agents)文件。

然后,在本地机器上打开一个新的终端,并登录到 代理服务器:

1[environment local]
2ssh your_username@agent_server_ip_address

在代理服务器上,更新包索引:

1[environment second]
2sudo apt update

然后安装 SNMP DAEMON。

1[environment second]
2sudo apt install snmpd

请注意,您不需要snmp-mibs-downloader包,因为 agent server不会管理MIB文件。

现在你已经安装了这些组件,你将配置你的 管理服务器

步骤 2 – 配置 SNMP 管理器服务器

如前所述,大部分工作发生在代理服务器中,所以您在管理器服务器上的配置将不那么重要,您只需要修改一个文件,以确保SNMP工具可以使用您安装的额外的MIB数据。

在你的 manager 服务器上,打开你的文本编辑器中的 /etc/snmp/snmp.conf 文件,使用 sudo 特权。

1sudo nano /etc/snmp/snmp.conf

在此文件中,有几个评论和一个单个未评论的行. 为了让管理员导入MIB文件,请评论‘mibs :’行:

1[label /etc/snmp/snmp.conf]
2# As the snmp packages come without MIB files due to license reasons, loading
3# of MIBs is disabled by default. If you added the MIBs you can reenable
4# loading them by commenting out the following line.
5#mibs :

保存并关闭snmp.conf,按CTRL+X,然后按Y,如果使用nano,则按ENTER

您现在已经完成了管理器服务器的配置,但您仍然需要使用该服务器来帮助配置您的代理服务器,您将在下一步做。

步骤 3 – 配置 SNMP 代理服务器

作为一个真正的客户端服务器系统,代理服务器没有任何必要的外部工具来配置自己的SNMP设置,您可以修改一些配置文件以进行一些更改,但您需要做的大多数更改将通过连接到您的代理服务器从您的管理服务器。

在本教程中,您将使用 SNMP 协议版本 3。 与 SNMPv1 和 v2 不同,在 SNMPv3 中,每个消息都包含被编码的安全参数。

要开始,在你的代理服务器上,打开与 sudo 特权的 daemon 配置文件:

1[environment second]
2sudo nano /etc/snmp/snmpd.conf

在内部,您将不得不做出一些更改,这些更改将主要用于启动您的配置,以便您可以从您的其他服务器管理它。

首先,您需要更改agentAddress指令。目前,它设置为仅允许来自本地计算机的连接。您需要评论当前的行,并对下面的行进行评论,允许所有连接。

1[label /etc/snmp/snmpd.conf]
2#  Listen for connections from the local system only
3#agentAddress udp:127.0.0.1:161
4#  Listen for connections on all interfaces (both IPv4 *and* IPv6)
5agentAddress udp:161,udp6:[::1]:161

<$>[注] 注: 由于允许所有类似的连接不是安全最佳实践,所以在启动完成后,最好确保将其锁定。

接下来,你会暂时插入一个createUser行. 这些指令通常不会保留在这个文件中;你会在一瞬间再次删除它。

您正在创建的用户将被称为 bootstrap,并将被用作创建您的第一个实际用户的模板。

定义新用户时,您必须指定身份验证类型(MD5SHA)以及提供必须至少有八个字符的密码短语。如果您计划使用加密传输,如本教程所示,您还必须指定隐私协议(DES)或隐私协议(https://tools.ietf.org/html/rfc3826))以及可选的隐私协议密码短语。

将此createUser行添加到文件的末尾:

1[label /etc/snmp/snmpd.conf]
2...
3createUser bootstrap MD5 temp_password DES

在本教程中,您将为您的 bootstrap用户设置此设置,以及您正在创建的新用户,称为 demo

如果你想将用户限制在MIB的某个特定部分,你可以指定最高级别的 对象标识符(OID)),用户应该在行末端可以访问。

对于本教程的目的,你的两行将如下:

1[label /etc/snmp/snmpd.conf]
2...
3rwuser bootstrap priv
4rwuser demo priv

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

要实施这些更改,请在您的代理服务器上重新启动snmpd服务:

1[environment second]
2sudo systemctl restart snmpd

SNMP DAEMON 会听取对端口 161 的连接。 配置 UFW 以允许从 manager 服务器到此端口的连接:

1[environment second]
2sudo ufw allow from manager_server_ip_address to any port 161

您可以了解有关 UFW 的更多信息,请参阅 如何在 Ubuntu 18.04 上设置使用 UFW 的防火墙

现在已配置了 代理服务器,您可以从 管理器服务器连接到您的 代理服务器来验证连接。

步骤 4 – 验证代理服务器的身份验证

在此步骤中,您将测试以确保您可以使用您的 bootstrap帐户连接到 代理服务器

在使用「snmp」软件包(「net-snmp」软件包)中包含的工具套件时,您必须调用命令的方式有几种模式。 首先要做的是通过您希望与之通信的SNMP示威器进行身份验证。 这通常涉及提供一些信息。 常见的信息如下:

-v': 此旗帜用于指定您想要使用的 SNMP 协议的版本 。 此教程将使用 v3. (_) ( )* -c': 如果您使用 SNMP v1 或 v2 风格的社区字符串进行认证,则使用此旗帜 。 由于您正在使用基于 v3 的基于用户的认证, 您不需要这样做 。 ( _) ( ) -u ': 此参数用于指定您想要认证的用户名 。 要使用 SNMP 读取或修改任何内容, 您必须使用已知的用户名认证 。 (_) ( )* -l': 用于指定您连接的安全级别 。 可能的值是:无认证和无加密的 " noAuthNoPriv " ;无认证和无加密的 " authNoPriv " ;以及认证和加密的 " authPriv " 。 您使用的用户名必须配置为您指定的安全级别, 否则认证将不会成功 。 ( ) * `a': 此参数用于指定所使用的_ 认证协议_ 。 可能的数值是 " MD5 " 或 " SHA " 。 这必须与创建用户时指定的信息相匹配 。

  • -x ' : 此参数用于指定所使用的 _ 加密协议 。 可能的价值是 " DES " 或 " AES " 。 这必须与创建用户时指定的信息相匹配. 当用户的特权规格在priv之后,使加密成为强制性的,就有必要这样做。 (_) ( )* -A':用于给用户创建时指定的认证密码句。 () ( )* -: 这是创建用户时指定的加密密码句 。 如果没有指定但给出了加密算法,将使用认证密码句. 当给出了-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 agent_server_ip_address 1.3.6.1.2.1.1.1.0

1.3.6.1.2.1.1.1.0字符串是负责显示系统信息的OID,它将返回远程系统上的uname -a输出。

这将产生以下产出:

1[secondary_label Output]
2SNMPv2-MIB::sysDescr.0 = STRING: Linux agent 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64

现在你已经验证了你可以将身份验证到运行 SNMP daemon 的服务器,你可以继续创建你的常规用户帐户。

步骤5:设置常规用户帐户

虽然您已经在snmpd.conf文件中指定了 demo用户帐户的权限,但您还没有实际创建该用户. 在此步骤中,您将使用 bootstrap用户作为新用户的模板。

在 **manager 服务器上,您可以使用snmpusm工具和以下通用语法从模板创建用户:

1snmpusm authentication_info agent_server_ip_address create new_user existing_user

使用您所知道的有关您需要传输的身份验证标志的信息,并利用您已经拥有的用户帐户(bootstrap),您可以创建一个适合您已经定义的用户权限的用户(demo)。

命令将看起来像这样:

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

您将收到以下消息:

1[secondary_label Output]
2User successfully created.

您现在在您的代理服务器上拥有一个名为 demo的功能齐全的用户,但它仍然使用与 bootstrap帐户相同的身份验证信息. 为了增加安全性,您可以将密码更改为其他东西。

1snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address passwd temp_password new_password

您将收到以下消息返回:

1[secondary_label Output]
2SNMPv3 Key(s) successfully changed.

您可以通过询问 agent 服务器 SNMP 服务运行了多久来测试您的新身份证和密码。

这一次,利用您下载的额外的 MIB 定义,请以名义要求值,而不是 OID 数字 ID。

1snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0

您将返回一个代表远程 SNMP 示范器上次重新启动的值:

1[secondary_label Output]
2DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (53309) 0:08:53.09

您现在有一个名为 demo的工作用户帐户,在下一步,您将通过配置客户端来简化使用SNMP命令的工作。

步骤 6 – 创建客户端配置文件

您可能在这一点上注意到,您的所有SNMP命令的身份验证细节在每个请求中都相当静态,而不是每次键入这些,您可以创建一个客户端配置文件,其中包含您正在连接的凭证。

客户端配置文件可以放置在两个不同的位置,这取决于您想要共享的宽度。

如果您想与管理机器上的任何有效用户共享登录凭证,您可以将配置详细信息放入管理器服务器上的全球 snmp.conf 文件中。

1sudo nano /etc/snmp/snmp.conf

但是,如果您只想为您的用户定义身份验证凭证,则可以在 manager 服务器上创建用户主目录中的隐藏 .snmp 目录,然后在那里创建文件:

1mkdir ~/.snmp
2nano ~/.snmp/snmp.conf

无论您决定在哪里设置配置,内容都将是一样的。

在右侧的列中,您可以看到用于在snmp.conf文件中设置这些配置细节的指令名称:

Command FlagDescriptionTranslated snmp.conf directive
-u usernameThe SNMPv3 username to authenticate as.defSecurityName username
-l authPrivThe security level to authenticate with.defSecurityLevel authPriv
-a MD5The authentication protocol to use.defAuthType MD5
-x DESThe privacy (encryption) protocol to use.defPrivType DES
-A passphraseThe authentication passphrase for the supplied username.defAuthPassphrase passphrase
-X passphraseThe privacy passphrase from the supplied username.defPrivPassphrase passphrase

使用这些信息,你可以构建一个适当的 snmp.conf 文件. 对于本指南,它将看起来像这样的:

1[label snmp.conf]
2defSecurityName demo
3defSecurityLevel authPriv
4defAuthType MD5
5defPrivType DES
6defAuthPassphrase new_password
7defPrivPassphrase new_password

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

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

代替打字:

1snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0

你可以打字:

1snmpget agent_server_ip_address sysUpTime.0

正如您所看到的,这将大大减少您需要在每个请求中提供的信息量,接下来,您将删除 bootstrap帐户以加强网络安全。

步骤 7 – 删除 Bootstrap 帐户

现在您的常规帐户已正确配置,您可以删除不安全的 bootstrap帐户。

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

1[environment second]
2sudo nano /etc/snmp/snmpd.conf

查找并评论(或删除)您之前添加的两个行,引用了 bootstrap用户:

1[label /etc/snmp/snmpd.conf]
2...
3#createUser bootstrap MD5 temp_password DES
4#rwuser bootstrap priv
5...

保存并关闭文件。

现在,重新启动 SNMP DAEMON:

1[environment second] 
2sudo systemctl restart snmpd

这将满足在正常的snmpd.conf文件中没有createUser指令的建议,还会删除该临时用户的特权。

如果您想从usmUserTable中完全删除 bootstrap用户,您可以通过从 manager 服务器发出此命令:

1snmpusm agent_server_ip_address delete bootstrap

您将收到以下答案:

1[secondary_label Output]
2User successfully deleted.

结论

在这一点上,您有一个完全配置的客户端服务器设置,可以使用SNMP协议安全地通信,您现在可以在其他主机上添加额外的戴蒙,并在整个基础设施上配置帐户访问。

对于进一步的研究,您可以使用我们的 如何使用 Net-SNMP 工具套件来管理和监控服务器 教程 了解有关 SNMP 工具以及如何使用它们来检索值一对一或大批量以及如何修改数据。

Published At
Categories with 技术
comments powered by Disqus