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-битные счётчики | нет | да | да |
| Массовый запрос | нет | getbulk | getbulk |
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 и отдаёт метрики в общий стек мониторинга.
Связанные термины
- Zabbix — классическая система, опрашивающая устройства по SNMP
- Prometheus — современная альтернатива для серверов и приложений
- Уведомления и алерты — куда приходят traps
- Сетевые порты — 161 для запросов, 162 для traps
- VLAN и коммутация — сеть управления, где живёт SNMP
- IPMI / DCIM — соседний способ следить за железом
Готовы запустить GPU-задачу?
Запустить GPU-сервер