Настройка мониторинга срока действия SSL сертификата (HTTPS)

Oct 14, 2019 13:56

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

1.1. Для начала просто запросим сертификат сайта и проверим вывод:
# openssl s_client -connect serveradmin.ru:443 -servername serveradmin.ru -tlsextdebug

1.2. Теперь посмотрим на срок действия сертификата:
# openssl s_client -connect serveradmin.ru:443 -servername serveradmin.ru -tlsextdebug 2>/dev/null | openssl x509 -noout -dates 2>/dev/null

1.3. Обработаем вывод и оставим только последнюю дату без лишних символов:
# 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

2. Настраиваем zabbix-agent

2.1. Создаём папку для скриптов в директории с настройками zabbix:
# mkdir /etc/zabbix/scripts

2.2. Первым делом создадим текстовый файл для хранения списков доменов:
# nano /etc/zabbix/scripts/ssl_https.txt
В этот файл необходимо добавить домены по одному на каждую строку.

2.3. Добавляем скрипты для автообнаружения этих доменов и передачи в zabbix:
# nano /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 "]}"

2.4. Делаем файл исполняемым:
# chmod 0740 /etc/zabbix/scripts/disc_ssl_https.sh

2.5. Для проверки достаточно выполнить один из скриптов. На выходе должен быть вывод списка доменов в формате JSON:
{"data":[{"{#DOMAIN_HTTPS}":"serveradmin.ru"}]}
Если доменов несколько, то они перечисляются через запятую.

2.6. Пишем скрипты, которые будут определять, сколько дней осталось до окончания срока действия сертификата.
# nano /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}

2.7. Делаем скрипт исполняемыми:
# chmod 0740 check_ssl_https.sh

2.8. Проверить работу скриптов можно вот так:
# /etc/zabbix/scripts/check_ssl_https.sh serveradmin.ru
66

2.9. Создаём файл с расширением конфигурации заббикса:
# nano /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

2.10. Рекомендуют в основном файле /etc/zabbix/zabbix_agentd.conf увеличить параметр Timeout=10.

2.11. Делаем пользователя zabbix владельцем всех наших скриптов.
# chown -R zabbix. /etc/zabbix/scripts

2.12. Перезапускаем агента:
# systemctl restart zabbix-agent

2.13. Проверяем, как 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]

3. Настраиваем zabbix-server

3.1. Импортируем готовый шаблон.

3.2. Прикрепляем этот шаблон к тому хосту, где настраивали скрипты и zabbix-agent (например Zabbix server).

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

__________
(источник)

ssl, debian-10, zabbix

Previous post Next post
Up