SSL (TLS) сертификаты стали важным компонентов современной инфраструктуры, поэтому администраторам нужно следить за тем, чтобы они не истекали и вовремя их обновлять. В этой статье мы покажем, как отслеживать срок действия SSL сертификатов на ваших сайтах с помощью системы мониторинга Zabbix.
В ранних версиях Zabbix для мониторинга SSL сертификатов приходилось использовать консольные скрипты, которые передают значения в Zabbix через UserParameter. В Zabbix Agent 2 появись возможность получения информации о сертификате с помощью встроенного плагина WebCertificate. В этой статье мы рассмотрим оба способа мониторинга срока действия SSL.
Zabbix: проверка срока действия SSL сертификата сайта с помощью плагина WebCertificate
Плагин WebCertificate, который позволяет получать информацию о сертификатах сайтах, доступен в Zabbix Agent 2. Проверьте, что на хосте установлена эта версия агента:
$ zabbix_agent2 -V
С помощью утилиты zabbix-get вы можете прямо из консоли воспользоваться плагином WebCertificate для получения информации о сертификате сайта:
$ zabbix_get -s 127.0.0.1 -k web.certificate.get[winitpro.ru,443]
Команда должна вернуть JSON с атрибутами сертификата указанного сайта.
В современных версиях Zabbix доступен встроенный шаблон “Website certificate by Zabbix agent 2”. Вы можете использовать его для отслеживания сроков действия TLS/SSL сертификатов (или получения другой информации).
- Перейдите в раздел Configuration -> Hosts и добавьте новый хост с именем сайта;
- Создайте группу хостов или выберите существующую;
- Назначьте шаблон Website certificate by Zabbix agent 2;
- В разделе Interface укажите IP адрес или имя агента Zabbix (в нашем примере
127.0.0.1
); - Затем перейдите на вкладку Macros и нажмите Inherited and host macros mode;
- Укажите в макросе
{$CERT.WEBSITE.HOSTNAME}
DNS имя хоста, сертификат которого нужно проверить; - По умолчанию предупреждение об окончании срока действия SSL сертификата будет появляться за 7 дней до истечения. Вы можете увеличить это значение с помощью макроса
{$CERT.EXPIRY.WARN}
; - Если используется TLS/SSL порт, отличный от 443, можно указать его с помощью макроса
{$CERT.WEBSITE.PORT}
; - Сохраните настройки.
Теперь 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
Скрипт вернул, что сертификат сайта действителен еще 43 дня.
Теперь с помощью параметра UserParameter нужно разрешить запуск этого пользовательского скрипта агентом Zabbix.
$ sudo mcedit /etc/zabbix/zabbix_agent2.conf
Добавьте строку:
UserParameter=sslcertexpire[*],/usr/lib/zabbix/externalscripts/sslcert_expiration.sh $1 $2
Теперь вы можете выполнить ваш скрипт через агента 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
Теперь добавьте новый триггер
- Name: Срок действия SSL сертификата для {$DOMAINNAME} заканчивается
- Expression:
last(/CheckSSLCertExpiration/sslcertexpire[{$DOMAINNAME},{$SSL_PORT}])<20
- Severity: High
Такой триггер буде срабатывать, если до окончания срока действия SSL сертификата осталось менее 20 дней.
Можно сразу добавить параметр для триггера восстановления:
Recovery expression:
last(/CheckSSLCertExpiration/sslcertexpire[{$DOMAINNAME},{$SSL_PORT}])>20
Теперь добавьте в Zabbix новый хост для вашего сайта с типом интерфейса Agent.
На вкладке Macros нужно добавить два параметра: имя сервера и порт, на котором нужно проверять SSL сертификит:
- Macro:
{$DOMAINNAME}
- Value:
winitpro.ru
и
- Macro:
{$SSL_PORT}
- Value:
443
Назначьте хосту ранее созданный шаблон CheckSSLCertExpiration.
Теперь проверьте Latest Data. Zabbix показывает, что SSL сертификат сайте истечет через 43 дня.
Можете дополнительно настроить отправку оповещений на email или в Telegram ответственных лиц, о том, что скоро нужно обновить или продлить SSL сертификат.