UMGUM.COM 

Zabbix + SNMP ( Zabbix + SNMP )

30 марта 2010  (обновлено 2 ноября 2014)

Настраиваем взаимодействие оборудования с системой мониторинга Zabbix с помощью протокола SNMP.

Первым делом предупреждение и напоминание предупреждённым: протокол SNMP в тех его реализациях, что используется до сих пор элементарным активным сетевым оборудованием, вроде модемов и коммутаторов, невероятно небезопасен.
Фактически защиты нет. Единственный, на мой взгляд, способ защитится от компрометации SNMP трафика оборудования и воздействия на него злоумышленника - это вывод всего активного оборудования в закрытые от пользователей зоны и заградить сетевыми экранами с чёткими и однозначными листами доступа. Не очевидное ключевое слово - идентификатор community может несколько обезопасить работу с оборудованием, но это не панацея, так как оно выявляется путём примитивного "снифинга" трафика.

Нам понадобится "MIB browser" - приложение, позволяющее обращаться по SNMP протоколу к агенту и выспрашивать у него значения параметров по адресам. Разумеется, приложение не называлось бы "браузером", не будь оно способно строить иерархическую структуру параметров и позволять нам по ней ходить.

Есть несколько реализаций такого ПО. Можно выбрать по своему вкусу. Я, в своё время попробовал "GetIf" (http://www.wtcs.org/snmp4tpc/getif.htm) и никакое другое приложение для просмотра дерева параметров так и не понадобилось. Приложение простое, не загромождённое свиристелками и издавалками звуков и работает именно браузером а не заменителем половины других приложений, что могут понадобится в жизни. В общем, все описания именно про него.


Для пробной отрисовки графиков таких снимаемых значений, как утилизация интерфейсов и тому подобное, можно использовать PRTG Traffic Grapher (http://www.paessler.com/prtg6). Приложение задает минимум вопросов и вполне корректно работает с оборудованием поддерживающим стандартную базу MIB.

Настраиваем SNMP взаимодействие с модемами ZyXEL Prestige.

ZyXEL Prestige 791R EE и P-792H EE, а именно с ними мы будем работать, поддерживают связь по реализациях протокола SNMPv1 и SNMPv2.

Большинство производителей активного сетевого оборудования создают свои дополнения к дереву параметров SNMP. ZyXEL не исключение. Для того, чтобы погулять по ветвям параметров оборудования необходимо скачать и применить к "браузеру" файлы с описанием дополнительных параметров:


Распаковываем и копируем mib файлы в директорию "Mibs" нашего "браузера", удаляем файл .index и перезапускаем приложение. Получаем стандартное дерево SNMP с дополнениями от производителя оборудования.

Настраиваем оборудование на работу с протоколом SNMP.
С модемами ZyXEL все просто. Переходим к пункту меню "SNMP Configuration" (22) и приводим переменные к следующему виду:

Get Community = [ключевое слово/пароль идентифицирующее членов группы для чтения параметров оборудования]
Set Community = [ключевое слово/пароль идентифицирующее членов группы для изменения параметров оборудования]
Trusted Host = [список хостов имеющих доступ к оборудованию в рамках community]
Trap:
  Community = [ключевое слово/пароль идентифицирующее членов группы для получения параметров оборудования]
  Destination = [адрес хоста получающего асинхронно высылаемые данные оборудования в рамках community]

Проверяем, отдаст ли оборудование данные по запросу члена community:

# /usr/bin/snmpwalk -c [community] -v 2c [host]

В ответ мы должны получить список параметров, нечто вроде этого:

SNMPv2-MIB::sysDescr.0 = STRING: Prestige 792H
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.890.1.2.7.4
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (180467400) 20 days, 21:17:54.00

Если нам ответили что-то вроде "Timeout: No Response from [host]", то взаимодействие между узлами не налажено и нужно разбираться с причиной.

Настраиваем Zabbix сервер для работы с модемами ZyXEL.

Создаем шаблон "t_zyxel".
Создаем группу "Modems".

Настроим мониторинг загрузки Ethernet интерфейса. Можно попробовать мониторить WAN интерфейс, тогда SNMP OID для "Incoming traffic" должен быть "1.3.6.1.2.1.2.2.1.10.2" а для "Outgoing traffic" - "1.3.6.1.2.1.2.2.1.16.2". Выбор Ethernet в качестве интерфейса для мониторинга обусловлен тем, что в некоторых модемах с старой версией прошивки в рамках общей конфигурации WAN интерфейс не мониторился совсем. И в моем случае все модемы работают мостами, так что трафик на интерфейсах по идее одинаков за исключением небольшого количества управляющего.

Создаем параметр "IncTraf: eth0" шаблона "t_zyxel":

Type: SNMPv2 agent
SNMP community: [community]
SNMP OID: 1.3.6.1.2.1.2.2.1.10.1
SNMP port: 161
Key: ifInOctets1
Type of information: Numeric (float)
Units: bps
Use multiplier: 1
Update interval (in sec): 8
Store value: Delta (simple change)

Создаем параметр "OutTraf: eth0" шаблона "t_zyxel":

Type: SNMPv2 agent
SNMP community: [community]
SNMP OID: 1.3.6.1.2.1.2.2.1.16.1
SNMP port: 161
Key: ifOutOctets1
Type of information: Numeric (float)
Units: bps
Use multiplier: 1
Update interval (in sec): 8
Store value: Delta (simple change)

Указав интервал обновления в восемь (8) секунд с умножителем показателя в единицу (1), методом сохранения данных как разницу между двумя показаниями счётчика в указанный период обновления и тем, что количество проходящей через интерфейс информации исчисляется в октетах (байтх), результирующим показателем будет количество бит в секунду на интерфейсе; иначе говоря - "bps". Если нужен меньший интервал обновления, то множитель соответственно увеличивается.

Создаем график "NetUtilization: eth0":

Graph type: Normal
Show working time: yes
Y axis type: Fixed
Y axis MIN value: 0.0000
Y axis MAX value: 2300000.0000 // Больше 2.300.000 bps SHDSL модем все равно не вытянет
Items:
t_zyxel: Inc traf: eth0 : avg : Simple : Line : Green
t_zyxel: Out traf: eth0 : avg : Simple : Line : Blue

Применяем в шаблонах к показателям ключевое слово для организации community, заводим хосты, вводим их в шаблон "t_zyxel" и получаем мониторинг модемов по заданным показателям с отображением соответствующих графиков.

Настраиваем SNMP взаимодействие с Cisco PIX.

Cisco PIX отлично поддерживает связь по реализации протокола SNMPv2.

На маршрутизаторе разрешаем хождение трафика SNMP откуда и куда нужно:

! SNMP:
access-list 101 permit tcp host ip.from host ip.to eq 161
access-list 101 permit udp host ip.from host ip.to eq 161
SNMP Traps:
access-list 101 permit tcp host ip.from host ip.to eq 162
access-list 101 permit udp host ip.from host ip.to eq 162

Указываем маршрутизатору параметры конфигурации SNMP:

snmp-server community [community]
no snmp-server location
no snmp-server contact
snmp-server host inside [host] community [community]
snmp-server enable traps
snmp-server enable

Проверяем, отдаст ли оборудование данные по запросу члена community (в нашем случае серверу Zabbix):

# /usr/bin/snmpwalk -c [community] -v 2c [host]

В ответ мы должны получить список параметров, нечто вроде этого:

SNMPv2-MIB::sysDescr.0 = STRING: Cisco Cisco PIX Security Appliance Version ...
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.9.1.451
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (440910300) 51 days, 0:45:03.00

Если нам ответили что-то вроде "Timeout: No Response from [host]", то взаимодействие между узлами не налажено и нужно разбираться с причиной.

Настраиваем Zabbix сервер для работы с Cisco PIX.

Создаем шаблон "t_pix".
Создаем группу "Channels".

От Cisco PIX нам нужно не так уж и много информации. Необходимо мониторить утилизацию внешнего интерфейса и количество соединений обслуживаемых на текущий момент маршрутизатором. Ради интереса можно отслеживать количество отвергнутых пакетов и попыток нарушить периметр безопасности, но это уже отдельная тема.

Настроим мониторинг загрузки внешнего (Outside) Ethernet интерфейса.

Создаем параметр «in.eth0» шаблона "t_pix":

Type: SNMPv2 agent
SNMP community: [community]
SNMP OID: .1.3.6.1.2.1.2.2.1.10.1
SNMP port: 161
Key: if0InOctets
Type of information: Numeric (float)
Units: bps
Use multiplier: 1
Update interval (in sec): 8
Store value: Delta (simple change)

Создаем параметр "out.eth0" шаблона "t_pix":

Type: SNMPv2 agent
SNMP community: [community]
SNMP OID: .1.3.6.1.2.1.2.2.1.16.1
SNMP port: 161
Key: if0OutOctets
Type of information: Numeric (float)
Units: bps
Use multiplier: 1
Update interval (in sec): 8
Store value: Delta (simple change)

Указав интервал обновления в восемь (8) секунд с умножителем показателя в единицу (1), методом сохранения данных как разницу между двумя показаниями счётчика в указанный период обновления и тем, что количество проходящей через интерфейс информации исчисляется в октетах (байтах), результирующим показателем будет количество бит в секунду на интерфейсе; иначе говоря - "bps". Если нужен меньший интервал обновления, то множитель соответственно увеличивается.

Создаем параметр "connections" шаблона "t_pix":

Type: SNMPv2 agent
SNMP community: [community]
SNMP OID: .1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.40.6
SNMP port: 161
Key: connections
Type of information: Numeric (unsigned)
Units:
Use multiplier: Do not use
Update interval (in sec): 10
Store value: As is

Создаем график "util.eth0":

Graph type: Normal
Show working time: yes
Y axis type: Fixed
Y axis MIN value: 0.0000
Y axis MAX value: 2100000.0000 // Больше 2.100.000 bps нам все равно не положено
Items:
t_pix: in.eth0 : avg : Simple : Filled region : Green : 0
t_pix: out.eth0 : avg : Simple : Line : Blue : 1

Применяем в шаблонах к показателям ключевое слово для организации community, заводим хосты, вводим их в шаблон "t_pix" и получаем мониторинг маршрутизаторов по заданным показателям с отображением соответствующих графиков.

Настраиваем SNMP взаимодействие с Cisco 1800.

Cisco 1800 отлично поддерживает связь по реализации протокола SNMPv2.

На маршрутизаторе создаем ACL разрешающий хождение трафика SNMP откуда и куда нужно для последующего прикрепления к правилам community:

! SNMP:
access-list 11 permit host ip.to

Указываем маршрутизатору параметры конфигурации SNMP:

snmp-server community [community] ro 11
no snmp-server location
no snmp-server contact

Проверяем, отдаст ли оборудование данные по запросу члена community (в нашем случае серверу Zabbix):

# /usr/bin/snmpwalk -c [community] -v 2c [host]

В ответ мы должны получить список параметров, нечто вроде этого:

SNMPv2-MIB:
Technical Support: http://www.cisco.com/techsupport
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.9.1.641
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (213441376) 24 days, 16:53:33.76
SNMPv2-MIB::sysContact.0 = STRING:

Если нам ответили что-то вроде "Timeout: No Response from [host]", то взаимодействие между узлами не налажено и нужно разбираться с причиной.

Настраиваем Zabbix сервер для работы с Cisco 1800.

Создаем шаблон "t_cisco1800".
Создаем группу "Channels".

От Cisco 1800 нам нужно н так уж и много информации. Необходимо мониторить утилизацию интерфейсов и количество соединений обслуживаемых на текущий момент маршрутизатором. Ради интереса можно отслеживать количество отвергнутых пакетов и попыток нарушить периметр безопасности, но это уже отдельная тема. Интересующие нас интерфейсы в нашем случае могут быть на произвольных портах, поэтому точное значение OID придётся подбирать индивидуально для каждого хоста.

Настроим мониторинг загрузки Ethernet интерфейса.

Создаем параметр "in.eth0" шаблона "t_cisco1800":

Type: SNMPv2 agent
SNMP community: [community]
SNMP OID: .1.3.6.1.2.1.2.2.1.10.1
SNMP port: 161
Key: if0InOctets
Type of information: Numeric (float)
Units: bps
Use multiplier: 1
Update interval (in sec): 8
Store value: Delta (simple change)

Создаем параметр "out.eth0" шаблона "t_cisco1800":

Type: SNMPv2 agent
SNMP community: [community]
SNMP OID: .1.3.6.1.2.1.2.2.1.16.1
SNMP port: 161
Key: if0OutOctets0
Type of information: Numeric (float)
Units: bps
Use multiplier: 1
Update interval (in sec): 8
Store value: Delta (simple change)

Указав интервал обновления в восемь (8) секунд с умножителем показателя в единицу (1), методом сохранения данных как разницу между двумя показаниями счётчика в указанный период обновления и тем, что количество проходящей через интерфейс информации исчисляется в октетах (байтах), результирующим показателем будет количество бит в секунду на интерфейсе; иначе говоря - "bps". Если нужен меньший интервал обновления, то множитель соответственно увеличивается.

SNMP OID: .1.3.6.1.2.1.2.2.1.10 - Сбор входящего трафика (inOctets);
SNMP OID: .1.3.6.1.2.1.2.2.1.16 - Сбор исходящего трафика (outOctets).

Прибавление ещё одного значения определит целевой интерфейс - номер интерфейса по принципу:
  .1  - FatEthernet0;
  .2  - FatEthernet1;
  .3  - FatEthernet2;
  .4  - FatEthernet3;
  .5  - FatEthernet4;
  .6  - FatEthernet5;
  .7  - FatEthernet6;
  .8  - FatEthernet7;
  .9  - FatEthernet8;
  .10 - FatEthernet9;

Создаем параметр "Connections" шаблона "t_cisco1800":

Type: SNMPv2 agent
SNMP community: [community]
SNMP OID: .1.3.6.1.4.1.9.9.147.1.2.2.2.1.5.40.6
SNMP port: 161
Key: Connections
Type of information: Numeric (unsigned)
Units: bps
Use multiplier: Do not use
Update interval (in sec): 60
Store value: As is

Создаем график "util.eth0":

Graph type: Normal
Show working time: yes
Y axis type: Fixed
Y axis MIN value: 0.0000
Y axis MAX value: 2100000.0000 // Больше 2.100.000 bps нам все равно не положено
Items:
t_cisco1800: in.eth0 : avg : Simple : Filled region : Green: 0
t_cisco1800: out.eth0 : avg : Simple : Line : Blue : 1

Применяем в шаблонах к показателям ключевое слово для организации community, заводим хосты, вводим их в шаблон "t_cisco1800" и получаем мониторинг маршрутизаторов по заданным показателям с отображением соответствующих графиков.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )