Перейти к основному содержанию

Zabbix — мониторинг SSL сертификатов (3)

Zabbix

Вчера дописал третью версию шаблона для мониторинга SSL сертификатов. Первая версия шаблона не сохранилась, потому как была слишком примитивная. Вторую версию можно найти здесь:

Zabbix — срок действия SSL сертификата

В новой версии шаблона учёл комментарии посетителей, пожелания коллег, собственные задумки, недостатки имеющихся шаблонов и здравый смысл. Получилось следующее:

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

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

ssl

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

ssl

Примеры сработавших триггеров:

ssl

ssl

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

Скачать шаблон для Zabbix 5.0: zbx5_ssl_check_v3.zip

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

apt-get install openssl
apt-get install idn

Копируем ssl_check.conf в папку с пользовательскими переменными, у меня это /etc/zabbix/zabbix_agentd.conf.d/ssl_check.conf. Не забываем про владельца и права:

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

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

  • /etc/zabbix/scripts/ssl_check.sh

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

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

Перезапускаем агент:

service zabbix-agent restart

Можно проверить работу скрипта:

cd /etc/zabbix/scripts
./ssl_check.sh "SSL internet-lab.ru" "internet-lab.ru" "" "443" "web" 

ssl

Импортируем шаблон zbx5_ssl_check.xml.

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

  • {$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

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

Находим шаблон в Configuration → Templates. Я назвал шаблон SSL check.

ssl

Переходим в items. Здесь всего один элемент данных под названием SSL domain list.

ssl

Кликаем по нему.

ssl

Выбираем вкладку Preprocessing.

ssl

Здесь один шаг препроцессинга JavaScript. Нажимаем на его параметр.

ssl

А вот и список SSL сертификатов в формате JSON. Здесь его можно отредактировать и указать свой список. Формат списка:

var DomainList = { 
"data": [
  {
    "{#NAME}": "SSL internet-lab.ru",
    "{#DOMAIN}": "internet-lab.ru",
    "{#SERVER}": "",
    "{#PORT}": "443",
    "{#TYPE}": "web"
  },
  {
    "{#NAME}": "FTP SSL Intel",
    "{#DOMAIN}": "ftp.intel.com",
    "{#SERVER}": "",
    "{#PORT}": "21",
    "{#TYPE}": "ftp"
  },
  {
    "{#NAME}": "SMTP SSL mail.example.com",
    "{#DOMAIN}": "mail.example.com",
    "{#SERVER}": "",
    "{#PORT}": "25",
    "{#TYPE}": "smtp"
  },
  {
    "{#NAME}": "SSL испытание.рф",
    "{#DOMAIN}": "испытание.рф",
    "{#SERVER}": "",
    "{#PORT}": "",
    "{#TYPE}": ""
  }
] };
return JSON.stringify(DomainList)

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

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

Примечание

Если приходится часто проверять данные SSL сертификатов, то можно вынести скрипт на отдельный хост.

Если домены не входят в один JSON, то можно сделать несколько шаблонов с разными именами и разным набором проверяемых SSL сертификатов.

Данные исключённых из списка SSL сертификатов удаляются через 30 дней согласно правилам низкоуровневого обнаружения LLD.

Триггеры, отслеживающие срок действия SSL сертификата, настроены на 30, 14, 7, 1, 0- дней.

Значение {$SSL_NODATA_PERIOD} должно превышать {$SSL_REQUEST_PERIOD}, иначе сработает триггер, отслеживающий отсутствие данных SSL сертификата.

Один и тот же SSL сертификат на разных доменах можно обнаружить по одинаковому серийному номеру. Такой сертификат не имеет смысла мониторить несколько раз.

Теги

 

Похожие материалы

Zabbix — срок действия SSL сертификата (2)

Сегодня напишем скрипт для мониторинга срока действия SSL сертификатов наших сайтов. Этот мониторинг пригодится многим. Системным администраторам в крупных компаниях, чтобы не пропустить момент перевыпуска сертификатов. Особенно, если количество сайтов — сотни. Владельцам собственных сайтов. Многие пользуются сервисом Let's Encrypt, особенностью сертификатов которого является короткий срок жизни. Если автоматика обновления сертификатов выйдет из строя, то мониторинг SSL сертификатов поможет выявить проблему до того, как она себя проявит.

Теги