Snmp
Ставим Net::SNMP
cd /usr/ports/net-mgmt/p5-Net-SNMP && make install clean
Запрашиваем по snmp у свича 10.100.100.14 параметр «описание устройства»:
snmpwalk -v2c -c public 10.100.100.14 1.3.6.1.2.1.1.1.0
Если не получили информацию:
- На свиче 10.100.100.14 не включен snmp версии v2c
- На свиче 10.100.100.14 не создана snmp community = public
- На свиче 10.100.100.14 нет параметра 1.3.6.1.2.1.1.1.0
Парамерты Snmp (mib-ы) в некоторой степени стандартизированы, но иногда бывают отличия даже в разных моделях устройств одного производителя. Невозможно дать универсальные команды по включению и настройке snmp в конкретном устройстве - вам необходимо изучить документацию к нему. Отметим только, что это обычно интуитивно понятно и, зачастую, команды для настройки snmp можно узнать путем просмотра текущего конфига устройства.
В админке, в меню «Настройки» → «Группы» создаем группу «Свичи», у которой устанавливаем такие параметры:
- Имя идентификационного поля: Инвентарный номер
- Не имеют ФИО, договор, пароль: ставим галку
- Не имеют баланса: ставим галку
- К учетным записям не подключаются услуги: ставим галку
- Учетные записи имеют сущность «Порты»: ставим галку
В меню «Настройки» → «Доп.поля» проверяем, что инсталятор создал поле:
- Имя поля: snmp конфиг
- Имя поля в бд: _snmp
- Тип поля: выпадающий список
- Тип объекта: snmp
Здесь же ставим галку напротив группы «Свичи».
В группе «Свичи» создаем учетную запись свича, добавляем ip и параметр «snmp конфиг» устанавливаем в значение «Стандартный свич». После этого пробуем получить данные свича нажав на ссылку «Инфо по snmp». Если не получаем никаких данных, то включаем debug режим на титульной странице, повторяем запрос «Инфо по snmp» и смотрим в debug.
Комментарии к портам можно установить в меню «Порты» на странице данных текущего свича.
Теперь для безопасности на свиче изменим community, например, на название сети CoolNet.
Проверим: snmpwalk -v2c -c CoolNet 10.100.100.14 1.3.6.1.2.1.1.1.0 Создадим конфигурационный файл для наших snmp-устройств. Конфиг /usr/local/nodeny/cfg/_snmp.cfg.pm содержит стандартные параметры типичных snmp-устройств. Нам нужно добавить в этот конфиг параметры своего оборудования. Если у нас полностью типичное snmp-устройство, то нужно изменить только community.
Как уже неоднократно отмечалось, не следует напрямую менять файлы nodeny, поскольку ваши изменения «затрутся» при обновлении NoDeny+. Поэтому изменения внесем в файл-патч:
команда bash ee /usr/local/nodeny/modules/MyNetwork/patch.cfg.snmp.cfg.pm редактируем patch.cfg.snmp.cfg.pm
- <ACTION> file=>'cfg/snmp.cfg.pm',hook=>'end',after=>'snmp'
%connection = (
Community => 'CoolNet', Version => 2,
);
$c = Get_config 'Planet'; $c->Set_connection( %connection );
$c = Get_config 'DLink'; $c->Set_connection( %connection );
$c = Get_config 'Switch'; $c->Set_connection( %connection ); В примере мы указали, что Community = 'CoolNet'. Мы получили уже созданные системой конфиги Switch (стандартные свичи), DLink и Planet. Во всех мы изменили параметры соединения Community и версию.
Зафиксируем изменения и проверим, что в конфиге нет ошибок: sudo perl install.pl -x perl -c cfg/_snmp.cfg.pm Проверяем в админке получение данных свича. Пробуем выключить его какой-либо порт. Учтите, что в настройках самого свича, community CoolNet должно иметь права на изменение данных.
Добавим какой-нибудь mib в список отображаемых данных редактируем patch.cfg.snmp.cfg.pm $c->Object('sysContact',
oid => '1.3.6.1.2.1.1.4.0', name => 'Тестовый параметр',
); $c->Add_show_param('sysContact'); Здесь мы создали новый mib с кодом sysContact = '1.3.6.1.2.1.1.4.0' и с помощью Add_show_param добавили его в список отображаемых параметров.
Изменение отображаемой информации Допустим, по snmp мы получаем какие-то значения в неудобном для восприятия виде. Например, ifAdminStatus возвращает 1 если порт включен, 2 - если выключен. Давайте заменим 1 на «включен», а 2 на «выключен». Хотя это уже сделано в стандартном конфиге, но мы для примера перезапишем.
редактируем patch.cfg.snmp.cfg.pm $c->Object('ifAdminStatus',
oid => '1.3.6.1.2.1.2.2.1.7.', name => 'Включен?', values => { 1 => 'включен', 2 => 'выключен', 3 => 'тестируется', }, css => { 2 => 'error', }, set => { 1 => 'Включить', 2 => 'Выключить', },
); Будьте внимательны и не ошибитесь в скобочках и стрелочках, проверьте правильность конфига как было указано выше (perl -c), и не забывайте, что конфиг обновится только после sudo perl install.pl -x.
Обратите внимание, что в mib мы добавили еще 2 параметра: css - будет выводить красным цветом (error) значение 2 (порт отключен), set - позволяет менять параметр из админки. Если параметра set не будет, mib будет доступен только для чтения.
Если же мы хотим произвести более сложные действия с отображаемыми данными, то можем ключ values указать на фрагмент кода:
$c->Object('xxxxxxxx',
oid => 'x.x.x.x.x.x.x.x.', name => 'Мак-адрес', values => sub { my($value) = @_; $value =~ s/^0x//; return [ url->a($value, a => 'mac_info', mac => $value) ]; }
); В данном примере, при выводе информации по портам, в колонке «Мак-адрес» будет выведен мак-адрес без префикса 0x (0x001122334455 преобразуется в 001122334455). При этом он будет оформлен как ссылка на поиск информации о мак-адресе в NoDeny.
В нашей сети есть свич, который имеет нестандартные mib-ы редактируем patch.cfg.snmp.cfg.pm $c = New_Config 'DGS1100', 'Switch'; $c->Object('dot1dTpFdbPort')->{oid} = '1.3.6.1.2.1.17.7.1.2.2.1.2.1.'; Здесь мы создали еще один конфиг с именем DGS1100 для свича DGS-1100-06/ME. В нем, мы изменили один mib (dot1dTpFdbPort) - получение номера порта по мак-адресу.
Названия конфигов выбираются исключительно вами, например, можно использовать DLink - вы как бы намекаете, что все ваши DLink-свичи поддерживают параметры этого конфига.
Write-only параметр редактируем patch.cfg.snmp.cfg.pm $c->Object('SaveConfig',
oid => '1.3.6.1.4.1.171.12.1.2.6.0', name => 'Конфиг', set => { 2 => 'Записать', },
); $c->Add_write_param('SaveConfig'); Пишем конфиг пинговалки PING3 (equicom.dp.ua) редактируем patch.cfg.snmp.cfg.pm $c = New_Config 'PING3', 'Switch'; $c->Set_connection( %connection );
$c->Param('Switch', 0);
$c->Object('firmwareVersion',
oid => '1.3.6.1.4.1.35160.1.1.0', name => 'Серийный номер',
); $c->Object('uptimeSeconds',
oid => '1.3.6.1.4.1.35160.1.2.0', name => 'Время работы, сек',
); $c->Object('deviceName',
oid => '1.3.6.1.4.1.35160.1.7.0', name => 'Имя', set => 'string',
); $c->Object('deviceDescription',
oid => '1.3.6.1.4.1.35160.1.8.0', name => 'Описание', set => 'string',
);
$c->Param('Show', [
'firmwareVersion', 'uptimeSeconds', 'deviceName', 'deviceDescription',
]); Здесь мы создали конфиг с именем PING3. Установили параметр Switch в 0, что означает, что устройство не имеет портов и они не будут опрашиваться. Создали mib-ы по документации к устройству и в параметре Show указали в каком порядке они должны отображаться при опросе по snmp. Имя и описание разрешили менять (set => 'string').
Алгоритм создания конфига для неизвестного устройства проверяем, что устройство выдает правильное количество своих портов: snmpwalk -v2c -c CoolNet 10.100.100.14 1.3.6.1.2.1.2.1.0 Портов может быть больше реально существующих, например, на один больше (+ loopback). Если выдает неверное значение либо же ошибку - возможно, параметр иной. Попробуем просканировать рядом стоящие параметры, например будем убирать по одному последнему числу в mib пока не получим список параметров:
Например, в одном из свичей автора: snmpwalk -v2c -c CoolNet 10.100.100.14 1.3.6.1.2 Найдем значения, равные количеству портов устройства и поищем в интернете, возможно, в каких-либо устройствах они используются.
Сбор трафика NoDeny+ может собирать статистику трафика, проходящую через порты устройств. Обратите внимание, трафик начисляется свичу, а не подключенным к нему клиентам. Данная фича предназначена для того, чтобы вы знали загрузку портов в любой момент времени в прошлом, а также имели возможность видеть визуально на графиках загрузку по портам в разные моменты времени. Если данная возможность вам не нужна - пропускайте этот раздел.
Команда bash ee /usr/local/nodeny/kernel/collectors.cfg Добавляем в /usr/local/nodeny/kernel/collectors.cfg
{ type => 'snmp', config => 'Switch', addr => '10.100.100.10', },
Обратите внимание, что конфиг Switch должен быть описан в файле /usr/local/nodeny/cfg/_snmp.cfg.pm как мы сделали это выше по тексту.
Также в /usr/local/nodeny/kernel/collectors.cfg временно закомментируйте сбор статистики с других коллекторов, чтобы при тестовом запуске не выводилась лишняя информиация:
Тестируем. Команда bash perl /usr/local/nodeny/nokernel.pl -m=collectors -C Сбор трафика. Команда bash perl /usr/local/nodeny/nokernel.pl -m=collectors -v Первый срез трафика не попадает в базу данных т.к. он принимается за точку отсчета. Ждите минуту второго среза и если появится трафик в меню «Трафик» → «Свичи» - все ок.
Прием snmp-трапов Ставим perl модуль Net::SNMPTrap /usr/ports/net-mgmt/p5-Net-SNMPTrapd && make install clean Запускаем snmp trap-сервер в verbose-режиме:
Команда bash perl /usr/local/nodeny/nokernel.pl -m=snmp_trap -v Вероятно, придется запустить от root, например, под sudo.
Настраиваем какой-нибудь свич на отправку snmp-трапов и провоцируем его на отправку трапа, например, на дисконнект линка. Если сервер принимает трап и видно, что записывает в базу данных - ставим модуль в автозагрузку:
Команда bash echo '/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=snmp_trap -d &' >> /etc/rc.local