Мониторинг срока действия ssl сертификата в zabbix

У меня время от времени возникают ситуации, когда я пропускаю обновление какого-нибудь ssl сертификата. Особенно часто это стало происходить с повсеместным распространением сертификатов на 3 месяца от letsencrypt. Автоматическое продление иногда не срабатывает по различным причинам. Чтобы защитить себя от таких ситуаций, решил настроить полноценный мониторинг ssl сертификатов с помощью zabbix.

Онлайн-курс по устройству компьютерных сетей

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Введение

Традиционно, буду использовать самые простые подручные средства, завернутые в консольные скрипты, которые будут передавать значения в zabbix с помощью UserParameter. Для уменьшения ручной работы, добавление доменов в систему мониторинга будет осуществляться с помощью автообнаружения. Сами списки доменов с сертификатами ssl для проверки будут храниться в текстовых файлах.

У нас будут 2 отдельных списка для проверки:

  1. Домены с ssl сертификатами для веб сайтов.
  2. Домены с ssl сертификатами для почтовых серверов.

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

Если у вас еще нет готового сервера для мониторинга, предлагаю его настроить по моей статье - установка и настройка zabbix 3.4 на Centos 7. Если предпочитаете Debian, то вот материал на эту тему - установка и настройка zabbix 3.4 на Debian 9. В данном случае все можно сделать на одном сервере - достаточно на один сервер поставить zabbix-server и zabbix-agent.

Проверяем средства для мониторинга

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

Для начала просто запросим сертификат сайта и проверим вывод:

# openssl s_client -connect serveradmin.ru:443 -servername serveradmin.ru -tlsextdebug

Вы должны увидеть служебную информацию по ssl сертификату и сам сертификат. Обращаю внимание на параметр -servername. После него указано имя домена. У вас может быть ситуация, когда на одном ip хостятся несколько сайтов. Параметр -connect фактически указывает только на ip адрес сайта. Если не указать отдельно имя домена через -servername, то команда вернет сертификат первого домена.

Теперь посмотрим на срок действия сертификата. Для этого вывод предыдущей команды завернем на нее же, но с другими параметрами. Получится вот так:

# openssl s_client -connect serveradmin.ru:443 -servername serveradmin.ru -tlsextdebug 2>/dev/null | openssl x509 -noout -dates 2>/dev/null
notBefore=Jul 11 14:55:00 2017 GMT
notAfter=Oct 9 14:55:00 2017 GMT

На выходе должны увидеть дату создания сертификата и дату завершения его действия. Обработаем этот вывод и оставим только последнюю дату без лишних символов.

# openssl s_client -connect serveradmin.ru:443 -servername serveradmin.ru -tlsextdebug 2>/dev/null | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2
Oct 9 14:55:00 2017 GMT

Получаем то, что надо. Именно с этой датой будет работать скрипт для отправки данных в zabbix сервер.

Вот пример похожего запроса, только на smtp сервер:

# openssl s_client -starttls smtp -connect mail.zeroxzed.ru:25 | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2

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

С теорией и подручными средствами разобрались. Переходим к настройке zabbix agent.

Настройка zabbix-agent

Создаем папку для скриптов в директории с настройками zabbix:

# mkdir /etc/zabbix/scripts

Первым делом создадим 2 текстовых файла для хранения списков доменов.

# touch /etc/zabbix/scripts/ssl_https.txt /etc/zabbix/scripts/ssl_smtp.txt

В эти файлы необходимо добавить домены по одному на каждую строку. Дальше добавляем скрипты для автообнаружения этих доменов и передачи в zabbix.

# mcedit /etc/zabbix/scripts/disc_ssl_https.sh
#!/bin/bash

JSON=$(for i in `cat /etc/zabbix/scripts/ssl_https.txt`; do printf "{\"{#DOMAIN_HTTPS}\":\"$i\"},"; done | sed 's/^\(.*\).$/\1/')
printf "{\"data\":["
printf "$JSON"
printf "]}"
# mcedit /etc/zabbix/scripts/disc_ssl_smtp.sh
#!/bin/bash

JSON=$(for i in `cat /etc/zabbix/scripts/ssl_smtp.txt`; do printf "{\"{#DOMAIN_SMTP}\":\"$i\"},"; done | sed 's/^\(.*\).$/\1/')
printf "{\"data\":["
printf "$JSON"
printf "]}"

Делаем эти файлы исполняемыми:

# cd /etc/zabbix/scripts
# chmod 0740 disc_ssl_https.sh disc_ssl_smtp.sh

Для проверки достаточно выполнить один из скриптов. На выходе должен быть вывод списка доменов в формате JSON.

{"data":[{"{#DOMAIN_HTTPS}":"serveradmin.ru"}]}

Если доменов несколько, то они перечисляются через запятую.

Пишем скрипты, которые будут определять, сколько дней осталось до окончания срока действия сертификата. За основу они будут брать ту дату, что мы выводили на предыдущем шаге.

# mcedit /etc/zabbix/scripts/check_ssl_https.sh
#!/bin/bash

SERVER=$1
TIMEOUT=25
RETVAL=0
TIMESTAMP=`echo | date`
EXPIRE_DATE=`echo | openssl s_client -connect $SERVER:443 -servername $SERVER -tlsextdebug 2>/dev/null | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2`
EXPIRE_SECS=`date -d "${EXPIRE_DATE}" +%s`
EXPIRE_TIME=$(( ${EXPIRE_SECS} - `date +%s` ))
if test $EXPIRE_TIME -lt 0
then
RETVAL=0
else
RETVAL=$(( ${EXPIRE_TIME} / 24 / 3600 ))
fi

echo ${RETVAL}
# mcedit /etc/zabbix/scripts/check_ssl_smtp.sh
#!/bin/bash

SERVER=$1
TIMEOUT=25
RETVAL=0
TIMESTAMP=`echo | date`
EXPIRE_DATE=`echo | openssl s_client -starttls smtp -connect $SERVER:25 2>/dev/null | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2`
EXPIRE_SECS=`date -d "${EXPIRE_DATE}" +%s`
EXPIRE_TIME=$(( ${EXPIRE_SECS} - `date +%s` ))
if test $EXPIRE_TIME -lt 0
then
RETVAL=0
else
RETVAL=$(( ${EXPIRE_TIME} / 24 / 3600 ))
fi

echo ${RETVAL}

Делаем скрипты исполняемыми:

# chmod 0740 check_ssl_https.sh check_ssl_smtp.sh

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

# /etc/zabbix/scripts/check_ssl_https.sh serveradmin.ru
66
# /etc/zabbix/scripts/check_ssl_smtp.sh mail.zeroxzed.ru
87

Не забывайте подставлять значения своих доменов, чтобы наверняка быть уверенными в том, что они нормально отдают сертификаты. На выходе у вас должна быть только цифра с количеством дней актуальности ssl сертификата. Больше ничего. Это важно, иначе заббикс сервер будет выдавать ошибку.

Связываем все наши скрипты с самим zabbix.

В данном случае, вы можете расположить скрипты для мониторинга за сертификатами на любом сервере, где есть zabbix agent. Логичнее всего, как мне кажется, все проверки, не привязанные к конкретным хостам, располагать на самом zabbix server.

Создаем файл с расширением конфигурации заббикса:

# mcedit /etc/zabbix/zabbix_agentd.d/ssl.conf

UserParameter=ssl_https.discovery[*],/etc/zabbix/scripts/disc_ssl_https.sh
UserParameter=ssl_https.expire[*],/etc/zabbix/scripts/check_ssl_https.sh $1
UserParameter=ssl_smtp.discovery[*],/etc/zabbix/scripts/disc_ssl_smtp.sh
UserParameter=ssl_smtp.expire[*],/etc/zabbix/scripts/check_ssl_smtp.sh $1

Я еще рекомендую в основном файле /etc/zabbix/zabbix_agentd.conf увеличить параметр Timeout. По-умолчанию, он установлен в значение 3. Если вдруг внешней проверке не хватит трех секунд, чтобы получить информацию о сертификате, итем на сервере будет на некоторое время отключен. Рекомендую увеличить секунд до 10-ти. Хотя сам я обычно всегда этот параметр выставляю в максимальное значение - 30. Я очень часто сталкиваюсь с тем, что забываю про timeout, а потом трачу очень много времени на дебаг ошибок, которые возникают в связи с этим. Так что я взял за правило всегда увеличивать таймаут сразу после установки и во время первоначальной настройки агента.

Сохраняем все конфиги. Делаем пользователя zabbix владельцем всех наших скриптов. Это важно, так как если этого не сделать, то проверка в консоли будет успешно отрабатывать, а на самом сервере вы увидите ошибку item not supported и потратите какое-то время, пока не поймете, почему она появляется.

# chown -R zabbix. /etc/zabbix/scripts

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

# systemctl restart zabbix-agent

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

# zabbix_agentd -t ssl_https.discovery
ssl_https.discovery [t|{"data":[{"{#DOMAIN_HTTPS}":"serveradmin.ru"}]}]
# zabbix_agentd -t ssl_https.expire[serveradmin.ru]
ssl_https.expire[serveradmin.ru] [t|66]

Все работает так как и должно. Теперь можно переходить на сервер.

Настройка zabbix server для мониторинга ssl сертификатов

На самом деле, тут вам ничего настраивать не придется, потому что я уже все настроил и предлагаю скачать готовый шаблон. Он создан и протестирован на версии сервера 3.2. Скорее всего он будет работать практически на всех версиях, так как разработчики следят и стараются поддерживать совместимость шаблонов между версиями, за что им большое спасибо.

Ссылка на скачивание шаблона - ssl_cert_expiration.xml

Импортируйте этот шаблон себе на сервер.

Импорт шаблона в zabbix

Прикрепляйте этот шаблон к тому хосту, где вы настраивали скрипты и zabbix-agent. Дальше вам остается только подождать примерно 5 минут. Такой интервал установлен для автообнарудения.

Список правил автообнаружения хостов с ssl сертификатами

Если вам не нужно мониторить за smtp хостами, то можете отключить smtp автообнаружение и оставить только https. После того, как отработает автообнаружение, в списке итемов вы увидите добавленные домены.

Список созданных итемов

Еще примерно через 5 минут, вы получите информацию о сроке действия сертификатов указанных доменов.

Мониторинг срока действия ssl сертификата

В шаблоне настроен триггер, который срабатывает, если время жизни сертификата становится меньше 30-ти дней. В принципе, этот параметр можно уменьшить и до 10-ти дней. Сейчас продлить сертификат не составляет каких-то проблем. Так что можете этот параметр настраивать по своему желанию.

Я рекомендую отдельно настроить повторяющиеся уведомления для триггеров из текущего шаблона. Сделать интервал раз в день или через день. Сразу скорее всего не будешь заниматься обновлением, так как не срочно. А то, что отложено на потом легко забыть, что со мной не раз случалось.

Возможные ошибки

Самая распространенная ошибка, с которой можно столкнуться - скрипты не работают от системного пользователя zabbix. Причем вы никак не поймете, в чем реально ошибка. Просто на сервере ваши правила обнаружения или итемы с доменами будут отключены с ошибкой item not supported. Для того, чтобы убедиться, что все в порядке, проверьте, как ваши скрипты работают под нужным пользователем.

# sudo -u zabbix /etc/zabbix/scripts/disc_ssl_https.sh
# sudo -u zabbix /etc/zabbix/scripts/check_ssl_https.sh serveradmin.ru

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

Про еще одну одну ошибку я уже сказал ранее. Она связана с параметром timeout. Установите его значение выше стандартных трех секунд.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Таким нехитрым способом можно облегчить себе жизнь. Приобретя немного навыков в работе с zabbix, можно замониторить все, что придет в голову. Собственно, так я обычно и делаю. У меня куча всяких кастомных проверок. Наиболее популярные и востребованные я описываю в своих статьях, которых накопилось уже немалое количество. Все они в соответствующем разделе - Zabbix. Статьи актуальны для всех версий, не устаревают с выходом новых релизов.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Дополнительные материалы по Zabbix

Онлайн-курс по устройству компьютерных сетей.

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Рекомендую полезные материалы по Zabbix:
Настройки системы
  • Установка 4.0
  • Обновление 3.0 -> 3.2
  • Обновление 3.4 -> 4.0
  • Установка Zabbix Proxy
  • Работа на NGINX
Видео и подробное описание установки и настройки Zabbix 4.0, а также установка агентов на linux и windows и подключение их к мониторингу.
Подробное описание обновления системы мониторинга zabbix версии 3.4 до новой версии 4.0.
Пошаговая процедура обновления сервера мониторинга zabbix 2.4 до 3.0. Подробное описание каждого шага с пояснениями и рекомендациями.
Подробное описание установки и настройки zabbix proxy для организации распределенной системы мониторинга. Все показано на примерах.
Подробное описание установки системы мониторинга Zabbix на веб сервер на базе nginx + php-fpm.
Мониторинг служб и сервисов
 
  • Температура процессора
  • Nginx и php-fpm
  • Mysql репликация
  • Службы Linux
  • Рейд mdadm
  • Транки Asterisk
  • Synology
Мониторинг температуры процессора с помощью zabbix на Windows сервере с использованием пользовательских скриптов.
Настройка полноценного мониторинга web сервера nginx и php-fpm в zabbix с помощью скриптов и пользовательских параметров.
Мониторинг репликации mysql с помощью Zabbix. Подробный разбор методики и тестирование работы.
Описание настройки мониторинга tcp служб с помощью zabbix и его инструмента простых проверок (simple checks)
Настройка мониторинга рейда mdadm с помощью zabbix. Подробное пояснение принципа работы и пошаговая инструкция.
Подробное описание мониторинга регистраций транков (trunk) в asterisk с помощью сервера мониторинга zabbix.
Подробная инструкция со скриншотами по настройке мониторинга по snmp дискового хранилища synology с помощью сервера мониторинга zabbix.
Мониторинг различных значений
  • Мониторинг сайта
  • Мониторинг бэкапов
  • Размер бэкапа
  • Делегирование домена
  • Значения из текстового файла
  • Мониторинг логов
Настройка мониторинга web сайта в zabbix. Параметры для наблюдения - доступность сайта, время отклика, скорость доступа к сайту.
Один из способов мониторинга бэкапов с помощью zabbix через проверку даты последнего изменения файла из архивной копии с помощью vfs.file.time.
Подробное описание настройки мониторинга размера бэкапов в Zabbix с помощью внешних скриптов.
Пример настройки мониторинга за временем делегирования домена с помощью Zabbix и внешнего скрипта. Все скрипты и готовый шаблон представлены.
Описание мониторинга лог файлов в zabbix на примере анализа лога программы apcupsd. Отправка оповещений по событиям из лога.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

130 комментариев

  1. Добрый день.

    Реализовал через "Администрирование, скрипты"
    echo | openssl s_client -servername {HOST.NAME} -connect {HOST.NAME}:443 2>/dev/null | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2 | { read gmt ; echo $(( ($(date -d "$gmt" +%s) - $(date +%s)) / 86400 )) ; }

  2. с забикс 7 работает? у меня не появляется ssl итемы триггеры,

  3. Скрипты лежат здесь /usr/lib/zabbix/externalscripts пути поправлены. Однако заббикс версии 6 выдает такую ошибку :

    Invalid discovery rule value: cannot parse as a valid JSON object: invalid object name at: 'data:[{{#DOMAIN_HTTPS}:xxx.xxx.xxx},{{#DOMAIN_HTTPS}:xxx.xxx.xxx},]}'

    • Александр

      на 7 заббиксе работает? к zabbix серверу применил шаблон но ssl итемы триггеры не появляются, файлы все создал

  4. Отлично, а как можно мониторить сертификаты сервера (не сайта) в локальной сети?

  5. Добрый день.

    Может не по теме статьи...
    Сталкивались с такой задачей: при обращении к HTTPS сайту идет запрос сертификата клиента (на уровне TLS соединения). Надо выбрать сертификат в окне браузера или отказаться, после чего сайт открывается и можно делать любые проверки, как самого сертификата, так и содержимого сайта.

    Если решали такую задачу, подтолкните в нужном направлении :) не знаю как обойти запрос сертификата клиента

    • Мне кажется, через Zabbix к такому сайту никак не обратиться. В браузеры приходится всякие расширения ставить, чтобы пройти аутентификацию и получить доступ к сайту. Что уж говорить про Zabbix.

  6. Алексей

    Здравствуйте!
    А не подскажете как правильно настроить чтобы в проблеме выводилась именно дата срока действия сертификата

    • Так сходу не скажу, как сделать. Но в общем случае, чтобы какую-то информацию вывести, нужно, чтобы эта информация была в каком-то айтеме. А потом уже через макрос информацию из айтема можно использовать в заголовке триггера или где-то ещё.

      • Андрей

        обновился с 5х версии zabbix на 6 версию
        данный вариант проверки перестал работать, вернее скрипты отрабатывают как надо но вот шаблон не работает и в списках items нет проверок SSL

      • Андрей

        если есть возможность покажите как создать dashboard для отображения списка срока ssl сертификатов в 6 версии zabbix

        • Буду переделывать все проверки с выходом версии 7.0. Под 6-ю уже нет смысла обновлять статью.

  7. Сергей

    Добрый день, вроде все поставил и отображается в Templates, но вот Items не создаются и в Latest data тоже нечего, использую docker-compose с версией zabbix 6.2.1

  8. Виктор

    Кто может, выложите, пожалуйста, шаблон для 3 версии забикса.

  9. Одной из причин почему ничего не появляется в админке, после действий проделанных в статье, это версия zabbix_agentd 3.0.12. Эта версия обычно ставилась на Ubuntu 18 из пакетов. Проверьте версию своего агента на той машине где вы скалдываете скрипты проверки - "zabbix_agentd -V". На Ubuntu 20 версия заббикса из пакетов 4.0.17, но там я не проверял.
    На zabbix_agentd (daemon) (Zabbix) 6.0.3 работает все как положено.

  10. Евгений

    Спасибо за статью! В zabbix начиная с версии 5.0 появился свой шаблон для проверки сертификата https://www.zabbix.com/ru/integrations/ssl

  11. Спасибо за ваш труд) все с первого раза заводится.

  12. День добрый!
    Всё работало на "ура" до того момента пока не потребовалось исключить один из ранее добавленных сайтов. Убираю его из файла ssl_https.txt, удаляю триггер, но через сутки снова получаю сообщение о проблеме с SSL у этого сайта (в ssl_https.txt этот домен отсутствует). Никак не пойму, откуда он снова может вылезать?

    • Надо сам айтем удалить с этим доменом. По правилам автообнаружения создаются айтемы, которые по умолчанию висят еще 30 дней, после того, как вы удалите его из текстового файла. Это настраивается в самом сервере, можно до одного дня уменьшить, если что. Либо просто руками айтем удалить.

  13. Андрей

    Приветствую, на 4.4 столкнулся с проблемой, что часть триггеров не работает с ошибкой Cannot evaluate expression: "Cannot evaluate function "Zabbix server:ssl_https.expire[www.bb.bb].last()": item is not supported.". Может встречалась такая проблема с этим темплейтом ?

  14. Андрей

    Здравствуйте, если не сложно подскажите пожалуйста какую перемененную можно использовать, чтоб вывести в заголовке проблемы количество дней до истечения сертификата. Напрямую использовать конструкцию Certificate http://www.bbb.com expire less then {Zabbix server:ssl_https.expire[www.bbb.com].last()} days не получается. Спасибо.

  15. Николай

    Одинаковое поведение на двух вариантах серверов.
    Ubuntu 20.04 - Zabbix 5.2 + Nginx + Mysql
    Docker сборка - Zabbix 5.2 + Nginx + Postgresql

    Консольно все успешно отрабатывает, а в админке "Последние данные" нет ни слова про SSL
    Как дебажить если в /var/log/zabbix/[agent/server] нет ничего касаемо SSL

    • Скрипты нужно бросить в /usr/lib/zabbix/externalscripts, а не /etc/zabbix/scripts
      А так же после импорта шаблона - зайти в Узлы - Zabbix Server и добавить шаблон, который добавили ранее.

  16. Скрипт не работает и выдает "Unknown metric ssl_https.expire" zabbix 5.0

  17. Отлично все заработало. Спасибо и тем, кто выложил для 4 версии Template.

  18. Аноним

    У меня не чего не получается.

  19. Фаррух

    Доброго времени суток. Yе могу импортировать шаблон на zabbix 4.2

  20. Добрый день! Скрипты работают корректно, но в Итемах увы ничего не появляеться. Так же пробовал скрипты запускать под zabbix юзером. Подробнейшим образом несколько раз проверял по инструкции шаги и сами скриты. Должен ли являться zabbix юзер владельцем ssl.conf и папки zabbix_agentd.d ?

    • Удалось разобраться? Столкнулся с аналогичной симптоматикой, но что-то не пойму куда смотреть. Вроде бы везде все честно...

      • Утро вечера мудренее. Хоть явно в статье и не сказано, но, видимо, подразумевается что происходить все действо должно на машинке где крутится zabbix сервер. Иначе как скрипты то исполнять...? Собственно, на машине с zabbix сервером все отработало норм. Спасибо автору, полезно.

        • Вообще, не принципиально, где будет выполняться. Данные все равно агент собирает. Но я лично все такие проверки обычно делаю на самом сервере мониторинга.

          • Ну да, логично делать на сервере мониторинга. А вот на сервере где только агент крутится не завелось. Ну и ладно. Правильнее все равно на сервере мониторинга держать.

          • Любопытно... По одному домену отдает некорректную дату истечения срока. Если сказать
            openssl s_client -connect ***.******.ru:443 -servername ***.******.ru -tlsextdebug 2>/dev/null | openssl x509 -noout -dates 2>/dev/null
            на выходе получаем
            notBefore=Oct 11 10:21:56 2020 GMT
            notAfter=Oct 11 10:21:56 2021 GMT
            Как следствие, expired считает как 187 дней.
            А если посмотреть через браузер на сертификат, то:
            Дата выдачи среда, 10 марта 2021 г., 22:53:11
            Срок действия вторник, 8 июня 2021 г., 22:53:11

            Но это исключительно по одному поддомену. Регулярка как-то с датами запуталась?

            • Т.е. не регулярка конечно же, а... А даже не знаю что )

            • Скорее всего через консоль другой сертификат проверяется. Посмотрите полную инфу по нему, а не только даты.

              • Да, вы правы.
                Вообще, эта ситуация мало к статьей относится, что-то погорячился я здесь об этом написать. Можно удалить наверное.

  21. Николай

    После обновы с Zabbix 3.4 до 5.0 мониторилка актуальности SSL отвалилась.

    Подскажите как пофиксить?

    • В статье вроде бы уже обновленные шаблоны. Я фиксил и обновлял статью. В комментах ниже даже кто-то жаловался, что не работает в версиях ниже 5.

      • Александр

        Добрый день,
        Не знаю должно ли так быть - но в Zabbix 5.0 у большенства Item'ов имеют следующие интервалы обновления (к примеру): 1m, 30s, 1h и тд. После применение Шаблона (Темплейта) "ssl_cert_expiration.xml" видно что у Prototype Item, и Discovery интервал обновления указан как просто "300". Возможно это имеет какое-то отношение. Я просто сразу это увидел, и поменял на "5m".

        • Это не принципиально. Раньше не было возможности использовать сокращения и все интервалы указывались в секундах. Сейчас можно использовать m,h,d и т.д. А все, что без указания сокращений считается секундами. В старых шаблонах чаще всего все в секундах.

  22. Доброго времени!
    Спасибо за инструкцию. Все завелось и работает.
    Но есть вопрос: какие правила нужно разрешить для iptables на стороне zabbix-server чтобы принимал\забирал данные ?
    При отключенном iptables все работает, как только вкл. данные пропадают.
    правила использую простые :
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP

    iptables -A INPUT -s xxx.xxx.xxx.xxx -j ACCEPT
    iptables -A OUTPUT -d xxx.xxx.xxx.xxx -j ACCEPT

    • Нужно порты для общения самого zabbix-server с агентами открыть. Это 10050 и 10051 и порты для проверок - 80, 443, 25.

      • Аноним

        Ну так, дело же в том что, когда iptables выключен на zabbix-server то все работает !
        ( при включенном iptables прописаны правила принимать все с ip c которых мониторить ssl)

        • Когда вы мониторите tls сертификаты, вам не надо принимать соединения. У вас должны быть разрешены исходящие подключения к этим сайтам с сертификатами.

          • Аноним

            исходящие подключения к этим сайтам с сертификатами разрешены.

          • Аноним

            iptables -A OUTPUT -d xxx.xxx.xxx.xxx -j ACCEPT

            вот по примеру этого правила прописаны исходящие на сервера где нужно мониторить ssl

            • Тут гадать смысла нет, какого правила не хватает. Если с отключенным фаерволом все работает, а с включенным нет, надо просто включить логирование и запустить фаервол. Там будет четко видно, что блокируется. Лог анализируется, добавляется или редактируется правило.

  23. Александр

    Здравствуйте, настроил по статье на Ubuntu 20.04, Zabbix 5.0 -> всё работает ОК.

    Подскажите, статья была обновлена 21.03.2018, возможно с того времени что-то поменялось, или можно улучшить?

    К примеру сейчас чтобы добавить домен нужно подключаться по SSH/SCP, чтобы вручную отредактировать файл. Редактировать руками возможно не самое удобное :-) Возможно ли переписать через Macros`ы, чтобы задавать домены в веб интерфейсе Zabbix`а?

    Так-же хотел бы дополнить: есть специальные сайты, с просроченными SSL сертификатами (к примеру список https://www.ssl.com/sample-valid-revoked-and-expired-ssl-tls-certificates/ ). Для целей теста (что уведомления отработают корректно, т.е. триггер отработает) имеет смысл добавить сайт с заранее Expired SSL сертификатом, чтобы сработал триггер и убедиться что всё работает.

    Спасибо.

    • Было бы удобно все настроить в шаблоне Zabbix, например, с помощью http агента. Но как это сделать на голом заббиксе, я не знаю. Нужен какой-то сервис, который будет проверять срок действия сертификата и отдавать ответ по api. Либо самому такой писать, либо готовый найти. Тогда можно будет обходиться без скриптов.

  24. Огромное спасибо за статью! На всякий случай, вдруг кому пригодится. Скрипт проверяет только домены по 443 порту, можно его чуть-чуть поправить, чтобы проверял домены, для которых задается порт:

    #!/bin/bash
    
    SERVER=$1
    TIMEOUT=25
    RETVAL=0
    TIMESTAMP=`echo | date`
    PORT=`echo $SERVER | awk -F ':' '{print $2}'`
    SERVER_WITHOUT_PORT=`echo $SERVER | awk -F ':' '{print $1}'`
    if [ -z "$PORT" ]
    then
    EXPIRE_DATE=`openssl s_client -connect $SERVER:443 -servername $SERVER -tlsextdebug 2>/dev/null /dev/null | grep notAfter | cut -d'=' -f2`
    else
    EXPIRE_DATE=`openssl s_client -connect $SERVER_WITHOUT_PORT:$PORT -servername $SERVER_WITHOUT_PORT -tlsextdebug 2>/dev/null /dev/null | grep notAfter | cut -d'=' -f2`
    fi
    EXPIRE_SECS=`date -d "${EXPIRE_DATE}" +%s`
    EXPIRE_TIME=$(( ${EXPIRE_SECS} - `date +%s` ))
    if test $EXPIRE_TIME -lt 0
    then
    RETVAL=0
    else
    RETVAL=$(( ${EXPIRE_TIME} / 24 / 3600 ))
    fi
    
    echo ${RETVAL}
    • А чем он отличается от предложенного в статье?

      • В статье скрипт через openssl проверяет домены только по порту 443. Добавил проверку, чтобы можно было проверять по портам, отличным от 443.

  25. Владимир

    Добрый день. Столкнулся с проблемой, после удаления из списка определенного домена и перезапуска zabbix агента, домен все равно мониторится, срабатывают на него триггеры. Такое ощущение, что где-то лежит кэш, который видимо нужно почистить. Может быть поможет удаление шаблона с повторной установкой, но это уже крайняя мера

    • Владимир

      Если вызываю скрипт /etc/zabbix/scripts/disc_ssl_https.sh - то домен, в списке отсутствует, как и должно быть. Но заббикс все равно его опрашивает не могу понять в чем дело

    • Итемы, добавленные с помощью автообнаружения, остаются активными еще какое-то время. По-моему, в дефолте это 30 дней. Так что после того, как удалили домен из списка, надо зайти на host, с которого идут проверки, и удалить там вручную итем с этим доменом. Либо изменить настройку, чтобы итемы, пропавшие из автообнаружения, удалялись быстрее.

      • Владимир

        Вы были правы, нужно было подредактировать шаблон. И еще один вопрос. Если я например просрочу SSL (точнее держатель сайта в моем случае), у меня будут сыпаться алерты в дашборд и копить кол-во проблем. Если держатель сайта продлит SSL, то при следущей проверке у меня старые проблемы обнулятся, конкретно для этого сайта или останутся до тех пор, пока не истечет таймер истории который выставлен в шаблоне.

  26. На некоторых сайтах (а точнее на IMPI сервера HP) никак не хочет видеть сертификат.
    [root@zabbix5 ~]# echo | openssl s_client -connect 10.16.175.194:443 -servername 10.16.175.194 -tlsextdebug
    CONNECTED(00000003)
    140388584212288:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:ssl/record/rec_layer_s3.c:1543:SSL alert number 40
    ---
    no peer certificate available
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 7 bytes and written 321 bytes
    Verification: OK
    ---
    New, (NONE), Cipher is (NONE)
    Secure Renegotiation IS NOT supported
    Compression: NONE
    Expansion: NONE
    No ALPN negotiated
    Early data was not sent
    Verify return code: 0 (ok)
    ---

    • В этом веб интерфейсе используется ssl3, который во всех современных операционных системах снят с поддержки. Поэтому возникает ошибка.

      140388584212288:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:ssl/record/rec_layer_s3.c:1543:SSL alert number 40

      Немного эту тему я рассматривал в отдельной статье - https://serveradmin.ru/centos-8-tls-v1_0/

      • Спасибо. Все заработало.
        А еще вопрос. Периодически происходит ложные срабатывания триггера.
        Certificate 10.16.175.194 expire 11.09.2020 10:09:42 0 -1069
        Certificate 10.16.175.194 expire 11.09.2020 10:47:04 1069 +1069
        И следующей проверкой все ОК.
        Если я добавлю в условия триггера and {SSL Expire:ssl.expire[{#SSL}].prev()}=0
        это сработает? Или надо по другому.
        Спасибо.

        • А из-за чего ложные срабатывания? Не смог достучаться по сети и получить данные? Надо доп условие поставить в зависимости от обстоятельств.

          • Причина не понятна. Проверяю сразу вручную все нормально.
            Я исходил из того, что бы триггер срабатывал исходя из нескольких проверок. Тогда будут исключены ошибки с недоступностью хоста, или ошибкой в работе скрипта.

  27. Григорий

    Повторил этот шаблон в Zabbix 4.0.3
    Если кому надо:
    https://yadi.sk/d/xsHYatSF6JmcYA

  28. Хорошая инструкция, только выложенный template импортируется только в 5 версию

    • Как раз на днях его обновлял. Нужно было внести изменения в связи с переходом на 5-ю версию. Поддерживать старые версии уже не буду, так как хлопотно.

      • можно оставить вер. 3.2 как архив , т.к. она прекрасно импортируется и работает в 4.* , это сократит кол-во комментариев и вопросов

      • Сергей

        Поддерживать-то и не нужно, достаточно 3.2 выложить. Кому надо - допилят. Просто из 5-й делать обратно уж больно сложно... Добавьте, плиз, старую версию в архив?

  29. Сергей

    Спасибо за скрипты!
    А можно версию шаблона для zabbix-4.0.4? Пробовал править, добавляя недостающие элементы, но когда он выругался так, я уже не знаю как править :( "Ошибочный тег "/zabbix_export/templates/template(1)/discovery_rules/discovery_rule(1)/item_prototypes/item_prototype(1)": неожиданный тег "trigger_prototypes"."

    Или подскажите как самому сделать шаблон - куда вписать скрипты и т.п....

  30. echo |openssl s_client -connect serveradmin.ru:443 -servername NONONONOdomain.net -tlsextdebug 2>/dev/null

    т.е запрашиваем некорректный домен, так в жизни бывает, например после смены днс трафик на домен попадает на сервер. где для Этого домена нет сертификата.
    что скажет про дату сертификата этот скрипт и как это исправить чтоб работало корректно ?

  31. Евгений

    Добрый вечер.

    Как Вы попали в эту картинку?
    https://serveradmin.ru/wp-content/uploads/2017/08/zabbix-ssl-expire-03.png

  32. Кондрат

    Здравствуйте. А не подскажите, как добавить в скрипт прокси. Чтобы брал из другого файла для каждого домена свой прокси. Номер строки прокси и номер строки домена будет совпадать.

    • Не понял, а зачем сюда прокси, да еще для каждого домена свой? Разве эти проверки кто-то ограничивает? Или в чем смысл?

      • Кондрат

        Если коротко, то гугл не должен видеть, что сайты мониторятся с одного айпи.
        Я понимаю, что в строку "EXPIRE_DATE=`echo | openssl s_client -connect $SERVER:443 -servername $SERVER -tlsextdebug 2>/dev/null | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2`" нужно добавить -proxy со строкой регистрации прокси. Но вот как это сделать так, чтобы он брал ту же строку, что и у домена?

  33. Добрый день! Все проверки сделал, все возвращает и отрабатывает. Скрипты находятся на другой машине, на заббикс сервере шаблон импортнул(важно ли менять в шаблоне дату и версию заббикса), присоединил с серверу. Хотел уточнить на хосте где лежат скрипты, пользователя zabbix нужно создавать? Подскажите где еще посмотреть...

    • Для сбора данных через эти скрипты, нужен настроенный zabbix-agent на хосте. А если стоит агент, то и zabbix user там точно будет.

      • в статье: После того, как отработает автообнаружение, в списке итемов вы увидите добавленные домены.
        я не вижу добавленные домены...куда копать, подскажите пожалуйста

  34. Привет! очень замечательная статья настроил всё на одной дыханий как на DigitalOcean, где надо просто CopyPaste делать ))) Спасибо!!!

  35. Добрый день, пытаюсь внедрить данный проект в Zabbix 4.4 . Агент отрабатывает без каких либо проблем всё показывает как необходимо, загрузка шаблона на сервер произошла без ошибок, но обновления данных (атообнаружения и добавки хостов в itemы не произошло). Не подскажете насколько существенная разница между шаблонами на 3.4 и 4.4. И где можно посмотреть информацию по различию и допиливанию.

    • Разницы не припоминаю. Все должно работать.

    • Добрый день! Такая же ситуация. Скрипты отрабатывают на ура, но в Итемах увы ничего не появляеться. Подробнейшим образом несколько раз проверял по инструкции шаги и сами скриты.

  36. Дмитрий

    Да, именно оно и не работает, скрипты от пользователя забикс отрабатывают.
    Тип обнаружения Zabbix агент (активный) также не работает, только через Zabbix агент.

  37. Дмитрий

    Добрый день!
    пишет - Value should be a JSON object.
    в чем может быть проблема?

  38. Имеется ли возможность мониторинга сертификата сайта с нестандартным портом?

    • Сам разобрался. В скрипте /etc/zabbix/scripts/check_ssl_https.sh удаляем ":443". И в файле с перечислениями доменов указываем их в формате serveradmin.ru:443

      • Хотя поторопился. Скрипт на самом агент отрабатывает нормально и выдает корректные значения, но сервер zabbix такие значения забирать не хочет. Может быть Вы посоветует, что еще требуется изменить?

        • Zabbix забирает то, что возвращает скрипт в консоль. А автодискавери забирает имена доменов из файла с доменами. Проблема могла возникнуть из-за : в названии, которое появилось при добавлении номера порта.

          Думаю, для нестандартных портов имеет смысл сделать отдельный скрипт и шаблон и там все отлаживать. Сейчас уже не помню нюансов реализации, надо заново вникать.

          • Сергей

            1. В файле с перечислениями доменов указываем их в формате serveradmin.ru:443
            2. В скрипте /etc/zabbix/scripts/check_ssl_https.sh:
            а) добавляем строку (после SERVER=$1) SERVERNAME=$(cut -d':' -f1 <<<"$SERVER")
            б) в строке, начинающейся с EXPIRE_DATE удаляем :443 после $SERVER.
            в) в этой же строке заменяем второе вхождение $SERVER на $SERVERNAME

            Проверил - работает, у меня несколько серверов проверяются на нестандартном порту (8009). Мелкое замечание - в элементе данных хост теперь фигурирует с номеров порта.

  39. Добрый день, задумываюсь о том чтобы перевести мониторинг с нагиос на заббикс. (около 200 машин)
    Имеется ли у вас опыт по мониторингу Microsoft Exchange Server и постфикс?
    Также небольшой вопрос, сечас пару машин миниторятся заббиксом версии 3.2(настраивал предшественник моего предшественника), на сколько болезненно может быть обновление?
    Или лучше настроить сервер с нуля?

    Спасибо!

  40. Большое спасибо за ваш сайт! Очень многие статьи помогают в работе и для развития в целом, использую как эталон.

    Но вот возник нюанс при настройке мониторинга ssl-сертификата: агент у меня дефолтом неактивный, ServerActive закомментирован, а в правиле автообнаружения шаблона стоит активный агент, поэтому и не получал никаких данных в latest data. Изменил тип на "Zabbix агент" и автообнаружение добавило нужный элемент. Не могли бы вы уточнить этот момент в статье, чтобы больше не возникало вопрос у тех, кто с этим столкнётся? Спасибо!

    • Это слишком индивидуальный случай, чтобы упоминать в статье. Не буду же я во всех статьях писать о том, что надо следить за типом агента в конфигурации агента и шаблона. Это и так подразумевается. Это все равно, что в агенте обозвать userparameter одним именем, а в шаблоне другим, а потом думать, почему не работает. Очевидно, что такие настройки должны совпадать.

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

  41. Максуд

    Здравствуйте! Прежде всего спасибо за интсрукцию. Я всё сделал как показано...

    НО!!

    В разделе Monitoring--- Latest Data я никакой информацию не получаю почемуто. Можете назвать причины пожалуйста?

    • Как же я назову причины, если нет никакой информации. Каков вопрос, таков ответ. Вы где-то ошиблись. Причина в этом. Я достаточно подробно все расписал, как проверять, настраивать и т.д. Нужно по этапам все аккуратно проверить от агента до сервера.

    • Алексей

      Такая же проблема... проверил все возможное но не работает, данных в "Последние данные" нет. Положил скрипты локально на сервер забикса, прикрепил шаблон к этом же серверу. В логах чисто, подскажите куда смотреть??

      • Проверки через zabbix_agentd на сервере с агентом выдают корректные данные?

        • Алексей

          с консоли все отлично проходит:
          zabbix_agentd -t ssl_https.discovery
          ssl_https.discovery [t|{"data":[{"{#DOMAIN_HTTPS}":"test1.domain.ru"},
          {"{#DOMAIN_HTTPS}":"test2.domain.ru"}]}]

          в элементах данных пишет: ZBX_NOTSUPPORTED
          от zabbix все отрабатывает нормально

  42. Алексей

    Добрый день!
    подскажите пожалуйста можно настроить zabbix для проверке ssl сертификатов из папки так как хочется использовать zabbiz для мониторинга ГОСТвых сертификатов?

  43. Добрый день!
    А вы пробовали мониторить локальные сертификаты на серверах? Я вот настроил, но только тригеры не срабатывают(

    • Локальные ничем не отличаются от остальных. Тем более триггеры не имеют отношения к самому мониторингу. Если данные корректно собираются, то надо проверять триггеры на ошибки.

      • У вас тут мониторятся же только web сертификаты? Или я таким методом могу и локальные компа в папке личные получить сертификаты:

        • Это не веб сертификаты. Это просто сертификаты, которые используются на сайтах. С таким же успехом, их можно использовать в почтовом сервере для протоколов imap и smtp.

          Локальные сертификаты, лежащие в виде файлов, тоже можно мониторить. Но очевидно, что для этого нужны другие проверки.

  44. Для получения сертификата с сервера желательно на вход openssl что-то отправить, чтобы долго не висело ожидание
    Например так
    openssl s_client -showcerts -connect serveradmin.ru:443 -servername serveradmin.ru </dev/null

  45. Столкнулся с другой проблемой, какие-то сертификаты проверяются просто адово долго, запустил скрипт с параметром проверяемого сертификата, ждал ответа минуты 2.
    В конфиге Timout 30 сек это максимальный показатель и как следствие айтемы по которым такая большая задержа не получают инфу и висят с инфой "Timeout while executing a shell script."

    Может есть какие-то адекватные варианты решения проблемы?

    Что в голову приходит так это шедуллер внутри сервера, на выполнение скрипта с необходимыми проверками сертификата и записью результата в файл, а с забикса уже получение информации из этого файла.

  46. Спасибо за статью, очень полезная и легко осваиваемая.
    Добавил шаблон, изначально все ок добавилось и элемент появился.
    Но данные никакие не собрались и через пару минут элемент отключился с комментарием "Unsupported item key." и в закладке "Правила обнаружения" так же Инфо пишет "Unsupported item key."
    Из консоли запуск от имени пользователя Zabbix проверил все работаеь, не могу понять в чем проблема.
    Просьба помочь.

    • Когда итем имеет статус Unsupported, можно нажать на восклицательный знак и посмотреть, какая там ошибка. Либо заглянуть в лог сервера, возможно там будет подсказка.

      • Дискавери сейчас отображается нормально, работает и в логах есть правда всего один запрос и больше нету.
        А вот запросов по сбору данных элемента в логах нету.
        Элемент с ифнормацией "Unsupported item key" показывается.

      • Какая-то у меня проблема с активными проверками, хотя на первый взгляд все настроено корректно.
        В общем переключил на пасивные проверки, все заработало.
        Спасибо за статью еще раз, очень удобно и просто.

  47. Обращу внимание на один, может банальный, момент: агент должен быть в активном режиме. Иначе данные не будут передаваться.

  48. Доброго времени суток.
    Спасибо ! Очень помогла Ваша статья.
    Настроил , отображает сколько дней осталось. По триггеру приходит уведомление по почте.

    По после продления сертификата не сбрасывается событие. Не приходит письмо что сертификат продлен, хотя в уведомления указал чтоб приходило уведомление.

    Подскажите где что нужно поправить чтоб событие после продления сертификата изменилось ?

    • По идее, ничего особенного делать не надо. Как только условие триггера не выполняется, он сам отключается и присылает уведомление, что все в порядке. Вы посмотрите в Последних данных, после продления сертификата, новые числа стали поступать о новом сроке? Триггер именно на них реагирует.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar