ADG Оставить заявку
Блог Системное администрирование 4 мин чтения

Zabbix 3.0 LTS: мигрируем с 2.4 и включаем шифрование агентов через TLS

Обновляем Zabbix 2.4 до 3.0 LTS: встроенное TLS-шифрование трафика между агентами и сервером закрывает давнюю дыру. Разбираем миграцию шаблонов и конфигурацию PSK.

Контекст момента

Zabbix 3.0 LTS вышел в феврале 2016 с новым UI, встроенным шифрованием трафика через TLS/PSK между агентами и сервером, и переработанным механизмом auto-discovery

В феврале вышел Zabbix 3.0 LTS. Мы подождали, пока уляжется первая волна патчей после релиза, и в начале апреля начали переводить парк клиентских серверов с 2.4. Главный повод был не UI и не новые виджеты на дашборде - а встроенное шифрование трафика между агентами и сервером. Без него Zabbix всегда немного раздражал: агент гонит метрики по сети открытым текстом, и любой в том же сегменте может это читать.

Почему раньше не шифровали

В Zabbix 2.4 варианта было два: либо смириться с открытым трафиком, либо заворачивать всё в stunnel - отдельный процесс, который шифрует TCP-поток перед передачей. Мы пробовали stunnel на паре установок. Работает, но это отдельный демон, отдельная конфигурация, отдельные точки отказа. На 5 серверах - ладно. На 40 - операционная нагрузка начинает раздражать. В итоге у большинства клиентов на сопровождении шифрования не было вообще.

В Zabbix 3.0 TLS встроен в агент и сервер напрямую. Поддерживается два режима: сертификаты (PKI) и pre-shared keys (PSK). Для большинства установок PSK - это разумный выбор: не нужен CA, проще операционно, ключ можно сгенерировать за минуту.

Что проверили перед обновлением

Прямого пути «apt-get upgrade zabbix-server» нет - схема базы данных между 2.4 и 3.0 менялась, нужен последовательный прогон SQL-скриптов миграции. Zabbix документирует это, но в нескольких местах без необходимой детализации.

Чек-лист перед началом:

  • Резервная копия базы данных. Обязательно, не опционально. У нас mysqldump перед стартом, файл сохраняем отдельно от штатных бэкапов.
  • Версия PHP. Zabbix 3.0 требует PHP 5.4+. На CentOS 6 со стандартным PHP 5.3 фронтенд не поднимется. На CentOS 7 или Ubuntu 14.04 с нормальными пакетами всё чисто.
  • Версия агентов. Агенты 2.4 работают с сервером 3.0 без TLS - совместимость снизу вверх сохраняется. Это важно: можно обновить сервер, а агентов катить постепенно.

Сама миграция базы

Zabbix поставляет скрипты апгрейда схемы в /usr/share/doc/zabbix-server-mysql/. Для перехода с 2.4 на 3.0 нужен один файл - upgrade_2.4_3.0.sql. Запускается от имени пользователя zabbix-базы:

mysql -u zabbix -p zabbix < /usr/share/doc/zabbix-server-mysql/upgrade_2.4_3.0.sql

Скрипт занимает от нескольких секунд до нескольких минут в зависимости от объёма истории. На одной установке с историей за два года занял около семи минут - просто нужно подождать, не прерывать.

После этого - обновить пакеты сервера и фронтенда, запустить сервер, проверить /var/log/zabbix/zabbix_server.log на наличие ошибок.

Включаем PSK-шифрование

Генерируем ключ:

openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk
chmod 640 /etc/zabbix/zabbix_agentd.psk
chown root:zabbix /etc/zabbix/zabbix_agentd.psk

В конфиг агента (/etc/zabbix/zabbix_agentd.conf) добавляем три строки:

TLSConnect=psk
TLSAccept=psk
TLSPSKFile=/etc/zabbix/zabbix_agentd.psk
TLSPSKIdentity=имя_хоста_psk

На стороне сервера - в веб-интерфейсе, в настройках хоста, вкладка Encryption: выставить PSK для Connections to host и Connections from host, ввести PSK Identity и значение ключа из файла.

После рестарта агента трафик идёт зашифрованным. Проверить просто - поднять tcpdump на интерфейсе и убедиться, что данные нечитаемы:

tcpdump -i eth0 -A port 10050 | head -50

Вместо system.cpu.load[all,avg1] и числовых значений - TLS-хендшейк и зашифрованные данные. Работает.

Миграция шаблонов

Это самая неприятная часть обновления. В Zabbix 3.0 изменилось несколько вещей в шаблонах: переименованы некоторые стандартные items, изменился формат низкоуровневого discovery (LLD) для отдельных ключей. Если шаблоны стандартные (из поставки Zabbix), они обновляются через импорт новых XML - просто скачать с zabbix.com и загрузить через интерфейс.

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

  • Для части проверок, где раньше использовался net.tcp.port, в 3.0 правильнее net.tcp.listen - они делают разные вещи, и шаблон нужно выровнять вручную.
  • В LLD-правилах изменился формат возврата JSON для некоторых встроенных discovery-ключей.

Чинили через экспорт шаблона в XML, правку текстом и импорт обратно. Полчаса работы, но это нужно делать руками - автоматического конвертера нет.

Новый интерфейс

UI действительно переписали - стал заметно чище. Dashboard с виджетами теперь можно кастомизировать без правки файлов. Карты сети в Map стали более читаемыми. Но это приятное дополнение, а не причина обновляться.

Причина обновляться - TLS. Открытый мониторинг-трафик в 2016 году, после всего что произошло с DROWN в феврале и всего разговора про шифрование инфраструктурных каналов - это уже не ок.

Сейчас перевели около половины установок. Остальные идут по мере следующих плановых окон обслуживания - с теми, у кого windows-агенты, нужно дополнительно проверить совместимость Zabbix Windows Agent 3.0 с конкретными конфигурациями, там пара нюансов по путям к PSK-файлу.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.