Donnerstag, 1. Dezember 2016

SNMP

Протокол SNMP Simple Network Management Protocol (простой протокол сетевого управления) был изначально разработан для мониторинга сетевых устройств, однако в последствии добавилась возможность получать данные с серверов, принтеров и других устройств имеющих сетевой интерфейс. Современные версии протокола допускает возможность внесения изменений в функционирование устройств.

При использовании протокола SNMP мы работаем с четырьмя сущностями:
  1. Управляемое устройство - это роутер, коммутатор, сервер, устройство гарантированного электропитания со специальной платой и т.п.;
  2. SNMP менеджер - ПО мониторинга или SNMP браузер.
  3. SNMP агент - ПО, работающее на управляемом устройстве.
  4. SNMP MIB -  (Management information base). По сути - это некая база данных в виде текстовых фалов записями из которой обмениваются Агент и Менеджер
Менеджер отправляет Агенту запросы на порт UDP 161 (по-умолчанию) с произвольного порта, далее агент обрабатывает этот запрос и отвечает с порта UDP 161 на порт, который берет из исходного запроса. В момент отправки, Менеджер вставляет в запрос некий ID (RequestID), а агент в ответе вставляет данный ID без изменения, для того чтобы Менеджер не путал пакеты от разных агентов. SNMP-агент может быть настроен на посылку Trap уведомлений, которую он выполняет с произвольного порта на UDP 162 порт SNMP-менеджера.

Существует определенный набор команд обмена между агентом и менеджером:
  • Trap – одностороннее уведомление от SNMP агента –> менеджеру о каком-либо событии.
  • GetReponse – ответ от агента к менеджеру, возвращающий запрошенные значения переменных.
  • GetRequest - запрос к агенту от менеджера, используемый для получения значения одной или нескольких переменных.
  • GetNextRequest - запрос к агенту от менеджера, используемый для получения следующего в иерархии значения переменной.
  • SetRequest - запрос к агенту на установку значения одной или нескольких переменных.
  • GetBulkRequest – запрос к агенту на получение массива данных (тюнингованная GetNextRequest). 
  • InformRequest – одностороннее уведомление между менеджерами. Может использоваться, например для обмена информацией о MIB (соответствие символьных OID - цифровым). В ответ менеджер формирует аналогичный пакет в подтверждение того, что исходные данные получены. 

SNMP MIB

Как сказано выше MIB это Management information base. Древовидная база данных в текстовом формате. Каждое сетевое устройство работающее с SNMP протоколом имеет в себе такую базу. Базы разных производителей оборудования отличаются друг от друга, но во всех базах есть общие структуры присущие всем сетевым устройствам, как например, ветка описывающая сетевой интерфейс. Это базовые структуры дерева. Все объекты древовидной структуры (базы данных) называются OID (Object Identifier). OID представляет собой числа разделенные точками. Что-то типа .1.3.6.1.2.1.2.2.1.7. Также имеется мнемонический, так называемый абстрактный синтаксис нотаций - ASN.1. для выше представленного IOD-а он будет таким: .iso.org.dod.internet.mgmt.mib-2.interfaces.ifTable.ifEntry.ifAdminStatus. При общении Агента и Менеджера передаются только числовые значения OID.


Существуют стандартные принципы формирования дерева MIB которые контролируются международными организациями. Каждый производитель сетевого оборудования "пристраивает" свою ветвь к базовой структуре дерева MIB, а также производитель публикует свои MIB-ы, для того, чтобы можно было использовать например MIB-браузеры используя нотацию ASN.1. Любая ветвь MIB  заканчивается некоторой переменной в которую устройство записывает некоторое значение. Переменная также имеет свой OID (как один из объектов дерева). Значения этих переменных как раз  и важны для организации мониторинга.

Версии протокола SNMP

Всего существует 3 версии протокола, причем вторая версия подвергалась изменениям. Версии не совместимы между собой, от версии к версии улучшалась безопасность протокола. Пакеты первой версии протокола легко вылавливаются в сети и подделываются. Несмотря на это первая версия используется по настоящее время очень активно, на ряду со второй и третьей. Конечно все более менее серьезное оборудование поддерживает уже третью версию. С первой версией работает либо очень старое оборудование, либо всякие устройства типа датчиков температуры, источников бесперебойного питания и т.п.
  • SNMP v1 Безопасность протокола базировалась на модели безопасности на основе сообществ (т.н. Community-based Security Model), что подразумевало аутентификацию на основе единой текстовой строки - своеобразного пароля (т.н. community-sting), которая передавалась в открытом виде.
  • SNMP v2  Последняя версия протокола вернулась Community-based Security и стала именоваться SNMPv2c и применяется по сей день. SNMPv2 была переписана чуть более чем полностью, в результате чего существенно повышено быстродействие протокола, безопасность.
  • SNMP v3 Третья версия протокола была более удачно доработана и поддерживает как аутентификацию на основе имени пользователя (т.н. User-based Security Model), так и шифрование трафика. Хотя их можно и не использовать.
Вкратце все версии snmp, с точки зрения безопасности:
  • v1 – никакой безопасности, кроме строки community, что-то типа пароля, который открыто хранится в конфиге.
  • v2 – кроме community string можно шифровать трафик между сервером и агентом.
  • v3 – помимо шифрования, используется имя пользователя, а не community. Пользователь может быть в разных группах, которым могут быть назначены разные права на чтение и запись различных MIB.

Конфигурирование SNMP

Настроить SNMP на Cisco можно следующим образом (полагаю, что это старые команды для настройки SNMP v1 оставшиеся как, например, команда write. Версию протокола выбрать нельзя)
snmp-server community pa$$w0rd ro acl-Monitoring
pa$$w0rd - имя community
acl-Monitoring - access-list
SWG(config)# snmp-server community pa$$w0rd ?
  <1-99>       Std IP accesslist allowing access with this community string
  <1300-1999>  Expanded IP accesslist allowing access with this community string
  WORD         Access-list name
  ipv6         Specify IPv6 Named Access-List
  ro           Read-only access with this community string
  rw           Read-write access with this community string
  view         Restrict this community to a named MIB view
  <cr>
 
Есть ещё один вариант настройки SNMP на Cisco, здесь уже можно выбрать версию протокола.
SWG(config)# snmp-server group GROUP1 v1 ?
  access   specify an access-list associated with this group
  context  specify a context to associate these views for the group1
  notify   specify a notify view for the group
  read     specify a read view for the group
  write    specify a write view for the group
  <cr>
SWG(config)# snmp-server group GROUP1 v2c ?
  access   specify an access-list associated with this group
  context  specify a context to associate these views for the group
  notify   specify a notify view for the group
  read     specify a read view for the group
  write    specify a write view for the group
  <cr>
SWG(config) #snmp-server group GROUP1 v3 ?
  auth    group using the authNoPriv Security Level
  noauth  group using the noAuthNoPriv Security Level
  priv    group using SNMPv3 authPriv security level
Команды для версий SNMP 1 и 2c одинаковые. Если мы выбираем версию 3, то как видно выше, команды, которые можно вводить, меняются.

Настройка  SNMPv3 на Cisco

Приведу настройку SNMPv3. Настройки меньших версий для Cisco не интересны, т.к. это не представляет практического интереса.
Авторизация. Есть три варианта авторизации для SNMPv3:
  • noauth – проверка только имени пользователя, при этом шифрование не работает
  • auth – авторизация происходит через md5, но данные шифроваться не будут
  • priv – авторизация будет через md5 + шифрование данных
В SNMPv3 есть три основных настройки:
  • View
  • Group
  • User
View – создаем определенный профиль, где указываем mib. Mib- навигатор http://tools.cisco.com/Support/SNMP/do/BrowseOID.do
Group – группа, которой разрешаем доступ к view.
User – пользователь, которого относим к нужной группе.
То есть мы можем на одной железке создавать несколько пользователей snmp, у которых могут быть разные права на чтение или запись для всяких mib и пр. То есть кому-то можно только снять статистику с интерфейсов, а кому-то только отправить устройство в ребут. (Хотя я бы предпочел перезагружать устройство вручную, а для разграничения прав доступа админов к устройству есть TACACS+)
Итак, синтаксис. Создаем view
#snmp-server view test_view system included
test_view – название
system – ветка mib которые нам нужны, взял с выше упомянутого mib-навигатора
include – ну собственно что мы включаем во view, можно некоторые MIB-ы исключить параметром exclude
Добавим еще статистику интерфейсов к нашем view
#snmp-server view test_view mib-2 included
Теперь создаем группу:
#snmp-server group group_test v3 auth read test_view
group_test – название группы
v3 – версия snmp
auth – использовать md5 аутентификацию, но без шифрования данных
read – только чтение

И создаем пользователя. 
#snmp-server user admin1 group_test v3 auth md5 password1 priv des password2 access acl-Monitoring 
group_test - уже созданная группа
password1 - пароль для пользователя
password2 - пароль для шифрования данных при передаче
acl-Monitoring  - access-list кому можно присоединение

Следует заметить, что имя пользователя и пароль явно не отображаются в конфиге. Пользователей можно посмотреть командой:
SWG# sh snmp user
User name: User1
Engine ID: 800000090300001BD495EF00
storage-type: nonvolatile active access-list: 3
Authentication Protocol: MD5
Privacy Protocol: DES
Group-name: group-test
Ещё одна полезная команда, которая напрямую к SNMP не относится, но она необходима при настройке мониторинга. Если посмотреть вывод следующей команды, то видно, что значению Ifindex соответствует некое число. Это число на оборудовании меняется при перезагрузке.
SWG#sh snmp mib ifmib ifindex FastEthernet0/24
Interface = FastEthernet0/24, Ifindex = 10024
Чтобы значение не менялось применяется следующая команда:
SWG#(config)snmp-server ifindex persist
Теперь берем snmpwalk или какой-то софт для мониторинга и проверяем. Я пользуюсь Manage Engine MIB Brouser, либо прямо с сервера мониторинга запускаю команды:
snmpwalk -v3 -l authPriv -u admin1 -a MD5 -A password1 -x DES -X password2 10.10.10.22:161 IF-MIB::ifIndex
snmpget -v3 -l authPriv -u admin1 -a MD5 -A password1 -x DES -X password2 10.10.10.22:161 .1.3.6.1.4.1.9.9.42.1.5.2.1.46.18
На моих устройствах стоят следующие настройки:
snmp-server group GROUP1 v3 auth read readview1 access acl-Monitoring
snmp-server group GROUP1 v3 priv read readview1 access acl-Monitoring
snmp-server view readview1 internet includedsnmp-server ifindex persist
snmp-server ip dscp 18
snmp-server user admin1 GROUP1 v3 auth md5 password1 priv des password2 access acl-Monitoring
Два раза прописана группа чтобы была возможность работать как с шифрованием данных, так и без него.
Часть информации взято отсюда http://www.k-max.name/linux/snmp-protocol

Keine Kommentare:

Kommentar veröffentlichen