Ubuntu20.04配置SNMPv3

参考视频:

作者 Mainpedia Project
Install SNMP and configure SNMP v3 Ubuntu [No Talking]
不方便放直接国外视频链接

参考资料:

https://www.ttlsa.com/zabbix/snmp-v3-configuration/

https://www.jianshu.com/p/45bededb5525

https://support.huawei.com/enterprise/zh/doc/EDOC1100087025

为设备或者虚拟机接入zabbix和prometheus作准备.
zabbix-agent2已经尝试过,这里尝试使用SNMPv3接入看看有什么区别

部署SNMPv3

snmp v3安全级别有三种,分别为noAuthNoPriv(不认证也不加密)、authNoPriv(认证但是不加密)、authPriv(既认证又加密)

1.安装SNMPv3相关的包

1
sudo apt install snmp snmpd libsnmp-dev

libsnmp-dev用于生成snmp用户

2.创建snmp v3用户

  1. 创建snmp v3用户
    net-snmp-create-v3-user --help 可以查看帮助
    net-snmp-create-v3-user 是一个Net-SNMP工具的命令,用于创建SNMPv3用户
    添加用户时,snmp服务必须停止,否则会报错

    1
    2
    3
    4
    5
    6
    $ sudo net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES snmpv3User1
    #以下是输出
    adding the following line to /var/lib/snmp/snmpd.conf:
    createUser snmpv3User1 SHA "myauthpass" AES "myprivpass"
    adding the following line to /usr/share/snmp/snmpd.conf:
    rouser snmpv3User1

    注意这里的文件目录 /usr/share/snmp/snmpd.conf , net-snmp-create-v3-user 命令并不直接提供删除 SNMPv3 用户的功能,需要在这个配置文件中删除需要删除的用户.

  2. 解释命令
    部分内容由ChatGPT提供
    首先来看创建用户命令sudo net-snmp-create-v3-user -ro -A myauthpass -X myprivpass -a SHA -x AES snmpv3User1

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    -ro: 这是一个选项,表示创建的用户将具有只读(read-only)权限,即只能获取设备信息,而不能进行修改。

    -A myauthpass: 这是一个选项,用于指定用于身份验证的密码。在这里,myauthpass是你指定的用于身份验证的密码。

    -X myprivpass: 这是一个选项,用于指定用于加密的密码。在这里,myprivpass是你指定的用于加密的密码。

    -a SHA: 这是一个选项,用于指定身份验证算法。在这里,选择了SHA算法,用于对消息进行身份验证。

    -x AES: 这是一个选项,用于指定加密算法。在这里,选择了AES算法,用于对消息进行加密。

    snmpv3User1: 这是创建的SNMPv3用户的标识符或名称。在这里,用户的名称被设置为 snmpv3User1。
    snmpv3User1为用户名,对应Zabbix中的安全名称 myauthpass为身份验证密码,对应Zabbix中的验证口令,由-a SHA加密 myprivpass为加密密码,对应Zabbix中的隐私协议私钥,由-x AES加密,Net-SNMP工具中默认使用的AES加密算法是AES-128
  3. 修改配置文件
    /etc/snmp/snmpd.conf
    默认文档:

    1
    agentaddress  127.0.0.1,[::1]

    这里默认开启了本地的ipv4和ipv6的161端口
    如果机器没有ipv6地址可能会报错,删除后面的,[::1]即可

    1
    agentaddress  10.20.111.2

    如果要指定端口,也可以按照以前snmpd文档的写法

    1
    2
    3
    agentaddress  udp:10.20.111.2:161
    #注意IP地址
    #如果IP地址为127.0.0.1,只有snmpd本机自己可以查询自己
  4. 启动服务
    注意:服务端口是UDP的161端口,使用tcp的查看方法是看不到端口的

启动服务

1
2
3
sudo systemctl restart snmpd.service 
sudo systemctl enable snmpd.service
sudo systemctl status snmpd.service

查看端口

1
2
3
4
$ ss -ulnp
#以下为输出
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 127.0.0.1:161 0.0.0.0:*

根据自己系统的防火墙来放行端口

监测SNMPv3

1
2
3
$ snmpwalk -v3 -u snmpv3User1 -A myauthpass -X myprivpass -l authPriv -a SHA -x AES 10.20.111.2 1.3.6.1.2.1.1.1.0
#输出
iso.3.6.1.2.1.1.1.0 = STRING: "Linux zabbix02 5.4.0-155-generic #172-Ubuntu SMP Fri Jul 7 16:10:02 UTC 2023 x86_64"

测试完成

如果这里写 10.20.111.2 出现 snmpwalk: Timeout ,但是写localhost和127.0.0.1却可以正常获取信息,说明snmpd.conf里IP地址为127.0.0.1并没有修改成主机地址。

1
2
3
4
5
6
7
8
9
10
#参数详解
# https://www.jianshu.com/p/45bededb5525
-v 表示版本信息
-l 表示设置安全级别,安全级别分为(noAuthNoPriv|authNoPriv|authPriv)
-a 设置授权算法,(MD5|SHA)
-A 设置授权字符串
-x 设置鉴权算法,(DES|AES)
-X 设置鉴权字符串
IP 地址填写配置了snmpd的节点地址
sysName 则为snmp的一种OID

部署完成