- Zabbix под замком: включаем опции безопасности компонентов Zabbix для доступа изнутри и снаружи
- Пользователь (web-браузер) Zabbix web-сервер
- Zabbix web-сервер База данных Zabbix
- Zabbix-сервер База данных Zabbix
- Zabbix-сервер Zabbix-прокси
- Zabbix-сервер Zabbix-агент и Zabbix-прокси Zabbix-агент
- Zabbix-прокси БД Zabbix-прокси
- Zabbix sender -> Zabbix-прокси и Zabbix-агент -> Zabbix get
- Авторегистрация с шифрованием
- Хранение чувствительной информации в Vault
- Заключение
- Zabbix Documentation 5.2
- Sidebar
- Table of Contents
- 1 Прокси
- Обзор
- Настройка
Zabbix под замком: включаем опции безопасности компонентов Zabbix для доступа изнутри и снаружи
А не пришло ли время разобраться и навести наконец-то порядок с безопасностью в мониторинге? Тем более, в одной из популярных систем мониторинга и встроенная возможность такая имеется.
На схеме видно, что зашифровать можно почти все потоки внутри Zabbix. В этой статье мы расскажем и покажем как это сделать, а еще расскажем о новой интеграции Zabbix с хранилищем секретов Hashicorp Vault. Там можно хранить любую чувствительную информацию от логина/пароля в БД до значений макросов. Это позволит централизованно управлять авторизационными данными, вести аудит и не хранить их на файловой системе или в БД Zabbix. Такой функционал появился в последней (на момент публикации статьи) версии Zabbix 5.2.
Интересный факт: включение шифрования на компонентах Zabbix не требует открытия дополнительных портов на фаерволлах, демоны Zabbiх поддерживают шифрованные и нешифрованные соединения одновременно.
Велкам ту подкат.
В Zabbix есть следующие основные информационные потоки:
- Пользователь (web-браузер) Zabbix web-сервер. Управление конфигурацией Zabbix, представление метрик. Шифрование настраивается средствами web-сервера.
- Zabbix web-сервер Zabbix-сервер. Web-сервер проверяет запущен ли Zabbix-сервер, запрашивает текущее состояние очереди, выполняет тест элементов данных и некоторые другие операции. Единственный поток, который в соответствии с архитектурой Zabbix нельзя зашифровать. Мы даже пытаться не будем.
- Zabbix web-сервер База данных Zabbix. Web-сервер обновляет конфигурацию в БД, извлекает данные для визуализации, удаляет исторические данные (по нажатию на Очистить историю) и запускает задания Выполнить сейчас (Execute now). Можно настроить при установке или позже в файле конфигурации zabbix.conf.php. Поддерживается TLS-шифрование при помощи ключей. Для хранения логина и пароля для БД можно использовать Vault. Важный факт: сертификаты, защищённые паролем не поддерживаются.
- Zabbix-сервер База данных Zabbix. Zabbix-сервер через configuration syncer загружает в свой кэш конфигурацию, через history syncer записывает собранные данные в БД, очищает историю (housekeeping) и выполняет некоторые другие операции. Настройки шифрования выполняются через присваивание значений специальным ключам в конфигурационном файле zabbix_server.conf.
- Zabbix-сервер Zabbix-агент. Поддерживаются общий ключ PSK и сертификаты. Взаимодействие этих компонентов делится на две части: к узлу сети (TLSAccept для пассивных проверок) и от узла сети (TLSConnect для активных проверок).
- Zabbix-сервер Zabbix-прокси. Поддерживаются общий ключ PSK и сертификаты. Настройки выполняются через присваивание значений специальным ключам в конфигурационном файле zabbix_proxy.conf.
- Zabbix-прокси Zabbix-агент. Поддерживаются общий ключ PSK и сертификаты. Взаимодействие этих компонентов делится на две части: к узлу сети (TLSAccept для пассивных проверок) и от узла сети (TLSConnect для активных проверок).
- Zabbix-прокси БД Zabbix-прокси. Настройки выполняются через присваивание значений специальным ключам в конфигурационном файле zabbix_proxy.conf.
- Zabbix sender -> Zabbix-прокси. Поддерживаются общий ключ PSK и сертификаты в качестве параметров при вызове через командную строку.
- Zabbix-агент -> Zabbix get. Поддерживаются общий ключ PSK и сертификаты в качестве параметров при вызове через командную строку.
Пользователь (web-браузер) Zabbix web-сервер
Шифрование этой коммуникации не поддерживается со стороны Zabbix, нужно самостоятельно выполнить настройку на стороне Apache или Nginx. В этой статье мы рассмотрим настройку Nginx с самоподписанным SSL-сертификатом, т.к. преимущественно используем именно Nginx в своих проектах по мониторингу на базе Zabbix. Можно использовать сертификат доверенного центра сертификации, например, бесплатный от Let’s Encrypt. Это позволит избежать страшных предупреждений в браузере. Обращаем внимание, что использование самоподписанного сертификата никак не умаляет надежности шифрованного соединения, оно будет таким же защищённым как и при использовании сертификата от доверенного CA.
В браузере появится «замочек» и можно посмотреть детали сертификата. Соединение зашифровано.
Zabbix web-сервер База данных Zabbix
Перед началом настройки на стороне Zabbix, в БД должны быть созданы пользователи и роли с атрибутами, требующими шифрованное подключение.
Вызов статуса вернет, в том числе, данные по настройкам шифрования. Убедимся, что в строке SSL указаны алгоритмы шифрования.
Настройку шифрования между Zabbix и базой данных можно выполнить сразу при первичной настройке Zabbix через web-интерфейс. Обратите внимание на подпись напротив Database TLS encryption. Из-за того, что для подключения к локальной БД используется socket file, нет возможности настроить шифрованное подключение. Поэтому в поле Хост базы данных должны быть указаны IP-адрес или имя сервера с БД.
Меняем localhost на IP-адрес сервера и появляется чекбокс.
На двух скриншотах выше можно увидеть нововведение в Zabbix версии 5.2 — поддержку интеграции с хранилищем Vault. Перед началом настройки Zabbix мы создали пару ключей и учетными данными для подключения к БД.
Берем клиентские ключи MySQL, заполняем необходимые поля и нажимаем Далее.
Другой способ настроить то же самое — соответствующие ключи в конфигурационном файле zabbix.conf.php.
$DB[‘ENCRYPTION’] = true;
$DB[‘KEY_FILE’] = ‘/etc/ssl/mysql/client-key.pem’;
$DB[‘CERT_FILE’] = ‘/etc/ssl/mysql/client-cert.pem’;
$DB[‘CA_FILE’] = ‘/etc/ssl/mysql/ca.pem’;
$DB[‘VERIFY_HOST’] = true;
$DB[‘CIPHER_LIST’] = »;
Zabbix-сервер База данных Zabbix
На предыдущем шаге мы уже создали пользователя для подключения, клиентские ключи для подключения тоже есть. Осталось прописать эти данные в конфигурационный файл Zabbix-сервера.
DBTLSConnect=required
DBTLSCAFile=/etc/ssl/mysql/ca.pem
DBTLSCertFile=/etc/ssl/mysql/client-key.pem
DBTLSKeyFile=/etc/ssl/mysql/client-cert.pem
DBTLSCipher=»
После выполненных настроек, необходима перезагрузка службы Zabbix-сервера. Логин и пароль для подключения Zabbix-сервера к БД мы также храним в Vault.
Использование Vault требует добавления значений к следующим переменным в конфигурации Zabbix-сервера:
VaultDBPath=kv/secret/zabbix
VaultToken=s.Ev50RnGXNM3FmmcVBMRrR4Nz
VaultURL=http://192.168.56.101:8200
Переменная VaultDBPath отвечает за хранение учетных данных для подключения к БД. Подробнее о шифровании подключений к БД можно узнать в документации Zabbix.
Zabbix-сервер Zabbix-прокси
Как многие пользователи Zabbix знают, в системе существует два типа подключений для передачи метрик: пассивные и активные. Пассивные подразумевают запрос к источнику данных, а активные – отправку данных от источника вне зависимости запроса приемника. Аналогичным образом, соединение между сервером и прокси могут быть пассивными или активными. На скриншоте ниже настроен активный прокси, соединение, с которым зашифровано по технологии PSK.
Обратите внимание, что исходящие соединения (пассивные) могут выполняться каким-то одним способом на выбор, а для входящих доступны комбинации вариантов: без шифрования, PSK или сертификат.
На стороне прокси все настройки выполняются в конфигурационном файле. Для активных проверок:
TLSConnect=psk
TLSPSKIdentity=test_zabbix
TLSPSKFile=/var/zabbix/agentd.psk
Для пассивных проверок:
TLSAccept=psk
TLSPSKIdentity=test_zabbix
TLSPSKFile=/var/zabbix/agentd.psk
Второй способ шифрования подключения – использование сертификатов. Заметим, что для pre-shared key (PSK) и сертификатов, закрытый ключ хранится на файловой системе в открытом виде.
Подробная информация доступна в документации Zabbix.
Zabbix-сервер Zabbix-агент и Zabbix-прокси Zabbix-агент
Мы не будем повторяться, настройка этих соединений аналогична настройке соединения сервера с прокси: для исходящих соединений доступен один вариант, для входящих один или несколько.
Названия переменных для настройки шифрования на стороне агента полностью аналогичны переменным в конфигурации прокси.
Zabbix-прокси БД Zabbix-прокси
Подход к настройке аналогичен настройке шифрованного соединения между Zabbix-сервером и БД. Названия переменных такие же, указываются в конфигурационном файле Zabbix-прокси.
Zabbix sender -> Zabbix-прокси и Zabbix-агент -> Zabbix get
Шифрование соединения с утилитами Zabbix sender и Zabbix get выполняется при помощи специальных параметров при вызове соответствующих утилит.
zabbix_sender -z 127.0.0.1 -s zabbix02 -k Encrypt -o 18 —tls-connect psk —tls-psk-identity «test_zabbix» —tls-psk-file /etc/zabbix/keys/agent.psk
zabbix_get -s 127.0.0.1 -k agent.version \
—tls-connect psk —tls-psk-identity «test_zabbix» —tls-psk-file /etc/zabbix/keys/agent.psk
Авторегистрация с шифрованием
Шифрование также поддерживается и для процесса авторегистрации.
После авторегистрации нового узла, настройки соединения с ним будут автоматически настроены на использование шифрования PSK.
Хранение чувствительной информации в Vault
Приятное нововведение, которое появилось в версии Zabbix 5.2 — поддержка хранилища Vault. Его можно использовать как для хранения учетных данных для доступа к БД так и для значений макросов. Так значения макросов выглядят в Vault:
А так на них можно сослаться в интерфейсе Zabbix:
Хранение значений макросов очень сильно упрощает управление учетными данными для разных шаблонов, позволяет легко отзывать учетные данные и вести аудит. Разумеется, из Vault можно брать значения любых макросов и это добавляет ещё одну степень свободы при автоматизации мониторинга в Zabbix.
Заключение
В статье мы рассказали о возможностях шифрования в Zabbix. Перед решением об использовании шифрованных подключений, важно понимать, что это снижает производительность системы мониторинга и сильнее утилизирует аппаратное обеспечение. Без понятной причины шифрование использовать не стоит.
Мы давно и успешно работаем с Zabbix, если у вас есть задачи по развитию, сопровождению или обновлению системы, оставьте заявку через форму обратной связи или свяжитесь другим удобным способом.
А ещё можно почитать:
Для обработки событий от Zabbix, Prometheus, Elastic и других систем рекомендуем использовать Amixr (презентация по запросу).
Zabbix Documentation 5.2
Sidebar
Table of Contents
1 Прокси
Обзор
Zabbix прокси может собирать данные о производительности и доступности от имени Zabbix сервера. Таким образом, прокси может взять на себя некоторую часть нагрузки по сбору данных и разгрузить Zabbix сервер.
Кроме того, использование прокси это самый простой способ осуществления централизованного и распределенного мониторинга, когда все агенты и прокси отчитываются перед одним Zabbix сервером и все данные собираются в централизованном порядке.
Zabbix прокси можно использовать для:
Прокси требует только одно TCP соединение к Zabbix серверу. Таким образом, будет проще настроить обход брандмауэра, вам потребуется настроить только одно правило в брандмауэре.
Все данные собранные прокси, перед отправкой их серверу, хранятся локально. Таким образом, данные не теряются из-за временных проблем со связью с сервером. Параметры ProxyLocalBuffer и ProxyOfflineBuffer в файле конфигурации прокси управляют как долго данные будут храниться локально.
Zabbix прокси — коллектор данных. Он не вычисляет триггеры, не обрабатывает события и не отправляет оповещения. Для обзора возможностей прокси, просмотрите следующую таблицу:
Функция | Поддержка прокси | |
---|---|---|
Элементы данных | ||
Проверки через Zabbix агент | Да | |
Проверки через Zabbix агент (активный) | Да 1 | |
Простые проверки | Да | |
Элементы данных траппера | Да | |
SNMP проверки | Да | |
SNMP трапы | Да | |
IPMI проверки | Да | |
JMX проверки | Да | |
Мониторинг файлов журналов | Да | |
Внутренние проверки | Да | |
Проверки через SSH | Да | |
Проверки через Telnet | Да | |
Внешние проверки | Да | |
Зависимые элементы данных | Да 2 | |
Встроенный веб-мониторинг | Да | |
Обнаружение сети | Да | |
Низкоуровневое обнаружение | Да | |
Удаленные команды | Да | |
Вычисление триггеров | Нет | |
Обработка событий | Нет | |
Корреляция событий | Нет | |
Отправка оповещений | Нет | |
Предобработка значений элементов данных | Нет |
Настройка
Если у вас есть установленный и настроенный прокси, то самое время настроить его в веб-интерфейсе Zabbix.
Добавление прокси
Для настройки прокси в веб-интерфейсе Zabbix:
Параметр | Описание | |
---|---|---|
Имя прокси | Введите имя прокси. Оно должно совпадать с именем параметра Hostname в файле конфигурации прокси. | |
Режим прокси | Выберите режим прокси. Активный — прокси будет подключаться к Zabbix серверу и запрашивать данные конфигурации Пассивный — к прокси будет подключаться Zabbix сервер Обратите внимание, что (деликатные) данные конфигурации могут стать доступны лицам, имеющим доступ к порту траппера Zabbix сервера, при использовании активного прокси. Такое возможно потому что, кто угодно может представиться активным прокси и запросить данные конфигурации, если аутентификация не выполняется или адреса прокси не ограничены в поле Адрес прокси. | |
Адрес прокси | Если задано значение, тогда запросы активного прокси принимаются только из этого списка разделенных запятыми IP адресов, опционально в CIDR нотации, или DNS имён активного Zabbix прокси. Это поле доступно только, если выбран активный прокси в поле Режим прокси. Макросы не поддерживаются. Эта опция поддерживается начиная с Zabbix 4.0.0. | |
Интерфейс | Укажите детали интерфейса пассивному прокси. Это поле доступно только, если в поле Режим прокси выбран пассивный прокси. | |
IP адрес | IP адрес пассивного прокси (опционально). | |
DNS имя | DNS имя пассивного прокси (опционально). | |
Подключение через | Нажав соответствующую кнопку, вы сообщите Zabbix серверу что использовать для получения данных с прокси: IP — Подключение к прокси по IP адресу (рекомендуется) DNS — Подключение к прокси по DNS имени | |
Порт | Номер TCP/UDP порта пассивного прокси (по умолчанию 10051). | |
Описание | Введите описание прокси. |
Вкладка Шифрование позволяет вам требовать шифрованных соединений с прокси.
Параметр | Описание |
---|---|
Подключения к прокси | Каким образом сервер подключается к пассивному прокси: без шифрования (по умолчанию), используя PSK (pre-shared key) или сертификат. |
Соединения с прокси | Выберите какой тип подключений разрешен с активного прокси. Можно выбрать несколько типов соединений одновременно (полезно при тестировании и переключении на другой тип соединения). По умолчанию — “Без шифрования”. |
Издатель | Разрешенный эмитент сертификата. Сертификат сначала подтверждается CA (центром сертификации). Если он действительный, подписан с помощью CA, тогда можно использовать поле Издатель для более строго ограничения разрешенных CA. Это поле опционально, предназначено для использования, если ваша Zabbix инсталляция использует сертификаты от нескольких CA. |
Тема | Разрешенная тема сертификата. Сертификат сначала подтверждается CA. Если он действительный, подписан с помощью CA, тогда можно использовать поле Тема, чтобы разрешить только одно значение строки Тема. Если поле пустое, тогда принимается любой сертификат, подписанный настроенным CA. |
Идентификатор PSK | Строка идентификации pre-shared key. |
PSK | Pre-shared key (строка в шестнадцатеричном формате). Максимальная длина: 512 шестнадцатеричных цифр (256-байт PSK), если Zabbix использует библиотеки GnuTLS или OpenSSL, 64 шестнадцатеричных цифр (32-байт PSK), если Zabbix использует библиотеку mbed TLS (PolarSSL). Пример: 1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952 |
Настройка узлов сети
Вы можете указать какие конкретно узлы сети должны наблюдаться через прокси в диалоге настройки узла сети, используя поле Наблюдение через прокси.
Массовое обновление узлов сети является еще одним способом, указать, что узлы сети должны наблюдаться через прокси.