Мониторинг SSL сертификатов
Подробное руководство по настройке мониторинга и проверке 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 | chown root\: /etc/zabbix/zabbix_agentd.d/ssl_check.conf |
Копируем папку со скриптом в /etc/zabbix/scripts/. В ней у нас:
- /etc/zabbix/scripts/ssl_check.sh
Не забываем про владельца и права:
1 | chown -R root\: /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 сертификат на разных доменах можно обнаружить по одинаковому серийному номеру. Такой сертификат не имеет смысла мониторить несколько раз.