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

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

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

В ранних версиях Zabbix для мониторинга SSL сертификатов приходилось использовать консольные скрипты, которые передают значения в Zabbix через UserParameter. В Zabbix Agent 2 появись возможность получения информации о сертификате с помощью встроенного плагина WebCertificate. В этой статье мы рассмотрим оба способа мониторинга срока действия SSL.

Zabbix: проверка срока действия SSL сертификата сайта с помощью плагина WebCertificate

Плагин WebCertificate, который позволяет получать информацию о сертификатах сайтах, доступен в Zabbix Agent 2. Проверьте, что на хосте установлена эта версия агента:

$ zabbix_agent2 -V

проверить zabbix_agent2

С помощью утилиты zabbix-get вы можете прямо из консоли воспользоваться плагином WebCertificate для получения информации о сертификате сайта:

$ zabbix_get -s 127.0.0.1 -k web.certificate.get[winitpro.ru,443]

Команда должна вернуть JSON с атрибутами сертификата указанного сайта.

получить информацию об ssl сертификате через zabbix плагин web.certificate.get

В современных версиях Zabbix доступен встроенный шаблон “Website certificate by Zabbix agent 2”. Вы можете использовать его для отслеживания сроков действия TLS/SSL сертификатов (или получения другой информации).

  1. Перейдите в раздел Configuration -> Hosts и добавьте новый хост с именем сайта;
  2. Создайте группу хостов или выберите существующую;
  3. Назначьте шаблон Website certificate by Zabbix agent 2;
  4. В разделе Interface укажите IP адрес или имя агента Zabbix (в нашем примере
    127.0.0.1
    ); Мониторинг срока действия SSL сертификата сайта
  5. Затем перейдите на вкладку Macros и нажмите Inherited and host macros mode;
  6. Укажите в макросе
    {$CERT.WEBSITE.HOSTNAME}
    DNS имя хоста, сертификат которого нужно проверить; Указать имя сайта для проверки сертфиката
  7. По умолчанию предупреждение об окончании срока действия SSL сертификата будет появляться за 7 дней до истечения. Вы можете увеличить это значение с помощью макроса
    {$CERT.EXPIRY.WARN}
    ;
  8. Если используется TLS/SSL порт, отличный от 443, можно указать его с помощью макроса
    {$CERT.WEBSITE.PORT}
    ;
  9. Сохраните настройки.

Теперь Zabbix будет оповещать вас, если срок сертификата сайта истекает.

Отслеживание срока действия SSL сертификата с помощью скрипта в Zabbix

В предыдущих версиях Zabbix вы можете использовать внешние скрипты для получения информации о сертификатах. Для получения данных сертификата сайта можно использовать утилиты openssl.

Создайте файл /usr/lib/zabbix/externalscripts/sslcert_expiration.sh со следующим кодом:

#!/bin/bash
data=`echo | openssl s_client -servername $1 -connect $1:${2:-443} 2>/dev/null | openssl x509 -noout -enddate | sed -e 's#notAfter=##'`
ssldate=`date -d "${data}" '+%s'`
nowdate=`date '+%s'`
diff="$((${ssldate}-${nowdate}))"
echo $((${diff}/24/3600))

Разрешите запуск файла:

$ sudo chmod +x /usr/lib/zabbix/externalscripts/sslcert_expiration.sh

Этот скрипт возвращает количество дней, которые остались до окончания срока действия сертификата. Проверьте, что скрипт работает корректно.

$ /usr/lib/zabbix/externalscripts/sslcert_expiration.sh winitpro.ru 443

bash скрипт для проверки срока действия SSL сертификата

Скрипт вернул, что сертификат сайта действителен еще 43 дня.

Теперь с помощью параметра UserParameter нужно разрешить запуск этого пользовательского скрипта агентом Zabbix.

$ sudo mcedit /etc/zabbix/zabbix_agent2.conf

Добавьте строку:

UserParameter=sslcertexpire[*],/usr/lib/zabbix/externalscripts/sslcert_expiration.sh $1 $2

добавить UserParameter с проверкой SSL в агент Zabbix

Теперь вы можете выполнить ваш скрипт через агента Zabbix. Для вызова этого скрипта из Zabbix нужно использовать sslcertexpire.

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

$ sudo service zabbix-agent2 restart

Проверьте, что агент zabbix может получить данные через новый параметр. Для тестирования агента используется утилита zabbix-get:

$ zabbix_get -s 127.0.0.1 -p 10050 -k sslcertexpire[winitpro.ru,443]

Теперь добавьте новый шаблон CheckSSLCertExpiration для мониторинга срока действия сертификата в Zabbix.

На вкладке items добавьте параметр

  • Имя: Оставшийся срок действия SSL сертификата {$DOMAINNAME}
  • Type: Zabbix Agent
  • Key:
    sslcertexpire[{$DOMAINNAME},{$SSL_PORT}]
  • Type of information: Numeric (unsigned)
  • Update Interval: 1d
  • History: 90d
  • Trenfd: 365d

шаблон CheckSSLCertExpiration для zabbix

Теперь добавьте новый триггер

  • Name: Срок действия SSL сертификата для {$DOMAINNAME} заканчивается
  • Expression:
    last(/CheckSSLCertExpiration/sslcertexpire[{$DOMAINNAME},{$SSL_PORT}])
  • Severity: High

Такой триггер буде срабатывать, если до окончания срока действия SSL сертификата осталось менее 20 дней.

Можно сразу добавить параметр для триггера восстановления:

Recovery expression:
last(/CheckSSLCertExpiration/sslcertexpire[{$DOMAINNAME},{$SSL_PORT}])>20

Настроить триггер для шаблона zabbix

Теперь добавьте в Zabbix новый хост для вашего сайта с типом интерфейса Agent.

На вкладке Macros нужно добавить два параметра: имя сервера и порт, на котором нужно проверять SSL сертификит:

  • Macro:
    {$DOMAINNAME}
  • Value:
    winitpro.ru

и

  • Macro:
    {$SSL_PORT}
  • Value:
    443

Указать имя сайта и порт SSL

Назначьте хосту ранее созданный шаблон CheckSSLCertExpiration.

Теперь проверьте Latest Data. Zabbix показывает, что SSL сертификат сайте истечет через 43 дня.

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

Можете дополнительно настроить отправку оповещений на email или в Telegram ответственных лиц, о том, что скоро нужно обновить или продлить SSL сертификат.

Если вы используете на своих HTTPS сайтах бесплатные SSL сертификаты от Let’s Encrypt, имейте в виду что они выдаются всего на три месяца. Если по каким-то причинам автоматическое продление сертификата Let’s Encrypt не сработало, вы можете в определенный момент столкнуться с тем, что пользователи не смогут открыть ваш HTTPS сайт. В этом случае мониторинг сертификата через Zabbix поможет вам своевременно обнаружить проблему.

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