Данная статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
- Astra Linux Special Edition РУСБ.10015-17
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
- Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1
- Astra Linux Special Edition РУСБ.10015-16 исп. 2
- Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
- Astra Linux Common Edition 2.12
Введение
SNMP (англ. - Simple Network Management Protocol — простой протокол сетевого управления) — стандартный интернет-протокол для управления устройствами в IP-сетях на основе протоколов TCP/UDP. К поддерживающим SNMP устройствам относятся маршрутизаторы, коммутаторы, серверы, рабочие станции, принтеры, модемные стойки и другие. Протокол обычно используется в системах сетевого управления для контроля подключённых к сети устройств на предмет условий, которые требуют внимания администратора. SNMP состоит из набора стандартов для сетевого управления, включая протокол прикладного уровня, схему баз данных и набор объектов данных.
При описании протокола используются термины:
MIB (база управленческой информации) текстовый файл с инструкциями по сбору и упорядочению информации. Менеджер SNMP использует информацию из MIB для перевода и интерпретации сообщений перед их отправкой конечному пользователю. Ресурсы, хранящиеся в MIB, называются управляемыми объектами или переменными управления.
Описание стенда
Стенд состоит из двух компьютеров с установленной ОС Astra Linux Special Edition.
Первый компьютер выступает в роли менеджера и ему присвоен IP-адрес: 192.168.1.111
Второй компьютер выступает в роли опрашиваемого агента и ему присвоен IP-адрес: 192.168.1.112
Установка пакетов
Установка SNMP на компьютер в роли менеджера:
При работе с Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.6 перед установкой пакета snmp-mibs-downloader загрузить и установить пакет smistrip:
wget http://ftp.de.debian.org/debian/pool/main/libs/libsmi/smistrip_0.4.8+dfsg2-16_all.debВ Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.7 этот пакет может быть установлен из базового репозитория;
sudo apt install -y ./smistrip_0.4.8+dfsg2-16_all.debУстановить пакет snmp-mibs-downloader:
В Astra Linux Special Edition РУСБ.10015-01 очередное обновление 1.7 с установленным обновлением БЮЛЛЕТЕНЬ № 2023-1023SE17 (оперативное обновление 1.7.5) пакет доступен в расширенном репозитории. После подключения расширенного репозитория пакет может быть установлен с помощью графического менеджера пакетов или командой:
sudo apt install snmp-mibs-downloaderВ более ранних обновлениях пакет можно загрузить и установить из репозитория Debian:
wget http://ftp.de.debian.org/debian/pool/non-free/s/snmp-mibs-downloader/snmp-mibs-downloader_1.5_all.deb
sudo apt install -y ./snmp-mibs-downloader_*_all.deb
Настройка
Настройка менеджера SNMP
В конфигурационном файле /etc/snmp/snmp.conf чтобы позволить менеджеру SNMP импортировать файлы MIB, следует закомментировать следующую строку:
#mibs :
Настройка агента SNMPD
В конфигурационном файле /etc/snmp/snmpd.conf изменить параметр agentAddress, определяющий разрешенные подключения. По умолчанию разрешены только подключения с локального компьютера. Для разрешения внешних подключения привести параметры к виду:
# Принимать подключения только от локальной системы (настройка по умолчанию) #agentAddress udp:127.0.0.1:161 # Принимать подключения по всем интерфейсам (IPv4 *и* IPv6) agentAddress udp:161,udp6:[::1]:161
Если не используется IPv6, следует также удалить udp6:[::1]:161.
Если IPv6 не используется, а параметр udp6:[::1]:161 указан, то служба snmpd не запустится, что, в первую очередь, может быть выявлено по сообщениям "Timeout" при попытках обращения к службе.Создать шаблон пользователя %Имя_вашего_пользователя, который, который будет далее использоваться для создания обычных пользователей. Пакеты SNMP делают это путем клонирования параметров пользователей. Создавая нового пользователя, указать тип аутентификации (MD5 или SHA) и пароль (минимум 8 символов). Если планируется использовать при передаче данных защитное преобразование данных, то указать протокол защитного преобразования (DES или AES) и пароль для него (не обязателен). Если пароль для протокола защитного преобразования не указан, то вместо него будет использоваться пароль аутентификации.
Пример:
Создание пользователя "initial", с паролем <временный_пароль>, с типом аутентификации MD5 и протоколом защитного преобразования DES. Для этого в конфигурационный файл /etc/snmp/snmpd.conf добавить строки:
Создание пользователя:
createUser initial MD5 <временный_пароль> DES
Пользователи SNMP используют два пароля: пароль для аутентификации и пароль для защитного преобразования передаваемых данных. Если пароль для защитного преобразования не задан явно, то для защитного преобразования используется пароль аутентификации.Создание группы для определения прав доступа пользователя:
group MyRWGroup usm initial
Создание представления (view) для доступа к данным:
view viewall included .1
Предоставления созданной группе прав доступа к созданному представлению:
access MyRWGroup "" usm priv exact viewall viewall none
В итоге в файл /etc/snmp/snmpd.conf должны быть добавлены следующие строки:
createUser initial MD5 <временный_пароль> DES group MyRWGroup usm initial view viewall included .1 access MyRWGroup "" usm priv exact viewall viewall none
После внесения изменений в конфигурационный файл перезапустить службу snmpd:
Контроль
Если все сделано правильно, то на данном этапе должна корректно выполняться команда просмотра дерева OID от имени пользователя initial:
Дополнительно можно проверить статус службы /менеджера snmpd:
● snmpd.service - Simple Network Management Protocol (SNMP) Daemon.
Loaded: loaded (/lib/systemd/system/snmpd.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2022-03-04 09:22:44 MSK; 8s ago
Process: 7319 ExecStartPre=/bin/mkdir -p /var/run/agentx (code=exited, status=0/SUCCESS)
Main PID: 7321 (snmpd)
Tasks: 1 (limit: 4641)
Memory: 5.2M
CGroup: /system.slice/snmpd.service
└─7321 /usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux mteTrigger mteTriggerConf -f -p /run/snmpd.pid
мар 04 09:22:44 se17 systemd[1]: Starting Simple Network Management Protocol (SNMP) Daemon....
мар 04 09:22:44 se17 systemd[1]: Started Simple Network Management Protocol (SNMP) Daemon..
мар 04 09:22:44 se17 snmpd[7321]: /etc/snmp/snmpd.conf: line 145: Warning: Unknown token: defaultMonitors.
мар 04 09:22:44 se17 snmpd[7321]: /etc/snmp/snmpd.conf: line 147: Warning: Unknown token: linkUpDownNotifications.
мар 04 09:22:44 se17 snmpd[7321]: Turning on AgentX master support.
мар 04 09:22:44 se17 snmpd[7321]: NET-SNMP version 5.7.3
Предупреждения Unknown token: defaultMonitors и Unknown token: linkUpDownNotifications
В системном журнале при запуске службы snmpd могут появляться сообщения вида:
snmpd[7321]: /etc/snmp/snmpd.conf: line 145: Warning: Unknown token: defaultMonitors. snmpd[7321]: /etc/snmp/snmpd.conf: line 147: Warning: Unknown token: linkUpDownNotifications.
Эти сообщения вызваны отсутствием поддержки MIB DISMAN в поставляемых пакетах (вызвано лицензионными ограничениями). Эти предупреждения можно игнорировать, при этом, чтобы исключить сообщения, можно удалить/закомментировать соответствующие строки в конфигурационном файле /etc/snmp/snmpd.conf.
Для того, чтобы устранить предупреждения, включив функционал, аналогичный MIB DISMAN, выполнить следующие действия:
В файле /etc/snmp/snmpd.conf заменить параметры defaultMonitors и linkUpDownNotifications на их функциональные аналоги:
Для параметра defaultMonitors:
monitor -o prNames -o prErrMessage "procTable" prErrorFlag != 0 monitor -o memErrorName -o memSwapErrorMsg "memory" memSwapError != 0 monitor -o extNames -o extOutput "extTable" extResult != 0 monitor -o dskPath -o dskErrorMsg "dskTable" dskErrorFlag != 0 monitor -o laNames -o laErrMessage "laTable" laErrorFlag != 0 monitor -o fileName -o fileErrorMsg "fileTable" fileErrorFlag != 0
Для параметра linkUpDownNotifications
notificationEvent linkUpTrap linkUp ifIndex ifAdminStatus ifOperStatus notificationEvent linkDownTrap linkDown ifIndex ifAdminStatus ifOperStatus monitor -r 60 -e linkUpTrap "Generate linkUp" ifOperStatus != 2 monitor -r 60 -e linkDownTrap "Generate linkDown" ifOperStatus == 2
Создать файл переопределения /etc/systemd/system/snmpd.service.d/override.conf.
Для создания файла переопределения рекомендуется использовать команду:
sudo systemctl edit snmpdФайл переопределения должен иметь следующее содержимое:
[Service] Environment= Environment="MIBSDIR=/usr/share/snmp/mibs:/usr/share/snmp/mibs/iana:/usr/share/snmp/mibs/ietf:/usr/share/mibs/site:/usr/share/snmp/mibs:/usr/share/mibs/iana:/usr/share/mibs/ietf:/usr/share/mibs/netsnmp" ExecStart= ExecStart=/usr/sbin/snmpd -Lsd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux -f -p /run/snmpd.pid
Необходимо обязательно указать "пустые присвоения" для очистки значений. Значение параметра Environment=MIBSDIR можно без изменений скопировать из файла etc/systemd/system/snmpd.service, значение параметра ExecStart также можно скопировать из файла etc/systemd/system/snmpd.service, удалив значения:
,mteTrigger,mteTriggerConf"
Если файл переопределения создавался без использования рекомендованной команды sudo systemctl edit, то обновить определения системных служб:
sudo systemctl daemon-reloadПерезапустить службу snmpd:
sudo systemctl restart snmpd
Общая структура команд SNMP
Для управления пользователями SNMPv3 применяется инструмент snmpusm. Три базовых операций SNMP:
- snmpget - прочитать значение оценки с помощью устройства;
- snmpset - установить значение параметра на устройство;
- snmpwalk - прочитать с устройства часть дерева MIB.
При работе с набором net-snmp используется несколько шаблонов для вызова команд.
Для выполнения команд сначала нужно пройти аутентификацию и подключиться к демону SNMP. Для этого могут понадобиться следующие флаги:
-v (version): задаёт версию SNMP-протокола.
-c (community): определяет версию строки доступа .
-u (user-name): указывает имя пользователя, которого нужно авторизовать. Чтобы пользователь имел право на чтение и изменение, он должен быть зарегистрирован в SNMP.
-l (level): задаёт уровень безопасности для подключения. Можно использовать такие значения: noAuthNoPriv (без аутентификации), authNoPriv (аутентификация без защитного преобразования) и authPriv (аутентификация и защитное преобразование). Кроме того, указанный пользователь должен иметь доступ к выбранному уровню безопасности, иначе он не сможет подключиться.
-a (protocol): определяет протокол аутентификации, MD5 или SHA. Это значение должно совпадать с информацией пользователя, указанной при его создании.
-x (protocol): определяет протокол защитного преобразования, DES или AES. Это значение должно совпадать с информацией пользователя, указанной при его создании. Протокол защитного преобразования обязательно нужно указывать, если в настройках пользователя есть параметр priv.
-A (passphrase): пароль для аутентификации пользователя.
-X (passphrase): пароль защитного преобразования. Если вы не указали этот пароль, вместо него будет использоваться пароль для аутентификации. Это пароль обязательно нужно указывать, если в настройках пользователя есть параметр priv.
Общий синтаксис команды:
Получение информации с удаленного хоста: snmpget
К примеру, чтобы убедиться, что пользователь initial доступен, выполнить на менеджере команду:
SNMPv2-MIB::sysDescr.0 = STRING: Linux se17o1 5.4.0-81-generic #astra34+ci17-Ubuntu SMP Mon Nov 22 13:21:54 UTC 2021 x86_64
Управление пользователями SNMPv3: snmpusm
Инструмент snmpusm позволяет на сервере-менеджере создавать новых пользователей, используя данные существующих пользователей в качестве шаблона. Общий синтаксис имеет вид:
snmpusm -u initial -l authPriv -a MD5 -x DES -A <временный_пароль> -X <временный_пароль> localhost create admin initial
Теперь у пользователя admin установлен новый пароль <постоянный_пароль>.
Управление правами пользователей SNMPv3: snmpvacm
Инструмент snmpvacm позволяет изменять права пользователей. Пример:
- Команда createSec2Group имеет аргументы MODEL SECURITYNAME GROUPNAME и создает запись в таблице соответствия имен и прав доступа. Параметры:
- MODEL - цифра, указывающая модель безопасности:
- 1 - зарезервировано для SNMPv1;
- 2 - зарезервировано для SNMPv2c;
- 3 - User-based Security Model (USM) .
- SECURITYNAME - строка, указывающая имя субъекта безопасности (принципал). Для модели USM это имя пользователя;
- GROUPNAME - строка, указывающая имя группы, в которую должен быть включен субъект. Это имя далее используется при назначении прав.
- MODEL - цифра, указывающая модель безопасности:
Назначение прав группе:
Пояснения к примеру:
- Команда createAccess имеет параметры GROUPNAME [CONTEXTPREFIX] MODEL LEVEL CONTEXTMATCH READVIEW WRITEVIEW NOTIFYVIEW и создает запись в таблице доступа, предоставляющую доступ к определенным MIB принципалам в указанной группе. Параметры:
- GROUPNAME - имя группы, для которой определяются права доступа;
- CONTEXTPREFIX (необязательный параметр) - строка, представляющая контекст применения создаваемой записи. Интерпретация значения строки зависит от значения параметра CONTEXTMATCH. Если не указан, то в качестве контекста применяется пустая строка "".
- MODEL - цифра, определяющая модель безопасности:
- 1 - зарезервировано для SNMPv1;
- 2 - зарезервировано для SNMPv2c;
- 3 - User-based Security Model (USM)
- LEVEL - цифра, определяющая минимальный уровень безопасности для запросов:
- 1 - noAuthNoPriv - без аутентификации и защитного преобразования передаваемых данных;
- 2 - authNoPriv - аутентификация без защитного преобразования передаваемых данных;
- 3 - authPriv - аутентификация и защитное преобразование передаваемых данных;
- CONTEXTMATCH - определяет способ интерпретации параметра CONTEXTPREFIX:
- 1 ('exact') - требует точного соответствия контекста CONTEXTPREFIX;
- 2 ('prefix') - требует соответствия начальной строки;
- READVIEW - имя набора MIB (команда view в конфигурационном файле, создающая представление viewall), содержащего объекты MIB, доступные для чтения;
- WRITEVIEW - имя набора MIB (команда view в конфигурационном файле, создающая представление viewall), содержащего объекты MIB, доступные для изменения значений;
- NOTIFYVIEW - имя набора MIB, содержащего объекты MIB, доступные отправки извещений (в доступной версии не поддерживается);
Контроль
Если всё сделано правильно, то пользователь admin должен получить доступ ко всем OID. Проверить доступные OID можно командой:
Удаление временного пользователя
После создания пользователя-администратора можно удалить временного пользователя initial, для этого можно использовать команду:
createUser initial MD5 <временный_пароль> DES group MyRWGroup usm initial
Примерный сценарий
В качестве временного пароля используется пароль q2w2e2r2, в качестве постоянного пароля - 87654321.