== Общая информация == SNMP (Simple Network Management Protocol) - протокол для мониторинга и управления сетевым оборудованием. Он позволяет получать данные о состоянии устройства - метрики, аварии и статусы - и передавать их в систему мониторинга. В этой инструкции мы рассмотрим настройку SNMP на блоке MC04-DSL-3U с использованием версии протокола SNMPv3, обеспечивающей аутентификацию и шифрование передаваемых данных в отличие от SNMPv1/v2c, где для доступа используется только community string, передаваемая в открытом виде. В инструкции описаны: * настройка SNMP trapsink для отправки аварийных уведомлений (трапов) на SNMP-менеджер; * настройка SNMP-агента на блоке для приёма запросов от SNMP-менеджера; * настройка SNMP-менеджера на примере SnmpB для мониторинга блока через SNMP; * блокировка старых версий протокола SNMPv1 и SNMPv2c. == Настройка SNMP trapsink == Откройте веб-интерфейс блока и перейдите на вкладку '''Мониторинг'''. Нажмите '''Добавить''', в появившемся окне выберите '''SNMP trapsink''' и нажмите '''ОК'''. [[Image(01.png, align=center, 99%)]] В окне конфигурации SNMP trapsink укажите следующие параметры: * '''Имя''' - произвольное имя для идентификации трапсинка. * '''Хост''' - домен или IP-адрес, на который {{{snmpd}}} будет отправлять трапы. В примере указан IP-адрес ПК. * '''Версия''' - версия 3, наиболее защищённая благодаря поддержке шифрования и аутентификации. * '''Security level''' - authPriv для аутентификации и полного шифрования отправляемых данных. * '''Auth protocol''' - используемая хеш-функция. Чем выше её криптографическая стойкость, тем лучше. В примере выбран SHA1, поскольку используемый SNMP-менеджер не поддерживает другие версии SHA. Вам рекомендуется выбирать максимальную версию SHA, которую поддерживает SNMP-менеджер, и избегать устаревшего и менее безопасного алгоритма MD5, учитывая при этом производительность системы. * '''Auth name''' - произвольное имя: уникальный идентификатор учётной записи, передаваемый в открытом виде. * '''Auth password''' - пароль аутентификации из 8 и более символов. В примере указан {{{12345678}}}. * '''Priv protocol''' - метод шифрования. Рекомендуется использовать AES как более стойкий алгоритм. (Используется AES128). * '''Priv password''' - пароль шифрования из 8 и более символов. В примере указан {{{qwertyui}}}. После заполнения параметров нажмите '''ОК'''. [[Image(02.png, align=center)]] Параметр '''Security level''' имеет три опции: * '''noAuthNoPriv''' - нет ни аутентификации, ни шифрования нет. Аналог SNMPv2c: пакеты передаются в открытом виде, аутентификация происходит только по имени пользователя, без пароля. * '''authNoPriv''' - есть аутентификация, нет шифрования. Отправитель проверяется по хэш-функции и паролю (ключу аутентификации), но данные (метрики) внутри пакета передаются в открытом виде. * '''authPriv''' - есть аутентификация и шифрование. Пакет подписывается паролем аутентификации, а всё его содержимое шифруется вторым паролем (ключом приватности). После сохранения настроек появится строка с созданным SNMP trapsink. Чтобы активировать трапсинк, установите чекбокс в столбце '''Активен'''. [[Image(03.png, align=center, 99%)]] == Настройка SNMP-агента == Подключитесь по SSH к плате SW-01. Данные по умолчанию: * логин - {{{root}}}; * пароль - {{{<пусто>}}}. В ответ на запрос {{{login as:}}} введите {{{root}}} и нажмите Enter. После появления строки {{{root@[IP-адрес]'s password:}}} нажмите Enter. Остановите SNMP-агент командой {{{/etc/init.d/snmpd stop}}} [[Image(04.png, align=center)]] Для открытия файла в текстовом редакторе введите команду: {{{vi /var/net-snmp/snmpd.conf}}} Добавьте в файл строку вида: {{{createUser [имя пользователя] [протокол аутентификации] [пароль аутентификации] [протокол шифрования] [пароль шифрования]}}} Используйте данные из настроек SNMP-trapsink. >В данном примере для простоты настройки использован один USM-профиль для SNMP-trapsink и SNMP-агента. ''Но это необязательно'' >USM-профиль (User-based Security Model) состоит из имени пользователя, протокола и пароля аутентификации, протокола и пароля шифрования. > >'''Почему профили могут различаться''' >Для SNMP-trapsink и SNMP-агента можно использовать разные USM-профили: >- '''Trapsink''' - учётные данные, с которыми агент отправляет трапы менеджеру. Они определяют, как трап будет подписан и зашифрован на исходящей стороне. >- '''createUser + rwuser/rouser''' на агенте - учётные данные, с которыми менеджер опрашивает агента с помощью запросов GET/SET. Это входящее направление, не зависящее от отправки трапов. > >Таким образом, можно создать двух разных пользователей: одного - только для трапов, другого - только для опроса. У них могут быть разные пароли и протоколы. Технически это два отдельных USM-пользователя, каждый из которых создаётся своей строкой {{{createUser}}}. > >Единственное, что должно совпадать, параметры USM-профиля для агента и для менеджера. >- Для trapsink: параметры (имя, протоколы, пароли), заданные в конфиге блока, должны совпадать с тем, что настроено в SNMP-менеджере для приёма трапов от этого пользователя, иначе менеджер не сможет проверить подпись/расшифровать трап. >- Для опроса: параметры пользователя в {{{createUser}}}/{{{rwuser}}} на агенте должны совпадать с тем, что менеджер использует при отправке GET/SET-запросов, иначе агент отклонит запрос. Для перехода в vi в ''режим ввода'' нажмите клавишу {{{i}}}. Для примера напишем: {{{createUser grs2_snmp SHA 12345678 AES qwertyui}}} Для возврата в ''обычный режим'' нажмите {{{ESC}}}, затем введите {{{:wq}}} ''(с двоеточием)'', чтобы сохранить файл и выйти. >Небольшая справка по vi: >- Обычный режим - перемещение по файлу, стирание текста и другие редактирующие функции. > - Клавиша {{{Esc}}}. >- Режим ввода - ввод текста. > - Для перехода из ''обычного режима'' нажать клавишу {{{i}}} или {{{Insert}}}. > - {{{:q}}} - набрать на клавиатуре в ''обычном режиме'' для выхода из редактора. > - {{{:q!}}} - набрать на клавиатуре в ''обычном режиме'' для выхода из редактора без сохранения изменений. > - {{{:wq}}} - набрать на клавиатуре в ''обычном режиме'' для выхода из редактора c сохранением файла. > - {{{-}}} в левом нижнем углу означает ''обычный режим''. > - {{{I}}} в левом нижнем углу означает ''режим ввода''. [[Image(05.png, align=center)]] > Касательно предупреждения "Do not edit this file". Единственное изменение, которое можно вносить в этот файл, это создание юзера, о чем написано в предпоследней строчке самого предупреждения. > Чтобы {{{snmpd}}} не стёр внесенные изменения, мы и остановили {{{snmpd}}}. Если открыть этот файл заново после запуска {{{snmpd}}}, то строка {{{creatUser <...>}}} закодируется для безопасности. Новому пользователю необходимо назначить права. Введите команду: {{{vi /etc/snmp/snmpd.conf}}} Добавьте в файл строку вида: {{{[rw/ro]user [имя пользователя] [noauth|auth|priv]}}} где: * {{{rwuser}}} - пользователь с правами на чтение и запись; * {{{rouser}}} - пользователь с правами только на чтение; * {{{[noauth|auth|priv]}}} - минимальный уровень безопасности: * {{{noauth}}} - разрешает запросы уровней {{{noauth}}}, {{{auth}}} и {{{priv}}}; * {{{auth}}} - разрешает {{{auth}}} и {{{priv}}}, но отклоняет {{{noauth}}}; * {{{priv}}} - разрешает только {{{priv}}}. Для примера добавим строку: {{{rwuser grs2_snmp priv}}} Без указания дополнительных параметров директива {{{rwuser}}} ({{{rouser}}}) по умолчанию обеспечивает пользователю доступ к полному дереву OID с использованием контекста по умолчанию. ''Дополнительная информация: [http://www.net-snmp.org/docs/man/snmpd.conf.html Manpage of SNMPD.CONF].'' [[Image(06.png, align=center)]] После создания пользователя и назначения прав запустите {{{snmpd}}} командой: {{{/etc/init.d/snmpd start}}} ---- Другие уровни безопасности: * '''authPriv''' - проверка подлинности источника сообщения и целостности данных и шифрование данных * в файле {{{/var/net-snmp/snmpd.conf}}} написать {{{createUser [имя пользователя] [протокол аутентификации] [пароль аутентификации] [протокол шифрования] [пароль шифрования]}}}. * в файле {{{/etc/snmp/snmpd.conf}}} написать {{{[rw/ro]user [имя пользователя] priv}}} * '''authNoPriv''' - проверка подлинности источника сообщения и целостности данных, данные в открытом виде * в файле {{{/var/net-snmp/snmpd.conf}}} написать строку {{{createUser [имя пользователя] [протокол аутентификации] [пароль аутентификации]}}}. * в файле {{{/etc/snmp/snmpd.conf}}} написать {{{[rw/ro]user [имя пользователя] auth}}} * '''noAuthNoPriv''' - нет шифрования * в файле {{{/var/net-snmp/snmpd.conf}}} написать {{{createUser [имя пользователя]}}}. * в файле {{{/etc/snmp/snmpd.conf}}} написать {{{[rw/ro]user [имя пользователя] noauth}}} == Настройка SNMP-менеджера == '''на примере программы SnmpB v0.8''' Настройка графических SNMP-менеджеров в целом однотипна и включает три шага: * добавление собственных MIB-файлов; * настройку данных аутентификации и шифрования (добавление USM-профиля); * сопоставление конкретного хоста с USM-профилем. === Добавление MIB-файлов === Вернитесь в веб-интерфейс блока, откройте вкладку '''Мониторинг''' и скачайте MIB-файлы. [[Image(07.png, align=center, 99%)]] Нажмите '''Скачать MIB блока'''. Откроется файл {{{mib.txt}}}. Выделите весь текст с помощью {{{Ctrl-A}}}, вставьте его в текстовый файл и переименуйте файл в {{{ADC-MIB}}}. Расширение зависит от формата, используемого SNMP-менеджером, но обычно MIB-файлы хранятся без расширения. При нажатии '''Скачать ADC-MIB''' откроется файл {{{adc-mib.txt}}}. Таким же способом скопируйте его содержимое в текстовый файл и переименуйте полученный файл в {{{M3U9999-MIB}}}. Полученные файлы переместите в папку SNMP-менеджера, где хранятся его MIB-файлы. Для SnmpB путь выглядит так: {{{C:\Program Files (x86)\SnmpB\mibs}}} На вкладке '''Modules''' в SnmpB слева отображаются MIB-файлы, обнаруженные в каталоге по умолчанию, а справа - загруженные файлы, доступные на вкладке '''Tree'''. Перенесите {{{ADC-MIB}}} и {{{M3U9999-MIB}}} из списка доступных файлов в список загруженных. [[Image(08.png, align=center, 99%)]] \\ \\ > Каждый блок MC04-DSL-3U формирует собственный MIB-файл в зависимости от установленных плат, однако все переменные находятся в одном корневом OID. Поэтому при загрузке MIB нескольких блоков возможен конфликт: один и тот же OID, например {{{.1.3.6.1.4.1.32109.9999.4.5.6.0}}}, в разных блоках может соответствовать переменным разных типов. В таком случае менеджер откажется работать с этими MIB. > > Чтобы избежать конфликта, назначьте блоку отдельный корневой OID. На вкладке '''Мониторинг''' можно изменить последний элемент корневого OID: значение по умолчанию - 9999, допустимый диапазон - 1–65535. Например, при значении 8888 получится уникальный OID {{{.1.3.6.1.4.1.32109.8888.4.5.6.0}}}, который не пересекается с OID других блоков. === Добавление USM-профиля === Выберите пункт меню {{{Options -> Manage SNMPv3 USM Profiles...}}}, чтобы открыть окно '''USM Profiles'''. Щёлкните правой кнопкой мыши в левой области окна и выберите {{{New USM Profile}}}. Заполните поля в соответствии с настройками SNMP-trapsink и SNMP-агента. [[Image(09.png, align=center)]] На вкладке '''Discovery''' измените '''Discovery range''' на '''IP network''', в поле '''From address''' укажите IP-адрес SW-01 (если в вашей сети много блоков, то так же следует указать и '''To address'''). Справа снимите чекбоксы SNMPv1 и SNMPv2c, после чего нажмите кнопку '''Discover'''. В нижней части окна должен появиться IP-адрес SW-01. Щёлкните по нему правой кнопкой мыши, выберите '''Add agent(s) to profile list''', а затем нажмите кнопку настроек в разделе '''Use settings from SNMP Agent profile'''. [[Image(010.png, align=center)]] В окне '''Agent Profiles''' раскройте список под IP-адресом SW-01 или его именем, например {{{sw01}}}. В подменю '''SnmpV3''' выберите '''Security name''', созданный на предыдущем этапе в '''USM Profiles''', и нужный '''Security Level'''. [[Image(011.png, align=center)]] На этом настройка SNMP-менеджера завершена. ---- В SnmpB настройки иногда не применяются «на лету» и требуют перезапуска приложения. После перезапуска SnmpB или блока MC04-DSL-3U может потребоваться повторная процедура Discover для синхронизации EngineID между SNMP-менеджером и SNMP-агентом. На вкладке '''Discovery''' заполните поле '''IP networks - From address''' и нажмите '''Discover'''. === Проверка работы SNMP === ==== SNMP-агент ==== Перейдем на вкладку '''Tree''' и попробуем выполнить команду {{{Get}}}. Как видно в окне '''Query Results''', запрос успешно выполнен, данные OID отобразились. [[Image(012.png, align=center, 99%)]] ==== SNMP trapsink ==== SNMP-агент отправляет trapsink, когда есть авария либо она завершилась. Для проверки в блоке MC04-DSL-3U вызовем аварию, например, активировав поток E1 на плате E1-08 и сняв чекбокс "маска". На вкладке '''Traps''' видны пришедшие трапсинки. [[Image(013.png, align=center, 99%)]] == Блокировка SNMP v1 и v2c == Для дополнительной защиты вам может понадобиться полностью отключить возможность подключения по устаревшим версиям протокола - SNMP v1 и SNMPv2c, поскольку аутентификация в них ограничивается community string, передаваемой в открытом виде. В net-snmp доступ по v1/v2c включается директивой {{{com2sec}}} (и {{{com2sec6}}} для IPv6) в файле {{{/etc/snmp/snmpd.conf}}}, которая сопоставляет community string с внутренним именем пользователя. Если такой записи нет, агент отклоняет запросы по v1/v2c ещё на этапе аутентификации, до обращения к группам и правам доступа. Директивы {{{group}}} и {{{access}}}, использующие модели {{{v1}}}/{{{v2c}}}, при этом становятся неиспользуемыми и не влияют на работу SNMPv3, для которого имена пользователей приходят из {{{createUser}}}, а не через {{{com2sec}}}. Перед изменением конфига можно сделать резервную копию файла командой: {{{cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.bak}}} Откройте файл командой: {{{vi /etc/snmp/snmpd.conf}}} В конфигурации по умолчанию за доступ по v1/v2c отвечают строки вида: {{{ com2sec local 127.0.0.1 private com2sec readonly default public com2sec6 readwrite default public }}} Закомментируйте эти строки, добавив символ {{{#}}} в начало каждой из них: [[Image(014.png, align=center, 98%)]] Строки {{{group <...>}}} и связанные с ними записи {{{access}}} можно оставить без изменений, так как без соответствующих записей {{{com2sec}}} они не задействуются. Сохраните изменения в файле ({{{Esc -> :wq}}}) и перезапустите {{{snmpd}}} командой: {{{/etc/init.d/snmpd restart}}} После перезапуска доступ по SNMPv1 и SNMPv2c будет заблокирован. Проверим это, попытавшись выполнить команду {{{snmpget}}} с параметрами {{{-v:1}}} и {{{-v:2c}}}: [[Image(015.png, align=center, 98%)]] Как видно на скриншоте, после изменения файла ответы на SNMP-запросы v1 и v2c действительно перестали приходить. == Результат настройки == Теперь блок MC04-DSL-3U готов к работе с системой мониторинга по SNMPv3. SNMP-агент принимает защищённые запросы, а SNMP-trapsink передаёт в SnmpB уведомления о возникновении и завершении аварий. Загруженные MIB-файлы позволяют просматривать параметры оборудования в понятном виде и обращаться к нужным OID. Использование USM-профиля с аутентификацией и шифрованием защищает данные во время обмена между блоком и SNMP-менеджером. Отключение SNMPv1 и SNMPv2c при этом исключает подключение по устаревшим версиям протокола, в которых community string передаётся в открытом виде.