Ловушки SNMPv3 в Zabbix

Ловушки SNMPv3 в Zabbix

Мой вопрос касается ловушек Zabbix с SNMPv3 и сервисом snmptrapd, использующимzabbix_trap_receiver.plУ меня есть коммутатор, на котором я включил только SNMPv3, поэтому на коммутаторе нет SNMPv1/2c.рвилиронастроены сообщества, и мне удалось добавить его в качестве хоста на Zabbix после долгого пути изменения существующих шаблонов SNMPv2. Вдокументация по Zabbixвsnmptrapd.confДля включения ловушек SNMP добавлено несколько строк, как показано здесь:

authCommunity execute public
perl do "/usr/bin/zabbix_trap_receiver.pl";

Мои вопросы:

  • Каково значениеauthCommunity execute public
  • У меня нетпубличныйнастроено сообщество, сможет ли служба snmptrapd расшифровывать ловушки SNMPv3, поскольку в Wireshark мне пришлось определить учетные данные SNMPv3, чтобы она могла показывать мне содержимое пакетов ловушек?
  • Если нет, то как мне его настроить?snmptrapd.confчтобы скрипт perl мог считывать эти ловушки из SNMPv3?
  • Почему в Wireshark написано SNMPv2c trap, хотя он зашифрован как SNMPv3? Я не понимаю, что делать?
  • Пожалуйста, объясните мне, как работают ловушки при включенном SNMPv2 и при включенном SNMPv3?

Редактировать Я также попробовал следующее

createUser -e <engineid> <user> SHA <key> AES <key>
authUser log,execute <user>
perl do "/usr/bin/zabbix_trap_receiver.pl";

Но не повезло.

решение1

Способ работы демона 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";

Вы никогда не получите никаких ловушек SNMPv3 в вашем /tmp/zabbix_traps.tmp, потому что usmUser, созданный внутри /var/lib/net-snmp/snmptrapd.conf, не соответствует фактическим требованиям, вот и все.

Что касается SNMPv3-информов, большинство коммутаторов не могут их отправлять, поэтому мы застряли только с SNMPv3-ловушками, а способ программирования snmptrapd работает только с EngineID для SNMPv3-ловушек. Даже если я использую disableAuthorization yes в snmptrapd.conf, SNMPv3-ловушки не будут работать без EngineID для каждого отправляющего устройства, т. е. коммутатора.

Теперь, чтобы получать SNMPv3-ловушки, вам нужно получить все EngineID для всех коммутаторов, для этого я написал скрипт на Python, чтобы построить snmptrapd.conf с использованием SNMPv3, что является большим облегчением. Фактический файл имеет комментарий перед каждой строкой createUser, который показывает имя коммутатора и IP-адрес. Эта часть информации о ловушках SNMPv3 на самом деле упоминается в документации net-snmp, но когда я прочитал ее в первый раз, я не мог понять ее, потому что так и сказано, 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 TRAP немного сложнее в некоторых отношениях, но если вы долго думаете об этом, то имеет смысл, что протокол работает таким образом. Разница в том, что SNMPv3 TRAP используют engineID локального приложения, отправляющего ловушку, а не engineID удаленного приложения. Это означает, что вам придется создавать пользователей в вашей удаленной базе данных пользователей с немного большей осторожностью и нужно создать одного для каждого engineID, с которого вы хотите отправлять ловушки. Это означает, что если вы хотите, чтобы 100 агентов snmp отправляли ловушки snmpv3 вашему приемнику ловушек, вам нужно 100 директив createUser в вашем файле /var/net-snmp/snmptrapd.conf.

Файл /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";

Файл намного длиннее, но теперь я могу получать все ловушки со всех коммутаторов. Я видел на stackoverflow, что кто-то преуспел с DES без использования EngineID, но это полный отстой, у меня это никогда не работало ни с DES, ни с AES без EngineID. Это всего лишь то, что было сделано в фоновом режиме другим программным обеспечением для мониторинга, которое ведет учет EngineID всех устройств для задачи приема ловушек.

Я также заметил, что ловушки от основного коммутатора принимаются с виртуального интерфейса vlan, на котором находится zabbix, поэтому мне пришлось изменить скрипт 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')

При работе с ловушками мне приходилось видеть их как историю, поэтому я изменил элемент Ловушки SNMP (резервный вариант) с Тип информации=Журнал на Тип информации=Текст в шаблоне Template Module Generic SNMPv3.

Удачи в заббиксинге!

Связанный контент