cd /usr/ports/net-mgmt/p5-Net-SNMP && make install clean
snmpwalk -v2c -c public 10.100.100.14 1.3.6.1.2.1.1.1.0
Если не получили информацию:
Парамерты Snmp (mib-ы) в некоторой степени стандартизированы, но иногда бывают отличия даже в разных моделях устройств одного производителя. Невозможно дать универсальные команды по включению и настройке 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+. Поэтому изменения внесем в файл-патч:
ee /usr/local/nodeny/modules/MyNetwork/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 должно иметь права на изменение данных.
$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 на «выключен». Хотя это уже сделано в стандартном конфиге, но мы для примера перезапишем.
$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.
$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-свичи поддерживают параметры этого конфига.
$c->Object('SaveConfig', oid => '1.3.6.1.4.1.171.12.1.2.6.0', name => 'Конфиг', set => { 2 => 'Записать', }, ); $c->Add_write_param('SaveConfig');
$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+ может собирать статистику трафика, проходящую через порты устройств. Обратите внимание, трафик начисляется свичу, а не подключенным к нему клиентам. Данная фича предназначена для того, чтобы вы знали загрузку портов в любой момент времени в прошлом, а также имели возможность видеть визуально на графиках загрузку по портам в разные моменты времени. Если данная возможность вам не нужна - пропускайте этот раздел.
ee /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 временно закомментируйте сбор статистики с других коллекторов, чтобы при тестовом запуске не выводилась лишняя информиация:
perl /usr/local/nodeny/nokernel.pl -m=collectors -C
perl /usr/local/nodeny/nokernel.pl -m=collectors -v
Первый срез трафика не попадает в базу данных т.к. он принимается за точку отсчета. Ждите минуту второго среза и если появится трафик в меню «Трафик» → «Свичи» - все ок.
/usr/ports/net-mgmt/p5-Net-SNMPTrapd && make install clean
Запускаем snmp trap-сервер в verbose-режиме:
perl /usr/local/nodeny/nokernel.pl -m=snmp_trap -v
Вероятно, придется запустить от root, например, под sudo.
Настраиваем какой-нибудь свич на отправку snmp-трапов и провоцируем его на отправку трапа, например, на дисконнект линка. Если сервер принимает трап и видно, что записывает в базу данных - ставим модуль в автозагрузку:
echo '/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=snmp_trap -d &' >> /etc/rc.local