snmpd 的 基本安装。
安装 前的准备工作
- 查看 ssl 库的路径。后续需要 安装 snmpd 需要
--with-openssl
指定 ssl 路径。
ldconfig -p | grep ssl
> libssl3.so (libc6,x86-64) => /usr/lib64/libssl3.so
> libssl.so.10 (libc6,x86-64) => /usr/lib64/libssl.so.10
> libssl.so.1.1 (libc6,x86-64) => /usr/local/lib/libssl.so.1.1 # <-- openssl is in /usr/local
> libssl.so.1.0.0 (libc6,x86-64) => /usr/local/lib/libssl.so.1.0.0 # <-- openssl is in /usr/local
> libssl.so (libc6,x86-64) => /usr/lib64/libssl.so
> libevent_openssl-2.0.so.5 (libc6,x86-64) => /usr/lib64/libevent_openssl-2.0.so.5
安装 snmp service
如果系统无法使用 yum源 安装,则需要下载 5.7.3 版本的源码安装。
使用 yum源 安装,会安装 5.7.2 版本。
下载地址:
https://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.3/net-snmp-5.7.3.tar.gz/download
cd /root
tar xvf net-snmp-5.7.3.tar.gz
cd /root/net-snmp-5.7.3
# --prefix 安装到 `/usr`
# 使用 python & perl 模块
# --with-openssl指定了 ssl 路径
./configure --prefix=/usr --with-python-modules --with-perl-modules --with-openssl=/usr/local
make && make install
注意1:
configure 的时候,如果出现交互式的设置,使用默认设置就可以。
Default version of SNMP to use (3):
System Contact Information (@@no.where):
System Location (Unknown):
Location to write logfile (/var/log/snmpd.log):
Location to write persistent information (/var/net-snmp):
注意2:
snmpd v3 需要支持 认证和加密。所以需要确认一下,配置的结果:
- 支持 认证和加密 的配置的结果
> ---------------------------------------------------------
> Net-SNMP configuration summary:
> ---------------------------------------------------------
>
> SNMP Versions Supported: 1 2c 3
> Building for: linux
> Net-SNMP Version: 5.7.3
> Network transport support: Callback Unix Alias TCP UDP IPv4Base SocketBase TCPBase UDPIPv4Base UDPBase
> SNMPv3 Security Modules: usm
> Agent MIB code: default_modules => snmpv3mibs mibII ucd_snmp notification notification-log-mib target agent_mibs agentx disman/event disman/schedule utilities host
> MYSQL Trap Logging: unavailable
> Embedded Perl support: disabled
> SNMP Perl modules: building -- not embeddable
> SNMP Python modules: building for /usr/bin/python
> Crypto support from: crypto # <-- GOOD, supports auth and priv.
> Authentication support: MD5 SHA1
> Encryption support: DES AES
> Local DNSSEC validation: disabled
注意3:
安装后,需要重启机器。
验证 snmpd,是否支持 认证和加密
snmpd v3 需要支持 认证和加密。所以需要确认一下。
- 正确安装的 snmpd,支持 认证和加密。有
libcrypto
。
ldd `which snmpd`
> linux-vdso.so.1 => (0x00007ffff7ffd000)
> libnetsnmpagent.so.30 => /usr/lib64/libnetsnmpagent.so.30 (0x00007ffff7d9a000)
> libnetsnmpmibs.so.30 => /usr/lib64/libnetsnmpmibs.so.30 (0x00007ffff7930000)
> libnetsnmp.so.30 => /usr/lib64/libnetsnmp.so.30 (0x00007ffff7654000)
> libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007ffff7450000)
> libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007ffff7062000) # <-- GOOD, with libcrypto.
> libm.so.6 => /usr/lib64/libm.so.6 (0x00007ffff6d5a000)
> libc.so.6 => /usr/lib64/libc.so.6 (0x00007ffff699d000)
> /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
> libz.so.1 => /usr/local/lib/libz.so.1 (0x00007ffff6780000)
- 不正确安装的 snmpd,不支持 认证和加密。会缺少
libcrypto
。
snmp 配置文件
文件路径:
/etc/snmp/snmpd.conf
文件内容:
com2sec tester 172.16.105.0/24 public
group user_group v2c tester
view user_view included .1
access user_group "" any noauth exact user_view user_view none
注意:
172.16.105.0 是 snmp服务器,所在的网段。
tester 是 用户名称。
public 是 group。
以上的字段请按照实际需要修改。
手动启动 snmpd
服务
手动启动 snmpd
服务。
/usr/sbin/snmpd -LS0-6d -f
注意:
-f
是 un-fork 进程。表示不会将 snmpd 作为守护进程。
本地测试
0. 添加用户
可以使用 net-snmp-config 来整体用户。
这样可以防止 snmpwalk
出现 unsupport security level
错误。
service snmpd stop
net-snmp-create-v3-user -a SHA -A 123456789 -x DES -X 123456789 bluedon
service snmpd restart
帮助:
net-snmp-create-v3-user --help
> Usage:
> net-snmp-create-v3-user [-ro] [-A authpass] [-X privpass]
> [-a MD5|SHA] [-x DES|AES] [username]
1. 无认证无加密
- 配置文件
cat /etc/snmp/snmpd.conf
> createUser user_name
> rwuser user_name noauth 1.3.6.1.2.1.1
- 对应的指令
snmpwalk -v 3 -u user_name -l noAuthNoPriv 127.0.0.1 .1.3.6.1.2.1.1
2. 有认证无加密
- 配置文件
cat /etc/snmp/snmpd.conf
> createUser user_name SHA 123456789
> rwuser user_name auth 1.3.6.1.2.1
- 对应的指令
snmpwalk -v 3 -u user_name -l authNoPriv -a MD5 -A 123456789 127.0.0.1 .1.3.6.1.2.1
snmpwalk -v 3 -u user_name -l authNoPriv -a SHA -A 123456789 127.0.0.1 .1.3.6.1.2.1
3. 有认证有加密
- 配置文件
cat /etc/snmp/snmpd.conf
> createUser user_name SHA 123456789 DES 123456789
> rwuser user_name priv 1.3.6.1.2.1
- 对应的指令
snmpwalk -v 3 -u user_name -l authPriv -a MD5 -A 123456789 -x DES -X 123456789 127.0.0.1 .1.3.6.1.2.1
snmpwalk -v 3 -u user_name -l authPriv -a SHA -A 123456789 -x DES -X 123456789 127.0.0.1 .1.3.6.1.2.1
使用 MIB Browser 读取 snmp服务器 信息
在 windows 安装 MIB Browser
iReasoning MIB Browser Persional Edition 的下载地址如下:
http://www.ireasoning.com/download/mibfree/mibbrowser.zip
在 windows 启动 MIB Browser
-
以管理员身份运行:
ireasoning\mibbrowser\bin\browser.bat -
在 MIB Browser 设置
2.1. 文本框输入:
Address: [172.16.105.1]
注意:
172.16.105.1 是 snmp服务器 的管理口。
请按实际修改。
2.2. 点击 Advanced… 按钮。在页面 Advanced Properties of SNMP Agent 中:
2.2.1. 文本框输入:
Port: [161]
2.2.2. 列表框中选择:
SNMP Version: [2]
- 列表框中选择:
Operations: [Walk]
-
点击 MIB Tree
随便点击一个 叶节点。 -
从 Result Table 中可以读取得结果。
制作 snmpd 的 systemd 服务
1. 添加 snmpd.service
文件路径:
/usr/lib/systemd/system/snmpd.service
文件内容:
[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
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
2. 登记 service 文件。
systemctl daemon-reload
3. 启动 snmpd 的 systemd 服务
service snmpd restart
注意:
如果 出现以下问题:
localhost.localdomain snmpd[17114]: NET-SNMP version 5.7.3
localhost.localdomain systemd[1]: snmpd.service start operation timed out. Terminating.
localhost.localdomain snmpd[17114]: Received TERM or STOP signal… shutting down…
localhost.localdomain systemd[1]: Failed to start Simple Network Management Protocol (SNMP)
localhost.localdomain systemd[1]: Unit snmpd.service entered failed state.
localhost.localdomain systemd[1]: snmpd.service failed.
则修改 snmpd.service 文件。注释掉 Type=notify
。
文件路径:
/usr/lib/systemd/system/snmpd.service
文件内容差分:
- Type=notify
+ #Type=notify
原因:
Type=notify 支持将"启动成功"的消息及时通知给 systemd 。
但是守护进程必须支持 systemd 通知协议,否则 systemd 将会认为该服务一直处于"启动中"(activating)状态,并在超时后将其杀死。
注释后,服务默认使用 Type=simple,可以避免 systemd 等待 snmpd 的消息返回。
ref:
# snmpd.conf 的帮助
man 5 snmpd.conf
# snmp 系统配置
net-snmp-config --help
# snmpwalk 的帮助
snmpwalk -h