首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zabbix中的SNMPv3陷阱

Zabbix中的SNMPv3陷阱
EN

Unix & Linux用户
提问于 2019-11-25 13:02:34
回答 1查看 1.4K关注 0票数 1

我的问题是关于使用SNMPv3和snmptrapd服务的zabbix陷阱,它们使用zabbix_trap_Recver.pl。我有一个仅启用SNMPv3的开关,因此该交换机没有配置SNMPv3 1/2c rwro社区,并且在修改现有的SNMPv2模板之后,我能够将它作为主机添加到zabbix上。在snmptrapd.conf中的扎比克斯文件中添加了几行代码,如下所示,以启用SNMP陷阱:

代码语言:javascript
复制
authCommunity execute public
perl do "/usr/bin/zabbix_trap_receiver.pl";

我的问题:

  • authCommunity execute public的含义是什么?
  • 我没有配置公共社区,snmptrapd服务能够解密SNMPv3陷阱吗?因为在wireshark上,我必须定义SNMPv3凭据才能显示陷阱数据包内容?
  • 如果不是,我如何在snmptrapd.conf中配置它,以便perl脚本可以从SNMPv3读取这些陷阱?
  • 在wireshark上,为什么它说SNMPv2c陷阱,虽然它被加密为SNMPv3,但我在这里迷路了?
  • 请向我解释陷阱是如何工作的,何时启用SNMPv2和何时启用SNMPv3?

编辑我还尝试了以下内容

代码语言:javascript
复制
createUser -e   SHA  AES 
authUser log,execute 
perl do "/usr/bin/zabbix_trap_receiver.pl";

但没有运气

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-01-23 20:13:38

snmptrapd守护进程使用陷阱的方式不允许接收任何SNMPv3陷阱,而不指定发送设备的EngineID,也就是说,如果您只在/etc/snmp/snmptrapd.conf中执行以下操作:

代码语言:javascript
复制
createUser snmpv3USER SHA auth_pass AES priv_pass
authUser log,execute snmpv3USER
perl do "/usr/bin/zabbix_trap_receiver.pl";

您永远不会在/tmp/zabbix_traps.tmp中找到任何SNMPv3陷阱,因为在/var/lib/net-snmp/snmptrapd.conf中创建的usmUser没有满足实际需求,仅此而已。

当涉及到SNMPv3通知时,大多数交换机无法发送它们,因此我们只能使用SNMPv3陷阱,而snmptrapd的编程方式仅适用于SNMPv3陷阱的EngineID。即使我在snmptrapd.conf中使用snmptrapd.conf是的,对于每个发送设备(即开关设备),如果没有EngineID,SNMPv3陷阱也无法工作。

现在,为了接收SNMPv3陷阱,您需要获得所有开关的所有EngineID,因为我已经编写了一个python脚本,以便使用SNMPv3构建snmptrapd.conf,这是一个很大的解脱。实际的文件在每一行createUser前都有一个注释,显示交换机名称和IP地址。net文档中实际上提到了这个SNMPv3陷阱信息,但是当我第一次阅读它时,我无法理解它,因为它说的是The difference is that SNMPv3 TRAPs use the engineID of the local application sending the trap rather than the engineID of the remote application,所以当您第一次阅读它时,您会感到困惑,但是只要稍微集中注意力,就会变得非常清楚:

SNMPv3陷阱在某些方面要复杂一些,但是如果您花很长时间考虑它,协议就会以这种方式工作。区别在于SNMPv3陷阱使用本地应用程序的engineID,而不是远程应用程序的engineID。这意味着您必须更加小心地在远程用户数据库中创建用户,并且需要为希望发送陷阱的每个engineID创建一个用户。这意味着,如果您想让100个snmp代理向陷阱接收器发送snmpv3陷阱,那么您需要在/var/net/snmptrapd.conf文件中执行100个createUser指令。

/etc/snmp/snmptrapd.conf文件如下所示:

代码语言:javascript
复制
createUser -e 0x800007c703609c9f1eff01 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c703cc4e24e4c6c3 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c703d4c19e743e86 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c70378a6e10ca715 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c70378a6e10c46f0 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c70378a6e121bacd snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c70378a6e121b7d8 snmpv3USER SHA auth_pass AES priv_pass
createUser -e 0x800007c703609c9f5136f4 snmpv3USER SHA auth_pass AES priv_pass

authUser log,execute snmpv3USER
perl do "/usr/bin/zabbix_trap_receiver.pl";

文件比那个长得多,但是现在我可以接收所有开关的所有陷阱。我在堆栈溢出中看到有人在没有使用EngineID的情况下成功地使用了DES,但这是真的废话,对于DES和不使用EngineID的AES都没有用。这只是在其他监控软件的背景下所做的事情,这些软件为陷阱接收任务保留了所有设备的EngineID记录。

我还注意到,来自核心交换机的陷阱是从扎比克斯所在的vlan的虚拟接口接收的,因此我不得不修改zabbix_trap_receiver.pl脚本如下:

代码语言:javascript
复制
use NetSNMP::TrapReceiver; # should be added in order to get the script to work, otherwise it fails -- elekgeek 2nd DEC 2019
# get the host name
        $pdu_info{'receivedfrom'} =~ s/192.168.168.254/192.168.168.1/ig; # I added this line to get the core switch IP instead of zabbix's VLAN SVI IP, otherwise trap is not added to the CORE trap.fallback -- elekgeek 2nd DEC 2019
        my $hostname = $pdu_info{'receivedfrom'} || 'unknown';
        if ($hostname ne 'unknown')

在使用陷阱时,我必须将它们视为历史记录,因此我在模板information=Log中将项SNMP陷阱(回退)从information=Text类型更改为Template Module Generic SNMPv3中的information=Text类型。

祝你好运,扎比星!

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/554038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档