Автор выбрал Internet Archive для получения пожертвования в рамках программы Write for DOnations.
Большую часть рабочего времени системный администратор посвящает сбору точной информации о ваших серверах и инфраструктуре. Существует ряд инструментов и опций для сбора и обработки данных такого типа. Многие из них опираются на технологию, которая называется SNMP.
SNMP — это простой протокол сетевого управления (simple network management protocol). Это протокол, который серверы используют для обмена информацией о своем текущем состоянии и который также используется в качестве канала, через который администратор может изменять предварительно установленные значения. Хотя сам протокол очень легкий, структура программ, реализующих SNMP, может очень быстро приобретать большую сложность. Дополнительную информацию об основах протокола SNMP см. в нашей статье Знакомство с SNMP.
С помощью этого руководства вы сможете настроить инструменты для коммуникации, использующие SNMP. Вы будете использовать два сервера Ubuntu 18.04 в демонстрационных целях. Один сервер будет содержать менеджер SNMP, который будет взаимодействовать с агентом для реализации сетевых устройств. Он будет называться сервером менеджера. На другом сервере будет размещаться агент SNMP, который будет выполнять указания, получаемые от менеджера сервера. Он будет называться сервером агента. Вы можете установить агента на сервере менеджера, но рекомендуется разделять их, что упрощает процесс демонстрации того, какой функционал предоставляет каждый компонент.
Для данного обучающего руководства вам потребуется следующее:
ufw
.Вы можете начать изучение того, как SNMP можно реализовать в системе, установив демон и инструменты на ваши сервера Ubuntu.
Из вашего локального компьютера выполните вход на сервер менеджера с помощью вашего пользователя без прав root:
- ssh your_username@manager_server_ip_address
Обновите индекс пакетов для менеджера пакетов APT:
- sudo apt update
Затем установите программное обеспечение SNMP:
- sudo apt install snmp snmp-mibs-downloader
Пакет snmp
предоставляет набор инструментов командной строки для отправки запросов SNMP агентам. Пакет snmp-mibs-downloader
поможет установить файлы информационной базы управления (MIB), которая отслеживает сетевые объекты, и управлять ими.
Затем откройте новый терминал на вашем локальном компьютере и выполните вход на сервер агента:
- ssh your_username@agent_server_ip_address
На сервере агента обновите индекс пакетов:
- sudo apt update
Затем установите демон SNMP.
- sudo apt install snmpd
Обратите внимание, что вам не нужен пакет snmp-mibs-downloader
, так как сервер агента не будет управлять файлами MIB.
Теперь, когда вы установили эти компоненты, вы сможете перейти к настройке вашего сервера менеджера.
Как упоминалось ранее, большая часть работы выполняется на сервере агента, поэтому ваша конфигурация сервера менеджера будет задействована в меньшей мере. Вам нужно изменить один файл, чтобы гарантировать, что инструменты SNMP смогут использовать дополнительные данные MIB, установленные вами.
На вашем сервере менеджера откройте файл /etc/snmp/snmp.conf
в текстовом редакторе, используя привилегии sudo. В этом обучающем руководстве мы будем использовать nano
:
- sudo nano /etc/snmp/snmp.conf
В этом файле есть несколько комментариев и одна незакомментированная строка. Чтобы позволить менеджеру импортировать файлы MIB, закомментируйте строку mibs :
:
# 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 :
Сохраните и закройте snmp.conf
, нажав CTRL+X
, Y
, а затем нажмите ENTER
, если вы используете nano
.
Вы завершили настройку сервера менеджера, но вам нужно будет использовать этот сервер при настройке вашего сервера агента, которую вы выполните на следующем шаге.
Как элемент настоящей клиент-серверной системы, агент сервер не имеет никаких внешних инструментов, необходимых для собственной настройки SNMP. Вы можете изменить некоторые файлы конфигурации для внесения изменений, но большинство необходимых изменений будут выполнены при подключении к вашему серверу агента из вашего сервера менеджера.
В этом обучающем руководстве вы будете использовать версию 3 протокола SNMP. В отличие от версии 1 и 2 протокола SNMP, в версии 3 каждое сообщение содержит параметры безопасности в зашифрованном виде. На этом шаге вы выполните настройку аутентификации и правил контроля доступа SNMPv3.
Для начала откройте на вашем сервере агента файл конфигурации демона с привилегиями sudo:
- 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), а также предоставить фразу-пароль, которая должна быть длиной не менее восьми символов. Если вы планируете использовать шифрование при передаче, как в данном руководстве, вы должны указать протокол конфиденциальности (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 можно получить в статье Настройка брандмауэра с UFW в Ubuntu 18.04.
Теперь, когда сервер агента настроен, вы можете подключиться к вашему серверу агента из сервера менеджера для проверки подключения.
На этом шаге вы выполните тест, чтобы убедиться, что вы можете подключиться к серверу агента с помощью учетной записи bootstrap. Однако перед этим в этом обучающем руководстве мы кратко расскажем об общей структуре отправки команды SNMP.
При использовании набора инструментов из пакета snmp
(программный набор net-snmp
) существует несколько паттернов, которые вы должны использовать при вызове команд. В первую очередь необходимо выполнить аутентификацию с помощью демона SNMP, с которым вы хотите взаимодействовать. Обычно это подразумевает предоставление определенной информации. Как правило, это следующая информация:
-v
: этот флаг используется для указания версии протокола SNMP, которую вы хотите использовать. В этом обучающем руководстве мы будем использовать версию 3.-c
: этот флаг используется, если вы работаете со строками доступа для аутентификации в стиле, используемом в версиях 1 и 2 протокола SNMP. Поскольку вы используете аутентификацию с помощью пользователя в стиле версии 3, вам не нужно использовать этот флаг.-u
: этот параметр используется для указания имени пользователя, которого вы будете использовать для аутентификации. Для чтения или изменения с помощью SNMP необходимо выполнять аутентификацию с помощью известного имени пользователя.-l
: этот флаг используется для определения уровня безопасности, который вы используете при подключении. Возможные значения — noAuthNoPriv
при отсутствии аутентификации и шифрования, authNoPriv
— при наличии аутентификации, но без шифрования, и authPriv
— при использовании аутентификации и шифрования. Имя пользователя, которое вы используете, необходимо настроить в соответствии с уровнем безопасности, который вы указываете, либо аутентификация не будет выполнена.-a
: этот параметр используется для указания протокола аутентификации, который используется. Возможные значения — MD5
или SHA
. Его значение должно соответствовать информации, которая была указана при создании пользователя.-x
: этот параметр используется для указания протокола шифрования, который используется. Возможные значения — DES
или AES
. Его значение должно соответствовать информации, которая была указана при создании пользователя. Это необходимо, если после привилегий пользователя идет priv
, который делает шифрование обязательным.-A
: данный флаг используется для предоставления фразы-пароля аутентификации, которая была указана при создании пользователя.-X
: эта фраза-пароль шифрования, которая была указана при создании пользователя. Если ничего не было указано, но алгоритм шифрования был предоставлен, будет использоваться фраза-пароль аутентификации. Это обязательно, если указан параметр -x
, либо если после привилегий пользователя идет priv
, что говорит о необходимости шифрования.Используя эту информацию, вы можете создать ваши команды. С учетом того, как вы настроили вашего пользователя bootstrap, команды, которые вы будете использовать с этой учетной записью, будут выглядеть следующим образом:
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
на удаленной системе.
Результат будет выглядеть следующим образом:
OutputSNMPv2-MIB::sysDescr.0 = STRING: Linux agent 4.15.0-66-generic #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 x86_64
Теперь, когда вы убедились, что можете выполнять аутентификацию для сервера с запущенным демоном SNMP, вы можете перейти к созданию стандартной учетной записи пользователя.
Хотя вы указали привилегии для учетной записи demo в файле snmpd.conf
, на самом деле вы еще не создали этого пользователя. На этом шаге вы будете использовать пользователя bootstrap в качестве шаблона для вашего нового пользователя. Вам потребуется инструмент snmpusm
, который используется для управления пользователями.
На сервере менеджера вы можете создать пользователя из шаблона с помощью инструмента snmpusm
и следующего общего синтаксиса:
snmpusm authentication_info agent_server_ip_address create new_user existing_user
Используя то, что вы узнали о флагах аутентификации, которые вы должны передавать, и учетную запись, которая у вас уже есть (bootstrap), вы можете создать пользователя, соответствующего привилегиям пользователя, которые вы уже определили (demo).
Итоговая команда будет выглядеть следующим образом:
- snmpusm -u bootstrap -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address create demo bootstrap
Вы получите следующее сообщение:
OutputUser successfully created.
Теперь у вас есть полностью рабочий пользователь с именем demo на сервере агента. Однако он все еще использует ту же информацию для аутентификации, что и учетная запись bootstrap. Для повышения безопасности вы можете изменить пароль на новый. На этот раз вы будете использовать учетную запись demo для аутентификации. Не забывайте, что пароли должны быть не короче восьми символов:
- snmpusm -u demo -l authPriv -a MD5 -x DES -A temp_password -X temp_password agent_server_ip_address passwd temp_password new_password
Вы получите следующее сообщение:
OutputSNMPv3 Key(s) successfully changed.
Вы можете проверить ваши новые учетные данные и пароль, запросив у сервера агента, как долго служба SNMP запущена. Вы будете использовать команду snmpget
для получения одного значения от сервера агента.
На этот раз воспользуйтесь дополнительными определениями MIB, которые вы загрузили, чтобы получить значение по имени, а не по числовому идентификатору OID.
- snmpget -u demo -l authPriv -a MD5 -x DES -A new_password -X new_password agent_server_ip_address sysUpTime.0
Вы получите значение, которое будет отображать последний момент перезапуска удаленного демона SNMP:
OutputDISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (53309) 0:08:53.09
Теперь у вас есть рабочая учетная запись с именем demo. На следующем шаге вы упростите работу с командами SNMP, настроив клиент.
Вы, вероятно, заметили к этому моменту, что данные аутентификации для всех ваших команд SNMP будут оставаться достаточно статичными для каждого запроса. Вместо того, чтобы вводить их каждый раз, вы можете создать файл конфигурации на стороне клиента, который будет содержать учетные данные, которые вы используете для подключения.
Файл конфигурации клиента можно разместить в двух разных местах, в зависимости от того, насколько широкий доступ к нему вы хотите предоставить.
Если вы хотите поделиться учетными данными с любым действительным пользователем на вашем компьютере управления, вы можете указать данные в глобальном файле snmp.conf
на сервере менеджера. Вам потребуется открыть этот файл с привилегиями sudo:
- sudo nano /etc/snmp/snmp.conf
Если вы хотите определить учетные данные аутентификации для вашего пользователя отдельно, вы можете создать скрытую директорию .snmp
в домашней директории вашего пользователя на сервере менеджера и добавить файл в эту директорию:
- mkdir ~/.snmp
- nano ~/.snmp/snmp.conf
Независимо от вашего решения о том, где вы будете размещать конфигурацию, содержимое будет одним и тем же.
Команды, которые вы будете использовать для аутентификации, находятся в следующей таблице. В правом столбце вы можете увидеть названия директив, которые используются для установки данных конфигурации в файле snmp.conf
:
Флаг команды | Описание | Директива snmp.conf |
---|---|---|
-u username |
Имя пользователя SNMP3 для аутентификации. | 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
Как вы можете видеть, это значительно снижает количество информации, необходимой для предоставления в каждом запросе. Далее вы выполните удаление учетной записи bootstrap для укрепления сетевой безопасности.
Теперь, когда ваша стандартная учетная запись настроена корректно, вы можете удалить небезопасную учетную запись bootstrap.
На вашем сервере агента откройте файл /etc/snmp/snmpd.conf
еще раз с привилегиями sudo.
- sudo nano /etc/snmp/snmpd.conf
Найдите и закомментируйте (или удалите) обе строки, которые вы ранее добавили для ссылки на пользователя bootstrap:
...
#createUser bootstrap MD5 temp_password DES
#rwuser bootstrap priv
...
Сохраните и закройте файл.
Теперь перезапустите демон SNMP:
- sudo systemctl restart snmpd
Это позволит выполнить рекомендацию, согласно которой в файле snmpd.conf
должны отсутствовать директивы createUser
. Также это действие удалит привилегии из этого временного пользователя.
Если вы хотите полностью удалить пользователя bootstrap из usmUserTable
, вы можете сделать это, запустив следующую команду из сервера менеджера:
- snmpusm agent_server_ip_address delete bootstrap
Вы получите следующее сообщение:
OutputUser successfully deleted.
К настоящему моменту у вас есть готовая клиент-серверная установка, которая может безопасно передавать данные при помощи протокола SNMP. Теперь вы можете добавить дополнительные демоны на других хостах и настроить доступ к учетной записи для всей инфраструктуры.
Для дальнейшего изучения вы можете использовать наше обучающее руководство Использование набора инструментов Net-SNMP для управления и мониторинга серверов, чтобы узнать больше об инструментах SNMP, о том, как использовать их для получения значений по отдельности или пакетом, а также о том, как изменять данные.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!