Security — Журналирование событий. Часть 2.2 - syslog-ng
В этой части рассматривается настройка демона syslog-ng.
Syslog-ng - syslog-сервер нового поколения (-ng = next-generation). Достаточно популярен, по-умолчанию входит во многие дистрибутивы, в том числе в Gentoo и Archlinux. Имеет две версии - opensource и платную - "Premium". Premium, по сравнению с opensource-версией, позволяет осуществлять цифровую подпись передаваемых сообщений, обеспечивать их буферизацию для надёжной доставки, а также работать на неправославных ОС. Само собой, для премиум-версии предлагается поддержка и возможность получить пакет для конкретной ОС, используемой на предприятии заказчика. Мы с вами будем говорить об opensource-версии, а о надёжной доставке и дополнительных возможностях syslog-серверов вообще поговорим в следующих статьях.
Конфигурационный файл вкорне отличается от конфигурационного файла sysklogd. (Ну ещё бы некст-ген всё таки - здесь вам не тут (с)). Конфиг делится на секции, общий вид такой:
Здесь <секция> - это одно из указанных ниже значений:
source - источник сообщений
destination - действие для сообщений
filter - критерий сообщений
log - объединение source, destination и filter
options - опции
<имя секции> - это произвольная строка с именем, которое потом используется в других секциях
<параметр> - это специфичная для каждой секии настройка, которая как правило задаётся в виде функции. Набор функций для каждой из секций свой. За полным описанием возможных параметров каждой секции отправляю вас к мануалу (ну или к man syslog-ng.conf).
Исходя из вышесказанного, syslog-ng позволяет вам задавать некие объекты, действия и критерии, а потом применять необходимые действия к этим объектам, исходя из указанных критериев. Возможно, вам будет проще настраивать "с конца", т.е. начинать не с задания source, filter и destination, а с log. Т.е. первым делом вписать в файл директивы log, снабдив названия источников/фильтров/действий (пока не существующих) такими именами, по которым легко определить их назначение. Уже после того, как вы создали log-секции, создать под них недостающие source/filter/destination. Не забудьте про опции.
Сразу хочу перейти сразу к примерам, где покажу в том числе несколько дополнительных возможностей этого сервера. Примеры специально сделаны немного не соответствующими реальности, чтобы дать больше представление, чем конкретный совет, а также показать некоторые возможности сервера, которые конфигурация по-умолчанию практически не использует.
Сомневаюсь, что syslog-ng, включённый в ваш дистрибутив, имеет возможность записи в sql-БД или поддерживает SSL. Поэтому для включения этих возможностей придётся или поставить дополнительные пакеты или, скорее всего пересобрать пакет под себя самостоятельно. Для шифрования вам будет нужен пакет openssl (libssl-dev для Debian-like дисрибутивов), для поддержки MySQL - libdbi и mysql-драйвер для этой библиотеки (для Debian это пакеты libdbi0, libdbi0-dev, libdbd-mysql, в Archlinux придётся ставить пакеты из AUR)
Само собой вам будет нужна версия из ветки 3.x, предыдущие ветки не поддерживают sql вообще.
Варнинг: Сам я этого делать не пробовал, но процесс себе представляю. Здесь я больше даю направление, куда копать, нежели пошаговые инструкции. Так что если где немножко ошибся, больно не бейте.
После того, как вам всё таки удалось собрать нужную версию, достаточно только задать соответствующий destination:
Для SSL-шифрования (сертификаты, само собой, придётся предварительно сгенерировать):
Совет: Перед тем, как мучить свой сервер шифрованием хорошенько обдумайте, так ли оно вам нужно. Учтите, вероятность отказа с ним только увеличивается.
Для MySQL (спёр отсюда и прокомментировал):
Само собой разумеется, что вы создали БД с нужной структурой и дали пользователю права на запись в таблицу. Тем, кто будет делать, советую следовать принципу минимальных привилегий и создать 2 пользователей syslog_logger и syslog_reader. Пользователю syslog_logger вы даёте права только на INSERT, ему этого должно быть достаточно. Пользователя syslog_reader вы можете использовать для чтения сообщений из БД, его права соответственно только на SELECT. Все остальные действия(периодическая чистка, создание индексов) лучше производить от рута(если делаете вручную) или создать третьего пользователя с соответствующими правами(если автоматизируете).
Обратите внимание на очень интересную особенность. Вы можете создать БД с произвольной структурой, прописав в конфиге используемые столбцы и значения для подстановки в эти столбцы.
Достаточно многие вещи, которые умеет делать syslog-ng не упомянуты в этой статье: это макросы, шаблоны сообщений, поддержка RFC5424, изменение сообщений, сравнение с regexp, некоторые другие. Новичкам это всё понадобится врядли, а опытные пользователи вполне могут прочитать документацию, которая очень и очень неплоха.
Следующий претендент на рассмотрение - самый интересный и фичебогатый. Это Rsyslog, но о нём вы узнаете не раньше понедельника.
Syslog-ng
Syslog-ng - syslog-сервер нового поколения (-ng = next-generation). Достаточно популярен, по-умолчанию входит во многие дистрибутивы, в том числе в Gentoo и Archlinux. Имеет две версии - opensource и платную - "Premium". Premium, по сравнению с opensource-версией, позволяет осуществлять цифровую подпись передаваемых сообщений, обеспечивать их буферизацию для надёжной доставки, а также работать на неправославных ОС. Само собой, для премиум-версии предлагается поддержка и возможность получить пакет для конкретной ОС, используемой на предприятии заказчика. Мы с вами будем говорить об opensource-версии, а о надёжной доставке и дополнительных возможностях syslog-серверов вообще поговорим в следующих статьях.
Конфигурационный файл вкорне отличается от конфигурационного файла sysklogd. (Ну ещё бы некст-ген всё таки - здесь вам не тут (с)). Конфиг делится на секции, общий вид такой:
<секция> <имя секции> { <параметр>; [<параметр>; ...] };
Здесь <секция> - это одно из указанных ниже значений:
source - источник сообщений
destination - действие для сообщений
filter - критерий сообщений
log - объединение source, destination и filter
options - опции
<имя секции> - это произвольная строка с именем, которое потом используется в других секциях
<параметр> - это специфичная для каждой секии настройка, которая как правило задаётся в виде функции. Набор функций для каждой из секций свой. За полным описанием возможных параметров каждой секции отправляю вас к мануалу (ну или к man syslog-ng.conf).
Исходя из вышесказанного, syslog-ng позволяет вам задавать некие объекты, действия и критерии, а потом применять необходимые действия к этим объектам, исходя из указанных критериев. Возможно, вам будет проще настраивать "с конца", т.е. начинать не с задания source, filter и destination, а с log. Т.е. первым делом вписать в файл директивы log, снабдив названия источников/фильтров/действий (пока не существующих) такими именами, по которым легко определить их назначение. Уже после того, как вы создали log-секции, создать под них недостающие source/filter/destination. Не забудьте про опции.
Сразу хочу перейти сразу к примерам, где покажу в том числе несколько дополнительных возможностей этого сервера. Примеры специально сделаны немного не соответствующими реальности, чтобы дать больше представление, чем конкретный совет, а также показать некоторые возможности сервера, которые конфигурация по-умолчанию практически не использует.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
|
Запись в БД MySQL и шифрование сообщений
Сомневаюсь, что syslog-ng, включённый в ваш дистрибутив, имеет возможность записи в sql-БД или поддерживает SSL. Поэтому для включения этих возможностей придётся или поставить дополнительные пакеты или, скорее всего пересобрать пакет под себя самостоятельно. Для шифрования вам будет нужен пакет openssl (libssl-dev для Debian-like дисрибутивов), для поддержки MySQL - libdbi и mysql-драйвер для этой библиотеки (для Debian это пакеты libdbi0, libdbi0-dev, libdbd-mysql, в Archlinux придётся ставить пакеты из AUR)
Само собой вам будет нужна версия из ветки 3.x, предыдущие ветки не поддерживают sql вообще.
Варнинг: Сам я этого делать не пробовал, но процесс себе представляю. Здесь я больше даю направление, куда копать, нежели пошаговые инструкции. Так что если где немножко ошибся, больно не бейте.
После того, как вам всё таки удалось собрать нужную версию, достаточно только задать соответствующий destination:
Для SSL-шифрования (сертификаты, само собой, придётся предварительно сгенерировать):
1 2 3 4 |
destination d_tls_client { |
Совет: Перед тем, как мучить свой сервер шифрованием хорошенько обдумайте, так ли оно вам нужно. Учтите, вероятность отказа с ним только увеличивается.
Для MySQL (спёр отсюда и прокомментировал):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
destination d_mysql { |
Само собой разумеется, что вы создали БД с нужной структурой и дали пользователю права на запись в таблицу. Тем, кто будет делать, советую следовать принципу минимальных привилегий и создать 2 пользователей syslog_logger и syslog_reader. Пользователю syslog_logger вы даёте права только на INSERT, ему этого должно быть достаточно. Пользователя syslog_reader вы можете использовать для чтения сообщений из БД, его права соответственно только на SELECT. Все остальные действия(периодическая чистка, создание индексов) лучше производить от рута(если делаете вручную) или создать третьего пользователя с соответствующими правами(если автоматизируете).
Обратите внимание на очень интересную особенность. Вы можете создать БД с произвольной структурой, прописав в конфиге используемые столбцы и значения для подстановки в эти столбцы.
Достаточно многие вещи, которые умеет делать syslog-ng не упомянуты в этой статье: это макросы, шаблоны сообщений, поддержка RFC5424, изменение сообщений, сравнение с regexp, некоторые другие. Новичкам это всё понадобится врядли, а опытные пользователи вполне могут прочитать документацию, которая очень и очень неплоха.
Следующий претендент на рассмотрение - самый интересный и фичебогатый. Это Rsyslog, но о нём вы узнаете не раньше понедельника.