Networking

SNMP

Simple Network Management Protocol — протокол опроса сетевых устройств и серверов для мониторинга их состояния.

Что такое SNMP

SNMP («снмп») расшифровывается как Simple Network Management Protocol — простой протокол сетевого управления. Это стандартный способ узнать у устройства, как оно себя чувствует: сколько трафика прошло через порт, какая температура, жив ли блок питания, сколько свободно памяти.

Ценность SNMP — в универсальности. Коммутатор, ИБП, принтер, СХД и Linux-сервер разных вендоров отвечают одним и тем же протоколом. Поставить агент мониторинга на управляемый коммутатор нельзя, а опросить по SNMP — можно: поэтому протокол 1988 года выпуска до сих пор жив и никуда не денется.

Работает по модели «менеджер опрашивает агентов»: система мониторинга (Zabbix, например) раз в минуту спрашивает у устройств значения, а те отвечают.

OID и MIB

Все параметры устройства образуют дерево, где у каждого значения есть числовой адрес — OID (Object Identifier). MIB — файл-справочник, переводящий эти числа в человеческие имена.

1.3.6.1.2.1.1.5.0        →  sysName          имя устройства
1.3.6.1.2.1.1.3.0        →  sysUpTime        время работы
1.3.6.1.2.1.2.2.1.10.2   →  ifInOctets.2     принято байт на порту 2
1.3.6.1.2.1.2.2.1.16.2   →  ifOutOctets.2    отправлено байт на порту 2

Счётчики трафика — кумулятивные: устройство отдаёт общее число байт с момента загрузки, а скорость система мониторинга считает сама как разницу между опросами. Практическое следствие: на гигабитных и более быстрых портах требуйте 64-битные счётчики (ifHCInOctets), иначе 32-битные переполняются за минуты и графики превращаются в пилу.

Версии: v2c против v3

v1 v2c v3
Аутентификацияcommunity-строка community-строка логин и пароль (USM)
Шифрование нет нет да (AES)
64-битные счётчики нет да да
Массовый запрос нет getbulkgetbulk

v2c до сих пор самая распространённая, и это её главная проблема: community-строка — это просто пароль, летящий по сети открытым текстом. Community public на чтение — заводское значение у половины устройств, и сканеры интернета ищут его в первую очередь.

Правила простые: наружу SNMP не выставлять никогда, только сеть управления или VPN; public менять; ограничивать по IP на файрволе; где возможно — брать v3.

Отдельный аргумент: SNMP работает по UDP на порту 161, а UDP тривиально подделывается по адресу источника. Открытый в интернет SNMP-агент используют как усилитель для DDoS-атак — ответ во много раз больше запроса, и полетит он жертве, а не атакующему.

Практика

$ snmpwalk -v2c -c public 10.0.0.1 sysName
SNMPv2-MIB::sysName.0 = STRING: sw-core-01

$ snmpget -v2c -c public 10.0.0.1 1.3.6.1.2.1.1.3.0
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (184729300) 21 days, 9:08:13.00

# v3: с аутентификацией и шифрованием
$ snmpwalk -v3 -l authPriv -u monitor -a SHA -A "пароль_аутентификации" \
           -x AES -X "пароль_шифрования" 10.0.0.1 ifDescr

Агент на Linux ставится пакетом snmpd. Минимально безопасный конфиг ограничивает и адрес слушателя, и того, кто может спрашивать:

# /etc/snmp/snmpd.conf
agentAddress udp:10.0.0.5:161          # только сеть управления, не 0.0.0.0
rocommunity СЛОЖНАЯ_СТРОКА 10.0.0.100  # читать может только сервер мониторинга
sysLocation Rack A12, DC-1

Traps и место SNMP сегодня

Кроме опроса, SNMP умеет обратное: устройство само шлёт trap на порт 162, когда что-то случилось — упал линк, сгорел блок питания. Опрос раз в минуту такое событие может проспать, trap приходит сразу. Разумная схема — опрос для графиков, traps для алертов.

Границы применимости стоит понимать трезво. Для сетевого железа SNMP — по-прежнему безальтернативный вариант. Для серверов и приложений его вытеснили Prometheus с экспортерами: pull по HTTP, метки, нормальный язык запросов. Типичный компромисс — snmp_exporter, который опрашивает железо по SNMP и отдаёт метрики в общий стек мониторинга.

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер