У меня время от времени возникают ситуации, когда я пропускаю обновление какого-нибудь ssl сертификата. Особенно часто это стало происходить с повсеместным распространением сертификатов на 3 месяца от letsencrypt. Автоматическое продление иногда не срабатывает по различным причинам. Чтобы защитить себя от таких ситуаций, решил настроить полноценный мониторинг ssl сертификатов с помощью zabbix.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Содержание:
Введение
Традиционно, буду использовать самые простые подручные средства, завернутые в консольные скрипты, которые будут передавать значения в zabbix с помощью UserParameter. Для уменьшения ручной работы, добавление доменов в систему мониторинга будет осуществляться с помощью автообнаружения. Сами списки доменов с сертификатами ssl для проверки будут храниться в текстовых файлах.
У нас будут 2 отдельных списка для проверки:
- Домены с ssl сертификатами для веб сайтов.
- Домены с ssl сертификатами для почтовых серверов.
Поясню, почему 2 списка. Ведь по сути, сертификаты в обоих случаях будут совершенно одинаковые. Дело в том, что у меня есть почтовые сервера, которые используют сертификаты, но при этом не имеют сайтов с таким же доменным именем. Для таких серверов заказаны отдельные сертификаты, которые установлены только на почтовом сервере и проверить их можно только по протоколам, которые используют почтовые серверы. Ниже я подробно раскрою все различия и способы проверки.
Если у вас еще нет готового сервера для мониторинга, предлагаю его настроить по моей статье - установка и настройка zabbix 3.4 на Centos 7. Если предпочитаете Debian, то вот материал на эту тему - установка и настройка zabbix 3.4 на Debian 9. В данном случае все можно сделать на одном сервере - достаточно на один сервер поставить zabbix-server и zabbix-agent.
Проверяем средства для мониторинга
Прежде чем приступим к написанию скриптов для мониторинга, предлагаю отдельно проверить технические средства, которые будем использовать. В данном случае это будет консольная утилита openssl с различными параметрами и преобразованием ее вывода.
Для начала просто запросим сертификат сайта и проверим вывод:
# openssl s_client -connect serveradmin.ru:443 -servername serveradmin.ru -tlsextdebug
Вы должны увидеть служебную информацию по ssl сертификату и сам сертификат. Обращаю внимание на параметр -servername. После него указано имя домена. У вас может быть ситуация, когда на одном ip хостятся несколько сайтов. Параметр -connect фактически указывает только на ip адрес сайта. Если не указать отдельно имя домена через -servername, то команда вернет сертификат первого домена.
Теперь посмотрим на срок действия сертификата. Для этого вывод предыдущей команды завернем на нее же, но с другими параметрами. Получится вот так:
# openssl s_client -connect serveradmin.ru:443 -servername serveradmin.ru -tlsextdebug 2>/dev/null | openssl x509 -noout -dates 2>/dev/null
notBefore=Jul 11 14:55:00 2017 GMT notAfter=Oct 9 14:55:00 2017 GMT
На выходе должны увидеть дату создания сертификата и дату завершения его действия. Обработаем этот вывод и оставим только последнюю дату без лишних символов.
# 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
Oct 9 14:55:00 2017 GMT
Получаем то, что надо. Именно с этой датой будет работать скрипт для отправки данных в zabbix сервер.
Вот пример похожего запроса, только на smtp сервер:
# openssl s_client -starttls smtp -connect mail.zeroxzed.ru:25 | openssl x509 -noout -dates 2>/dev/null | grep notAfter | cut -d'=' -f2
Перед выводом самой даты, выходят несколько строк со служебной информацией о сертификате. Я долго пытался понять, почему они не обрезаются через grep, но так и не понял. По факту, работе скрипта этот лишний вывод не вредит.
С теорией и подручными средствами разобрались. Переходим к настройке zabbix agent.
Настройка zabbix-agent
Создаем папку для скриптов в директории с настройками zabbix:
# mkdir /etc/zabbix/scripts
Первым делом создадим 2 текстовых файла для хранения списков доменов.
# touch /etc/zabbix/scripts/ssl_https.txt /etc/zabbix/scripts/ssl_smtp.txt
В эти файлы необходимо добавить домены по одному на каждую строку. Дальше добавляем скрипты для автообнаружения этих доменов и передачи в zabbix.
# mcedit /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 "]}"
# mcedit /etc/zabbix/scripts/disc_ssl_smtp.sh
#!/bin/bash JSON=$(for i in `cat /etc/zabbix/scripts/ssl_smtp.txt`; do printf "{\"{#DOMAIN_SMTP}\":\"$i\"},"; done | sed 's/^\(.*\).$/\1/') printf "{\"data\":[" printf "$JSON" printf "]}"
Делаем эти файлы исполняемыми:
# cd /etc/zabbix/scripts # chmod 0740 disc_ssl_https.sh disc_ssl_smtp.sh
Для проверки достаточно выполнить один из скриптов. На выходе должен быть вывод списка доменов в формате JSON.
{"data":[{"{#DOMAIN_HTTPS}":"serveradmin.ru"}]}
Если доменов несколько, то они перечисляются через запятую.
Пишем скрипты, которые будут определять, сколько дней осталось до окончания срока действия сертификата. За основу они будут брать ту дату, что мы выводили на предыдущем шаге.
# mcedit /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}
# mcedit /etc/zabbix/scripts/check_ssl_smtp.sh
#!/bin/bash SERVER=$1 TIMEOUT=25 RETVAL=0 TIMESTAMP=`echo | date` EXPIRE_DATE=`echo | openssl s_client -starttls smtp -connect $SERVER:25 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}
Делаем скрипты исполняемыми:
# chmod 0740 check_ssl_https.sh check_ssl_smtp.sh
Проверить работу скриптов можно вот так:
# /etc/zabbix/scripts/check_ssl_https.sh serveradmin.ru 66 # /etc/zabbix/scripts/check_ssl_smtp.sh mail.zeroxzed.ru 87
Не забывайте подставлять значения своих доменов, чтобы наверняка быть уверенными в том, что они нормально отдают сертификаты. На выходе у вас должна быть только цифра с количеством дней актуальности ssl сертификата. Больше ничего. Это важно, иначе заббикс сервер будет выдавать ошибку.
Связываем все наши скрипты с самим zabbix.
Создаем файл с расширением конфигурации заббикса:
# mcedit /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 UserParameter=ssl_smtp.discovery[*],/etc/zabbix/scripts/disc_ssl_smtp.sh UserParameter=ssl_smtp.expire[*],/etc/zabbix/scripts/check_ssl_smtp.sh $1
Я еще рекомендую в основном файле /etc/zabbix/zabbix_agentd.conf увеличить параметр Timeout. По-умолчанию, он установлен в значение 3. Если вдруг внешней проверке не хватит трех секунд, чтобы получить информацию о сертификате, итем на сервере будет на некоторое время отключен. Рекомендую увеличить секунд до 10-ти. Хотя сам я обычно всегда этот параметр выставляю в максимальное значение - 30. Я очень часто сталкиваюсь с тем, что забываю про timeout, а потом трачу очень много времени на дебаг ошибок, которые возникают в связи с этим. Так что я взял за правило всегда увеличивать таймаут сразу после установки и во время первоначальной настройки агента.
Сохраняем все конфиги. Делаем пользователя zabbix владельцем всех наших скриптов. Это важно, так как если этого не сделать, то проверка в консоли будет успешно отрабатывать, а на самом сервере вы увидите ошибку item not supported и потратите какое-то время, пока не поймете, почему она появляется.
# chown -R zabbix. /etc/zabbix/scripts
Перезапускаем агента:
# systemctl restart 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]
Все работает так как и должно. Теперь можно переходить на сервер.
Настройка zabbix server для мониторинга ssl сертификатов
На самом деле, тут вам ничего настраивать не придется, потому что я уже все настроил и предлагаю скачать готовый шаблон. Он создан и протестирован на версии сервера 3.2. Скорее всего он будет работать практически на всех версиях, так как разработчики следят и стараются поддерживать совместимость шаблонов между версиями, за что им большое спасибо.
Ссылка на скачивание шаблона - ssl_cert_expiration.xml
Импортируйте этот шаблон себе на сервер.
Прикрепляйте этот шаблон к тому хосту, где вы настраивали скрипты и zabbix-agent. Дальше вам остается только подождать примерно 5 минут. Такой интервал установлен для автообнарудения.
Если вам не нужно мониторить за smtp хостами, то можете отключить smtp автообнаружение и оставить только https. После того, как отработает автообнаружение, в списке итемов вы увидите добавленные домены.
Еще примерно через 5 минут, вы получите информацию о сроке действия сертификатов указанных доменов.
В шаблоне настроен триггер, который срабатывает, если время жизни сертификата становится меньше 30-ти дней. В принципе, этот параметр можно уменьшить и до 10-ти дней. Сейчас продлить сертификат не составляет каких-то проблем. Так что можете этот параметр настраивать по своему желанию.
Я рекомендую отдельно настроить повторяющиеся уведомления для триггеров из текущего шаблона. Сделать интервал раз в день или через день. Сразу скорее всего не будешь заниматься обновлением, так как не срочно. А то, что отложено на потом легко забыть, что со мной не раз случалось.
Возможные ошибки
Самая распространенная ошибка, с которой можно столкнуться - скрипты не работают от системного пользователя zabbix. Причем вы никак не поймете, в чем реально ошибка. Просто на сервере ваши правила обнаружения или итемы с доменами будут отключены с ошибкой item not supported. Для того, чтобы убедиться, что все в порядке, проверьте, как ваши скрипты работают под нужным пользователем.
# sudo -u zabbix /etc/zabbix/scripts/disc_ssl_https.sh # sudo -u zabbix /etc/zabbix/scripts/check_ssl_https.sh serveradmin.ru
Вторая ошибка, с которой иногда сталкиваешься - при копировании с сайта команды и скрипты не работают. Причины могут быть разные. то двойные тире теряются, то пробелы как-то ломаются. Если вроде бы все в порядке, но не работает, попробуйте скачать полный набор скриптов и файлов, которые я сохранил отдельным архивом.
Про еще одну одну ошибку я уже сказал ранее. Она связана с параметром timeout. Установите его значение выше стандартных трех секунд.
Заключение
Таким нехитрым способом можно облегчить себе жизнь. Приобретя немного навыков в работе с zabbix, можно замониторить все, что придет в голову. Собственно, так я обычно и делаю. У меня куча всяких кастомных проверок. Наиболее популярные и востребованные я описываю в своих статьях, которых накопилось уже немалое количество. Все они в соответствующем разделе - Zabbix. Статьи актуальны для всех версий, не устаревают с выходом новых релизов.
Помогла статья? Подписывайся на telegram канал автора
Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.Дополнительные материалы по Zabbix
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Рекомендую полезные материалы по Zabbix: |
Настройки системы |
---|
Видео и подробное описание установки и настройки Zabbix 4.0, а также установка агентов на linux и windows и подключение их к мониторингу.
Подробное описание обновления системы мониторинга zabbix версии 3.4 до новой версии 4.0.
Пошаговая процедура обновления сервера мониторинга zabbix 2.4 до 3.0. Подробное описание каждого шага с пояснениями и рекомендациями.
Подробное описание установки и настройки zabbix proxy для организации распределенной системы мониторинга. Все показано на примерах.
Подробное описание установки системы мониторинга Zabbix на веб сервер на базе nginx + php-fpm.
|
Мониторинг служб и сервисов |
Мониторинг температуры процессора с помощью zabbix на Windows сервере с использованием пользовательских скриптов.
Настройка полноценного мониторинга web сервера nginx и php-fpm в zabbix с помощью скриптов и пользовательских параметров.
Мониторинг репликации mysql с помощью Zabbix. Подробный разбор методики и тестирование работы.
Описание настройки мониторинга tcp служб с помощью zabbix и его инструмента простых проверок (simple checks)
Настройка мониторинга рейда mdadm с помощью zabbix. Подробное пояснение принципа работы и пошаговая инструкция.
Подробное описание мониторинга регистраций транков (trunk) в asterisk с помощью сервера мониторинга zabbix.
Подробная инструкция со скриншотами по настройке мониторинга по snmp дискового хранилища synology с помощью сервера мониторинга zabbix.
|
Мониторинг различных значений |
Настройка мониторинга web сайта в zabbix. Параметры для наблюдения - доступность сайта, время отклика, скорость доступа к сайту.
Один из способов мониторинга бэкапов с помощью zabbix через проверку даты последнего изменения файла из архивной копии с помощью vfs.file.time.
Подробное описание настройки мониторинга размера бэкапов в Zabbix с помощью внешних скриптов.
Пример настройки мониторинга за временем делегирования домена с помощью Zabbix и внешнего скрипта. Все скрипты и готовый шаблон представлены.
Пример распознавания и мониторинга за изменением значений в обычных текстовых файлах с помощью zabbix.
Описание мониторинга лог файлов в zabbix на примере анализа лога программы apcupsd. Отправка оповещений по событиям из лога.
|
с забикс 7 работает? у меня не появляется ssl итемы триггеры,
все отлично работает на 7 версии
Скрипты лежат здесь /usr/lib/zabbix/externalscripts пути поправлены. Однако заббикс версии 6 выдает такую ошибку :
Invalid discovery rule value: cannot parse as a valid JSON object: invalid object name at: 'data:[{{#DOMAIN_HTTPS}:xxx.xxx.xxx},{{#DOMAIN_HTTPS}:xxx.xxx.xxx},]}'
на 7 заббиксе работает? к zabbix серверу применил шаблон но ssl итемы триггеры не появляются, файлы все создал
Отлично, а как можно мониторить сертификаты сервера (не сайта) в локальной сети?
Добрый день.
Может не по теме статьи...
Сталкивались с такой задачей: при обращении к HTTPS сайту идет запрос сертификата клиента (на уровне TLS соединения). Надо выбрать сертификат в окне браузера или отказаться, после чего сайт открывается и можно делать любые проверки, как самого сертификата, так и содержимого сайта.
Если решали такую задачу, подтолкните в нужном направлении :) не знаю как обойти запрос сертификата клиента
Мне кажется, через Zabbix к такому сайту никак не обратиться. В браузеры приходится всякие расширения ставить, чтобы пройти аутентификацию и получить доступ к сайту. Что уж говорить про Zabbix.
Благодарю.
будем искать обходные пути.
Здравствуйте!
А не подскажете как правильно настроить чтобы в проблеме выводилась именно дата срока действия сертификата
Так сходу не скажу, как сделать. Но в общем случае, чтобы какую-то информацию вывести, нужно, чтобы эта информация была в каком-то айтеме. А потом уже через макрос информацию из айтема можно использовать в заголовке триггера или где-то ещё.
обновился с 5х версии zabbix на 6 версию
данный вариант проверки перестал работать, вернее скрипты отрабатывают как надо но вот шаблон не работает и в списках items нет проверок SSL
если есть возможность покажите как создать dashboard для отображения списка срока ssl сертификатов в 6 версии zabbix
Буду переделывать все проверки с выходом версии 7.0. Под 6-ю уже нет смысла обновлять статью.
Добрый день, вроде все поставил и отображается в Templates, но вот Items не создаются и в Latest data тоже нечего, использую docker-compose с версией zabbix 6.2.1
Аналогичная проблема. Обновился до 6.0.12, подозреваю, что нужно будет переписывать шаблон под новую версию
zabbix 6.0.8
Сейчас настроил - все ОК
Как настраивал? Может что-то в конфиге менял?
Кто может, выложите, пожалуйста, шаблон для 3 версии забикса.
Одной из причин почему ничего не появляется в админке, после действий проделанных в статье, это версия zabbix_agentd 3.0.12. Эта версия обычно ставилась на Ubuntu 18 из пакетов. Проверьте версию своего агента на той машине где вы скалдываете скрипты проверки - "zabbix_agentd -V". На Ubuntu 20 версия заббикса из пакетов 4.0.17, но там я не проверял.
На zabbix_agentd (daemon) (Zabbix) 6.0.3 работает все как положено.
Спасибо за статью! В zabbix начиная с версии 5.0 появился свой шаблон для проверки сертификата https://www.zabbix.com/ru/integrations/ssl
Только он больше одного домена не умеет мониторить. И это очень неудобно.
Спасибо за ваш труд) все с первого раза заводится.
День добрый!
Всё работало на "ура" до того момента пока не потребовалось исключить один из ранее добавленных сайтов. Убираю его из файла ssl_https.txt, удаляю триггер, но через сутки снова получаю сообщение о проблеме с SSL у этого сайта (в ssl_https.txt этот домен отсутствует). Никак не пойму, откуда он снова может вылезать?
Надо сам айтем удалить с этим доменом. По правилам автообнаружения создаются айтемы, которые по умолчанию висят еще 30 дней, после того, как вы удалите его из текстового файла. Это настраивается в самом сервере, можно до одного дня уменьшить, если что. Либо просто руками айтем удалить.
Действительно, забыл о них! Спасибо!
Приветствую, на 4.4 столкнулся с проблемой, что часть триггеров не работает с ошибкой Cannot evaluate expression: "Cannot evaluate function "Zabbix server:ssl_https.expire[www.bb.bb].last()": item is not supported.". Может встречалась такая проблема с этим темплейтом ?
Здравствуйте, если не сложно подскажите пожалуйста какую перемененную можно использовать, чтоб вывести в заголовке проблемы количество дней до истечения сертификата. Напрямую использовать конструкцию Certificate http://www.bbb.com expire less then {Zabbix server:ssl_https.expire[www.bbb.com].last()} days не получается. Спасибо.
Попробуй {ITEM.VALUE}. По идее должно сработать.
Одинаковое поведение на двух вариантах серверов.
Ubuntu 20.04 - Zabbix 5.2 + Nginx + Mysql
Docker сборка - Zabbix 5.2 + Nginx + Postgresql
Консольно все успешно отрабатывает, а в админке "Последние данные" нет ни слова про SSL
Как дебажить если в /var/log/zabbix/[agent/server] нет ничего касаемо SSL
Скрипты нужно бросить в /usr/lib/zabbix/externalscripts, а не /etc/zabbix/scripts
А так же после импорта шаблона - зайти в Узлы - Zabbix Server и добавить шаблон, который добавили ранее.
Скрипт не работает и выдает "Unknown metric ssl_https.expire" zabbix 5.0
Подскажите, что делать?
Отлично все заработало. Спасибо и тем, кто выложил для 4 версии Template.
Где они? ожешь выслать на почту dim.74rus@mail.ru
На zabbix 5.0 не работает скрипт и выдает "Unknown metric ssl_https.expire" Что делать, подскажите?
У меня не чего не получается.
Доброго времени суток. Yе могу импортировать шаблон на zabbix 4.2
Добрый день! Скрипты работают корректно, но в Итемах увы ничего не появляеться. Так же пробовал скрипты запускать под zabbix юзером. Подробнейшим образом несколько раз проверял по инструкции шаги и сами скриты. Должен ли являться zabbix юзер владельцем ssl.conf и папки zabbix_agentd.d ?
Удалось разобраться? Столкнулся с аналогичной симптоматикой, но что-то не пойму куда смотреть. Вроде бы везде все честно...
Утро вечера мудренее. Хоть явно в статье и не сказано, но, видимо, подразумевается что происходить все действо должно на машинке где крутится zabbix сервер. Иначе как скрипты то исполнять...? Собственно, на машине с zabbix сервером все отработало норм. Спасибо автору, полезно.
Вообще, не принципиально, где будет выполняться. Данные все равно агент собирает. Но я лично все такие проверки обычно делаю на самом сервере мониторинга.
Ну да, логично делать на сервере мониторинга. А вот на сервере где только агент крутится не завелось. Ну и ладно. Правильнее все равно на сервере мониторинга держать.
Любопытно... По одному домену отдает некорректную дату истечения срока. Если сказать
openssl s_client -connect ***.******.ru:443 -servername ***.******.ru -tlsextdebug 2>/dev/null | openssl x509 -noout -dates 2>/dev/null
на выходе получаем
notBefore=Oct 11 10:21:56 2020 GMT
notAfter=Oct 11 10:21:56 2021 GMT
Как следствие, expired считает как 187 дней.
А если посмотреть через браузер на сертификат, то:
Дата выдачи среда, 10 марта 2021 г., 22:53:11
Срок действия вторник, 8 июня 2021 г., 22:53:11
Но это исключительно по одному поддомену. Регулярка как-то с датами запуталась?
Т.е. не регулярка конечно же, а... А даже не знаю что )
Скорее всего через консоль другой сертификат проверяется. Посмотрите полную инфу по нему, а не только даты.
Да, вы правы.
Вообще, эта ситуация мало к статьей относится, что-то погорячился я здесь об этом написать. Можно удалить наверное.
После обновы с Zabbix 3.4 до 5.0 мониторилка актуальности SSL отвалилась.
Подскажите как пофиксить?
В статье вроде бы уже обновленные шаблоны. Я фиксил и обновлял статью. В комментах ниже даже кто-то жаловался, что не работает в версиях ниже 5.
Добрый день,
Не знаю должно ли так быть - но в Zabbix 5.0 у большенства Item'ов имеют следующие интервалы обновления (к примеру): 1m, 30s, 1h и тд. После применение Шаблона (Темплейта) "ssl_cert_expiration.xml" видно что у Prototype Item, и Discovery интервал обновления указан как просто "300". Возможно это имеет какое-то отношение. Я просто сразу это увидел, и поменял на "5m".
Это не принципиально. Раньше не было возможности использовать сокращения и все интервалы указывались в секундах. Сейчас можно использовать m,h,d и т.д. А все, что без указания сокращений считается секундами. В старых шаблонах чаще всего все в секундах.
Доброго времени!
Спасибо за инструкцию. Все завелось и работает.
Но есть вопрос: какие правила нужно разрешить для iptables на стороне zabbix-server чтобы принимал\забирал данные ?
При отключенном iptables все работает, как только вкл. данные пропадают.
правила использую простые :
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -s xxx.xxx.xxx.xxx -j ACCEPT
iptables -A OUTPUT -d xxx.xxx.xxx.xxx -j ACCEPT
Нужно порты для общения самого zabbix-server с агентами открыть. Это 10050 и 10051 и порты для проверок - 80, 443, 25.
Ну так, дело же в том что, когда iptables выключен на zabbix-server то все работает !
( при включенном iptables прописаны правила принимать все с ip c которых мониторить ssl)
Когда вы мониторите tls сертификаты, вам не надо принимать соединения. У вас должны быть разрешены исходящие подключения к этим сайтам с сертификатами.
исходящие подключения к этим сайтам с сертификатами разрешены.
iptables -A OUTPUT -d xxx.xxx.xxx.xxx -j ACCEPT
вот по примеру этого правила прописаны исходящие на сервера где нужно мониторить ssl
Тут гадать смысла нет, какого правила не хватает. Если с отключенным фаерволом все работает, а с включенным нет, надо просто включить логирование и запустить фаервол. Там будет четко видно, что блокируется. Лог анализируется, добавляется или редактируется правило.
Здравствуйте, настроил по статье на Ubuntu 20.04, Zabbix 5.0 -> всё работает ОК.
Подскажите, статья была обновлена 21.03.2018, возможно с того времени что-то поменялось, или можно улучшить?
К примеру сейчас чтобы добавить домен нужно подключаться по SSH/SCP, чтобы вручную отредактировать файл. Редактировать руками возможно не самое удобное :-) Возможно ли переписать через Macros`ы, чтобы задавать домены в веб интерфейсе Zabbix`а?
Так-же хотел бы дополнить: есть специальные сайты, с просроченными SSL сертификатами (к примеру список https://www.ssl.com/sample-valid-revoked-and-expired-ssl-tls-certificates/ ). Для целей теста (что уведомления отработают корректно, т.е. триггер отработает) имеет смысл добавить сайт с заранее Expired SSL сертификатом, чтобы сработал триггер и убедиться что всё работает.
Спасибо.
Было бы удобно все настроить в шаблоне Zabbix, например, с помощью http агента. Но как это сделать на голом заббиксе, я не знаю. Нужен какой-то сервис, который будет проверять срок действия сертификата и отдавать ответ по api. Либо самому такой писать, либо готовый найти. Тогда можно будет обходиться без скриптов.
Огромное спасибо за статью! На всякий случай, вдруг кому пригодится. Скрипт проверяет только домены по 443 порту, можно его чуть-чуть поправить, чтобы проверял домены, для которых задается порт:
А чем он отличается от предложенного в статье?
В статье скрипт через openssl проверяет домены только по порту 443. Добавил проверку, чтобы можно было проверять по портам, отличным от 443.
Добрый день. Столкнулся с проблемой, после удаления из списка определенного домена и перезапуска zabbix агента, домен все равно мониторится, срабатывают на него триггеры. Такое ощущение, что где-то лежит кэш, который видимо нужно почистить. Может быть поможет удаление шаблона с повторной установкой, но это уже крайняя мера
Если вызываю скрипт /etc/zabbix/scripts/disc_ssl_https.sh - то домен, в списке отсутствует, как и должно быть. Но заббикс все равно его опрашивает не могу понять в чем дело
Итемы, добавленные с помощью автообнаружения, остаются активными еще какое-то время. По-моему, в дефолте это 30 дней. Так что после того, как удалили домен из списка, надо зайти на host, с которого идут проверки, и удалить там вручную итем с этим доменом. Либо изменить настройку, чтобы итемы, пропавшие из автообнаружения, удалялись быстрее.
Вы были правы, нужно было подредактировать шаблон. И еще один вопрос. Если я например просрочу SSL (точнее держатель сайта в моем случае), у меня будут сыпаться алерты в дашборд и копить кол-во проблем. Если держатель сайта продлит SSL, то при следущей проверке у меня старые проблемы обнулятся, конкретно для этого сайта или останутся до тех пор, пока не истечет таймер истории который выставлен в шаблоне.
Когда обновит, все проблемы будут решены.
На некоторых сайтах (а точнее на IMPI сервера HP) никак не хочет видеть сертификат.
[root@zabbix5 ~]# echo | openssl s_client -connect 10.16.175.194:443 -servername 10.16.175.194 -tlsextdebug
CONNECTED(00000003)
140388584212288:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:ssl/record/rec_layer_s3.c:1543:SSL alert number 40
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 321 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
В этом веб интерфейсе используется ssl3, который во всех современных операционных системах снят с поддержки. Поэтому возникает ошибка.
Немного эту тему я рассматривал в отдельной статье - https://serveradmin.ru/centos-8-tls-v1_0/
Спасибо. Все заработало.
А еще вопрос. Периодически происходит ложные срабатывания триггера.
Certificate 10.16.175.194 expire 11.09.2020 10:09:42 0 -1069
Certificate 10.16.175.194 expire 11.09.2020 10:47:04 1069 +1069
И следующей проверкой все ОК.
Если я добавлю в условия триггера and {SSL Expire:ssl.expire[{#SSL}].prev()}=0
это сработает? Или надо по другому.
Спасибо.
А из-за чего ложные срабатывания? Не смог достучаться по сети и получить данные? Надо доп условие поставить в зависимости от обстоятельств.
Причина не понятна. Проверяю сразу вручную все нормально.
Я исходил из того, что бы триггер срабатывал исходя из нескольких проверок. Тогда будут исключены ошибки с недоступностью хоста, или ошибкой в работе скрипта.
Повторил этот шаблон в Zabbix 4.0.3
Если кому надо:
https://yadi.sk/d/xsHYatSF6JmcYA
Спасибо, Удачи!!!
Хорошая инструкция, только выложенный template импортируется только в 5 версию
Как раз на днях его обновлял. Нужно было внести изменения в связи с переходом на 5-ю версию. Поддерживать старые версии уже не буду, так как хлопотно.
можно оставить вер. 3.2 как архив , т.к. она прекрасно импортируется и работает в 4.* , это сократит кол-во комментариев и вопросов
Поддерживать-то и не нужно, достаточно 3.2 выложить. Кому надо - допилят. Просто из 5-й делать обратно уж больно сложно... Добавьте, плиз, старую версию в архив?
Спасибо за скрипты!
А можно версию шаблона для zabbix-4.0.4? Пробовал править, добавляя недостающие элементы, но когда он выругался так, я уже не знаю как править :( "Ошибочный тег "/zabbix_export/templates/template(1)/discovery_rules/discovery_rule(1)/item_prototypes/item_prototype(1)": неожиданный тег "trigger_prototypes"."
Или подскажите как самому сделать шаблон - куда вписать скрипты и т.п....
echo |openssl s_client -connect serveradmin.ru:443 -servername NONONONOdomain.net -tlsextdebug 2>/dev/null
т.е запрашиваем некорректный домен, так в жизни бывает, например после смены днс трафик на домен попадает на сервер. где для Этого домена нет сертификата.
что скажет про дату сертификата этот скрипт и как это исправить чтоб работало корректно ?
Добрый вечер.
Как Вы попали в эту картинку?
https://serveradmin.ru/wp-content/uploads/2017/08/zabbix-ssl-expire-03.png
Здравствуйте. А не подскажите, как добавить в скрипт прокси. Чтобы брал из другого файла для каждого домена свой прокси. Номер строки прокси и номер строки домена будет совпадать.
Не понял, а зачем сюда прокси, да еще для каждого домена свой? Разве эти проверки кто-то ограничивает? Или в чем смысл?
Если коротко, то гугл не должен видеть, что сайты мониторятся с одного айпи.
Я понимаю, что в строку "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`" нужно добавить -proxy со строкой регистрации прокси. Но вот как это сделать так, чтобы он брал ту же строку, что и у домена?
Надо что-то костылить на bash. В целом, решаемая задача, но надо разбираться.
Могу написать Вам в телеге?
Добрый день! Все проверки сделал, все возвращает и отрабатывает. Скрипты находятся на другой машине, на заббикс сервере шаблон импортнул(важно ли менять в шаблоне дату и версию заббикса), присоединил с серверу. Хотел уточнить на хосте где лежат скрипты, пользователя zabbix нужно создавать? Подскажите где еще посмотреть...
Для сбора данных через эти скрипты, нужен настроенный zabbix-agent на хосте. А если стоит агент, то и zabbix user там точно будет.
в статье: После того, как отработает автообнаружение, в списке итемов вы увидите добавленные домены.
я не вижу добавленные домены...куда копать, подскажите пожалуйста
Привет! очень замечательная статья настроил всё на одной дыханий как на DigitalOcean, где надо просто CopyPaste делать ))) Спасибо!!!
Добрый день, пытаюсь внедрить данный проект в Zabbix 4.4 . Агент отрабатывает без каких либо проблем всё показывает как необходимо, загрузка шаблона на сервер произошла без ошибок, но обновления данных (атообнаружения и добавки хостов в itemы не произошло). Не подскажете насколько существенная разница между шаблонами на 3.4 и 4.4. И где можно посмотреть информацию по различию и допиливанию.
Разницы не припоминаю. Все должно работать.
Добрый день! Такая же ситуация. Скрипты отрабатывают на ура, но в Итемах увы ничего не появляеться. Подробнейшим образом несколько раз проверял по инструкции шаги и сами скриты.
Да, именно оно и не работает, скрипты от пользователя забикс отрабатывают.
Тип обнаружения Zabbix агент (активный) также не работает, только через Zabbix агент.
Добрый день!
пишет - Value should be a JSON object.
в чем может быть проблема?
В чем угодно. У вас discovery правило, как я понял не работает?
Имеется ли возможность мониторинга сертификата сайта с нестандартным портом?
Сам разобрался. В скрипте /etc/zabbix/scripts/check_ssl_https.sh удаляем ":443". И в файле с перечислениями доменов указываем их в формате serveradmin.ru:443
Хотя поторопился. Скрипт на самом агент отрабатывает нормально и выдает корректные значения, но сервер zabbix такие значения забирать не хочет. Может быть Вы посоветует, что еще требуется изменить?
Zabbix забирает то, что возвращает скрипт в консоль. А автодискавери забирает имена доменов из файла с доменами. Проблема могла возникнуть из-за : в названии, которое появилось при добавлении номера порта.
Думаю, для нестандартных портов имеет смысл сделать отдельный скрипт и шаблон и там все отлаживать. Сейчас уже не помню нюансов реализации, надо заново вникать.
1. В файле с перечислениями доменов указываем их в формате serveradmin.ru:443
2. В скрипте /etc/zabbix/scripts/check_ssl_https.sh:
а) добавляем строку (после SERVER=$1) SERVERNAME=$(cut -d':' -f1 <<<"$SERVER")
б) в строке, начинающейся с EXPIRE_DATE удаляем :443 после $SERVER.
в) в этой же строке заменяем второе вхождение $SERVER на $SERVERNAME
Проверил - работает, у меня несколько серверов проверяются на нестандартном порту (8009). Мелкое замечание - в элементе данных хост теперь фигурирует с номеров порта.
Добрый день, задумываюсь о том чтобы перевести мониторинг с нагиос на заббикс. (около 200 машин)
Имеется ли у вас опыт по мониторингу Microsoft Exchange Server и постфикс?
Также небольшой вопрос, сечас пару машин миниторятся заббиксом версии 3.2(настраивал предшественник моего предшественника), на сколько болезненно может быть обновление?
Или лучше настроить сервер с нуля?
Спасибо!
Проблем с обновлением нет. У меня есть все статьи по последовательному обновлению с 3.2 до 4.0. Про мониторинг postfix тоже есть статья - https://serveradmin.ru/monitoring-postfix-v-zabbix/
Большое спасибо за ваш сайт! Очень многие статьи помогают в работе и для развития в целом, использую как эталон.
Но вот возник нюанс при настройке мониторинга ssl-сертификата: агент у меня дефолтом неактивный, ServerActive закомментирован, а в правиле автообнаружения шаблона стоит активный агент, поэтому и не получал никаких данных в latest data. Изменил тип на "Zabbix агент" и автообнаружение добавило нужный элемент. Не могли бы вы уточнить этот момент в статье, чтобы больше не возникало вопрос у тех, кто с этим столкнётся? Спасибо!
Это слишком индивидуальный случай, чтобы упоминать в статье. Не буду же я во всех статьях писать о том, что надо следить за типом агента в конфигурации агента и шаблона. Это и так подразумевается. Это все равно, что в агенте обозвать userparameter одним именем, а в шаблоне другим, а потом думать, почему не работает. Очевидно, что такие настройки должны совпадать.
Ваш комментарий помог, спасибо. Статья отличная, но нюансы для новичков очень даже нужно указывать.
Здравствуйте! Прежде всего спасибо за интсрукцию. Я всё сделал как показано...
НО!!
В разделе Monitoring--- Latest Data я никакой информацию не получаю почемуто. Можете назвать причины пожалуйста?
Как же я назову причины, если нет никакой информации. Каков вопрос, таков ответ. Вы где-то ошиблись. Причина в этом. Я достаточно подробно все расписал, как проверять, настраивать и т.д. Нужно по этапам все аккуратно проверить от агента до сервера.
Как еще можно провести диагностику проблемы?
Такая же проблема... проверил все возможное но не работает, данных в "Последние данные" нет. Положил скрипты локально на сервер забикса, прикрепил шаблон к этом же серверу. В логах чисто, подскажите куда смотреть??
Проверки через zabbix_agentd на сервере с агентом выдают корректные данные?
с консоли все отлично проходит:
zabbix_agentd -t ssl_https.discovery
ssl_https.discovery [t|{"data":[{"{#DOMAIN_HTTPS}":"test1.domain.ru"},
{"{#DOMAIN_HTTPS}":"test2.domain.ru"}]}]
в элементах данных пишет: ZBX_NOTSUPPORTED
от zabbix все отрабатывает нормально
Добрый день!
подскажите пожалуйста можно настроить zabbix для проверке ssl сертификатов из папки так как хочется использовать zabbiz для мониторинга ГОСТвых сертификатов?
Можно. У меня примеров нет.
Добрый день!
А вы пробовали мониторить локальные сертификаты на серверах? Я вот настроил, но только тригеры не срабатывают(
Локальные ничем не отличаются от остальных. Тем более триггеры не имеют отношения к самому мониторингу. Если данные корректно собираются, то надо проверять триггеры на ошибки.
У вас тут мониторятся же только web сертификаты? Или я таким методом могу и локальные компа в папке личные получить сертификаты:
Это не веб сертификаты. Это просто сертификаты, которые используются на сайтах. С таким же успехом, их можно использовать в почтовом сервере для протоколов imap и smtp.
Локальные сертификаты, лежащие в виде файлов, тоже можно мониторить. Но очевидно, что для этого нужны другие проверки.
А можете сделать что бы на пример список хостов не в файлик добавлять на сервере а через вебку забикса?
Нет, не могу.
Для получения сертификата с сервера желательно на вход openssl что-то отправить, чтобы долго не висело ожидание
Например так
openssl s_client -showcerts -connect serveradmin.ru:443 -servername serveradmin.ru </dev/null
Столкнулся с другой проблемой, какие-то сертификаты проверяются просто адово долго, запустил скрипт с параметром проверяемого сертификата, ждал ответа минуты 2.
В конфиге Timout 30 сек это максимальный показатель и как следствие айтемы по которым такая большая задержа не получают инфу и висят с инфой "Timeout while executing a shell script."
Может есть какие-то адекватные варианты решения проблемы?
Что в голову приходит так это шедуллер внутри сервера, на выполнение скрипта с необходимыми проверками сертификата и записью результата в файл, а с забикса уже получение информации из этого файла.
Спасибо за статью, очень полезная и легко осваиваемая.
Добавил шаблон, изначально все ок добавилось и элемент появился.
Но данные никакие не собрались и через пару минут элемент отключился с комментарием "Unsupported item key." и в закладке "Правила обнаружения" так же Инфо пишет "Unsupported item key."
Из консоли запуск от имени пользователя Zabbix проверил все работаеь, не могу понять в чем проблема.
Просьба помочь.
Когда итем имеет статус Unsupported, можно нажать на восклицательный знак и посмотреть, какая там ошибка. Либо заглянуть в лог сервера, возможно там будет подсказка.
Дискавери сейчас отображается нормально, работает и в логах есть правда всего один запрос и больше нету.
А вот запросов по сбору данных элемента в логах нету.
Элемент с ифнормацией "Unsupported item key" показывается.
Какая-то у меня проблема с активными проверками, хотя на первый взгляд все настроено корректно.
В общем переключил на пасивные проверки, все заработало.
Спасибо за статью еще раз, очень удобно и просто.
Обращу внимание на один, может банальный, момент: агент должен быть в активном режиме. Иначе данные не будут передаваться.
Доброго времени суток.
Спасибо ! Очень помогла Ваша статья.
Настроил , отображает сколько дней осталось. По триггеру приходит уведомление по почте.
По после продления сертификата не сбрасывается событие. Не приходит письмо что сертификат продлен, хотя в уведомления указал чтоб приходило уведомление.
Подскажите где что нужно поправить чтоб событие после продления сертификата изменилось ?
По идее, ничего особенного делать не надо. Как только условие триггера не выполняется, он сам отключается и присылает уведомление, что все в порядке. Вы посмотрите в Последних данных, после продления сертификата, новые числа стали поступать о новом сроке? Триггер именно на них реагирует.