Полный гайд: OCS Inventory + GLPI + Wazuh/OpenSearch + Git+Ansible

Полный гайд: OCS Inventory + GLPI + Wazuh/OpenSearch + Git+Ansible. Инвентаризация, CMDB, тикетирование, SIEM, аудит, автоматизация

2026.04.19                  


Полный гайд: OCS Inventory + GLPI + Wazuh/OpenSearch + Git+AnsibleПолный гайд: OCS Inventory + GLPI + Wazuh/OpenSearch + Git+Ansible

Важно:

  • С версии 4.3 Wazuh официально перешёл с Elasticsearch на OpenSearch. В гайде используется поддерживаемый стек Wazuh 4.8+ (Indexer = OpenSearch 2.x). Если вы обязаны использовать Elastic 7/8, потребуется кастомная интеграция через Logstash/Beats, которая не поддерживается Wazuh официально.

Архитектура и потоки данных

[Git] ←→ [Ansible] → развертывает и конфигурирует:
   ├─ OCS Inventory Server ←(агенты)→ endpoints
   ├─ GLPI (CMDB/Helpdesk) ←(плагин OCSNG)→ синхронизация активов
   └─ Wazuh Manager + OpenSearch + Dashboard ←(агенты/логи)→ аудит/SIEM
        └─ (через API/скрипты) → GLPI: авто-тикеты на критические события

Рекомендуемая минимальная инфраструктура (prod):

Роль CPU RAM Disk OS
DB (MariaDB) 2 4 GB 50 GB SSD Ubuntu 22.04/24.04
App (OCS+GLPI+PHP) 2 4 GB 40 GB Ubuntu 22.04/24.04
SIEM (Wazuh+OpenSearch) 4 8–16 GB 200 GB NVMe Ubuntu 22.04/24.04
CI/Git/Ansible 1 2 GB 20 GB Ubuntu 22.04/24.04

0. Подготовка: Git + Ansible (фундамент автоматизации)

0.1. Структура репозитория

mkdir -p it-infra-stack/{roles,playbooks,group_vars,host_vars,templates,secrets}
cd it-infra-stack
git init
echo -e "*.pyc\n*.swp\nsecrets/*\n!secrets/.gitkeep\nroles/.DS_Store" > .gitignore

0.2. Установка Ansible и базовые настройки

sudo apt update && sudo apt install -y ansible git python3-pip
pip3 install --user ansible-lint yamllint molecule
ansible-galaxy collection install community.general community.mysql community.docker

0.3. Базовый ansible.cfg

[defaults]
inventory = ./inventory
roles_path = ./roles
vault_password_file = ~/.ansible-vault-pass
remote_user = deploy
host_key_checking = False
pipelining = True

[privilege_escalation]
become = True
become_method = sudo
become_user = root

0.4. Инвентарь (inventory/hosts.ini)

[db]
db1 ansible_host=10.0.1.10

[app]
app1 ansible_host=10.0.1.20

[siem]
siem1 ansible_host=10.0.1.30

[all:vars]
ansible_python_interpreter=/usr/bin/python3
ntp_servers=pool.ntp.org

Секреты:

  • Храните пароли БД, API-токены, SSL-ключи в ansible-vault. Никогда не коммитьте открытые секреты.

1. OCS Inventory NG (инвентаризация железа/ПО)

1.1. Установка (Ubuntu/Debian)

# roles/ocs_inventory/tasks/main.yml
- name: Установить зависимости
  apt:
    name:
      - apache2
      - mariadb-server
      - libapache2-mod-php
      - php8.1 php8.1-mysql php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip php8.1-gd php8.1-intl
      - make
      - perl
    state: present

- name: Включить модули Apache
  apache2_module:
    name: "{{ item }}"
    state: present
  loop: [rewrite, ssl]

- name: Скачать и распаковать OCS Server
  unarchive:
    src: https://github.com/OCSInventory-NG/OCSInventory-ocsreports/releases/download/2.12.1/OCSNG_UNIX_SERVER-2.12.1.tar.gz
    dest: /opt/
    remote_src: yes

- name: Запустить установщик OCS
  shell: >
    ./setup.sh --noweb --noworker --nowizard --dbhost=127.0.0.1 --dbport=3306 --dbname=ocsweb --dbuser=ocs --dbpass={{ ocs_db_pass }} --adminpass={{ ocs_admin_pass }}
  args:
    chdir: /opt/OCSNG_UNIX_SERVER-2.12.1
  register: ocs_setup
  changed_when: ocs_setup.rc == 0

1.2. Настройка Apache и HTTPS

# /etc/apache2/sites-available/ocs-inventory.conf
<VirtualHost *:443>
    ServerName ocs.yourdomain.local
    DocumentRoot /usr/share/ocsinventory-reports/ocsreports
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/ocs.crt
    SSLCertificateKeyFile /etc/ssl/private/ocs.key

    <Directory /usr/share/ocsinventory-reports/ocsreports>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/ocs-error.log
    CustomLog ${APACHE_LOG_DIR}/ocs-access.log combined
</VirtualHost>
a2ensite ocs-inventory && systemctl restart apache2

1.3. Развёртывание агентов

- Windows:

OCS-NG-Windows-Agent-Setup.exe /S /SERVER=https://ocs.yourdomain.local/ocsinventory /INSTALL_DIR="C:\Program Files\OCS Inventory Agent"

- Linux:

`apt install ocsinventory-agent` + `/etc/ocsinventory/ocsinventory-agent.cfg` → `server = https://ocs.yourdomain.local/ocsinventory`

- macOS:

`.pkg` из официального сайта или Homebrew tap

Проверка: curl -k https://ocs.yourdomain.local/ocsinventory → HTTP 200 + XML-ответ.


2. GLPI (CMDB + тикетирование)

2.1. Установка GLPI 10.1+

# roles/glpi/tasks/main.yml
- name: Установить GLPI
  unarchive:
    src: https://github.com/glpi-project/glpi/releases/download/10.1.5/glpi-10.1.5.tgz
    dest: /var/www/
    remote_src: yes

- name: Настроить права
  file:
    path: /var/www/glpi
    owner: www-data
    group: www-data
    recurse: yes
    mode: '0755'

- name: Конфиг Apache для GLPI
  template:
    src: glpi.conf.j2
    dest: /etc/apache2/sites-available/glpi.conf
  notify: restart apache2

2.2. Плагин OCS Inventory NG для GLPI

  1. В GLPI: Настройка → Общие → Режим разработчика → Включить.
  2. Marketplace → поиск OCS Inventory NG → Install.
  3. Настройка → Плагины → OCSNG → указать URL OCS API, логин/пароль БД OCS.
  4. Синхронизация → выбрать правила маппинга (Computer → Asset, Software → Licenses и т.д.).

Автосинхронизация:

`crontab -u www-data -e` → `*/30 * * * * /usr/bin/php /var/www/glpi/front/cron.php --force ocsng`

2.3. Интеграция с AD/LDAP (опционально)

  • Настройка → Аутентификация → LDAP каталоги → настроить base DN, bind DN, фильтр (&(objectClass=user)(sAMAccountName=*)).

3. Wazuh + OpenSearch (логи, аудит, SIEM)

Важно:

  • Wazuh 4.8+ не поддерживает Elasticsearch. Используется OpenSearch 2.x из официального репозитория Wazuh.

3.1. Установка через официальный скрипт (рекомендуется)

curl -sO https://packages.wazuh.com/4.8/wazuh-install.sh
chmod +x wazuh-install.sh
./wazuh-install.sh -a siem1.yourdomain.local --generate-config-files

Скрипт развернёт:

  • wazuh-indexer (OpenSearch)
  • wazuh-server (Manager)
  • wazuh-dashboard (Kibana-аналог)

3.2. Ручная настройка через Ansible (для prod)

# roles/wazuh/tasks/main.yml
- name: Добавить репозиторий Wazuh
  apt_key:
    url: https://packages.wazuh.com/key/GPG-KEY-WAZUH
    state: present
- name: Установить компоненты
  apt:
    name: [wazuh-indexer, wazuh-server, wazuh-dashboard]
    state: present
- name: Запустить и включить службы
  systemd:
    name: "{{ item }}"
    state: started
    enabled: yes
  loop: [wazuh-indexer, wazuh-server, wazuh-dashboard]

3.3. Регистрация агентов

# На сервере
/var/ossec/bin/manage_agents -a 10.0.2.50 -n workstation-01 -i 192.168.1.0/24
/var/ossec/bin/manage_agents -e <agent_id>  # получить ключ
<!-- /var/ossec/etc/ossec.conf на агенте -->
<client>
  <server-address>siem1.yourdomain.local</server-address>
  <server-port>1514</server-port>
  <config-profile>debian, ubuntu, ubuntu22</config-profile>
  <auto_restart>true</auto_restart>
  <crypto_method>aes</crypto_method>
</client>

3.4. Базовые правила и аудит

  • Включить модули: ossec.conf<localfile> для /var/log/auth.log, /var/log/syslog, Windows Security/EventLog.
  • FIM (File Integrity Monitoring): <syscheck> → мониторинг /etc, /bin, реестра Windows.
  • Compliance: PCI-DSS, CIS, GDPR включаются в wazuh-rules.xml.

4. Интеграции и автоматизация

4.1. Wazuh → GLPI: авто-тикеты на критические события

Создайте active-response скрипт /var/ossec/active-response/bin/glpi_ticket.sh:

#!/bin/bash
LOG_ENTRY=$(cat /dev/stdin)
ALERT_LEVEL=$(echo "$LOG_ENTRY" | jq -r '.alert.level')
RULE_DESC=$(echo "$LOG_ENTRY" | jq -r '.rule.description')

if [ "$ALERT_LEVEL" -ge 10 ]; then
  GLPI_URL="https://glpi.yourdomain.local/apirest.php/Ticket/"
  APP_TOKEN="ваш_app_token"
  USER_TOKEN="ваш_user_token"

  curl -s -X POST "$GLPI_URL" \
    -H "Content-Type: application/json" \
    -H "App-Token: $APP_TOKEN" \
    -H "Authorization: user_token $USER_TOKEN" \
    -d "{\"input\": {\"name\": \"[WAZUH] $RULE_DESC\", \"content\": \"$LOG_ENTRY\", \"status\": 1, \"urgency\": 3}}"
fi

Настройте в ossec.conf:

<command>
  <name>glpi-ticket</name>
  <executable>glpi_ticket.sh</executable>
  <expect>alert</expect>
</command>
<active-response>
  <command>glpi-ticket</command>
  <level>10</level>
</active-response>

4.2. OCS → GLPI: маппинг активов

  • В плагине OCSNG настройте Automatic inventoryImportComputer, Monitor, Software.
  • Настройте Entity в GLPI для разделения по филиалам/отделам.
  • Используйте Business Rules для авто-присвоения ответственных, SLA, категорий.

4.3. Ansible: идемпотентность и тестирование

# Проверка синтаксиса
ansible-lint playbooks/deploy.yml

# Dry-run
ansible-playbook playbooks/deploy.yml --check --diff

# Тест роли через Molecule
cd roles/ocs_inventory && molecule test

5. Безопасность, бэкапы, эксплуатация

5.1. Харденинг

  • Firewall: ufw allow 443/tcp && ufw allow 1514/udp,1515/tcp && ufw enable
  • PHP: php.inimemory_limit = 512M, upload_max_filesize = 100M, max_execution_time = 300
  • БД: mysql_secure_installation, отдельный пользователь на каждую БД, bind-address = 127.0.0.1
  • TLS: Let's Encrypt (certbot), HSTS, отключение TLS 1.0/1.1
  • SELinux/AppArmor: setsebool -P httpd_can_network_connect on (RHEL), aa-complain /etc/apparmor.d/* (Ubuntu)

5.2. Бэкапы

- name: Бэкап MariaDB
  community.mysql.mysql_db:
    name: ["glpi", "ocsweb"]
    state: dump
    target: "/backup/db_{{ ansible_date_time.date }}.sql.gz"
    login_user: root
    login_password: "{{ db_root_pass }}"

- name: Бэкап конфигов и Git
  archive:
    path: ["/etc/apache2", "/var/www/glpi/config", "/etc/ocsinventory", "/etc/wazuh"]
    dest: "/backup/configs_{{ ansible_date_time.date }}.tar.gz"
  • OpenSearch: snapshot → S3/NFS. Настроить wazuh-indexer.ymlpath.repo: ["/mnt/snapshots"]
  • Git: git push --all origin + git tag v$(date +%Y%m%d)

5.3. Мониторинг здоровья

  • OCS: /usr/share/ocsinventory-reports/ocsreports/cron/cronall.sh
  • GLPI: php /var/www/glpi/front/cron.php --force all
  • Wazuh: systemctl status wazuh-manager, cluster_control -l, логи в /var/ossec/logs/
  • OpenSearch: _cluster/health?pretty, _cat/indices?v

Чек-лист запуска в production

Этап Проверка
SSL/TLS Валидные сертификаты, HSTS, отключены слабые cipher'ы
Доступность OCS, GLPI, Dashboard доступны по HTTPS, порты закрыты снаружи
Инвентарь 10+ агентов зарегистрированы, данные синхронизированы в GLPI
Тикеты Тестовое правило Wazuh → авто-тикет в GLPI создан
Бэкапы Автоматические дампы БД, снапшоты OpenSearch, push в Git
Ansible --check проходит без ошибок, роли идемпотентны
Ресурсы CPU < 70%, RAM < 80%, диск > 30% свободно, ротация логов включена

Совет:

  • Разворачивайте сначала в staging, прогоните molecule-тесты, настройте мониторинг ресурсов, и только затем мигрируйте в prod. Все конфиги должны храниться в Git, секреты — в Vault, развёртывание — только через Ansible.

Удачной автоматизации!