Мониторинг цифровых сертификатов X.509 в Icinga 2

Monitoring X.509 SSL/TLS digital certificates in Icinga 2Модуль "x509", являющийся расширением веб-фронтэнда Icinga Web 2 к системе мониторинга Icinga 2 предназначен для мониторинга цифровых сертификатов X.509, используемых на разных сервисах и хостах с поддержкой SSL/TLS. Модуль имеет собственную базу данных о сертификатах, наполняемую и обновляемую путём периодического сканирования сетевых диапазонов или отдельных хостов локальной сети. Попадающие в БД сертификаты проверяются с использованием собственного хранилища доверенных сертификатов и результаты проверки могут быть интегрированы с механизмом уведомлений базовой системы мониторинга Icinga 2.

Развёртывание модуля x509

В качестве опорного документа с описанием процесса установки модуля icingaweb2-module-x509 можно использовать инструкцию "Installing Icinga Certificate Monitoring". Развёртывание модуля предполагает, что предварительно уже выполнено развёртывание самой системы мониторинга Icinga 2 и СУБД MariaDB/PostgreSQL, а также произведена установка веб-интерфейса Icinga Web 2.

Устанавливаем из ранее подключенного к нашей системе на Debian 12 репозитория Icinga пакет "icinga-x509":

# apt-get install icinga-x509

Подключаемся к командной оболочке СУБД (в нашем случае это MariaDB):

mariadb -u root -p

Создаём пустую базу данных, например, с именем "x509" и пользователя БД, например, с именем "x509-usr" и условным паролем, например, 'myP!sZw0rd'. Для пользователя сразу выдаём нужные права на уровне БД:

CREATE DATABASE x509;
GRANT CREATE, SELECT, INSERT, UPDATE, DELETE, DROP, ALTER, CREATE VIEW, INDEX, EXECUTE ON x509.* TO 'x509-usr'@'localhost' IDENTIFIED BY 'myP!sZw0rd';
exit

Загружаем в новую пустую БД "x509" схему, необходимую для работы модуля:

# mysql -p -u root x509 < /usr/share/icingaweb2/modules/x509/schema/mysql.schema.sql

После этого в главном меню Icinga Web появится новый раздел "Certificate Monitoring", перейдя в который мы увидим сообщение о том, что модуль не сконфигурирован.
Пройдём по ссылке (/icingaweb2/config/resource) для создания нового ресурса БД.

New Certificate Monitoring section in the Icinga Web 2 menu

Создадим новый ресурс БД с типом SQL Database, описывающий параметры подключения к ранее созданной нами базе данных "x509".

Creating a new database resource for the x509 Certificate Monitoring module in Icinga Web 2

Вернёмся в настройки модуля "x509" и укажем вышеописанный ресурс БД в качестве бакенда.

Connecting a database resource for the x509 module in Icinga Web 2

Теперь можно считать, что модуль установлен и интегрирован в Icinga Web. Переходим к его базовому конфигурированию.

 

Базовая конфигурация модуля x509

Нам, как минимум, потребуется наполнить хранилище корневых сертификатов доверенных центров сертификации, создать задание сканирования сети и его расписание.

Импорт корневых сертификатов доверенных ЦС

Модуль выполняет валидацию сертификатов, используя собственное хранилище доверенных корневых сертификатов. По умолчанию это хранилище пусто, и администратор может импортировать в него сертификаты доверенных центров сертификации с помощью команды "icingacli x509 import". Файл цепочки сертификатов, указанный с помощью параметра --file, должен содержать список сертификатов X.509 в формате PEM (Base64). Для примера выполним импорт корневых сертификатов доверенных ЦС из стандартного системного файла в Debian 12:

# icingacli x509 import --file /etc/ssl/certs/ca-certificates.crt

Processed 140 X.509 certificates.

После этого на вкладке появится сводная информация о сертификатах.

Certificate dashboard for x509 module in Icinga Web 2

Здесь мы можем видеть четыре кольцевых диаграммы: сертификаты по ЦС, сертификаты по сроку действия, сертификаты по длине ключа и алгоритму подписи.

Certificate dashboard for x509 module in Icinga Web 2

На вкладке "Certificate Overview" по каждому сертификату можно получить подробнейшую информацию о его атрибутах.

Certificate Overview for x509 module in Icinga Web 2

 

Создание заданий сканирования и из расписаний

В разделе "Configuration" переходим к настройке заданий сканирования сети ("Job") на предмет обнаружения X.509 сертификатов. Заданию сканирования можно присваивать любое удобное имя, но не стоит увлекаться спец.символами, так как эти имена будут использоваться для запуска сканирования из CLI.

Каждое задание сканирования может иметь один или несколько диапазонов IP-адресов и один или несколько диапазонов портов. Диапазоны IP-адресов необходимо указывать в формате CIDR. Диапазоны портов разделяются дефисом (-). При указании нескольких диапазонов портов и/или IP-адресов в качестве разделителя используем запятую.

Кроме того, каждое задание может исключать из сканирования определенные хосты по FQDN и/или IP. Исключение подсетей или указание IP-адреса в формате CIDR не поддерживается. То есть, в качестве исключения допускается указание только конкретных IP-адресов и/или имён, разделенных запятыми.

Creating a new network scanning job for the x509 module in Icinga Web 2

После создания задания сканирования и его выбора нам станет доступна вкладка "Schedule". Расписания по сути являются конфигурацией на основе cron для периодического запуска заданий через заданный интервал. Каждому заданию разрешено иметь несколько расписаний, которые можно запускать независимо друг от друга.

Для примера, создадим расписание, которое запускается еженедельно по пятницам и сканирует все объекты, которые еще не сканировались или чье последнее сканирование прошло более 1 недели.

Creating a schedule for a network scanning job for the x509 module in Icinga Web 2

Историю запуска задания по заданному расписанию, в том числе количество опрошенных хостов и время, затраченное на сканирование, мы можем видеть на вкладке "Job Activities".

 

Настройка Server Name Indication

Если в инфраструктуре имеется несколько виртуальных хостов под одним IP-адресом, можно их описать на вкладке "SNI". Каждая запись определяет IP-адрес с несколькими связанными с ним именами хостов, перечисленными через запятую.

Setting up Server Name Indication

Описанная конфигурация SNI используются при запуске всех заданий сканирования.

 

Проверка службы icinga-x509.service

Служба systemd, поставляемая вместе с пакетом, использует команду jobs и отвечает за запуск всех настроенных заданий по расписанию. Имейте ввиду, что если модуль "x509" устанавливался не из пакетов, то вам придется настроить его как службу systemd самостоятельно, скопировав пример определения службы из /usr/share/icingaweb2/modules/x509/config/systemd/icinga-x509.service в /etc/systemd/system/icinga-x509.service.

В Debian 12 эта служба уже настроена на автоматический запуск и запущена.

# systemctl status icinga-x509.service

 icinga-x509.service - Icinga Certificate Monitoring Jobs Runner
     Loaded: loaded (/lib/systemd/system/icinga-x509.service; enabled; preset: enabled)
     Active: active (running) since Tue 2024-05-28 16:29:58 MSK; 1h 11min ago
   Main PID: 6410 (icingacli)
      Tasks: 1 (limit: 19136)
     Memory: 16.5M
        CPU: 129ms
     CGroup: /system.slice/icinga-x509.service
             └─6410 /usr/bin/php /usr/bin/icingacli x509 jobs run

May 28 16:29:58 KOM-MON01 systemd[1]: Started icinga-x509.service - Icinga Certificate Monitoring Jobs Runner.

 

Интеграция с механизмами оповещений в Icinga

Помимо выше обозначенных средств визуализации, которые предоставляет модуль "x509", у нас имеется возможность использования данных о сертификатах, собранных в БД модуля, непосредственно с механизмами мониторинга и оповещений Icinga. Для этого нам потребуется описать в конфигурации Icinga новую Команду с вызовом по следующим примерам:

# icingacli x509 check host --ip 10.0.10.78
# icingacli x509 check host --host mail.example.org
# icingacli x509 check host --ip 10.0.10.78 --host mail.example.org --port 993

То есть, подразумевается, что в качестве исходных данных для check-команды Icinga будет использоваться информация из БД модуля "x509".

При вызове команды может использоваться дополнительная опция --allow-self-signed, которая допускает использование само-подписанного сертификата (в этом случае не выполняется проверка сертификата ЦС, а проверяется только срок действия сертификата).

В нашем случае в конфигурации Icinga Director описана команда с вызовом "icingacli x509 check host" и параметрами, через которые будет определено имя/IP узла и пороговые значения для срока действия обнаруженных сертификатов (примеры такой конфигурации мы рассматривали неоднократно).

Setting up the icingacli x509 check host check command in Icinga Director

В данном примере настроен мониторинг сертификата одной из веб-служб выделенного сервера c WARNING оповещением за 2 месяца и CRITICAL оповещением за 15 дней до истечения срока действия сертификата:

The result of the icingacli x509 check host check command in Icinga Web 2

Соответственно, администратор сервера заранее получит оповещение о приближающемся окончании срока действия сертификата и необходимости его превентивной замены.

 

Дополнительные возможности CLI и некоторые нюансы

Помимо средств автоматического периодического сканирования по расписанию посредствам службы icinga-x509.service в документации описаны примеры того, как можно вручную произвести сканирование из командной строки: "Scan Command". Например, чтобы форсировано запустить полное сканирование, настроенного ранее через веб-интерфейс задания, не учитывая привязанные к этому заданию расписания расписания, можем выполнить команду вида:

# icingacli x509 scan --job "My Scan Job" --full

Существует вариант более быстрого сканирования с заменой опции --full на опцию --rescan, который подразумевает сканирование только тех хостов, которые уже попали в базу данных модуля "x509" при ранее выполненном полном сканировании. Однако в текущей версии модуля v1.3.2 в нашем окружении эта опция оказалась неработоспособна. Но следует отметить, что и полное сканирование работает достаточно быстро и вполне может использоваться на регулярной, например, ежедневной основе.

Здесь стоит отметить тот факт, что эта самая высокая скорость сканирования сети может привнести ещё одну проблему, которая была также обнаружена нами в ходе эксплуатации текущей версии модуля "x509". При сканировании сети мы заметили, что не всегда происходит обнаружение некоторых хостов с устаревшими протоколами шифрования и не очень резвым временем ответа. Например, это проявилось при опросе устаревших модулей управления HP iLO2. В качестве обходного решения в этой ситуации можно использовать увеличение таймаута ожидания ответа в скрипте /library/X509/Job.php со значения по умолчанию - 5.0, то есть 5 секунд, например, до 60.0.

static response timeout value when scanning the network in the Job.php script

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

Было бы неплохо, если бы в перспективе авторы модуля "x509" вынесли этот важный параметр, позволяющий улучшить успешность опроса в разных условиях, в глобальную конфигурацию модуля. Как, впрочем, аналогичное пожелание есть и относительно возможности понижения допустимого уровня безопасности SSL Security Level для поддержки олдскульных железок.


Процедура валидации найденных путём сетевого сканирования сертификатов выполняется в автоматическом режиме и подразумевает использование встроенного в БД модуля "x509" хранилища корневых сертификатов доверенных ЦС. Однако, на этапе настройки могут возникнуть ситуации, когда в хранилище корневых сертификатов импортируются дополнительные сертификаты (ранее упомянутой командой "icingacli x509 import") уже после того, как проведено полное сканирование сети. И в этом случае часть обнаруженных в сети сертификатов будут отображаться как незаслуживающие доверия, хотя мы только что провели дозагрузку недостающих в БД доверенных корневых сертификатов. В этой ситуации, чтобы провести повторную форсированную валидацию всех сертификатов, можно воспользоваться командой следующего вида:

# icingacli x509 verify

В ходе внедрения модуля "x509" и первичных экспериментов по сканированию сети в базу данных модуля можно "наловить" ненужных записей о сертификатах, информацию о которых в последствии, возможно, захочется удалить. Для этого можно воспользоваться командой очистки БД. Например, чтобы удалить из БД данные о всех сертификатах, обнаруженных и добавленных в БД позднее двух дней назад, выполним команду в следующего вида:

# icingacli x509 cleanup --since-last-scan="2 days"

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

Добавить комментарий