Snmp: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
Немає опису редагування
Рядок 40: Рядок 40:


Комментарии к портам можно установить в меню «Порты» на странице данных текущего свича.
Комментарии к портам можно установить в меню «Порты» на странице данных текущего свича.
<br>


Теперь для безопасности на свиче изменим community, например, на название сети CoolNet.
Теперь для безопасности на свиче изменим community, например, на название сети CoolNet.


Проверим:
Проверим:
<source lang="bash">
snmpwalk -v2c -c CoolNet 10.100.100.14 1.3.6.1.2.1.1.1.0
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.
</source>


Как уже неоднократно отмечалось, не следует напрямую менять файлы nodeny, поскольку ваши изменения «затрутся» при обновлении NoDeny+. Поэтому изменения внесем в файл-патч:
==Создадим параметры подключения==
В меню «Документы» создадим папку Snmp. В ней создадим документ с именем, например, «Соединения». Обязательно добавим тег snmp_connection


команда 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'


<pre>
%connection = (
%connection = (
     Community => 'CoolNet',
     Community => 'CoolNet',
     Version  => 2,
     Version  => 2,
);
);
</pre>
<br>
Создадим конфигурационный файл для свичей Planet: документ с именем Planet и обязательно с тегом: snmp_device
Содержимое документа:


<pre>
$c = Get_config 'Planet';
$c = Get_config 'Planet';
$c->Set_connection( %connection );
$c->Set_connection( %connection );
</pre>


$c = Get_config 'DLink';
Получили уже созданный системой конфиг Planet и установили параметры соединения: Community = 'CoolNet'.
$c->Set_connection( %connection );


$c = Get_config 'Switch';
<br>
$c->Set_connection( %connection );
В примере мы указали, что Community = 'CoolNet'. Мы получили уже созданные системой конфиги Switch (стандартные свичи), DLink и Planet. Во всех мы изменили параметры соединения Community и версию.


Зафиксируем изменения и проверим, что в конфиге нет ошибок:
sudo perl install.pl -x
perl -c cfg/_snmp.cfg.pm
Проверяем в админке получение данных свича. Пробуем выключить его какой-либо порт. Учтите, что в настройках самого свича, community CoolNet должно иметь права на изменение данных.
Проверяем в админке получение данных свича. Пробуем выключить его какой-либо порт. Учтите, что в настройках самого свича, community CoolNet должно иметь права на изменение данных.


Добавим какой-нибудь mib в список отображаемых данных
Добавим какой-нибудь mib в список отображаемых данных:
редактируем patch.cfg.snmp.cfg.pm
 
<pre>
$c->Object('sysContact',
$c->Object('sysContact',
     oid  => '1.3.6.1.2.1.1.4.0',
     oid  => '1.3.6.1.2.1.1.4.0',
Рядок 81: Рядок 87:
);
);
$c->Add_show_param('sysContact');
$c->Add_show_param('sysContact');
</pre>
Здесь мы создали новый mib с кодом sysContact = '1.3.6.1.2.1.1.4.0' и с помощью Add_show_param добавили его в список отображаемых параметров.
Здесь мы создали новый mib с кодом sysContact = '1.3.6.1.2.1.1.4.0' и с помощью Add_show_param добавили его в список отображаемых параметров.


Изменение отображаемой информации
==Изменение отображаемой информации==
Допустим, по snmp мы получаем какие-то значения в неудобном для восприятия виде. Например, ifAdminStatus возвращает 1 если порт включен, 2 - если выключен. Давайте заменим 1 на «включен», а 2 на «выключен». Хотя это уже сделано в стандартном конфиге, но мы для примера перезапишем.
 
Допустим, по snmp мы получаем какие-то значения в неудобном для восприятия виде. Например, ifAdminStatus возвращает 1 если порт включен, 2 - если выключен. Давайте заменим 1 на «включен», а 2 на «выключен». Хотя это уже сделано в стандартном конфиге, но мы для примера перезапишем:


редактируем patch.cfg.snmp.cfg.pm
<pre>
$c->Object('ifAdminStatus',
$c->Object('ifAdminStatus',
     oid    => '1.3.6.1.2.1.2.2.1.7.',
     oid    => '1.3.6.1.2.1.2.2.1.7.',
Рядок 103: Рядок 112:
     },
     },
);
);
Будьте внимательны и не ошибитесь в скобочках и стрелочках, проверьте правильность конфига как было указано выше (perl -c), и не забывайте, что конфиг обновится только после sudo perl install.pl -x.
</pre>
 
Будьте внимательны и не ошибитесь в скобочках и стрелочках.


Обратите внимание, что в mib мы добавили еще 2 параметра: css - будет выводить красным цветом (error) значение 2 (порт отключен), set - позволяет менять параметр из админки. Если параметра set не будет, mib будет доступен только для чтения.
Обратите внимание, что в mib мы добавили еще 2 параметра: css - будет выводить красным цветом (error) значение 2 (порт отключен), set - позволяет менять параметр из админки. Если параметра set не будет, mib будет доступен только для чтения.
Рядок 109: Рядок 120:
Если же мы хотим произвести более сложные действия с отображаемыми данными, то можем ключ values указать на фрагмент кода:
Если же мы хотим произвести более сложные действия с отображаемыми данными, то можем ключ values указать на фрагмент кода:


<pre>
$c->Object('xxxxxxxx',
$c->Object('xxxxxxxx',
     oid    => 'x.x.x.x.x.x.x.x.',
     oid    => 'x.x.x.x.x.x.x.x.',
Рядок 118: Рядок 130:
     }
     }
);
);
</pre>
В данном примере, при выводе информации по портам, в колонке «Мак-адрес» будет выведен мак-адрес без префикса 0x (0x001122334455 преобразуется в 001122334455). При этом он будет оформлен как ссылка на поиск информации о мак-адресе в NoDeny.
В данном примере, при выводе информации по портам, в колонке «Мак-адрес» будет выведен мак-адрес без префикса 0x (0x001122334455 преобразуется в 001122334455). При этом он будет оформлен как ссылка на поиск информации о мак-адресе в NoDeny.


В нашей сети есть свич, который имеет нестандартные mib-ы
==Пример 1==
редактируем 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-трапов и провоцируем его на отправку трапа, например, на дисконнект линка. Если сервер принимает трап и видно, что записывает в базу данных - ставим модуль в автозагрузку:
<pre>
$c->{cfg}{dot1dTpFdbPort}  = {
    oid  => '1.3.6.1.2.1.17.4.3.1.1.',
    name => 'Порт по маку',
};


Команда bash
$c->{cfg}{Show_ports} = [
echo '/usr/bin/perl /usr/local/nodeny/nokernel.pl -m=snmp_trap -d &' >> /etc/rc.local
    'dot1dTpFdbPort',
    'ifAdminStatus',
    'ifOperStatus',
    'ifSpeed',
    'ifInErrors',
    'ifAlias',
];
</pre>

Версія за 18:51, 24 жовтня 2018

Ставим 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. В ней создадим документ с именем, например, «Соединения». Обязательно добавим тег snmp_connection

Содержимое документа:

%connection = (
    Community => 'CoolNet',
    Version   => 2,
);


Создадим конфигурационный файл для свичей Planet: документ с именем Planet и обязательно с тегом: snmp_device

Содержимое документа:

$c = Get_config 'Planet';
$c->Set_connection( %connection );

Получили уже созданный системой конфиг Planet и установили параметры соединения: Community = 'CoolNet'.


Проверяем в админке получение данных свича. Пробуем выключить его какой-либо порт. Учтите, что в настройках самого свича, community CoolNet должно иметь права на изменение данных.

Добавим какой-нибудь mib в список отображаемых данных:

$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 => 'Выключить',
    },
);

Будьте внимательны и не ошибитесь в скобочках и стрелочках.

Обратите внимание, что в 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.

Пример 1

Вывод мак-адресов на портах свича:

$c->{cfg}{dot1dTpFdbPort}  = {
    oid  => '1.3.6.1.2.1.17.4.3.1.1.',
    name => 'Порт по маку',
};

$c->{cfg}{Show_ports} = [
    'dot1dTpFdbPort',
    'ifAdminStatus',
    'ifOperStatus',
    'ifSpeed',
    'ifInErrors',
    'ifAlias',
];