Мониторинг SSL сертификатов в Zabbix

Надеюсь, многие со мной согласятся в том, что поддержка web-сайтом работы по защищённому протоколу HTTPS является отраслевым стандартом. Аналогичная тенденция наблюдается и с почтовыми серверами. В связи с этим в последнее время большую популярность приобрёл сервис Let’s Encrypt, предоставляющий бесплатные SSL/TLS сертификаты всем желающим. Особенностью данного сервиса является довольно ограниченный срок действия выдаваемого сертификата — 90 дней. И хотя существуют известные способы автоматизации процесса перевыпуска сертификатов от Let’s Encrypt, не лишним будет поставить данный вопрос на контроль. Контролировать будем посредством популярной системы мониторинга Zabbix.

Существует как минимум два подхода к SSL сертификатам: внешний, то есть через интернет, и внутренний — со стороны сервера. Первый способ становится единственным, когда нет доступа к операционной системе сервера, но в этом случае, как правило, нет и возможности настроить автообновление сертификатов. Кроме того, если на одном сервере необходимо контролировать несколько сертификатов, то в Zabbix их придётся настраивать каждый в отдельности, что не очень удобно. В данной статье мы пойдём вторым путём: установим Zabbix-агента на сервер, и настроим проверку сертификатов через файловую систему. Итак, приступим.

Установку и настройку ACME-клиента Let’s Encrypt я оставлю за рамками статьи. Приведу лишь ссылку на рекомендуемого данным сервисом клиента: Certbot.

 

Настройка Zabbix-агента

Подключаемся (через ssh) к серверу, который будем мониторить, и переходим в каталог с конфигурационными файлами Zabbix-агента (у меня это /etc/zabbix/). Если агент у вас до сих пор не установлен, то сделайте это сейчас, например, так:

sudo apt-get install zabbix-agent

В дальнейшем нам понадобятся калькулятор командной строки bc и потоковый редактор текста sed, поэтому устанавливаем их:

sudo apt-get install bc sed

Создадим папку scripts, в которой разместим два скрипта. Первый назовём certdiscovery.sh, он будет заниматься поиском установленных на сервере SSL/TLS сертификатов:

#!/bin/bash
CERTS_DIR=/etc/letsencrypt/live
certs=`ls $CERTS_DIR`
if [[ -n ${certs} ]]; then
    JSON="{ \"data\":["
    for CRT in ${certs}; do
        JSON=${JSON}"{ \"{#CERTIFICATE}\":\"${CRT}\"},"
    done
    JSON=${JSON}"]}"
    echo ${JSON} | sed '$s/,]}$/]}/'
fi

Второй скрипт назовём certdate.sh, он будет проверять количество дней, оставшихся до окончания срока действия сертификата:

#!/bin/bash
CERTS_DIR=/etc/letsencrypt/live
cert=$CERTS_DIR/$1/cert.pem
end_date=`openssl x509 -noout -enddate -in $cert | cut -d '=' -f 2`
if [ -n "$end_date" ]; then
    end_date_seconds=`date '+%s' --date "$end_date"`
    now_seconds=`date '+%s'`
    echo "($end_date_seconds-$now_seconds)/86400" | bc
fi

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

chmod a+x /etc/zabbix/scripts/{certdiscovery.sh,certdate.sh}

Убедитесь, что zabbix-агент имеет доступ на чтение в каталоги /etc/letsencrypt/live и /etc/letsencrypt/archive (по умолчанию доступ есть только у root). Если доступ запрещён, то в качестве варианта решения проблемы предлагаю добавить пользователя zabbix, автоматически созданного при установке агента, в группу ssl-cert, которой дать право чтения указанных выше каталогов:

usermod -aG ssl-cert zabbix
chgrp ssl-cert /etc/letsencrypt/{archive,live}
chmod g+rx /etc/letsencrypt/{archive,live}

Можно проверить работу наших скриптов из командной строки. certdiscovery.sh вызывается без параметров и возвращает JSON-структуру, содержащую все найденные подкаталоги с сертификатами, а в certdate.sh нужно передать один параметр — значение любого поля {#CERTIFICATE} из вышеупомянутой JSON-структуры.

Далее переходим в каталог с пользовательскими файлами конфигурации zabbix-агента /etc/zabbix/zabbix_agentd.conf.d/, где создаём файл letsencrypt_certs_check.conf с таким содержимым:

UserParameter=certdiscovery,/etc/zabbix/scripts/certdiscovery.sh
UserParameter=certdate[*],/etc/zabbix/scripts/certdate.sh $1

 

Настройка Zabbix-сервера

Самая трудная часть работы выполнена, осталось импортировать шаблон в сервер Zabbix. В веб-интерфейсе переходим в Configuration->Temlates->Import, и загружаем шаблон Template Letsencrypt Certs.zip, предварительно его разархивировав.

 

Теперь можно в веб-интерфейсе назначить хосту, для которого мы настраивали мониторинг, шаблон «Template Letsencrypt Certs» и подождать некоторое время, пока начнут поступать данные. По-умолчанию в шаблоне для скрипта автообнаружения установлен интервал обновления 1 час, проверка срока действия SSL сертификатов производится каждые 6 часов.

Засим откланиваюсь. Вопросы, пожелания, комментарии приветствуются.

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