Мониторинг mod_security и MySQL с помощью Splunk

в 11:11, , рубрики: CentOS, mysql, администрирование, безопасность веб-приложений, север, Серверное администрирование, хостинг, метки: , , , , , ,

Доброе время суток, хаброжители.
Хочу поделиться реализацией мониторинга виртуального сервера, который я поддерживаю.
Операционная система: CentOS 6.3 x64, однако описываемая ситуация подойдет и для других платформ, как *Win так и *nix.
Постановка задачи.
На сервере установлены сервисы: apache2, MySQL, postfix и реализована защита apache на базе mod_security.
Хозяина сервера не устраивает подключение по ssh консолью и чтение логов в текстовом редакторе, кроме того не было наглядности нагрузок на сервер, количества запросов, сложности запросов к серверу. Я предложил Zabbix сервер, но клиент сказал категорический «нет». Ну что-ж, на то он и клиент, чтобы быть всегда правым.
Необходимо максимально быстро отыскивать сложившуюся ситуацию, связанную с безопасностью сервера, и исходя из события принимать меры к устранению проблемы.

Сразу приведу скриншот того, что получилось:
Мониторинг mod security и MySQL с помощью Splunk

Итак, погуглив и задав вопрос и получив ответ, я попробовал по возрастанию сложности все интерфейсы, указанные на официальном сайте mod_security. Обнаружилось, что все они перестали поддерживаться где-то в 2008 году, что меня не устроило.
Splunk я оставил напоследок, так как во-первых он платный, а во-вторых у меня недоверие к универсальным продуктам для подобных задач.
Коротко о решении:
1). Есть платная и бесплатная версии;
2). Тестовый период 60 дней, и если логов, проходящих через систему меньше 500 Мб, то можно спокойно заключать бесплатное лицензионное соглашение;
3) порадовала куча модулей, из которых я сразу заинтересовался еще и модулем для MySQL.
4) возможность установки как на сам сервер, так и на любой другой хост сети, с подключением к различным нодам для сбора информации. То есть консолидация результатов работы нескольких нод в едином центре (например на домашнем сервере).

Опасения, которые возникли:
1). Слишком универсальный продукт;
2). Сложность установки на «живой» сервер;
3). Безопасность самого Splunk.
4). Вечно довольные лица на главной странице сайта и минимум технической информации.

Итак, было решено ставить. Пришлось зарегистрировать аккаунт на сайте, после этого качнул соответствующий пакет для ubuntu (сначала тестировал на домашней машине http+MySQL+miniDLNA+файлопомойка+qBitTorrent). Долго не буду описывать, все заработало. Было решено ставить в продакшн.

Поэтапно качаем:
1. Сам Splunk *.rpm.
Ставим rpm -i *.rpm,
Стартуем сервис splunk start
Читаем вывод. По-умолчанию порт 8000.
2. Модуль для mod_security по ссылке с оф. сайта. Написано, что совершенно бесплатный модуль.
3. Кроме того у модуля были указаны зависимости от пакетов: Visit amMap, Download Maxmind
, Download SideView Utils, Google Maps. Нам не жалко, скачал.
4. Установка самого mod_security тоже достаточно проста: App-> Manage apps -> Install app from a file.
Установка доп. модулей хуже, нужно их распаковывать в каталог Splunk, в папку модулей. У меня все появилось и заработало сразу после рестарта splunk
5. Бонусом качнул MySQL Monitor — модуль, который тоже ставится через Manage Apps. Однако запуск у него через другое место, отдельно от Splunk.

Добавляем запуск Splunk при загрузке:

echo "$SPLUNK/bin/splunk start" >> /etc/rc.local

Самое интересное началось при настройке, так как внятно нигде ничего не сказано, минимальные руководства по инсталляции модулей даны на страницах.
Необходимое отступление. Splunk позиционирован как поисковик по некоей базе данных (которая хранится на жестком диске сервера, где он установлен). В него можно подключать информацию из файлов (Data Inputs), по TCP, UDP, Scripts (видимо передача данных из скриптов). В свою очередь существует понятия Indexes, в котором содержатся… индексы, ссылающиеся на Data Inputs.
Вернемся к настройке модуля сбора информации mod_security. Оказалось, чтобы он начал работать, необходимо в разделе Manager -> Data Inputs ввести сбор логов из файла (у меня лежит /var/log/httpd/modsec_audit.log), указываю так:

Мониторинг mod security и MySQL с помощью Splunk

Итак, создан Data Input с именем mod_secur
Идем в Manager -> Indexes и создаем индекс mod_secur, который требует указать размещение базы данных самого Splunk в файловой системе. Поставил:

Home path: $SPLUNK_DB/mod_sec_db/db
Cold path: $SPLUNK_DB/mod_sec_db/dbcold
Thawed path: $SPLUNK_DB/mod_sec_db/dbthawe

Когда вход данных и индекс созданы, идем в настройки модуля, которые оказались не в настройках модуля раздела Modules. а в Manager -> Advanced Search -> Search Macros.
Мониторинг mod security и MySQL с помощью Splunk
В верхней левой части окна убеждаемся, что данные относятся к модулю Mod_security (а то я там долго тыкался в кучу переменных другого модуля, подыскивая свои переменные).
Меняем modsec_index с «main» на наш индекс «mod_secur», modsec_src не трогаем.
После этих манипуляций система начинает читать логи, и где-то в течение минуты для трехдневного файла собирает информацию. В процессах top я Splunk вообще не увидел, ресурсов отъедает минимум, что порадовало.
Ниже приведу пару скриншотов, а далее расскажу про MySQL монитор.
Раз скриншот
Мониторинг mod security и MySQL с помощью Splunk
Два скриншот
Мониторинг mod security и MySQL с помощью Splunk

От себя добавлю, что создатели монитора для mod_security совершенно не позаботились о важной информации — выводе включенных и отключенных правил, по которым он работает.

Установка монитора MySQL мне больше вынесла мозги, хотя бы в связи с тем, что дизайн рвет глаза до самых глубин души.
Мониторинг mod security и MySQL с помощью Splunk

При открытии монитора мы всегда попадаем на readme, где перенастроить это я не нашел.
Состоит модуль из демона сбора статистики MySQl, который так же необходимо стартануть.
Но сначала правим конфигурационный файл модуля "$SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon/config.ini):

> cp config.ini.sample config.ini
> cat config.ini
[mysql]
host=localhost
port=3306
username=xxx
password=xxx

[splunk]
host=localhost
port=9936

[statusvars]
interval=10

[slavestatus]
interval=10

[tablestats]
interval=3600

[processlist]
interval=10

и файл подключенных серверов $SPLUNK_HOME/etc/apps/mysqlmonitor/hosts.yaml

> cp hosts.yaml.sample hosts.yaml
> cat hosts.yaml

Databases:
  db01:
    host: localhost
    username: xxx
    password: xxx

И можно стартовать демона.

$SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon start 
echo "$SPLUNK_HOME/etc/apps/mysqlmonitor/bin/daemon start " >> /etc/rc.local

Зависит от установленных в системе
•Python 2.6 or 2.7
•Python MySQL drivers

Работает сбор информации через TCP сокет 9936, который и предстоит создать в самом Splunk: Manager -> Data Inputs -> TCP. Создаем сокет 9936.
Мониторинг mod security и MySQL с помощью Splunk

Manager -> Indexes -> создаем новый mysql, полнейшая аналогия с mod_security.
В Manager -> Advanced search -> Search macros не идем — там ничего и менять то не надо. Все взлетело, привожу скриншоты (да, кстати, автоматом не отработает, нужно нажать кнопку search).
Раз.
Мониторинг mod security и MySQL с помощью Splunk

Два. Тут оказалось приятным возможность на третьем графике «медленные запросы» нажать на любую часть графика и увидеть сам запрос.
Мониторинг mod security и MySQL с помощью Splunk

Три.
Мониторинг mod security и MySQL с помощью Splunk

Всем спасибо за внимание!

Автор: Bessome

Источник

Поделиться

* - обязательные к заполнению поля