Отслеживание срока действия сертификата с помощью Zabbix | Глеб Воронов | TradeNarK LLC

Отслеживание срока действия сертификата с помощью Zabbix | Глеб Воронов | TradeNarK LLC Сертификаты

Настройка шифрования для zabbix прокси на основе сертификата

1. Подготовьте файлы с CA сертификатами верхнего уровня, сертификатом (цепочкой) прокси и приватным ключем, как описано в Настройке сертификата на Zabbix сервере. Измените параметры TLSCAFile, TLSCertFile, TLSKeyFile в файле конфигурации прокси соответственно.

2. При активном прокси измените TLSConnect параметр:

TLSConnect=cert

При пассивном прокси измените TLSAccept параметр:

TLSAccept=cert

3. Теперь у вас есть минимальная настройка прокси на основе сертификата. Вы возможно захотите улучшить безопасность прокси, указав параметры TLSServerCertIssuer и TLSServerCertSubject (смотри Ограничение разрешенных Эмитента и Субъекта сертификата).

4. В конечном итоге параметры TLS в файле конфигурации прокси могут выглядеть следующим образом:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSCertFile=/home/zabbix/zabbix_proxy.crt
       TLSKeyFile=/home/zabbix/zabbix_proxy.key

5. Настройте шифрование этому прокси в веб-интерфейсе Zabbix:

  • Перейдите в: Администрирование → Прокси
  • Выберите прокси и нажмите на вкладку Шифрование

В примере ниже поля Эмитент и Субъект заполнены – смотрите Ограничение разрешенных Эмитента и Субъекта сертификата о том, как использовать эти поля.

При активном прокси

При пассивном прокси

Настройка шифрования для zabbix агента на основе сертификата

1. Подготовьте файлы с CA сертификатами верхнего уровня, сертификатом (цепочкой) агента и приватным ключем, как описано в Настройке сертификата на Zabbix сервере. Измените параметры TLSCAFile, TLSCertFile, TLSKeyFile в файле конфигурации агента соответственно.

2. При активных проверках измените TLSConnect параметр:

TLSConnect=cert

При пассивных проверках измените TLSAccept параметр:

TLSAccept=cert

3. Теперь у вас есть минимальная настройка агента на основе сертификата. Вы возможно захотите улучшить безопасность агента, указав параметры TLSServerCertIssuer и TLSServerCertSubject.(смотри Ограничение разрешенных Эмитента и Субъекта сертификата).

4. В конечном итоге параметры TLS в файле конфигурации агента могут выглядеть следующим образом:

TLSConnect=cert
       TLSAccept=cert
       TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix proxy,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSCertFile=/home/zabbix/zabbix_agentd.crt
       TLSKeyFile=/home/zabbix/zabbix_agentd.key

(Пример предполагает, что хост наблюдается через прокси, отсюда Субъект сертификата прокси.)

5. Настройте шифрование этому агенту в веб-интерфейсе Zabbix:

  • Перейдите в: Настройка → Узлы сети
  • Выберите узел сети и нажмите на вкладку Шифрование

В примере ниже поля Эмитент и Субъект заполнены – смотрите Ограничение разрешенных Эмитента и Субъекта сертификата о том, как использовать эти поля.

Zabbix web-сервер <-> база данных zabbix

Перед началом настройки на стороне Zabbix, в БД должны быть созданы пользователи и роли с атрибутами, требующими шифрованное подключение.

Листинг создания пользователей для Zabbix web-сервера и Zabbix-сервера
mysql> CREATE USER   
 'zabbix_srv'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>',   
 'zabbix_web'@'%' IDENTIFIED WITH mysql_native_password BY '<strong_password>'
 REQUIRE SSL   
 PASSWORD HISTORY 5; 

mysql> CREATE ROLE 'zabbix_srv_role', 'zabbix_web_role'; 

mysql> GRANT SELECT, UPDATE, DELETE, INSERT, CREATE, DROP, ALTER, INDEX, REFERENCES ON zabbix.* TO 'zabbix_srv_role'; 
mysql> GRANT SELECT, UPDATE, DELETE, INSERT ON zabbix.* TO 'zabbix_web_role'; 

mysql> GRANT 'zabbix_srv_role' TO 'zabbix_srv'@'%'; 
mysql> GRANT 'zabbix_web_role' TO 'zabbix_web'@'%'; 

mysql> SET DEFAULT ROLE 'zabbix_srv_role' TO 'zabbix_srv'@'%'; 
mysql> SET DEFAULT ROLE 'zabbix_web_role' TO 'zabbix_web'@'%';

Вызов статуса вернет, в том числе, данные по настройкам шифрования. Убедимся, что в строке SSL указаны алгоритмы шифрования.

Настройку шифрования между Zabbix и базой данных можно выполнить сразу при первичной настройке Zabbix через web-интерфейс. Обратите внимание на подпись напротив Database TLS encryption. Из-за того, что для подключения к локальной БД используется socket file, нет возможности настроить шифрованное подключение. Поэтому в поле Хост базы данных должны быть указаны IP-адрес или имя сервера с БД.

Меняем localhost на IP-адрес сервера и появляется чекбокс.

На двух скриншотах выше можно увидеть нововведение в Zabbix версии 5.2 — поддержку интеграции с хранилищем Vault. Перед началом настройки Zabbix мы создали пару ключей и учетными данными для подключения к БД.

Берем клиентские ключи MySQL, заполняем необходимые поля и нажимаем Далее.

Другой способ настроить то же самое — соответствующие ключи в конфигурационном файле zabbix.conf.php.

$DB[‘ENCRYPTION’] = true;$DB[‘KEY_FILE’] = ‘/etc/ssl/mysql/client-key.pem’;$DB[‘CERT_FILE’] = ‘/etc/ssl/mysql/client-cert.pem’;$DB[‘CA_FILE’] = ‘/etc/ssl/mysql/ca.pem’;$DB[‘VERIFY_HOST’] = true;$DB[‘CIPHER_LIST’] = ”;

Zabbix-прокси <-> бд zabbix-прокси

Подход к настройке аналогичен настройке шифрованного соединения между Zabbix-сервером и БД. Названия переменных такие же, указываются в конфигурационном файле Zabbix-прокси.

Zabbix-сервер <-> zabbix-агент и zabbix-прокси <-> zabbix-агент


Мы не будем повторяться, настройка этих соединений аналогична настройке соединения сервера с прокси: для исходящих соединений доступен один вариант, для входящих один или несколько.

Названия переменных для настройки шифрования на стороне агента полностью аналогичны переменным в конфигурации прокси.

Zabbix-сервер <-> zabbix-прокси

Как многие пользователи Zabbix знают, в системе существует два типа подключений для передачи метрик: пассивные и активные. Пассивные подразумевают запрос к источнику данных, а активные – отправку данных от источника вне зависимости запроса приемника.

Про сертификаты:  Тестирование и сертификация Oracle

Обратите внимание, что исходящие соединения (пассивные) могут выполняться каким-то одним способом на выбор, а для входящих доступны комбинации вариантов: без шифрования, PSK или сертификат.

На стороне прокси все настройки выполняются в конфигурационном файле. Для активных проверок:

TLSConnect=pskTLSPSKIdentity=test_zabbixTLSPSKFile=/var/zabbix/agentd.psk

Для пассивных проверок:

TLSAccept=pskTLSPSKIdentity=test_zabbixTLSPSKFile=/var/zabbix/agentd.psk

Второй способ шифрования подключения – использование сертификатов. Заметим, что для pre-shared key (PSK) и сертификатов, закрытый ключ хранится на файловой системе в открытом виде. Подробная информация доступна в документации Zabbix.

Zabbix-сервер <-> база данных zabbix

На предыдущем шаге мы уже создали пользователя для подключения, клиентские ключи для подключения тоже есть. Осталось прописать эти данные в конфигурационный файл Zabbix-сервера.

DBTLSConnect=requiredDBTLSCAFile=/etc/ssl/mysql/ca.pemDBTLSCertFile=/etc/ssl/mysql/client-key.pemDBTLSKeyFile=/etc/ssl/mysql/client-cert.pemDBTLSCipher=”

Авторегистрация с шифрованием


Шифрование также поддерживается и для процесса авторегистрации.

После авторегистрации нового узла, настройки соединения с ним будут автоматически настроены на использование шифрования PSK.

Настройка сертификата на zabbix сервере

1. Для того, чтобы проверять сертификаты хостов, Zabbix сервер должен иметь доступ к файлу с их корневыми верхнего уровня самоподписными CA сертификатами. Например, если мы ожидаем сертификаты от двух независимых корневых CA, мы можем поместить их сертификаты в файл /home/zabbix/zabbix_ca_file, примерно следующим образом:

Certificate:
           Data:
               Version: 3 (0x2)
               Serial Number: 1 (0x1)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
                   ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                   ...
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Certificate Sign, CRL Sign
                   X509v3 Basic Constraints: critical
                       CA:TRUE
                   ...
       -----BEGIN CERTIFICATE-----
       MIID2jCCAsKgAwIBAgIBATANBgkqhkiG9w0BAQUFADB MRMwEQYKCZImiZPyLGQB
       ....
       9wEzdN8uTrqoyU78gi12npLj08LegRKjb5hFTVmO
       -----END CERTIFICATE-----
       Certificate:
           Data:
               Version: 3 (0x2)
               Serial Number: 1 (0x1)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
                   ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root2 CA
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                   ....
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Certificate Sign, CRL Sign
                   X509v3 Basic Constraints: critical
                       CA:TRUE
                   ....       
       -----BEGIN CERTIFICATE-----
       MIID3DCCAsSgAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQB
       ...
       vdGNYoSfvu41GQAR5Vj5FnRJRzv5XQOZ3B6894GY1zY=
       -----END CERTIFICATE-----

2. Поместите цепочку сертификатов Zabbix сервера в файл, например, /home/zabbix/zabbix_server.crt:

Certificate:
           Data:
               Version: 3 (0x2)
               Serial Number: 1 (0x1)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
               ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Zabbix server
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                       ...
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Digital Signature, Key Encipherment
                   X509v3 Basic Constraints: 
                       CA:FALSE
                   ...
       -----BEGIN CERTIFICATE-----
       MIIECDCCAvCgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixk
       ...
       h02u1GHiy46GI xfR3LsPwFKlkTaaLaL/6aaoQ==
       -----END CERTIFICATE-----
       Certificate:
           Data:
               Version: 3 (0x2)
               Serial Number: 2 (0x2)
           Signature Algorithm: sha1WithRSAEncryption
               Issuer: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Root1 CA
               ...
               Subject: DC=com, DC=zabbix, O=Zabbix SIA, OU=Development group, CN=Signing CA
               Subject Public Key Info:
                   Public Key Algorithm: rsaEncryption
                       Public-Key: (2048 bit)
                   ...
               X509v3 extensions:
                   X509v3 Key Usage: critical
                       Certificate Sign, CRL Sign
                   X509v3 Basic Constraints: critical
                       CA:TRUE, pathlen:0
               ...
       -----BEGIN CERTIFICATE-----
       MIID4TCCAsmgAwIBAgIBAjANBgkqhkiG9w0BAQUFADB MRMwEQYKCZImiZPyLGQB
       ...
       dyCeWnvL7u5sd6ffo8iRny0QzbHKmQt/wUtcVIvWXdMIFJM0Hw==
       -----END CERTIFICATE-----

Здесь первым является сертификат Zabbix сервера, за ним промежуточные CA сертификат.

3. Поместите приватный ключ Zabbix сервера в файл, например, /home/zabbix/zabbix_server.key:

-----BEGIN PRIVATE KEY-----
       MIIEwAIBADANBgkqhkiG9w0BAQEFAASCBKowggSmAgEAAoIBAQC9tIXIJoVnNXDl
       ...
       IJLkhbybBYEf47MLhffWa7XvZTY=
       -----END PRIVATE KEY-----

4. Измените параметры TLS в файле конфигурации Zabbix сервера, примерно так:

TLSCAFile=/home/zabbix/zabbix_ca_file
       TLSCertFile=/home/zabbix/zabbix_server.crt
       TLSKeyFile=/home/zabbix/zabbix_server.key

Ограничение разрешенных эмитента и субъекта сертификата

Когда два компонента Zabbix (например, сервер и агент) устанавливают TLS соединение, они оба проверяют сертификаты друг друга. Если сертификат узла подписан доверенным CA (с предварительно подготовленным сертификатом верхнего уровня в TLSCAFile), является действительным, он не истёк и проходит некоторые другие проверки, тогда коммуникация может продолжаться. Эмитент и субъект сертификата в этом простом случае не проверяется.

Здесь имеется риск – кто-угодно при наличии действительного сертификата может выдавать себя за другого (например, сертификат хоста можно использовать, чтобы выдавать себя за сервер). Такое поведение может быть приемлемо в небольших средах, где сертификаты подписываются специализированного внутреннего CA и риск действий от чужого имени является минимальным.

Если ваш CA верхнего уровня используется для выдачи других сертификатов, которые не должны приниматься Zabbix или вы хотите снизить риск действий от чужого имени, вы можете ограничить разрешенные сертификаты, указав их строки Эмитента и Субъекта.

Например, вы можете записать в файл конфигурации Zabbix прокси:

TLSServerCertIssuer=CN=Signing CA,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com
       TLSServerCertSubject=CN=Zabbix server,OU=Development group,O=Zabbix SIA,DC=zabbix,DC=com

При наличии этих настроек активный прокси не будет разговаривать с Zabbix сервером с другими строками Эмитента и Субъекта в сертификате, пассивный прокси не пример запросы от такого сервера.

Несколько заметок о соответствии строк Эмитента и Субъекта:

  1. Строки Эмитента и Субъекта проверяются независимо. Обе строки опциональны.
  2. Допустимы символы UTF-8.
  3. Не указанная строка означает, что принимается любая строка.
  4. Строки сравниваются “как-есть”, они должны в точности быть такими же.
  5. Шаблоны и регулярные выражения при проверке соответствия не поддерживаются.
  6. Реализованы только некоторые требования из RFC 4514 Lightweight Directory Access Protocol (LDAP): String Representation of Distinguished Names:
Про сертификаты:  Сертификат соответствия на зубные щетки – помощь в сертификации -

Ограничения в использовании crl расширений

  • Расширение Идентификатор Ключа Полномочий.
    CRL для CA с идентичными именами могут не работает в случае mbedTLS (PolarSSL), даже с расширением “Идентификатор Ключа Полномочий” (“Authority Key Identifier”).

Ограничения при использовании расширений x.509 v3 сертификатов

  • Расширение Альтернативное имя субъекта (subjectAltName).
    Альтернативные имена субъектов из subjectAltName расширения (такие как IP адрес, e-mail адрес) не поддерживаются Zabbix. В Zabbix проверяется только значение поля “Субъект” (смотри Ограничение разрешенных Эмитента и Субъекта сертификата).
    Если сертификат использует subjectAltName расширение, тогда результат зависит от конкретной комбинации наборов инструментов криптографии с которыми скомпилированы компоненты Zabbix (это расширение может работать, а может и не работать, Zabbix может отказаться принимать такие сертификаты от узлов).
  • Расширение Использование Расширенного Ключа.
    Если используется, то, как правило, необходимо указывать как clientAuth (TLS WWW аутентификация клиента), так и serverAuth (TLS WWW аутентификация сервера).
    Например, при пассивных проверках Zabbix агент выступает в роли TLS сервера, таким образом необходимо указать serverAuth в сертификате агента. При активных проверках в сертификате агента необходимо задать clientAuth.
    GnuTLS выводит предупреждение в случае нарушения использования ключа, но разрешает продолжение соединения.
  • Расширение Ограничения Имени.
    Не все наборы инструментов криптографии поддерживают его. Это расширение может помешать Zabbix в загрузке CA сертификатов, где этот раздел промаркирован как критический (зависит от конкретного набора инструментов криптографии).

Отслеживание срока действия сертификата с помощью zabbix | глеб воронов | tradenark llc

Случился на моей практике интересный инцидент из серии «умная мысля приходит опосля»: хостер(да и сам владелец тоже) профукал срок действия SSL сертификата на сайте. Не сказать, что ситуация критичная, но всё равно неприятный осадок остался. Было решено написать скрипт мониторинга срока действия сертификатов и мониторить это дело zabbix-ом.
Система позволяет значительно расширять базовый функционал, используя для этого любые языки программирования.
Хочу заметить, что везде, где планируется мониторить больше 3 инстансов я использую полюбившееся мне решение low level discovery(LLD) — возможность автоматического создания элементов данных, триггеров и графиков для разных(любых) ресурсов операционной системы. Не буду вдаваться в подробности, почитать об этом можно по вышеприведённой ссылке.
Для работы этого мониторинга потребуется несколько скриптов:
— первый будет генерировать ответ для discovery в JSON-формате
— второй будет парсить дату окончания сертификата и считать сколько дней осталось
— третий файл(не исполняемый) будет содержать список хостов, для которых будут сниматься данные

Наглядно:

# ls -l /etc/zabbix/scripts/sslcheck/
-rw-r--r--. 1 zabbix zabbix   49 Aug 31 20:43 list.txt
-rwxr-xr-x. 1 zabbix zabbix  548 Aug 31 20:11 ssl_check.sh
-rwxr-xr-x. 1 zabbix zabbix  185 Aug 31 20:45 ssl_discovery.sh

Начнём с самого простого — список хостов.
Располагаются они по одному в строке, ничего сложного. Как только необходимо добавить сайт в систему отслеживания нужно всего то дописать его в конец файла. Через пару минут данные появятся.

# cat /etc/zabbix/scripts/sslcheck/list.txt
ukraine.com.ua
google.com.ua
vk.com
facebook.com

Дальше составляющая обнаружения. Данные должны быть в определённом формате для того, что бы zabbix сумел их принять
Листинг файла следующий:

# cat /etc/zabbix/scripts/sslcheck/ssl_discovery.sh
#!/bin/bash
JSON=$(for i in `cat /etc/zabbix/scripts/sslcheck/list.txt`; do printf "{"{#SSL}":"$i"},"; done | sed 's/^(.*).$/1/')
printf "{"data":["
printf "$JSON"
printf "]}"

При выполнении получаем вот такой результат:

# /etc/zabbix/scripts/sslcheck/ssl_discovery.sh
{"data":[{"{#SSL}":"ukraine.com.ua"},{"{#SSL}":"google.com.ua"},{"{#SSL}":"vk.com"},{"{#SSL}":"facebook.com"}]}

Имя макроса {#SSL} можно заменить на своё, но тогда его нужно будет сменить и в шаблоне (файл прилагается в конце статьи)
В действительности как раз {#SERVER} или {#HOSTNAME} подойдут больше, но существенной разницы нет.

Далее главный скрипт, который получает информацию о сертификате сайта, парсит необходимое поле и высчитывает разницу

# cat /etc/zabbix/scripts/sslcheck/ssl_check.sh
#!/bin/sh
SERVER=$1
TIMEOUT=25
RETVAL=0
TIMESTAMP=`echo | date`
if [ -z "$2" ]
then
PORT=443;
else
PORT=$2;
fi
EXPIRE_DATE=`echo | openssl s_client -connect $SERVER:$PORT -servername $SERVER 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}

Не думаю, что очень нужны пояснения, но всё же:
1) EXPIRE_DATE — дата окончания действия сертификата в формате Sep 16 11:56:55 2021 GMT
2) EXPIRE_SECS — перевод полученного результата в Unix-timestamp (количество секунд до этого момента, начиная с полуночи 1 января 1970 года)
3) EXPIRE_TIME — высчитываем разницу между текущим временем и временем действия SSL
4) RETVAL — перевод секунд в сутки для наглядности

Делаем файлы исполнительными и на всякий случай указываем пользователя zabbix в качестве владельца:

# chmod  x /etc/zabbix/scripts/sslcheck/ssl_check.sh
# chmod  x /etc/zabbix/scripts/sslcheck/ssl_discovery.sh
# chown zabbix:zabbix /etc/zabbix/scripts/sslcheck/ssl_check.sh
# chown zabbix:zabbix /etc/zabbix/scripts/sslcheck/ssl_discovery.sh

Сам вывод крайне прост:

# /etc/zabbix/scripts/sslcheck/ssl_check.sh vk.com
15
# /etc/zabbix/scripts/sslcheck/ssl_check.sh google.com
70

так же можно проверить как будет вести себя скрипты, если запускаться они будут от пользователя zabbix:

# sudo -u zabbix /etc/zabbix/scripts/sslcheck/ssl_check.sh google.com
# sudo -u zabbix /etc/zabbix/scripts/sslcheck/ssl_discovery.sh

Если всё ок — можно переходить к завершающей стадии: внедрению этого функционала в наш zabbix-сервер
Проверим, сконфигурирован ли агент на создание пользовательских параметров

# cat /etc/zabbix/zabbix_agentd.conf | grep Include | grep -v "#"
Include=/etc/zabbix/zabbix_agentd.d/*.conf

Отлично, теперь создадим файл, в котором укажем новые ключи:

# cat /etc/zabbix/zabbix_agentd.d/ssl.conf
UserParameter=ssl.discovery[*],/etc/zabbix/scripts/sslcheck/ssl_discovery.sh
UserParameter=ssl.expire[*],/etc/zabbix/scripts/sslcheck/ssl_check.sh $1

После всего нужно перезапустить агент что бы он перечитал новенькие ключи

# service zabbix-agent restart

Что бы не дожидаться данных, которые появятся в соответствии с указанным в шаблоне интервалом, можно проверить работоспособность новых ключей следующим образом:

# zabbix_agentd -t 'ssl.discovery'
ssl.discovery                                 [t|{"data":[{"{#SSL}":"ukraine.com.ua"},{"{#SSL}":"google.com.ua"},{"{#SSL}":"vk.com"},{"{#SSL}":"facebook.com"}]}]
# zabbix_agentd -t 'ssl.expire[telegram.org]'
ssl.expire[telegram.org]                      [t|1134]

Работает, отлично. Значит и данные скоро пойдут
А вот так они выглядят, если немного подождать. Ну и обновляться будут в зависимости от ваших таймеров.
Так как счет ведётся на сутки, то не вижу смысла обновлять данные чаще, чем раз в час.
Если, к примеру, сертификат истекает через 27 дней, то сколько бы раз в день мы не проверяли данные — это число так и будет 27.
Однако, каждому своё. Устанавливайте интервал обновления рассудительно

Про сертификаты:  [Заметки ГМ] Выпуск с Сезона и Подписка развития! | Black Desert Россия

zabbix_SSL

А так выглядит отработанный триггер
zabbix_SSL_expire_trigger

Скачать XML-шаблонабсолютно бесплатно! 🙂

Файлы для фряхи можно забрать с гита. На здоровье

Пользователь (web-браузер) <-> zabbix web-сервер

Шифрование этой коммуникации не поддерживается со стороны Zabbix, нужно самостоятельно выполнить настройку на стороне Apache или Nginx. В этой статье мы рассмотрим настройку Nginx с самоподписанным SSL-сертификатом, т.к. преимущественно используем именно Nginx в своих проектах по мониторингу на базе Zabbix.

Можно использовать сертификат доверенного центра сертификации, например, бесплатный от Let’s Encrypt. Это позволит избежать страшных предупреждений в браузере. Обращаем внимание, что использование самоподписанного сертификата никак не умаляет надежности шифрованного соединения, оно будет таким же защищённым как и при использовании сертификата от доверенного CA.

Отслеживание срока действия сертификата с помощью Zabbix | Глеб Воронов | TradeNarK LLC
Отслеживание срока действия сертификата с помощью Zabbix | Глеб Воронов | TradeNarK LLC

Простой мониторинг ssl сертификатов с помощью zabbix

Недостатком простоты является некоторое количество ручной работы по добавлению элементов данных и триггеров, но лучше один раз сделать и потом не бегать с дымящейся известно_чем в день X.

1. Импортируем шаблон в Zabbix (на версиях 2.2 — 2.4 точно будет работать) zbx_export_templates_ssl;

2. «Присоединяем» шаблон к Zabbix server;

3. Правим конфиг Zabbix агента на сервере (я надеюсь он у вас установлен и мониторит сам сервер, потому что для этого есть хороший шаблон «из коробки»). Добавляем в /etc/zabbix/zabbix_agentd.conf (если у вас debian или вроде того).

UserParameter=ssl.eol[*],date -d "`echo | openssl s_client -connect "$1":"$2" 2>/dev/null | openssl x509 -noout -dates | grep "notAfter" | sed 's|.*notAfter=||'`"  %s
UserParameter=ssl.current,date  %s

4. Перезапускаем Zabbix агента /etc/init.d/zabbix-agent restart

5. Затем можно сходить в «Последние данные», выбрать Zabbix server и убедиться что элемент данных возвращает значения. А так же открыть шаблон и посмотреть из чего он состоит.

Итак, у нас есть два элемента данных ssl.current — текущее время и ssl.eol[google.com,443] (end-of-life) в unix формате. Данные забираются с агента путём манипуляции с конвертацией даты. Для элемента данных добавлено два триггера, которые срабатывают за три недели и за неделю до окончания срока действия сертификата. Для простоты клонируйте элементы данных и триггеры, меняя нужные значения. И не забудьте добавить зависимость трёхнедельного триггера от недельного.

Если у вас что-то не завелось — попробуйте на Zabbix сервере вручную выполнить запрос:

echo | openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -dates

Команда позаимствована тут: http://www.shellhacks.com/ru/Kak-Proverit-Srok-Deystviya-SSL-Sertifikata-iz-Komandnoy-Stroki-v-Linux

Списки отозванных сертификатов (crl)

Если сертификат скомпрометирован, CA может отозвать его, включив в CRL. Списки CRL можно настраивать в файлах конфигурации сервера, прокси и агента, используя параметр TLSCRLFile. Например:

TLSCRLFile=/home/zabbix/zabbix_crl_file

где zabbix_crl_file может содержать списки CRL от нескольких CA и может выглядеть следующим образом:

-----BEGIN X509 CRL-----
       MIIB/DCB5QIBATANBgkqhkiG9w0BAQUFADCBgTETMBEGCgmSJomT8ixkARkWA2Nv
       ...
       treZeUPjb7LSmZ3K2hpbZN7SoOZcAoHQ3GWd9npuctg=
       -----END X509 CRL-----
       -----BEGIN X509 CRL-----
       MIIB TCB4gIBATANBgkqhkiG9w0BAQUFADB/MRMwEQYKCZImiZPyLGQBGRYDY29t
       ...
       CAEebS2CND3ShBedZ8YSil59O6JvaDP61lR5lNs=
       -----END X509 CRL-----

CRL файл загружается только при запуске Zabbix. При обновлении CRL требуется перезапуск.

Если компонент Zabbix скомпилирован с OpenSSL и используются списки CRL, тогда каждый сертификат верхнего и промежуточного уровней CA в цепочках сертификатов должен иметь соответствующий список CRL (может быть пустым) в TLSCRLFile.

Хранение чувствительной информации в vault

Приятное нововведение, которое появилось в версии Zabbix 5.2 — поддержка хранилища Vault. Его можно использовать как для хранения учетных данных для доступа к БД так и для значений макросов. Так значения макросов выглядят в Vault:

А так на них можно сослаться в интерфейсе Zabbix:

Хранение значений макросов очень сильно упрощает управление учетными данными для разных шаблонов, позволяет легко отзывать учетные данные и вести аудит. Разумеется, из Vault можно брать значения любых макросов и это добавляет ещё одну степень свободы при автоматизации мониторинга в Zabbix.

Заключение

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

Мы давно и успешно работаем с Zabbix, если у вас есть задачи по развитию, сопровождению или обновлению системы, оставьте заявку через форму обратной связи или свяжитесь другим удобным способом.

А ещё можно почитать:

Добавляем CMDB и географическую карту к Zabbix

Мониторинг принтеров — дело благородное

Структурированная система мониторинга на бесплатных решениях

Elastic под замком: включаем опции безопасности кластера Elasticsearch для доступа изнутри и снаружи

Для обработки событий от Zabbix, Prometheus, Elastic и других систем рекомендуем использовать Amixr (презентация по запросу).

Zabbix sender -> zabbix-прокси и zabbix-агент -> zabbix get

Шифрование соединения с утилитами Zabbix sender и Zabbix get выполняется при помощи специальных параметров при вызове соответствующих утилит.

zabbix_sender -z 127.0.0.1 -s zabbix02 -k Encrypt -o 18 –tls-connect psk –tls-psk-identity «test_zabbix» –tls-psk-file /etc/zabbix/keys/agent.psk

zabbix_get -s 127.0.0.1 -k agent.version –tls-connect psk –tls-psk-identity «test_zabbix» –tls-psk-file /etc/zabbix/keys/agent.psk

Оцените статью
Мой сертификат
Добавить комментарий