Первым делом предупреждение и напоминание предупреждённым: протокол 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 не исключение. Для того, чтобы погулять по ветвям параметров оборудования необходимо скачать и применить к "браузеру" файлы с описанием дополнительных параметров:
http://zyxel.ru/content/support/knowledgebase/KB-1215/zyxel-prestige.zip
http://zyxel.ru/content/support/knowledgebase/KB-1215/ZYXEL-MIB.zip
http://zyxel.ru/content/support/knowledgebase/KB-1215/ZYXEL-MIB.zip
Распаковываем и копируем mib файлы в директорию "Mibs" нашего "браузера", удаляем файл .index и перезапускаем приложение. Получаем стандартное дерево SNMP с дополнениями от производителя оборудования.
Настраиваем оборудование на работу с протоколом SNMP.
С модемами ZyXEL все просто. Переходим к пункту меню "SNMP Configuration" (22) и приводим переменные к следующему виду:
Get Community = [ключевое слово/пароль идентифицирующее членов группы для чтения параметров оборудования]
Set Community = [ключевое слово/пароль идентифицирующее членов группы для изменения параметров оборудования]
Trusted Host = [список хостов имеющих доступ к оборудованию в рамках community]
Trap:
Community = [ключевое слово/пароль идентифицирующее членов группы для получения параметров оборудования]
Destination = [адрес хоста получающего асинхронно высылаемые данные оборудования в рамках 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
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)
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)
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
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
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
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
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)
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)
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
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
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
access-list 11 permit host ip.to
Указываем маршрутизатору параметры конфигурации SNMP:
snmp-server community [community] ro 11
no snmp-server location
no snmp-server contact
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:
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)
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)
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;
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
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
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" и получаем мониторинг маршрутизаторов по заданным показателям с отображением соответствующих графиков.
2 апреля 2011 в 12:16
2 апреля 2011 в 15:14
26 марта 2012 в 12:30
26 марта 2012 в 12:54
21 февраля 2013 в 17:43
21 февраля 2013 в 18:26
21 февраля 2013 в 18:32