Интеграция KICS for Networks API KICS for Networks Использование Kaspersky Industrial CyberSecurity for Networks API В Kaspersky Industrial CyberSecurity for Networks реализован интерфейс прикладного программирования, который обеспечивает доступ к функциям программы для сторонних приложений. В комплект поставки Kaspersky Industrial CyberSecurity for Networks входит пакет с описаниями спецификаций для представления данных в запросах к серверу REST API.  Сервер REST API функционирует на компьютере Сервера Kaspersky Industrial CyberSecurity for Networks и обрабатывает запросы с использованием архитектурного стиля взаимодействия REST. Обращения к серверу REST API выполняются по протоколу HTTPS. Вы можете настроить параметры сервера REST API в разделе  Параметры  →  Серверы подключений  (в том числе заменить используемый по умолчанию самоподписанный сертификат на доверенный). Для представления данных в запросах и ответах используется формат JSON. Документация с описанием запросов на основе архитектурного стиля REST публикуется в виде онлайн-справки на странице  Kaspersky Online Help . ОТКРЫТЬ ДОКУМЕНТАЦИЮ С ОПИСАНИЕМ ЗАПРОСОВ К СЕРВЕРУ REST API, версия 3 ОТКРЫТЬ ДОКУМЕНТАЦИЮ С ОПИСАНИЕМ ЗАПРОСОВ К СЕРВЕРУ REST API, версия 4 Примеры использования Рассмотрим пример использования API для локального экспорта данных об устройствах из KICS for Networks. Для начала нужно создать коннектор, с типом Generic и именем, например, GetDeviceAll , указать пароль и адрес сервера, узел размещения коннектора в нашем случае будет такой же, как и адрес сервера (Рисунок 1). После создания коннектора у вас скачается файл свертки, который будет называться как коннектор_GetDeviceAll.zip. Рисунок 1 – Создание коннектора Далее необходимо создать директории для корректной работы кода. Впишите команды ниже последовательно: cd mkdir GetDeviceAll && cd GetDeviceAll mkdir connector && cd connector && cp /opt/kaspersky/kics4net-connectors/libexec/default_connectors_registrar.py default_connectors_registrar.py Далее в папку connector необходимо положить файл свертки коннектор_GetDeviceAll.zip, который мы получили при создании коннектора и распаковать его в эту директорию командой: unzip -d коннектор_GetDeviceAll коннектор_GetDeviceAll.zip Далее необходимо зарегистрировать коннектор командой: sudo python3 default_connectors_registrar.py create Далее необходимо выполнить действия показанные на Рисунке 2: ввести имя коннектора GetDeviceAll, ввести полный путь до файла свертки коннектор_GetDeviceAll.zip (/home//GetDeviceAll/connector/коннектор_GetDeviceAll.zip), ввести пароль, который вы указывали при создании коннектора в веб-интерфейсе и согласиться с запуском службы коннектора GetDeviceAll. Рисунок 2 – Регистрация коннектора После этого статус коннектора в KICS for Networks поменяется с “Ожидает регистрации” на “Работает” Рисунок 3 – Статус работы коннектора в Веб-консоли Теперь можно перейти к написанию кода, который будет взаимодействовать с KICS for Networks по API. Код будет писаться на Python, но вы можете использовать любой удобный для вас язык  Для начала напишем класс подключения к API сервера: import logging import json import requests from requests.exceptions import RequestException from time import sleep class KicsApiClient: def __init__(self, metadata_path, cert_path, key_path): self.metadata_path = metadata_path self.cert_path = cert_path self.key_path = key_path self.base_url = None self.token = None self._initialize() def _initialize(self): with open(self.metadata_path, 'r', encoding='utf-8') as f: metadata = json.load(f) self.base_url = metadata.get('serverUri', '').rstrip('/') if not self.base_url.endswith('/kics/api'): self.base_url += '/kics/api' logging.info(f"Базовый URL API: {self.base_url}") self._authenticate() def _authenticate(self): url = f"{self.base_url}/auth/token?grant_type=certificate" resp = requests.post( url, cert=(self.cert_path, self.key_path), verify=False ) resp.raise_for_status() self.token = resp.json().get('access_token') if not self.token: raise ValueError("Аутентификация не удалась: токен не получен") logging.info("Аутентификация успешна") def _post_query(self, path, payload, offset=0, limit=1000, delay=1): all_items = [] headers = { 'Authorization': f'Bearer {self.token}', 'Content-Type': 'application/json' } while True: body = payload.copy() body.update({'offset': offset, 'limit': limit}) url = f"{self.base_url}{path}" try: resp = requests.post(url, headers=headers, json=body, verify=False) resp.raise_for_status() except RequestException as e: logging.error(f"Ошибка запроса к {url}: {e}") if hasattr(e, 'response') and e.response is not None: try: logging.error(f"Текст ответа: {e.response.text}") except: pass raise try: json_resp = resp.json() except ValueError: break data = json_resp.get('values') or json_resp.get('elements') if not data: break all_items.extend(data) logging.info(f"Получено {len(data)} записей из {path}, всего: {len(all_items)}") if len(data) < limit: break offset += limit sleep(delay) return all_items Теперь добавим в этот класс функции которые будут вызываться в классе экспорта данных: def get_device_applications(self): return self._post_query('/v4/device-apps/query', {}) def get_device_patches(self): return self._post_query('/v4/device-patches/query', {}) def get_device_users(self): return self._post_query('/v4/device-users/query', {})  Перейдем к написанию класса, который будет отвечать за экспорт данных из KICS for Networks по API и будет конвертировать полученные данные в csv файл: import csv class CsvExporter: @staticmethod def export_dicts(items, filename): if not items: logging.warning(f"Нет данных для файла {filename}") return fieldnames = set() for item in items: fieldnames.update(item.keys()) fieldnames = sorted(fieldnames) headers_rus = [RUSSIAN_HEADERS.get(fn, fn) for fn in fieldnames] with open(filename, 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f, delimiter=';') writer.writerow(headers_rus) for item in items: row = [item.get(fn, '') for fn in fieldnames] writer.writerow(row) logging.info(f"Экспортировано {len(items)} записей в {filename}") В этом классе используется глобальная переменная RUSSIAN_HEADERS, которая хранит в себе ключ - значение, для перевода ключей на русский язык:  RUSSIAN_HEADERS = { 'Id': 'Идентификатор', 'id': 'Идентификатор', 'DeviceId': 'Идентификатор устройства', 'device': 'Устройство', 'ApplicationName': 'Название приложения', 'name': 'Имя', 'fullName': 'Полное имя', 'ApplicationVersion': 'Версия приложения', 'PatchVersion': 'Версия патча', 'UserName': 'Имя пользователя', 'description': 'Описание', 'Domain': 'Домен', 'groups': 'Группы', 'isDisabled': 'Отключен', 'isLockedOut': 'Заблокирован', 'lastSeen': 'Последний вход', 'canChangePassword': 'Можно сменить пароль', 'mustChangePassword': 'Требуется смена пароля', 'passwordNeverExpires': 'Пароль не истекает', 'sid': 'SID', 'source': 'Источник', 'installedOn': 'Установлено на', 'version': 'Версия', 'vendor': 'Производитель', 'program': 'Программа', 'size': 'Размер', } Почти все готово! Осталось написать main, который объединит в себе весь функционал нашего кода: import os import sys def main(): BASE_DIR = os.path.dirname(os.path.abspath(__file__)) META = os.path.join(BASE_DIR, 'connector', 'коннектор_GetDeviceAll', 'metadata.json') CERT = '/var/opt/kaspersky/kics4net-connectors/instances/GetDeviceAll/ssl/connector.crt' KEY = '/var/opt/kaspersky/kics4net-connectors/instances/GetDeviceAll/ssl/connector.key' for path in (META, CERT, KEY): if not os.path.exists(path): logging.error(f"Не найден файл: {path}") sys.exit(1) client = KicsApiClient(META, CERT, KEY) apps = client.get_device_applications() patches = client.get_device_patches() users = client.get_device_users() CsvExporter.export_dicts(apps, 'DeviceApplications.csv') CsvExporter.export_dicts(patches, 'DevicePatches.csv') CsvExporter.export_dicts(users, 'DeviceUsers.csv') if __name__ == '__main__': main() Отлично! Код готов, теперь необходимо перенести файл GetDeviceAll.py в папку GetDeviceAll любым известным вам способом. В конечном счете директория должна выглядеть вот так: └─./home/ ├─ ./GetDeviceAll │ ├─ ./connector │  │  ├─ . /коннектор_GetDeviceAll.zip │  │  ├─ ./default_connectors_registrar.py │  │  └─ ./коннектор_GetDeviceAll │  │ ├─ ./certificates.pfx │  │ ├─ ./metadata.json │  │ └─ ./webserver.pem └ └─ ./GetDeviceAll.py Далее в консоли перейдем в директорию GetDeviceAll командой: cd /home/  И запустить файл GetDeviceAll.py командой: sudo python3 GetDeviceAll.py В итоге мы получили 3 файла DeviceApplications.csv, DevicePatches.csv, DeviceUsers.csv которые находятся в этой же директории GetDeviceAll. Рисунок 4 – Вывод логов скрипта по экспорту данных Рисунок 5 – Результат работы скрипта P.S. Полный код :) import os import sys import json import logging import requests import csv from requests.exceptions import RequestException import urllib3 from time import sleep urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) logging.basicConfig( format='%(asctime)s %(levelname)s %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=logging.INFO ) RUSSIAN_HEADERS = { 'Id': 'Идентификатор', 'id': 'Идентификатор', 'DeviceId': 'Идентификатор устройства', 'device': 'Устройство', 'ApplicationName': 'Название приложения', 'name': 'Имя', 'fullName': 'Полное имя', 'ApplicationVersion': 'Версия приложения', 'PatchVersion': 'Версия патча', 'UserName': 'Имя пользователя', 'description': 'Описание', 'Domain': 'Домен', 'groups': 'Группы', 'isDisabled': 'Отключен', 'isLockedOut': 'Заблокирован', 'lastSeen': 'Последний вход', 'canChangePassword': 'Можно сменить пароль', 'mustChangePassword': 'Требуется смена пароля', 'passwordNeverExpires': 'Пароль не истекает', 'sid': 'SID', 'source': 'Источник', 'installedOn': 'Установлено на', 'version': 'Версия', 'vendor': 'Производитель', 'program': 'Программа', 'size': 'Размер', } class KicsApiClient: def __init__(self, metadata_path, cert_path, key_path): self.metadata_path = metadata_path self.cert_path = cert_path self.key_path = key_path self.base_url = None self.token = None self._initialize() def _initialize(self): with open(self.metadata_path, 'r', encoding='utf-8') as f: metadata = json.load(f) self.base_url = metadata.get('serverUri', '').rstrip('/') if not self.base_url.endswith('/kics/api'): self.base_url += '/kics/api' logging.info(f"Базовый URL API: {self.base_url}") self._authenticate() def _authenticate(self): url = f"{self.base_url}/auth/token?grant_type=certificate" resp = requests.post( url, cert=(self.cert_path, self.key_path), verify=False ) resp.raise_for_status() self.token = resp.json().get('access_token') if not self.token: raise ValueError("Аутентификация не удалась: токен не получен") logging.info("Аутентификация успешна") def _post_query(self, path, payload, offset=0, limit=1000, delay=1): all_items = [] headers = { 'Authorization': f'Bearer {self.token}', 'Content-Type': 'application/json' } while True: body = payload.copy() body.update({'offset': offset, 'limit': limit}) url = f"{self.base_url}{path}" try: resp = requests.post(url, headers=headers, json=body, verify=False) resp.raise_for_status() except RequestException as e: logging.error(f"Ошибка запроса к {url}: {e}") if hasattr(e, 'response') and e.response is not None: try: logging.error(f"Текст ответа: {e.response.text}") except: pass raise try: json_resp = resp.json() except ValueError: break data = json_resp.get('values') or json_resp.get('elements') if not data: break all_items.extend(data) logging.info(f"Получено {len(data)} записей из {path}, всего: {len(all_items)}") if len(data) < limit: break offset += limit sleep(delay) return all_items def get_device_applications(self): return self._post_query('/v4/device-apps/query', {}) def get_device_patches(self): return self._post_query('/v4/device-patches/query', {}) def get_device_users(self): return self._post_query('/v4/device-users/query', {}) class CsvExporter: @staticmethod def export_dicts(items, filename): if not items: logging.warning(f"Нет данных для файла {filename}") return fieldnames = set() for item in items: fieldnames.update(item.keys()) fieldnames = sorted(fieldnames) headers_rus = [RUSSIAN_HEADERS.get(fn, fn) for fn in fieldnames] with open(filename, 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f, delimiter=';') writer.writerow(headers_rus) for item in items: row = [item.get(fn, '') for fn in fieldnames] writer.writerow(row) logging.info(f"Экспортировано {len(items)} записей в {filename}") def main(): BASE_DIR = os.path.dirname(os.path.abspath(__file__)) META = os.path.join(BASE_DIR, 'connector', 'коннектор_GetDeviceAll', 'metadata.json') CERT = '/var/opt/kaspersky/kics4net-connectors/instances/GetDeviceAll/ssl/connector.crt' KEY = '/var/opt/kaspersky/kics4net-connectors/instances/GetDeviceAll/ssl/connector.key' for path in (META, CERT, KEY): if not os.path.exists(path): logging.error(f"Не найден файл: {path}") sys.exit(1) client = KicsApiClient(META, CERT, KEY) apps = client.get_device_applications() patches = client.get_device_patches() users = client.get_device_users() CsvExporter.export_dicts(apps, 'DeviceApplications.csv') CsvExporter.export_dicts(patches, 'DevicePatches.csv') CsvExporter.export_dicts(users, 'DeviceUsers.csv') if __name__ == '__main__': main() Настройка передачи событий из KICS for Networks (версий 4.3 и 4.5) в KUMA Настройка интеграции выполняется в два этапа: сначала создается и настраивается коллектор в KUMA, затем создается коннектор в KICS for Networks. Настройка KUMA Перейдите в раздел «Ресурсы» и откройте вкладку «Коллекторы». Нажмите кнопку «+ Создать». В открывшемся окне укажите название коллектора. Рекомендуется использовать наименование продукта, тип подключения и порт (например, KICS_for_Networks_TCP\5160), чтобы в дальнейшем легко идентифицировать коллектор. На вкладке «Транспорт» укажите тип соединения (протокол) и порт, который будет использоваться для приема событий от источника. На вкладке «Парсинг событий» - «Настройки парсинга» выберите соответствующий нормализатор для обработки входящих событий. На вкладке «Маршрутизация» добавьте ранее созданные коррелятор и хранилище. Подробнее о развертывании этих компонентов см. в Справке по KUMA. На вкладке «Проверка параметров» нажмите кнопку «Сохранить и создать сервис». После создания коллектора скопируйте сгенерированную команду и выполните её в терминале сервера KUMA с правами администратора для развертывания сервиса. Настройка KICS for Networks Перейдите в раздел «Параметры» - «Коннекторы» и нажмите кнопку «+ Добавить коннектор». В карточке нового коннектора заполните поля: Тип коннектора: SIEM. Имя коннектора: Произвольное наименование. Адрес сервера: IP-адрес узла, на котором развернут сервер KICS for Networks. Узел размещения коннектора: Server. Пользователь программы: Учетная запись администратора KICS for Networks. Адрес SIEM-сервера: IP-адрес узла, на котором развернут сервер KUMA. Номер порта: Порт, указанный при настройке коллектора KUMA (см. п. 4 раздела «Настройка KUMA»). Транспортный протокол: Протокол, указанный при настройке коллектора KUMA (см. п. 4 раздела «Настройка KUMA»). Нажмите кнопку «Сохранить». Убедитесь, что в свойствах созданного коннектора параметры имеют следующие значения: Включен: Да. Статус: Работает. Если значения отличаются, проверьте выполненные настройки и перезапустите коннектор (выполните последовательность «Выключить» - «Включить»). Перейдите в раздел «Параметры» - «Типы событий». Выберите типы событий, которые необходимо передавать в KUMA, и активируйте для них отправку через созданный коннектор. Проверка передачи событий В интерфейсе KUMA перейдите в раздел «События» и выполните опрос источников. Убедитесь в наличии событие об успешной аутентификации коннектора, которое должно появиться в момент его создания в KICS for Networks. Воспроизведите событие безопасности, например, запустите тестовый вирус на узле, который интегрирован с KICS for Networks. Убедитесь, что сработал модуль постоянной защиты KICS for Nodes (детектирование события на стороне источника). В интерфейсе KUMA снова перейдите в раздел «События» и выполните опрос. Убедитесь, что воспроизведенное событие безопасности успешно доставлено и отображается в KUMA. Интеграция с Zabbix Интеграция KICS for Networks 4.3 с Zabbix В данной статье описан порядок обеспечения мониторинга работоспособности сервисов  KICS for Networks 4.3 с помощью Zabbix. 1. Настройка сервера Zabbix          1.1         Подготовка системы Проверьте наличие локали en _ US . UTF -8: locale - a | grep en _ US Если локаль отсутствует, добавьте её: sudo sed -i "s/^#\s*\(en_US.UTF-8 UTF-8\)/\1/" /etc/locale.gen sudo locale-gen en_US.UTF-8 sudo update-locale en_US.UTF-8 1.2 Установка пакетов Zabbix Server sudo apt update sudo apt install -y zabbix-server-pgsql zabbix-frontend-php php-pgsql postgresql apache2 libapache2-mod-php 1.3 Настройка часового пояса в PHP Отредактировать файл /etc/php/*/apache2/php.ini : sudo nano /etc/php/*/apache2/php.ini Ctrl + o , Ctrl + x для сохранения и выхода Найти и раскомментировать строку [ Date ]: date.timezone = Europe/Moscow 1.4 Настройка PostgreSQL Создание базы данных и пользователя sudo -u postgres psql CREATE DATABASE zabbix; CREATE USER zabbix WITH PASSWORD 'Qwerty!@#123'; GRANT ALL PRIVILEGES ON DATABASE zabbix TO zabbix; \q Импорт схемы базы данных sudo -u postgres psql -d zabbix -c "GRANT ALL ON SCHEMA public TO zabbix;" sudo -u postgres zcat /usr/share/zabbix-server-pgsql/{schema,images,data}.sql.gz | PGPASSWORD='Qwerty!@#123' psql -U zabbix -d zabbix -h 127.0.0.1 1.5 Настройка мандатного доступа (МРД/МКЦ) Если на сервере Zabbix включены режимы "Воронеж" или "Смоленск", выполнить дополнительные настройки: Назначение меток безопасности: sudo pdpl - user - l 0:0 postgres sudo pdpl - user - l 0:0 zabbix Права на чтение базы меток Права на чтение базы меток : sudo setfacl -d -m u:postgres:r /etc/parsec/{macdb,capdb} sudo setfacl -R -m u:postgres:r /etc/parsec/{macdb,capdb} sudo setfacl -m u:postgres:rx /etc/parsec/{macdb,capdb} 1.6 Настройка Zabbix Server Отредактировать конфигурационный файл : sudo nano /etc/zabbix/zabbix_server.conf Указать параметры подключения к БД (в данном примере будем считать, что БД установлена на самом сервере Zabbix ): DBHost =127.0.0.1 DBName = zabbix  (может быть уже указано в файле) DBUser = zabbix (может быть уже указано в файле) DBPassword = Qwerty !@#123 (для примера взят пароль Qwerty!@#123) Ctrl + o , Ctrl + x для сохранения и выхода Запуск сервера sudo systemctl restart zabbix-server sudo systemctl enable zabbix-server sudo systemctl status zabbix-server 1.7 Настройка веб-интерфейса Копирование конфигурационного файла   sudo cp / usr / share / zabbix / conf / zabbix . conf . php . example / etc / zabbix / zabbix . conf . php sudo chown www-data:www-data /etc/zabbix/zabbix.conf.php sudo chmod 644 /etc/zabbix/zabbix.conf.php Настройка пароля в конфигурации Отредактировать конфигурационный файл: sudo nano /etc/zabbix/zabbix.conf.php Найти строку с типом СУБД и указать: $DB['TYPE'] = 'POSTGRESQL'; Найти строку с паролем и указать: $ DB [' PASSWORD '] = ' Qwerty !@#123'; Ctrl + o , Ctrl + x для сохранения и выхода Включение конфигурации Zabbix в Apache sudo a 2 enconf zabbix - frontend - php sudo systemctl start apache2 sudo systemctl enable apache2 sudo systemctl reload apache2 1.8 Настройка AstraMode Для корректной работы веб-интерфейса добавьте в конфигурацию Apache: sudo nano /etc/apache2/apache2.conf Добавьте строку (только для тестовой среды): AstraMode off Ctrl + o , Ctrl + x для сохранения и выхода Перезагрузить Apache: sudo systemctl reload apache2 1.9 Проверка веб - интерфейса Открыть в браузере: http:///zabbix Учётные данные для входа (по умолчанию): ·   Username:  Admin ·   Password:  zabbix Должны отобразиться дашборды сервиса Zabbix 2. Настройка сервера KICS for Networtks 2.1 Установка Zabbix Agent sudo apt update sudo apt install -y zabbix-agent 2.2 Настройка конфигурации агента Отредактировать файл  /etc/zabbix/zabbix_agentd.conf: sudo nano /etc/zabbix/zabbix_agentd.conf Указать параметры: Server =< IP _сервера_ Zabbix > ServerActive= Hostname=kics4networks Ctrl + o , Ctrl + x для сохранения и выхода 2.3 Настройка прав для сбора данных аудита sudo usermod -aG adm zabbix 2.4 Создание пользовательского параметра для мониторинга сервиса kics4net-webserver Проверьте каталог, используемый директивой Include в файле /etc/zabbix/zabbix_agentd.conf: Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf Создание конфигурационного файла sudo mkdir -p /etc/zabbix/zabbix_agentd.conf.d/ sudo nano /etc/zabbix/zabbix_agentd.conf.d/kics_services.conf Вставьте содержимое : UserParameter=kics.status[*],test "$(systemctl is-active "$1" 2>/dev/null)" = "active" && echo 1 || echo 0 Ctrl + o , Ctrl + x для сохранения и выхода Установка прав sudo chown zabbix:zabbix /etc/zabbix/zabbix_agentd.d/kics_services.conf sudo chmod 644 /etc/zabbix/zabbix_agentd.d/kics_services.conf 2.5 Проверка директивы Include в основном конфиге Убедиться, что в файле /etc/zabbix/zabbix_agentd.conf присутствует строка: Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf sudo nano /etc/zabbix/zabbix_agentd.conf Проверьте корректность конфигурации: sudo zabbix _ agentd - T Ожидаемый результат: Validation successful 2.6 Запуск и проверка агента sudo systemctl restart zabbix-agent sudo systemctl enable zabbix-agent sudo systemctl status zabbix-agent 2.7 Проверка пользовательского параметра На сервере KICS for Networks выполнить проверку: sudo zabbix_agentd -t 'kics.status[kics4net-webserver]' Ожидаемый результат: (если сервис запущен) kics.status[kics4net-webserver] [u|1] или kics.status[kics4net-webserver] [t|1] С сервера Zabbix выполнить проверку: zabbix_get -s -p 10050 -k "kics.status[kics4net-webserver]" Ожидаемый результат: (если сервис запущен): 1 3. Настройка мониторинга в веб-интерфейсе Zabbix 3.1 Импорт шаблона Astra Linux (опционально) Войти в веб-интерфейс Zabbix (Admin / zabbix) Перейти : Data collection ( или Configuration)  →  Templates Нажать Import Выбрать файл : /usr/share/zabbix/conf/zabbix_astra_template.xml Нажать Import два раза 3.2 Создание узла сети (Host) Перейти : Data collection ( или Configuration)  →  Hosts Нажать Create host Заполнить форму: Host name kics4networks (строго совпадает с Hostname в конфиге агента) Groups Linux servers Interfaces Agent Agent interface IP-адрес сервера KICS for Networks, порт 10050 Нажать Add Спустя примерно 1 минуту в графе Availability на строке kics 4 networks значок ZBX должен окраситься в зелёный цвет. 3.3 Создание элемента данных (Item) для мониторинга сервиса kics4net-webserver Перейти : Data collection ( или Configuration)  →  Hosts На строке узла kics 4 networks нажать на Items Нажать  Create item Заполнить форму: Name KICS: kics4net-webserver service status Type Zabbix agent Key kics.status[kics4net-webserver] Type of information Numeric (unsigned) Update interval 30s History storage period 90d Нажать  Add Аналогично можно добавить Item для мониторинга других сервисов KICS for Networks , заменив в параметре “ Key ” значение kics4net-webserver на следующие kics4net kics4net-apm kics4net-asset-config-repo kics4net-asset-inventory kics4net-blob-storage kics4net-config-control-orchestrator kics4net-connectors-launcher kics4net-email-gateway kics4net-epp-proxy kics4net-fts kics4net-nats-server kics4net-oval-facade kics4net-postgresql kics4net-report-builder kics4net-report-data-source kics4net-report-renderer kics4net-report-templates-catalog kics4net-report-templates-catalog-view kics4net-responses-manager kics4net-risk-oval-detector kics4net-scan-oval-manager kics4net-scap-manager kics4net-scap-manager-view kics4net-scheduler kics4net-secrets kics4net-task-manager kics4net-task-manager-view kics4net-vault kics4net-webserver 3.4 Создание триггера для оповещения На вкладке  Items  найти созданный элемент Перейти на вкладку   Triggers   →   Create trigger Заполнить форму: Name KICS: kics4net-webserver is not running Severity High Expression last(/kics4networks/kics.status[kics4net-webserver])=0 Нажать  Add 3.5 Создание агрегирующего триггера для оповещения об остановке хотя бы одной из служб KICS for Networks 3.5.1 Добавить UserParameter для обнаружения сервисов Создать файл: sudo nano /etc/zabbix/zabbix_agentd.conf.d/kics_discovery.conf Содержимое :   UserParameter=kics.discovery,echo '{"data":[{"{#SERVICE}":"kics4net"},{"{#SERVICE}":"kics4net-apm"},{"{#SERVICE}":"kics4net-asset-config-repo"},{"{#SERVICE}":"kics4net-asset-inventory"},{"{#SERVICE}":"kics4net-blob-storage"},{"{#SERVICE}":"kics4net-config-control-orchestrator"},{"{#SERVICE}":"kics4net-connectors-launcher"},{"{#SERVICE}":"kics4net-email-gateway"},{"{#SERVICE}":"kics4net-epp-proxy"},{"{#SERVICE}":"kics4net-fts"},{"{#SERVICE}":"kics4net-nats-server"},{"{#SERVICE}":"kics4net-oval-facade"},{"{#SERVICE}":"kics4net-postgresql"},{"{#SERVICE}":"kics4net-report-builder"},{"{#SERVICE}":"kics4net-report-data-source"},{"{#SERVICE}":"kics4net-report-renderer"},{"{#SERVICE}":"kics4net-report-templates-catalog"},{"{#SERVICE}":"kics4net-report-templates-catalog-view"},{"{#SERVICE}":"kics4net-responses-manager"},{"{#SERVICE}":"kics4net-risk-oval-detector"},{"{#SERVICE}":"kics4net-scan-oval-manager"},{"{#SERVICE}":"kics4net-scap-manager"},{"{#SERVICE}":"kics4net-scap-manager-view"},{"{#SERVICE}":"kics4net-scheduler"},{"{#SERVICE}":"kics4net-secrets"},{"{#SERVICE}":"kics4net-task-manager"},{"{#SERVICE}":"kics4net-task-manager-view"},{"{#SERVICE}":"kics4net-vault"},{"{#SERVICE}":"kics4net-webserver"}]}' Перезапустить агент :   sudo systemctl restart zabbix-agent Проверить UserParameter для обнаружения сервисов: sudo zabbix_agentd -t kics.discovery Должен вернуться JSON.   3.5.2 Создать Discovery Rule На сервере Zabbix перейти на вкладки: Configuration → Hosts → KICS for Networks → Discovery → Create discovery rule Указать параметры для правила обнаружения: Name: KICS Services Discovery Type: Zabbix agent Key: kics.discovery Update interval: 1h 3.5.3 Создать Item Prototype Внутри Discovery Rule: Item prototypes → Create item prototype Указать параметры : Name: Service {#SERVICE} status Type: Zabbix agent Key: kics.status[{#SERVICE}] Type of information: Numeric (unsigned) Update interval: 1m 3.5.4 Создать Trigger Prototype Внутри того же Discovery Rule открыть: Trigger prototypes → Create trigger prototype Указать параметры : Имя : Service {#SERVICE} is stopped Выражение : last(/KICS for Networks/kics.status[{#SERVICE}])=0 Severity: High После выполнения Discovery Zabbix автоматически создаст: 1) Элементы данных : Service kics4net status Service kics4net-apm status .. Service kics4net-webserver status 2) Триггеры : Service kics4net is stopped Service kics4net-apm is stopped   ... Service kics4net-webserver is stopped   Если остановить один из сервисов KICS for Networks : sudo systemctl stop kics4net-webserver то в Problems появится новое сообщение : Service kics4net-webserver is stopped Инструкция по настройке коннектора KUMA в KICS for Networks Коннектор KUMA обеспечивает интеграцию KICS for Networks и Kaspersky Unified Monitoring and Analysis Platform в части отправки сведений об устройствах и рисках, а также применения команд на изменение статусов устройств.       Для настройки коннектора: 1. В интерфейсе KICS for Networks перейдите в раздел «Параметры», выберите вкладку «Коннекторы» и нажмите кнопку «Добавить коннектор». 2. В открывшейся карточке введите имя коннектора и адрес узла, на котором будет размещаться коннектор, а также установите пароль для доступа к сертификату коннектора, после чего нажмите кнопку «Сохранить». 3. Дождитесь автоматического сохранения архива с сертификатом коннектора. Архив сохраняется в каталог загрузок вашего браузера. На текущем шаге коннектор должен иметь статус «Ожидает регистрации» и признак «Нет» по параметру «Включён». 4. В интерфейсе KUMA перейдите в раздел «Интеграции», выберите вкладку «KICS/KATA» и нажмите кнопку «Добавить параметры для нового тенанта». 5. В открывшейся карточке выберите тенант Main, установите интервал обновления данных и нажмите кнопку «Добавить». 6. В карточке подключения добавьте файл свёртки и введите ранее установленный пароль для сертификата, после чего нажмите кнопку «Добавить». 7. В карточке настройки интеграции проверьте корректность адреса сервера KICS for Networks, нажмите кнопку «Импортировать активы KICS/KATA», после чего нажмите кнопку «Сохранить». 8. В интерфейсе KUMA перейдите в раздел «Активы» и убедитесь в наличии в системе информации, полученной об активах от соответствующего источника. 9. Выберите интересующий вас актив и откройте его карточку, убедитесь в наличии информации об активе в карточке актива. Добавление активов других источников выполняется аналогично.