Мониторинг SSL сертификатов

Мониторинг SSL сертификатов

Roman Bogachev VMware Specialist | Drone Pilot | Traveler

Подробное руководство по настройке мониторинга и проверке SSL сертификатов в Zabbix для администраторов

  • Существенно уменьшено количество файлов. Для работы шаблона достаточно самого шаблона, одного скрипта и одного конфигурационного файла с пользовательскими переменными.
  • Механизм crontab больше не используется для получения данных SSL сертификатов.
  • Добавлена поддержка SSL сертификатов для FTP серверов.
  • Добавлена поддержка SSL сертификатов для SMTP серверов.
  • Добавлена поддержка международных доменных имён (IDN). Например, “пример.рф”.
  • Добавлена возможность указать номер порта.
  • Добавлена возможность указать IP адрес сервера.
  • Добавлена возможность указать название SSL сертификата, которое используется в именах триггеров.
  • Кроме срока действия сертификата отслеживаются дополнительные данные.
  • Все данные сертификата получаются одним запросом, скрипт можно использовать для просмотра данных SSL сертификата из Linux.
  • Мониторинг как внешних, так и локальных сертификатов.
  • Не стал делать проверку валидности сертификата, это требует дополнительного запроса в скрипте. Да и локальные сертификаты, подписанные корпоративным центром сертификации, проверку всё равно не проходят.
  • Тайминги настраиваются в макросах шаблона.
  • И самое главное, список проверяемых SSL сертификатов можно менять в самом шаблоне, он больше не хранится на хосте. Для получения данных SSL сертификатов используется низкоуровневое обнаружение.

По каждому SSL сертификату собирается информация о 13 элементах данных:

Плюс 10 триггеров, отслеживающих срок действия SSL сертификата, смену сертификата, изменение удостоверяющего центра.
Один триггер срабатывает в том случае, если элемент перестаёт получать данные.

Установка шаблона

Скачать шаблон zbx5_ssl_check_v3.zip

Добавляем шаблон к хосту Zabbix.

В качестве хоста я использую сам Zabbix сервер, привязываю шаблон к нему.
На хосте устанавливаю необходимые для работы скрипта пакеты openssl и libidn:

1
yum install openssl libidn.x86_64 -y

Копируем ssl_check.conf в папку с пользовательскими переменными: /etc/zabbix/zabbix_agentd.conf.d/ssl_check.conf.

Не забываем про владельца и права:

1
2
chown root\: /etc/zabbix/zabbix_agentd.d/ssl_check.conf
chmod 644 /etc/zabbix/zabbix_agentd.d/ssl_check.conf

Копируем папку со скриптом в /etc/zabbix/scripts/. В ней у нас:

  • /etc/zabbix/scripts/ssl_check.sh

Не забываем про владельца и права:

1
2
chown -R root\: /etc/zabbix/scripts
chmod a+x /etc/zabbix/scripts/*

Перезапускаем агент и проверяем работу скрипта.

1
systemctl restart zabbix-agent

Список проверяемых SSL сертификатов

Находим шаблон в Configuration → Templates. Я назвал шаблон SSL check.
Переходим в items. Здесь всего один элемент данных под названием SSL domain list. Выбираем вкладку Preprocessing.

Для каждого проверяемого SSL сертификата указывается:

  • {#NAME} — название. Любое название, применяется в именах триггеров. Обязательный параметр.
  • {#DOMAIN} — домен. Можно в формате IDN, например, на кириллице. Обязательный параметр.
  • {#SERVER} — сервер. FQDN или IP адрес. FQDN можно указывать в формате IDN, например, на кириллице. Необязательный параметр, если параметр не указан, то вместо него используется {#DOMAIN}.
  • {#PORT} — номер порта. Необязательный параметр, если параметр не указан, то используется “443”.
  • {#TYPE} — тип запроса. Для сертификатов FTP указывается “ftp“, для web-сертификатов указывается “web“. Если для SMTP серверов не получается использовать “web“, то можно попытаться получить сертификат по “smtp“. Необязательный параметр, если параметр не указан или не распознан, то используется “web“.

В макросах шаблона можно отредактировать периодичность опроса данных:

  • {$SSL_DISCOVERY_PERIOD} — 1h. Периодичность автообнаружения SSL сертификатов.
  • {$SSL_HISTORY_PERIOD} — 180d. Срок хранения истории. У меня не работает, берётся значение из Zabbix. Оставил, вдруг в какй-то из версий будет работать.
  • {$SSL_NODATA_PERIOD} — 1d. Когда поднимать панику, если данных SSL сертификата нет.
  • {$SSL_REQUEST_PERIOD} — 6h. Периодичность опроса SSL сертификатов.
  • {$SSL_TREND_PERIOD} — 180d. Срок хранения трендов.

Примечание

  • Если приходится часто проверять данные SSL сертификатов, то можно вынести скрипт на отдельный хост.
  • Если домены не входят в один JSON, то можно сделать несколько шаблонов с разными именами и разным набором проверяемых SSL сертификатов.
  • Данные исключённых из списка SSL сертификатов удаляются через 30 дней согласно правилам низкоуровневого обнаружения LLD.
  • Триггеры, отслеживающие срок действия SSL сертификата, настроены на 30, 14, 7, 1, 0- дней.
  • Значение $SSL_NODATA_PERIOD} должно превышать {$SSL_REQUEST_PERIOD}, иначе сработает триггер, отслеживающий отсутствие данных SSL сертификата.
  • Один и тот же SSL сертификат на разных доменах можно обнаружить по одинаковому серийному номеру. Такой сертификат не имеет смысла мониторить несколько раз.