OSSEC+PostgreSQL=??

Вроде бы, задача звучит весьма тривиально. Поддержка работы с СУБД в OSSEC заявлена, инструкции по настройке худо-бедно, но тоже присутствуют. Но не тут-то было…

Итак, об всем по-порядку.

Несколькими днями раньше…

Перво-наперво в сети были найдены:

  • Установочный пакет OSSEC (свежей версии 3.0) с сайта разработчика;
  • Инструкция по установке этого пакета с поддержкой СУБД Postgresql;
  • Инструкция по подготовке БД Postgresql и настройке самого OSSEC для записи alert’ов в базу.

Но почему-то, если следовать инструкциям, это все не работало.

Были выбраны двое подопытных на которых пробовал развернуть OSSEC с поддержкой postgresql:

  1. Debian 9.5 (64 bit)
  2. CentOS 7.5 (64 bit)

Подопытных двое, чтобы удостоверится, что проблемы, возникшие при установке зависят не от самого дистрибутива (что и было доказано на опыте).

1. Подход номер рас. Сборка и настройка OSSEC по инструкции.

1.1. Сперва поставим БД postgresql, а точнее следующие пакеты:

  • postgresql-9.6
  • postgresql-client
  • postgresql-client-9.6
  • postgresql-client-common
  • postgresql-common
  • postgresql-contrib-9.6
  • postgresql-server-dev-9.6

1.2. Скачаем дистрибутив OSSEC. И распакуем его.

1.3. Далее настроим Postgresql в соответствие с описанием.

А именно:

$ sudo -u postgres createuser -D -A -P ossec_user
Enter password for new role:
Enter it again:
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
$ sudo -u postgres createdb -O ossec_user ossecdb CREATE DATABASE
$ psql -h 127.0.0.1 -U ossec_user -d ossecdb -f postgresql.schema

Файлик postgresql.schema найдется в дистрибутиве OSSEC.
И проверим, что она работает:

psql –h 127.0.0.1 –U ossec_user ossecdb
<ввод пароля>
\dt

Должно отобразить список таблиц БД, в которой присутствуют alert, agent, server. Значит все сделано правильно.

1.4. Установим OSSEC с поддержкой БД

Есть инструкция по установке OSSEC с поддержкой СУБД Postgresql.
Нужно всего-то установить libpq-dev:

apt install postgresql libpq-dev

И далее запустить install.sh с параметром:

# DATABASE=pgsql ./install.sh

В меню установщика нужно прокликать ряд пунктов, где нам предложат настроить OSSEC в части включения различных модулей (контроль целостности, обнаружения руткитов), почтовых оповещений, функционала автоматического реагирования и т.п.
Установка завершилась успешно:

- System is Debian (Ubuntu or derivative). - Init script modified to start OSSEC HIDS during boot. - Configuration finished properly. - To start OSSEC HIDS:      /var/ossec/bin/ossec-control start - To stop OSSEC HIDS:      /var/ossec/bin/ossec-control stop - The configuration can be viewed or modified at /var/ossec/etc/ossec.conf    Thanks for using the OSSEC HIDS.    If you have any question, suggestion or if you find any bug,    contact us at contact@ossec.net or using our public maillist at    ossec-list@ossec.net    ( http://www.ossec.net/main/support/ ).    More information can be found at http://www.ossec.net    ---  Press ENTER to finish (maybe more information below). --- - In order to connect agent and server, you need to add each agent to the server.   Run the 'manage_agents' to add or remove them:   /var/ossec/bin/manage_agents   More information at:   http://www.ossec.net/en/manual.html#ma

1.5. После этого конфигурим подключение к базе данных

А именно в файлик /var/ossec/etc/ossec.conf добавляем следующие строки после раздела <Global>

<database_output>
<hostname>127.0.0.1</hostname>
<username>ossec_user</username>
<password>ossecpass</password>
<database>ossecdb</database>
<type>postgresql</type>
</database_output>

Включаем поддержку БД в OSSEC

# /var/ossec/bin/ossec-control enable database

И запускаем OSSEC

# /var/ossec/bin/ossec-control start

Как вы понимаете, он не работает как нужно ))

Starting OSSEC HIDS v3.0.0 (by Trend Micro Inc.)...
2018/09/26 13:23:33 ossec-dbd(5207): ERROR: OSSEC not compiled with support for 'postgresql'.
2018/09/26 13:23:33 ossec-dbd(1202): ERROR: Configuration error at '/var/ossec/etc/ossec.conf'. Exiting.
ossec-dbd did not start correctly.

2. Душевные муки, эксперименты, страх и ненависть

Было много опытов, в том числе:

  • гуглил ошибку вдоль и поперек;
  • менял строку конфигурации, отвечающую за подключение БД в самом скрипте установки OSSEC install.sh;
  • устанавливал дополнительные пакеты dev для базы данных и переустанавливать OSSEC;
  • запускал отдельно модуль ossec_dbd, отвечающий за связь с БД;
  • Повторял все тоже самое на дистрибутиве CentOS.

3. Счастье есть

Решение нашлось неожиданно. Взялся анализировать весь вывод, который производит установщик OSSEC. И нашел интересные строки:

CC os_dbd/db_op.oos_dbd/db_op.c: In function ‘postgresql_osdb_connect’:os_dbd/db_op.c:272:35: warning: zero-length gnu_printf format string [-Wformat-zero-length] snprintf(portAsString, 6, "");

Судя по этому выводу, модуль ossec_dbd как-раз не установился корректно.
Оказалось, что установщику не нравится строка

snprintf(portAsString, 6, ""); 

в файле <папка установщика OSSEC>/src/os_dbd/db_op.c. Если точнее, то не нравится ему «», вместо которых нужно поставить » «, то есть между кавычками должен быть пробел. После этой нехитрой замены ossec_dbd также установился успешно:

CC os_dbd/db_op.o    CC ossec-dbd

После этих манипуляций OSSEC с поддержкой postgresql стартовал успешно

# /var/ossec/bin/ossec-control enable database# /var/ossec/bin/ossec-control start