Русификация OSSIM

Данная статья является фрагментом статьи Евгения Соколова и описывает процесс русификации OSSIM им разработанный.

Чтобы плагины могли обрабатывать логи (или данные импортируемые из СУБД) в кодировке отличной от latin1 им нужно на это указать. Разумно указать в файле конфигурации соответствующего плагина. Но вот беда. В синтаксисе файлов конфигурации такого параметра нет. На самом деле он есть, но в другом месте и эта особенность нигде не документирована. Узнать о ней вы можете только прочитав исходный код модулей, которые составляют ossim-agent: /usr/share/alienvault/ossim-agent. Здесь лежит код генератора объектов типа Plugin, которые запускаются агентом. Перечень плагинов, которые должны быть сгенерированы и запущены при старте агента содержится в файле /etc/ossim/agent/config.cfg в виде путей к файлам конфигурации каждого плагина. Так вот. Когда генератор плагинов читает этот файл он проверяет наличие в конце строки, обозначающей путь к конфиг-файлу плагина подстроки вида «|encoding«, где «encoding» — номер кодовой страницы, например, cp1251. Если такая подстрока есть, он записывает номер кодовой страницы в свойство encoding объекта Plugin. Иначе записывает туда latin1.
Как используется это свойство?
Во-первых, при чтении файла источника логов. Он открывается для чтения с указанием кодировки из Plugin.encoding. Считываемые строки при этом переводятся во «внутреннюю кодировку». В нашем случае это Unicode.
Во-вторых, при чтении самого конфиг-файла плагина. Фишка в том, что в конфиг-файле плагина содержатся регулярные выражения для парсинга строк из логов. Плагины всегда работают с регулярками в юникоде. Значит генератору плагинов надо знать из какой кодировки перевести регулярки в юникод. Именно по этой причине параметр, указывающий на кодировку, надо передать генератору плагинов до того, как он откроет конфиг-файл плагина и начнет его генерировать. Вот по этой причине параметр задается не внутри конфиг-файла, а «снаружи».
Это процесс чтения. А есть еще процесс записи нарезанных из логов событий в базу данных. Здесь тоже необходима конвертация из «внутренней» кодировки в кодировку базы данных. Это уже определяется настройками в файле конфигурации MySQL. Их надо выставить в UTF-8, чтобы все языки могли нормально приниматься.
Есть еще парочка важных мест. Плагины бывают разных типов. Те, что читают данные из логов, и те, что читают из других баз данных. Последние используют в качестве драйвера доступа FreeTDS. Соответственно в конфиг-файле для FreeTDS так же нужно указать какую кодировку использовать при подключении к серверу БД. Там это можно сделать для каждого сервера индивидуально. Я записываю кодировку UTF-8 в качестве глобального параметра.
И напоследок веб-сервер apache2. Ему тоже надо сказать, что кодировка файлов UTF-8.
Но это еще не всё.
При апдейте OSSIM запросто может перезаписать всё эти параметры на свои собственные. Следовательно надо придумать способ это проверить и восстановить. Я придумал такой простой способ. У меня есть маленькие скрипты на питоне, которые проверяют нужные параметры в конфиг-файлах и если их там нет, записывают. Эти маленькие скрипты я вставляю в файлы инициализации апача, агента ossim и mysql, в те, что лежат в /etc/init.d/. Поскольку любой апдейт заканчивается рестартом соответствующих сервисов, то выполняется моя проверка и правка конфигурации. Таким образом апдейты становятся «безвредными».
А для упрощения жизни себе и другим я написал скрипт, который автоматически вносит все необходимые изменения, создает «проверочные скрипты» и правит файлы /etc/init.d/.

#! /bin/sh
####################################
# jailbreak-ossim-for-rus #
####################################
# скрипт для русификации AlienVault OSSIM
# так же может быть использован для AlienVault USM без изменений
#
# Copyright Евгений Соколов (esguardian) esguardian@outlook.com 30.01.2016
#
# Использовать просто:
# Скопировать куда-нибудь на сервере OSSIM, лучше в /usr/local/bin/jailbreak, создав эту директорию.
# дать права на выполнение chmod 755 /usr/local/bin/jailbreak/jailbreak-ossim-for-rus.sh
# перейти в директорию со скриптом
# запустить ./jailbreak-ossim-for-rus.sh
#
############################
# Конфигурируем mysql #
############################
#
# Проверяем наличие нашего собственного файла конфигурации и создаем его, если отсутствует
#
if [ ! -f /etc/mysql/conf.d/jailbreak-ossim-for-rus.cnf ]; then
cat > /etc/mysql/conf.d/jailbreak-ossim-for-rus.cnf < /usr/local/bin/jailbreak/check_mysql_config.py < /dev/null\n:" /etc/init.d/mysql
fi
#
#################################
# Конфигурируем ossim-agent #
#################################
#
# Проверяем наличие нашего скрипта коррекции файла конфигурации агентов
# создаем файл, если его нет
#
if [ ! -f /usr/local/bin/jailbreak/check_encoding.py ]; then
if [ ! -d /usr/local/bin/jailbreak ]; then
mkdir /usr/local/bin/jailbreak
fi
cat > /usr/local/bin/jailbreak/check_encoding.py < /dev/null\n:" /etc/init.d/ossim-agent
fi
#
#################################
# Конфигурируем freetds #
#################################
#
if ! grep -q "jailbreak-ossim-for-rus" /etc/freetds/freetds.conf; then
if [ -f /etc/freetds/freetds.conf ]; then
cp /etc/freetds/freetds.conf /usr/local/bin/jailbreak/freetds.conf.old
rm /etc/freetds/freetds.conf
fi
cat > /etc/freetds/freetds.conf < /etc/apache2/conf-available/charset.conf <<DELIM
# This file is installed by jailbreak-ossim-for-rus
AddDefaultCharset UTF-8
DELIM
chmod 755 /etc/apache2/conf-available/charset.conf
fi
#
######################################
# Рестартуем сервисы #
######################################
#
/etc/init.d/mysql restart
/etc/init.d/ossim-agent restart