Пятница, 28 Февраль 2025 21:50

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

Автор
Оцените материал
(6 голосов)

Дали задание на работе мониторить срок окончания действия SSL-сертификата на одном серверов со служебным сайтом. Админ должен быть уведомлен при сроке действия менее 30-ти дней. Имеется для этого Zabbix, и он имеет такую возможность из коробки, но с тем нюансом, что на сервере со служебным сайтом должен стоять Zabbix-agent2 (именно второй). А это не всегда представляется возможным. Но есть и другой способ, который описан вот в этой статье: 

https://winitpro.ru/index.php/2023/05/04/monitoring-ssl-sertifikat-expiry-zabbix/

И этот способ действительно рабочий, я его проверил. Но в нём тоже есть нюанс, заключающийся в том, что нужно всё равно использовать zabbix-agent, но уже стоящий на самом Zabbix сервере. А это тоже может быть неудобным в некоторых случаях, точнее, я бы сказал, менее изящным. Например, если в Zabbix уже мониторится сервер, доступа к которому у меня нет и не будет, там кто-то когда-то поставил агента с настройками по умолчанию, чтобы Zabbix собирал основные метрики. А чтобы следить за сертификатом, мне в настройках хоста приходится добавлять ещё одного агента, но уже с адресом 127.0.0.1:

Поэтому я немного переделал под себя решение, предоставленное автором сайта winitpro.ru (кстати, автор и сайт очень хорошие, рекомендую!). Пошагово опишу, как сделал у себя, взяв основу из вышеупомянутой статьи.

Прежде всего, нужно обратиться вот к этой странице документации: 

https://www.zabbix.com/documentation/5.4/en/manual/config/items/itemtypes/external

Из которой можно понять, что элемент данных можно собирать напрямую скриптом, а не запуская этот скрипт zabbiz-агентом. Для этого, как и писал автор winitpro.ru, нужно на Zabbix-сервере перейти в каталог /usr/lib/zabbix/externalscripts и там создать bash-скрипт: 

#!/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)) 

У себя этот скрипт назвал sslkonchina.sh

Делаю его исполняемым: 

chmod +x /usr/lib/zabbix/externalscripts/sslkonchina.sh

Проверяю, что скрипт рабочий: 

user@debian12:~$ ./sslkonchina.sh typical-admin.ru 443
37 

Далее, в конфиге /etc/zabbix/zabbix_server.conf надо проверить параметр ExternalScripts, чтобы он действительно вёл на каталог /usr/lib/zabbix/externalscripts.

Затем перехожу в вэб интерфейс Zabbix и создаю новый шаблон:

Сперва задаю имя шаблона и отображаемое имя:

Тут нужно уточнить, что имя может быть только латиницей, а вот выводимое имя можно писать на родном языке.

Дальше перехожу на вкладку «Макросы» и создаю макросы {$MONCERT.SITENAME} и {$MONCERT.SSLPORT}:

Макросу {$MONCERT.SSLPORT} присваиваю умолчательное значение — 443.

И далее создаю элемент данных:

И на этом моменте заключается отличие от настройки winitpro.ru. Имя можно задать на свой вкус, у меня это: Оставшийся срок действия SSL сертификата {$MONCERT.SITENAME}. А вот ТИП я выбираю Внешняя проверка:

В поле КЛЮЧ вбиваю вот такую конструкцию: 

sslkonchina.sh[{$MONCERT.SITENAME},{$MONCERT.SSLPORT}]

Интервал ставлю 60минут, тут можно даже и больше поставить, ибо нет смысла слишком часто проверять. Остальное по умолчанию ставлю.

Далее настраиваю триггер:

И тут всё также, как предлагает автор winitpro.ru:

Название делаю вот таким: 

Действие SSL сертификата {$MONCERT.SITENAME} заканчивается через {ITEM.LASTVALUE1} дней

Таким образом, проблема будет высвечиваться с текстом: Действие SSL сертификата typical-admin.ru заканчивается через 29 дней. Число дней будет тем, которое реально осталось до истечения сертификата. Важность делаю высокой. И добавляю выражение:

Функция нужна last, и значение, в моём случае, должно быть меньше 30ти. Ну и выбираю элемент данных — он там один единственный, который я создал выше:

В итоге получился вот такой простой триггер, остальные параметры не трогаю:

Всё. А дальше иду в нужный мне хост и, вместо добавления дополнительного агента, иду сразу в шаблоны:

Добавляю свой созданный шаблон:

И затем добавляю макрос {$MONCERT.SITENAME} в значении которого прописываю домен, сертификат которого нужно мониторить:

Всё. Потом смотрю последние данные этого хоста и вижу там появившуюся строчку:

Заключительным приятным штрихом будет напоминание админу об истекающем сертификате. Причём, чтобы уведомление приходило каждый день. А для этого перехожу в действия триггеров:

и создаю новое:

Добавляю два условие, одно из которых — нужный мне хост, а второе условие — нужный мне триггер у этого хоста:

Затем перехожу во вкладку «Операции» и указываю длительность шага в один день и добавляю получателей уведомлений:

При выборе получателей нужно указать шаг 1 — 0 и выбрать нужных пользователей:

Ну и всё, жму везде сохранить/добавить. Теперь Zabbix будет долбить админа уведомлениями каждый день, когда срок действия сертификата будет менее 30 дней.

Донаты принимаются на кошельки:

Yoomoney:
4100118091867315

Карта Т-Банк (бывший Тиньков):
2200 7017 2612 2077

Карта Альфа-Банк:
2200 1539 1357 2013

Прочитано 52 раз Последнее изменение Суббота, 01 Март 2025 00:19

You have no rights to post comments

Вы здесь: Home Мои статьи Разное Мониторинг SSL-сертификата в Zabbix без агента