Решение проблемы

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


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

Содержание:

  • 1 Введение
  • 2 Проверяем средства для мониторинга
  • 3 Настройка zabbix-agent
  • 4 Настройка zabbix server для мониторинга ssl сертификатов
  • 5 Возможные ошибки
  • 6 Заключение
  • 7 Дополнительные материалы по Zabbix

Введение

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

Традиционно, буду использовать самые простые подручные средства, завернутые в консольные скрипты, которые будут передавать значения в 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

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

Создаем папку для скриптов в директории с настройками 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-ти дней. Сейчас продлить сертификат не составляет каких-то проблем. Так что можете этот параметр настраивать по своему желанию.

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

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

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

Самая распространенная ошибка, с которой можно столкнуться — скрипты не работают от системного пользователя 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. Статьи актуальны для всех версий, не устаревают с выходом новых релизов.


СМОТРИ ТАКЖЕ