歡迎來到我們的指南,了解如何在 CentOS 8 上安裝和設定 SNMP。SNMP 代表Simple Network Management Protocol。它是一种 Internet 标准协议,它提供了一种无代理方法来管理和监视网络设备和服务器,以获取运行状况信息、系统指标(如 CPU 负载)、物理内存使用情况、正在运行的进程数、服务状态或支持通过该协议进行轮询的任何其他指标。SNMP

在 CentOS 8 上安装和配置 SNMP

在 CentOS 8 上安裝 Net-SNMP

Net-SNMP是一套应用程序,它提供了一个代理和实用程序,可以使用 SNMP 协议从系统中检索数据。

在安装 Net-SNMP 之前,请确保您的系统软件包是最新的。



dnf update

要在 CentOS 8 上安装 Net-SNMP(SNMP 代理、SNMP 守护程序和其他 SNMP 实用程序),只需执行以下命令即可;

dnf install net-snmp net-snmp-libs net-snmp-utils

在 CentOS 8 上运行 SNMP 守护程序

安装snmpd后,Net-SNMP 将创建一个名为 的 SystemD 服务。可以使用 systemctl 命令管理该服务。

例如,启动并使其能够在系统启动时运行;

systemctl enable --now snmpd

检查状态;

systemctl status snmpd
● snmpd.service - Simple Network Management Protocol (SNMP) Daemon.
   Loaded: loaded (/usr/lib/systemd/system/snmpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-03-04 20:36:52 EAT; 2s ago
 Main PID: 3017 (snmpd)
    Tasks: 1 (limit: 11500)
   Memory: 4.8M
   CGroup: /system.slice/snmpd.service
           └─3017 /usr/sbin/snmpd -LS0-6d -f

Mar 04 20:36:52 centos8.kifarunix-demo.com systemd[1]: Stopped Simple Network Management Protocol (SNMP) Daemon..
Mar 04 20:36:52 centos8.kifarunix-demo.com systemd[1]: Starting Simple Network Management Protocol (SNMP) Daemon....
Mar 04 20:36:52 centos8.kifarunix-demo.com snmpd[3017]: NET-SNMP version 5.8
Mar 04 20:36:52 centos8.kifarunix-demo.com systemd[1]: Started Simple Network Management Protocol (SNMP) Daemon..

重新启动 SNMP 守护程序;

systemctl restart snmpd

在 CentOS 8 上配置 SNMP

完成 Net-SNMP 安装后,请继续对其进行配置,以便能够远程轮询系统指标。

Net-SNMP 代理程序守护程序的缺省配置文件是 /etc/snmp/snmpd.conf。该文件受到高度评论,因此,我们只会进行一些更改。因此,请先创建原始文件的副本,然后才能继续。

cp /etc/snmp/snmpd.{conf,orig}

配置系统信息

默认情况下,Net-SNMP 提供有关系统的基本信息,例如主机名、位置、管理员联系信息。此信息由对象的值提供,并且分别由sysName、sysLocation、sysContact提供。

要使用 SNMP 列出默认系统信息,只需将snmpwalk命令与默认版本 2 社区字符串public 一起使用。确保 SNMP 守护程序正在运行,然后才能运行以下命令;

snmpwalk -v2c -c public localhost system

您甚至可以尝试使用服务器IP;

snmpwalk -v2c -c public 192.168.58.9 system
SNMPv2-MIB::sysDescr.0 = STRING: Linux centos8.kifarunix-demo.com 4.18.0-147.5.1.el8_1.x86_64 #1 SMP Wed Feb 5 02:00:39 UTC 2020 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (7884) 0:01:18.84
SNMPv2-MIB::sysContact.0 = STRING: Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
SNMPv2-MIB::sysName.0 = STRING: centos8.kifarunix-demo.com
SNMPv2-MIB::sysLocation.0 = STRING: Unknown (edit /etc/snmp/snmpd.conf)
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00

要更新此信息,只需打开SNMPD配置文件,然后调整上述对象的值;/etc/snmp/snmpd.conf

vim /etc/snmp/snmpd.conf

请注意,默认情况下,该对象的值设置为系统主机名。因此,并且可以在"系统联系人信息"部分下的配置文件中进行设置。sysNamesysLocationsysContact

###############################################################################
# System contact information
#

# It is also possible to set the sysContact and sysLocation system
# variables through the snmpd.conf file:

# Comment the default lines below
#syslocation Unknown (edit /etc/snmp/snmpd.conf)
#syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)
syslocation Serverfarm, DC2, Rack 3
syscontact Kifarunix-Admin <admin@kifarunix-demo.com>

保存配置文件并重新加载 SNMPD 以影响更改。

systemctl reload snmpd

验证更改;

snmpwalk -v2c -c public localhost system
SNMPv2-MIB::sysDescr.0 = STRING: Linux centos8.kifarunix-demo.com 4.18.0-147.5.1.el8_1.x86_64 #1 SMP Wed Feb 5 02:00:39 UTC 2020 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (138942) 0:23:09.42
SNMPv2-MIB::sysContact.0 = STRING: Kifarunix-Admin <admin@kifarunix-demo.com>
SNMPv2-MIB::sysName.0 = STRING: centos8.kifarunix-demo.com
SNMPv2-MIB::sysLocation.0 = STRING: Serverfarm, DC2, Rack 3
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00

配置 SNMP 身份验证

SNMP 支持三个版本的 SNMP 协议;version 1、2c3

  • 版本 1 和 2c 都使用community string提供身份验证,这是代理和客户端之间的共享密钥,通过网络以明文形式传递。
  • 版本 3 支持使用各种协议的用户身份验证和消息加密,因此更加安全。

在 CentOS 8 上配置 SNMP 版本 2c 社群

如上所述,SNMP v2 使用权限指令、社区字符串和源地址提供访问权限。源地址可以是 Nagios Server(SNMP 服务器)的 IP。此指令应以以下格式设置;

directive community [source [OID]]

其中指令可以是rocommunity(提供只读访问)或rwcommunity(提供读写访问),OID 是可选的 SNMP 树来提供访问。

例如,要配置SNMP v2c以允许从特定源主机(如Nagios等监视服务器)到使用社区字符串monsvronly的系统对象进行只读访问,只需在snmpd配置文件中输入下面的行即可。

rocommunity monsvronly 192.168.58.8

您可以使用以下命令;

echo -e "# SNMP version 2c community\nrocommunity monsvronly 192.168.58.8" >> /etc/snmp/snmpd.conf

允许访问的远程服务器的 IP 在哪里。192.168.58.8

要允许来自本地主机,请添加行;

rocommunity monsvronly 127.0.0.1

配置 SNMP 守护程序连接端口

默认情况下,SNMP 守护程序代理在 UDP 端口 161 上接收请求。但是,默认情况下,SNMPd 不会打开此端口。

要将 SNMPd 配置为通过 UDP 端口 161 侦听环回和 IP 接口,您需要编辑 snmpd systemd 启动脚本,如下所示;/lib/systemd/system/snmpd.service

vim /lib/systemd/system/snmpd.service

替换行:

ExecStart=/usr/sbin/snmpd $OPTIONS -f

与;

ExecStart=/usr/sbin/snmpd $OPTIONS -f udp:127.0.0.1:161 udp:192.168.56.9:161

服务器接口 IP 在哪里。192.168.58.9

这样你的配置看起来像;

[Unit]
Description=Simple Network Management Protocol (SNMP) Daemon.
After=syslog.target network.target

[Service]
Type=notify
Environment=OPTIONS="-LS0-6d"
EnvironmentFile=-/etc/sysconfig/snmpd
#ExecStart=/usr/sbin/snmpd $OPTIONS -f
ExecStart=/usr/sbin/snmpd $OPTIONS -f udp:127.0.0.1:161 udp:192.168.58.9:161
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

保存配置文件并重新加载系统化单元;

systemctl daemon-reload

重新启动 SNMP 守护程序。

systemctl restart snmpd

验证 UDP 端口 161 是否已打开。

netstat -alun | grep 161
udp        0      0 192.168.58.9:161      0.0.0.0:*                          
udp        0      0 127.0.0.1:161           0.0.0.0:*

打开防火墙 D 上的 SNMP 端口

如果防火墙正在运行,请运行以下命令以打开 SNMPd 端口

firewall-cmd --add-port=161/udp --permanent
firewall-cmd --reload

验证连接性

测试来自允许的远程主机的连接。

检查服务器上的 UDP 端口是否可访问。

nc -uvz 192.168.58.9 161
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.58.9:161.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.03 seconds.

测试是否可以使用和读取输出的前 10 行来查询服务器上的 SNMP 对象。snmpwalk

snmpwalk -v2c -c monsvronly 192.168.58.9 | head -10
SNMPv2-MIB::sysDescr.0 = STRING: Linux centos8.kifarunix-demo.com 4.18.0-147.3.1.el8_1.x86_64 #1 SMP Fri Jan 3 23:55:26 UTC 2020 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (732) 0:00:07.32
SNMPv2-MIB::sysContact.0 = STRING: Kifarunix-Admin <admin@kifarunix-demo.com>
SNMPv2-MIB::sysName.0 = STRING: centos8.kifarunix-demo.com
SNMPv2-MIB::sysLocation.0 = STRING: Serverfarm, DC2, Rack 3
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
...

在 CentOS 8 上配置 SNMP 版本 3

SNMP v3 使用usernamepermissionsecurity levelauthenticationprivacy passphrases来允许访问。

因此,您需要创建用于身份验证的用户。创建后,用户将添加到以下配置文件中; /etc/snmp/snmpd.conf/var/lib/net-snmp/snmpd.conf

在继续之前,请像上面一样制作原始配置文件的副本。

cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak

注释上面添加的 snmp V2 配置行;

# rocommunity monsvronly 127.0.0.1
# rocommunity monsvronly 192.168.58.8

停止 SNMP 守护程序

systemctl stop snmpd

使用该命令创建只读身份验证用户。命令语法为;net-snmp-create-v3-user

net-snmp-create-v3-user [-ro] [-A authpass] [-a MD5|SHA] [-X privpass][-x DES|AES] [username]

例如;

net-snmp-create-v3-user -ro -A STrP@SSWRD -a SHA -X STr0ngP@SSWRD -x AES snmpadmin
adding the following line to /var/lib/net-snmp/snmpd.conf:
   createUser snmpadmin SHA "STrP@SSWRD" AES "STr0ngP@SSWRD"
adding the following line to /etc/snmp/snmpd.conf:
   rouser snmpadmin

启动 SNMP 守护程序

systemctl start snmpd

启用 SNMP 守护程序以在系统重新启动时运行。

systemctl enable snmpd

如上所述,将入站防火墙规则配置为 UDP 端口 161。

进行测试以验证一切是否按预期工作。

snmpwalk -v3 -a SHA -A STrP@SSWRD -x AES -X STr0ngP@SSWRD -l authPriv -u snmpadmin localhost | head
SNMPv2-MIB::sysDescr.0 = STRING: Linux centos8.kifarunix-demo.com 4.18.0-147.3.1.el8_1.x86_64 #1 SMP Fri Jan 3 23:55:26 UTC 2020 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (5705) 0:00:57.05
SNMPv2-MIB::sysContact.0 = STRING: Kifarunix-Admin <admin@kifarunix-demo.com>
SNMPv2-MIB::sysName.0 = STRING: centos8.kifarunix-demo.com
SNMPv2-MIB::sysLocation.0 = STRING: Serverfarm, DC2, Rack 3
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance

从远程主机验证;

snmpwalk -v3 -a SHA -A STrP@SSWRD -x AES -X STr0ngP@SSWRD -l authPriv -u snmpadmin 192.168.58.9 | head
SNMPv2-MIB::sysDescr.0 = STRING: Linux centos8.kifarunix-demo.com 4.18.0-147.3.1.el8_1.x86_64 #1 SMP Fri Jan 3 23:55:26 UTC 2020 x86_64
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (22366) 0:03:43.66
SNMPv2-MIB::sysContact.0 = STRING: Kifarunix-Admin <admin@kifarunix-demo.com>
SNMPv2-MIB::sysName.0 = STRING: centos8.kifarunix-demo.com
SNMPv2-MIB::sysLocation.0 = STRING: Serverfarm, DC2, Rack 3
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance

宏伟!!!您已成功在 CentOS 8 上安装和配置 SNMP。现在,您可以从远程监视服务器轮询系统指标。