我的问题是关于使用SNMPv3和snmptrapd服务的zabbix陷阱,它们使用zabbix_trap_Recver.pl。我有一个仅启用SNMPv3的开关,因此该交换机没有配置SNMPv3 1/2c rw或ro社区,并且在修改现有的SNMPv2模板之后,我能够将它作为主机添加到zabbix上。在snmptrapd.conf中的扎比克斯文件中添加了几行代码,如下所示,以启用SNMP陷阱:
authCommunity execute public
perl do "/usr/bin/zabbix_trap_receiver.pl";我的问题:
authCommunity execute public的含义是什么?编辑我还尝试了以下内容
createUser -e SHA AES
authUser log,execute
perl do "/usr/bin/zabbix_trap_receiver.pl";但没有运气
发布于 2020-01-23 20:13:38
snmptrapd守护进程使用陷阱的方式不允许接收任何SNMPv3陷阱,而不指定发送设备的EngineID,也就是说,如果您只在/etc/snmp/snmptrapd.conf中执行以下操作:
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文件如下所示:
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脚本如下:
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类型。
祝你好运,扎比星!
https://unix.stackexchange.com/questions/554038
复制相似问题