Модуль "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) для создания нового ресурса БД.
Создадим новый ресурс БД с типом SQL Database, описывающий параметры подключения к ранее созданной нами базе данных "x509".
Вернёмся в настройки модуля "x509" и укажем вышеописанный ресурс БД в качестве бакенда.
Теперь можно считать, что модуль установлен и интегрирован в 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 Overview" по каждому сертификату можно получить подробнейшую информацию о его атрибутах.
Создание заданий сканирования и из расписаний
В разделе "Configuration" переходим к настройке заданий сканирования сети ("Job") на предмет обнаружения X.509 сертификатов. Заданию сканирования можно присваивать любое удобное имя, но не стоит увлекаться спец.символами, так как эти имена будут использоваться для запуска сканирования из CLI.
Каждое задание сканирования может иметь один или несколько диапазонов IP-адресов и один или несколько диапазонов портов. Диапазоны IP-адресов необходимо указывать в формате CIDR. Диапазоны портов разделяются дефисом (-). При указании нескольких диапазонов портов и/или IP-адресов в качестве разделителя используем запятую.
Кроме того, каждое задание может исключать из сканирования определенные хосты по FQDN и/или IP. Исключение подсетей или указание IP-адреса в формате CIDR не поддерживается. То есть, в качестве исключения допускается указание только конкретных IP-адресов и/или имён, разделенных запятыми.
После создания задания сканирования и его выбора нам станет доступна вкладка "Schedule". Расписания по сути являются конфигурацией на основе cron для периодического запуска заданий через заданный интервал. Каждому заданию разрешено иметь несколько расписаний, которые можно запускать независимо друг от друга.
Для примера, создадим расписание, которое запускается еженедельно по пятницам и сканирует все объекты, которые еще не сканировались или чье последнее сканирование прошло более 1 недели.
Историю запуска задания по заданному расписанию, в том числе количество опрошенных хостов и время, затраченное на сканирование, мы можем видеть на вкладке "Job Activities".
Настройка Server Name Indication
Если в инфраструктуре имеется несколько виртуальных хостов под одним IP-адресом, можно их описать на вкладке "SNI". Каждая запись определяет IP-адрес с несколькими связанными с ним именами хостов, перечисленными через запятую.
Описанная конфигурация 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 узла и пороговые значения для срока действия обнаруженных сертификатов (примеры такой конфигурации мы рассматривали неоднократно).
В данном примере настроен мониторинг сертификата одной из веб-служб выделенного сервера c WARNING оповещением за 2 месяца и CRITICAL оповещением за 15 дней до истечения срока действия сертификата:
Соответственно, администратор сервера заранее получит оповещение о приближающемся окончании срока действия сертификата и необходимости его превентивной замены.
Дополнительные возможности 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.
Это незначительно увеличивает время сканирования, но позволяет успешно опросить "медленно соображающие" хосты.
Было бы неплохо, если бы в перспективе авторы модуля "x509" вынесли этот важный параметр, позволяющий улучшить успешность опроса в разных условиях, в глобальную конфигурацию модуля. Как, впрочем, аналогичное пожелание есть и относительно возможности понижения допустимого уровня безопасности SSL Security Level для поддержки олдскульных железок.
Процедура валидации найденных путём сетевого сканирования сертификатов выполняется в автоматическом режиме и подразумевает использование встроенного в БД модуля "x509" хранилища корневых сертификатов доверенных ЦС. Однако, на этапе настройки могут возникнуть ситуации, когда в хранилище корневых сертификатов импортируются дополнительные сертификаты (ранее упомянутой командой "icingacli x509 import") уже после того, как проведено полное сканирование сети. И в этом случае часть обнаруженных в сети сертификатов будут отображаться как незаслуживающие доверия, хотя мы только что провели дозагрузку недостающих в БД доверенных корневых сертификатов. В этой ситуации, чтобы провести повторную форсированную валидацию всех сертификатов, можно воспользоваться командой следующего вида:
# icingacli x509 verify
В ходе внедрения модуля "x509" и первичных экспериментов по сканированию сети в базу данных модуля можно "наловить" ненужных записей о сертификатах, информацию о которых в последствии, возможно, захочется удалить. Для этого можно воспользоваться командой очистки БД. Например, чтобы удалить из БД данные о всех сертификатах, обнаруженных и добавленных в БД позднее двух дней назад, выполним команду в следующего вида:
# icingacli x509 cleanup --since-last-scan="2 days"
При этом удаляться не только данные о раннее обнаруженных сертификатах, но и об истории выполнения автоматических заданий обнаружения.
Добавить комментарий