Установка и настройка демона и клиента SNMP в Ubuntu 18.04

Сбор точной информации о серверах и инфраструктуре – очень важный аспект системного администрирования. Для обработки таких данных существует много инструментов, и многие из них основаны на технологии SNMP.

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

Читайте также: Основы работы с SNMP

Этот мануал поможет вам установить SNMP и подготовить его к работе. Мы будем работать на двух серверах Ubuntu 18.04. Один из них будет обслуживать менеджер SNMP, который будет общаться с агентом для реализации сетевых устройств (в рамках мануала мы назовем этот сервер сервером 1 или просто менеджером). На другом сервере мы установим агент SNMP, который будет выполнять задачи менеджера (это сервер 2, он также будет называться агентом). В целом и менеджер, и агент можно установить на одну машину, но установка компонентов на разные машины позволит вам подробнее ознакомиться с их функциями.

Требования

Для работы вам понадобится два сервера Ubuntu 18.04, настроенные по этому мануалу.

1: Установка демона и утилит SNMP

Итак, для работы мы используем два сервера: первый в качестве менеджера, а второй – в качестве агента.

С локальной машины подключитесь к серверу 1:

ssh your_username@manager_server_ip_address

Обновите индекс пакетов:

sudo apt update

Читайте также: Основы управления пакетами: apt, yum, dnf, pkg

Установите программное обеспечение snmp. Также нужно загрузить пакет snmp-mibs-downloader, в котором хранится служебная информация о стандартных MIB, с помощью которой можно управлять иерархией MIB.

sudo apt install snmp snmp-mibs-downloader

Откройте еще один терминал и подключитесь в нем к серверу 2 (агенту):

ssh your_username@agent_server_ip_address

Обновите индекс пакетов и установите на него пакеты snmp.

sudo apt update
sudo apt install snmpd

Обратите внимание: пакет snmp-mibs-downloader не нужен на агенте, поскольку агент не будет управлять файлами MIB.

2: Настройка менеджера SNMP

Большая часть работы будет выполняться на агенте, потому настройка менеджера не займёт много времени. На этой машине нужно только открыть клиенту доступ к дополнительным данным MIB.

Перейдите на сервер 1 и откройте файл /etc/snmp/snmp.conf:

sudo nano /etc/snmp/snmp.conf

Файл содержит несколько закомментированных строк и всего одну незакомментированную. Чтобы позволить менеджеру импортировать файлы MIB, нужно просто закомментировать эту строку:

# As the snmp packages come without MIB files due to license reasons, loading
# of MIBs is disabled by default. If you added the MIBs you can reenable
# loading them by commenting out the following line.
#mibs :

Сохраните и закройте файл.

3: Настройка агента SNMP

Как правило, в клиент-серверной системе агент не имеет никаких внешних инструментов, необходимых для настройки SNMP. Некоторые конфигурационные файлы агента можно отредактировать, но большая часть настроек все равно выполняется путём подключения менеджера к агенту.

В этом мануале мы используем версию 3 протокола SNMP. В отличие от SNMPv1 и v2, в SNMPv3 каждое сообщение содержит закодированные параметры безопасности. На этом этапе мы настроим аутентификацию SNMPv3 и правила контроля доступа.

Для начала на агенте нужно открыть конфигурационный файл демона.

sudo nano /etc/snmp/snmpd.conf

Откорректируйте директиву agentAddress. Сейчас она поддерживает только исходящие соединения с локального компьютера. Нужно закомментировать эту строку и раскомментировать следующую, что разрешает все соединения (в дальнейшем мы ограничим доступ).

#  Listen for connections from the local system only
#agentAddress  udp:127.0.0.1:161
#  Listen for connections on all interfaces (both IPv4 *and* IPv6)
agentAddress udp:161,udp6:[::1]:161

Примечание: Поскольку поддерживать все соединения не очень хорошо для безопасности, лучше снова заблокировать соединения после начальной загрузки.

Затем нужно временно добавить строку createUser. Эта директива обычно не хранится в этом файле, поэтому позже мы ее удалим.

Создайте пользователя bootstrap, который будет использоваться в качестве шаблона для создания обычных пользователей. Пакеты SNMP делают это путём клонирования параметров пользователей.

Создавая нового пользователя, укажите тип аутентификации (MD5 или SHA) и пароль (минимум 8 символов). Если для передачи данных вы планируете использовать шифрование, вы также должны указать протокол шифрования (DES или AES) и пароль для него (по желанию). Если вы не выберете пароль для протокола шифрования, вместо него будет использоваться ваш пароль аутентификации.

Добавьте строку createUser в конец файла:

...
createUser bootstrap MD5 temp_password DES

Новый пользователь добавлен. Выберите уровень доступа для этого пользователя (bootstrap), а также для пользователя, который будет создан позже (он условно называется demo). Передайте им права на чтение и запись при помощи директивы rwuser (права только на чтение передаёт директива rouser).

Чтобы сделать шифрование обязательным, после настроек пользователя добавьте параметр priv.  Чтобы ограничить пользователя определённой частью MIB, нужно указать OID высшего уровня, к которому пользователь должен иметь доступ.

...
rwuser bootstrap priv
rwuser demo priv

Сохраните и закройте файл.

Перезапустите сервис snmpd на своем агенте:

sudo systemctl restart snmpd

Демон SNMP будет слушать соединения по порту :161. Настройте UFW, чтобы менеджер мог подключаться к этому порту.

sudo ufw allow from manager_server_ip_address to any port 161

Читайте также: Настройка брандмауэра UFW на сервере Ubuntu 18.04

Теперь можно перейти на сервер 1 (менеджер) и подключиться к агенту, чтобы создать обычного пользователя.

4: Проверка подключения к агенту

На этом этапе нужно убедиться, что вы можете подключиться к агенту с помощью пользователя bootstrap. Однако перед этим мы вкратце рассмотрим общую структуру команд SNMP.

При работе с набором snmp (пакет программного обеспечения net-snmp) используется несколько шаблонов для вызова команд. Сначала нужно пройти аутентификацию и подключиться к демону SNMP, с которым вы хотите установить соединение. Для этого могут понадобиться следующие данные:

  • -v (version): задаёт версию SNMP-протокола (в данной статье используется версия 3).
  • -c (community): определяет версию строки доступа (v1 или v2); поскольку мы используем версию 3, этот параметр нам не нужен.
  • -u (user-name): указывает имя пользователя, которого нужно авторизовать. Чтобы пользователь имел право на чтение и изменение, он должен быть зарегистрирован в SNMP.
  • -l (level): задаёт уровень безопасности подключения. Можно использовать такие значения: noAuthNoPriv (без аутентификации), authNoPriv (аутентификация без шифрования) и authPriv (аутентификация и шифрование). Кроме того, указанный пользователь должен иметь доступ к выбранному уровню безопасности, иначе он не сможет подключиться.
  • -a (authentication protocol): определяет протокол аутентификации, MD5 или SHA. Это значение должно совпадать с информацией, указанной при создании пользователя.
  • -x (encryption protocol): определяет протокол шифрования, DES или AES. Это значение должно совпадать с информацией пользователя, указанной при его создании. Протокол шифрования обязательно нужно указывать, если в настройках пользователя есть параметр priv.
  • -A (passphrase): пароль для аутентификации пользователя.
  • -X (passphrase): пароль шифрования. Если вы не указали этот пароль, вместо него будет использоваться пароль для аутентификации. Это пароль обязательно нужно указывать, если в настройках пользователя есть параметр priv.

Теперь вы можете составить команду. Ваша команда может отличаться в зависимости от параметров пользователя. Общий синтаксис:

snmp_command -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password remote_host snmp_sub_command_or_options

Проверьте со своего менеджера, что учетная запись bootstrap доступна. Введите следующую команду, чтобы отобразить системную информацию для агента:

snmpget -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address 1.3.6.1.2.1.1.1.0

Строка 1.3.6.1.2.1.1.1.0 – это OID, который отвечает за отображение данных сиситемы. В удаленной системе он выведет результат команды uname –a.

На экране появится такой вывод:

SNMPv2-MIB::sysDescr.0 = STRING: Linux agent 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64

Убедившись, что пользователь может пройти аутентификацию, можно создать аккаунт обычного пользователя.

5: Создание обычного пользователя

Привилегии пользователя demo уже указаны в файле snmpd.conf,но пока что этого пользователя не существует. Используйте аккаунт bootstrap в качестве шаблона для нового пользователя.

Перейдите на сервер 1 (менеджер) и создайте пользователя по шаблону с помощью инструмента snmpusm. Общий синтаксис имеет такой вид:

snmpusm authentication_info agent_server_ip_address create new_user existing_user

С помощью шаблона (bootstrap) и флагов вы можете создать пользователя с необходимым уровнем привилегий.

snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address create demo bootstrap

Если все прошло удачно, вы увидите

User successfully created.

Теперь на удалённом сервере есть полностью готовый к работе пользователь demo. Однако пока что он использует те же учётные данные, что и bootstrap. Измените пароль нового пользователя. Выполните аутентификацию как demo и выберите новый пароль (8 символов минимум).

snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address passwd temp_password new_password

Вы должны увидеть:

SNMPv3 Key(s) successfully changed.

Теперь вы можете проверить учётные данные. Для этого нужно запросить у удалённого сервера информацию о том, как давно работает сервер SNMP. Используйте инструмент snmpget, чтобы извлечь одно значение с агента.

Теперь можно использовать загруженные ранее дополнительные определения MIB, чтобы запросить значение по имени, а не по ID его OID.

snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0

Команда сообщит, когда в последний раз перезапускался сервис SNMP:

DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (53309) 0:08:53.09

6: Создание конфигурационного файла клиента

Как видите, параметры аутентификации в командах SNMP почти не меняются . Чтобы не вводить их каждый раз, можно создать конфигурационный файл на стороне клиента, который будет содержать все необходимые учетные данные.

Конфигурационный файл клиента можно разместить в двух разных местах в зависимости от того, насколько широко распространяются его настройки.

Если вы хотите использовать одни учётные данные для всех валидных пользователей на менеджере, вы можете поместить данные в файл snmp.conf (на сервере 1). Откройте его:

sudo nano /etc/snmp/snmp.conf

Если же вы хотите создать учётные данные только для одного пользователя, вы можете создать скрытый каталог .snmp и создать в нём файл (на сервере 1):

mkdir ~/.snmp
nano ~/.snmp/snmp.conf

Вне зависимости от вашего выбора файл будет содержать одни и те же параметры.

Команды для аутентификации вы найдёте в таблице ниже. Справа находятся директивы, которые нужно добавить в snmp.conf.

Флаг Описание Директива для snmp.conf
-u username Имя пользователя SNMPv3, которого нужно аутентифицировать. defSecurityName username
-l authPriv Уровень безопасности аутентификации. defSecurityLevel authPriv
-a MD5 Протокол для аутентификации. defAuthType MD5
-x DES Протокол шифрования defPrivType DES
-A passphrase Пароль для аутентификации. defAuthPassphrase passphrase
-X passphrase Пароль для шифрования. defPrivPassphrase passphrase

С помощью этих данных вы можете составить файл snmp.conf. В нашем случае он выглядит так:

defSecurityName demo
defSecurityLevel authPriv
defAuthType MD5
defPrivType DES
defAuthPassphrase new_password
defPrivPassphrase new_password

Сохраните и закройте файл.

Теперь вы можете выполнять команды без параметров аутентификации. Нужно ввести только команду SNMP, хост и аргументы команды.

Вместо этого:

snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0

теперь можно вводить это:

snmpget agent_server_ip_address sysUpTime.0

Теперь команды стали значительно короче.

7: Удаление пользователя

Пользователь bootstrap был нужен как шаблон для создания других пользователей. Теперь его можно удалить.

Перейдите на сервер 2 (агент) и откройте /etc/snmp/snmpd.conf.

sudo nano /etc/snmp/snmpd.conf

Найдите и закомментируйте (или совсем удалите) строки с параметрами пользователя bootstrap.

...
#createUser bootstrap MD5 temp_password DES
#rwuser bootstrap priv
...

Сохраните и закройте файл.

Перезапустите SNMP.

sudo service snmpd restart

Теперь в файле snmpd.conf нет директив createUser. Привилегии пользователя также будут сброшены.

Чтобы полностью удалить пользователя bootstrap из usmUserTable, запустите на менеджере:

snmpusm agent_server_ip_address delete bootstrap

Вы получите такой вывод:

User successfully deleted.

Заключение

Теперь у вас есть рабочая установка клиент- сервер SNMP. Вы можете установить демон на другие хосты и добавить их в инфраструктуру.

Читайте также: Управление и мониторинг сервера с помощью инструментов Net-SNMP

Tags: , ,