Создание централизованного безопасного сервера регистрации событий с
использованием syslog-ng и Stunnel
Автор: Amy Rich, September, 2004
Перевод: Сгибнев Михаил
* Установка Stunnel
* Создание файлов сертификатов для syslog-ng поверх Stunnel
* Конфигурирование Stunnel для работы с syslog-ng
* Установка syslog-ng
* Конфигурирование syslog-ng
* Ресурсы
Администраторы UNIX-систем конечно знакомы с демоном syslog, но
собираемая им информация очень часто остается нерассмотренной. В
большой сети, где число машин достаточно велико, никто не может найти
время, чтобы разобраться с файлами журналов не то что каждый день, но
и хотябы раз в месяц. Скрипты для анализа данных, поступающих с разных
машин, сложны для написания и индивидуальны для каждой машины. Для
того чтобы облегчить бремя ручной и автоматической обработки журналов
многие сети огранизуют выделенный сервер регистрации событий,
собирающий данные для всех машин (желательно, чтобы на нем выполнялся
демон NTP для синхронизации времени) сети - UNIX, Windows и рабочих
станций Mac а также свичей и роутеров. Обеспечение централизованной
регистрации событий - занятие довольно тривиальное, если использовать
демон syslog ОС UNIX, но он не лишен некоторых недостатков.
Стандартный UNIX демон syslog принимает сообчения открытым текстом по
протоколу UDP, что может привести к перехвату данных кем угодно.
Модель facility.level довольно ограниченна и поставляемый по умолчанию
с большинством систем файл /etc/syslog.conf может накапливать в лог
довольно много интересной административной информации. Запись в лог
это тоже довольно сомнительный компромис между удобством чтения и
возможностью машинной обработки. Демон UNIX syslog не позволяет, для
примера, легко выделить из общей информации записи, соответсвующие
определенным регулярным выражениям. Поэтому на серверах регистрации
событий syslog ведет один общий файл и вся последующая обработка
ведется только после закрытия этого файла.
Поэтому в организациях, где используются выделенные серверы заменяют
стандартный syslog на белее безопасные и гибкие Metalog, msyslog и иже
с ними. Одной из популярных замен syslog является свободно
распространяемая программа, называемая syslog-ng. В организации может
выполнятся syslog-ng на каждой UNIX машине или только на специально
предназначенном для этого сервере. Если этот демон запущен только на
сервере, то клиенты посылают данные как обычно, по UDP на 514 порт, но
на сервере становится возможным более гибкое манипулирование и
организация логов.
Основная выгода от использования syslog-ng - возможность шифровать
канал передачи данных с помощью IPSec или утилиты Stunnel (http://www.stunnel.org/)
для того, чтобы предотвратить чтение данных случившимся неподалеку
сниффером. При использовании Stunnel в качестве транспортного
механизма организация имеет безопасный способ централизовать
журнальные сообщения от всех UNIX машин для дальнейшей обработки. В
случае syslog-ng, Stunnel работает принимая соединения демона на
локальный порт, и передает их по SSL на удаленный сервер регистрации
событий, где они соответственно расшифровываются и передаются на
стандартный порт демона syslog. А на сервере регистраций уже
используется гибкость syslog-ng для парсинга и организации журнальных
файлов.
В этой статье рассматривается настройка и установка syslog-ng и
Stunnel для машин, работающих под управлением Solaris 8 (SPARC
Platform Edition), но вся информация применима и для новых и для более
старых версий Solaris OS (Sparc или i386). На каждой рассматриваемой
здесь машине установлены OpenSSL, tcp wrappers, Solaris 8 /dev/urandom
patch, инструменты разработки GNU (gcc, и т.д.) и еще несколько
свободно распространяемых пакетов. Машина, выступающая сервером была
защищена, так как ей предстоит хранить связанную с защитой информацию
от всех машин на сети. Эти машины находятся в сети 192.168.1.0/24 и
адрес сервера регистрации 192.168.1.10.
Установка Stunnel
Первым шагом на пути создания безопасного лог-сервера будет
непосредственно установка Stunnel на сервере и клиентах. Stunnel может
использоваться и со стандартным демоном syslog (не заменяя его на
syslog-ng), но тогда мы не будем иметь необходимой гибкости. Как видно
ниже, Stunnel отконфигурирован и собран для работы под собственным
пользователем и в своем собственном каталоге с использованием chroot.
Для начала создадим пользователя и группу stunnel (UID и GID выбираем
произвольно):
Теперь берем архив Stunnel, распаковываем и конфигурируем. На машинах
сети сертификаты OpenSSL хранятся в /usr/local/etc/openssl/certs, и я
желаю провести установку в /usr/local. Также установим localstatedir в
/var/run/stunnel, так как необходимо и после перезагрузки обеспечить
работу только внутри своего каталога.
wget http://www.stunnel.org/download/stunnel/src/stunnel-4.05.tar.gz
tar zxf stunnel-4.05.tar.gz
cd stunnel-4.05
Создание файлов сертификатов для syslog-ng поверх Stunnel
В процессе установки Stunnel создаются самоподписанные сертификаты,
которые Вы можете использовать. Так как у меня выполняется собственный
центр авторизации, то я запустил Stunnel тольео для работы с
syslog-ng, то я создаю и подписываю собственные syslog-ng-dedicated
сертификаты. Дополнительную информацию по установке собственного
центра авторизации и подписи сертификатов читайте SSL certificates
HOWTO (http://tldp.org/HOWTO/SSL-Certificates-HOWTO/).
примем, что у Вас установлен собственный CA или имеется подписанный
сертификат.
(Пр. пер. Это, конечно весьма большая натяжка. Врядли такая
возможность есть у большинства админов. Лучше использовать
самоподписанные сертификаты, созданные при установке Stunnel или если
есть большое желание, установить OpenCA (http://www.openca.org) - СА c web интерфейсом.
Только для установки его на OpenBSD мне пришлось долго плясать с
бубном, на другие системы не ставил.) Создаем файлы pem для сервера:
Результатом будет файл crt, содержащий сертификат для каждого
передаваемого файла pem. Для сервера требуется файл
syslog-ng-server.pem с приватным ключом и сертификатом (скопируйте его
из /tmp/serverreq.pem.crt). сервера:
Также требуется клиентский pem файл, syslog-ng-client.pem, содержащий
только сертификат (берем его из файла crt) от подписывающего CA и от
каждого клиента (в данном примере их три штуки).
На сервере создайте файл конфигурации Stunnel ,
/usr/local/etc/stunnel/stunnel.conf, содержащий информацию по типу
нижеприведенной. В этом примере в файле определяются
сертификаты/ключи, сертификаты сервера, пользователь и группа stunnel,
каталог chroot. Значение verify, равное 3, говорит о том, что stunnel
будет проверять клиента с использованием локально установленных
сертификатов. Stunnel пропускает верификацию по умолчанию, поэтому
этот параметр необходимо задать явно. В заключительной части файла
конфигурации определяется порт для сессии SSL и IP:port, где
соединения будут приняты и перенаправлены. Порт 514 - это стандартный
порт syslog, а 5140 - свободен и был нами выбран случайно. Для
получения дополнительной информации и опций конфигурации обратитесь к
странице руководства man stunnel.
На каждом клиенте файл конфигурации
/usr/local/etc/stunnel/stunnel.conf содержит директивы, подобно файлу
конфигурации сервера. Значения cert, CAfile, accept и connect меняются
местами и добавляется директива client:
Теперь Stunnel сконфигурирован и мы готовы к установке и
конфигурировании syslog-ng. Если Вы хотите проверить работу Stunnel,
или сконфигурировать для использования другого TCP порта или сервиса,
таких как IMAP или telnet, то обратитесь к stunnel examples
(http://www.stunnel.org/examples/).
Установка syslog-ng
Стабильная версия syslog-ng требует установки библиотеки libol
(http://www.campin.net/syslog-ng/faq.html#libol).
Скачиваем. распаковываем и устанавливаем, как указано ниже:
wget http://www.balabit.com/downloads/libol/0.3/libol-0.3.14.tar.gz
tar zxf libol-0.3.14.tar.gz
cd libol-0.3.14
./configure
make
make install
Теперь дело за получением исходников syslog-ng, распаковкой,
конфигурированием и установкой. При сборке мной также была добавлена
поддержка tcp wrappers, так как я активно использую это для других
демонов. (Пр.п - Что он активно использует - tcp wrappers или
syslog-ng со слов автора я не понял.)
wget http://www.balabit.com/downloads/syslog-ng/1.6/src/syslog-ng-1.6.5.tar.gz
tar zxf syslog-ng-1.6.5.tar.gz
cd ../syslog-ng-1.6.5
./configure --enable-tcp-wrapper
make
make install
Убедитесь, что лишние порты закрыты пакетным фильтром или tcp
wrappers. Сервер должен принимать соединения от клиентов на TCP 5140 и
UDP 514, если машина будет принимать нешифрованные сообщения syslog.
для поддержки расширенного синтаксиса tcp wrappers, добавтье в файл
/etc/hosts.deny сервера:
syslog-ng : LOCAL 127.0.0.1 192.168.1. : ALLOW
В клиентский файл /etc/hosts.deny:
syslog-ng : LOCAL 127.0.0.1 : ALLOW
Теперь создадим скрипт запуска stunnel/syslog-ng и назовем его
/etc/init.d/syslog-ng, для обеспечения автоматического старта после
перезагрузки. Этот скрипт базируется на скрипте syslog для Solaris 8
OS:
#!/sbin/sh
#
case "$1" in
'start')
if [ -f /usr/local/etc/syslog-ng/syslog-ng.conf -a -x
/usr/local/sbin/syslog-ng ]; then
#
# Before syslogd starts, save any messages from previous
# crash dumps so that messages appear in chronological order.
#
/usr/bin/savecore -m
if [ -r /etc/dumpadm.conf ]; then
. /etc/dumpadm.conf
[ "x$DUMPADM_DEVICE" != xswap ] &&
/usr/bin/savecore -m -f $DUMPADM_DEVICE
fi
#
# Start stunnel so logs are sent encrypted
#
if [ -f /usr/local/etc/stunnel/stunnel.conf
-a -x /usr/local/sbin/stunnel ]; then
echo "Starting stunnel"
mkdir -p /var/run/stunnel/run
chown stunnel:stunnel /var/run/stunnel/run
/usr/local/sbin/stunnel
echo "Starting syslog-ng"
/usr/local/sbin/syslog-ng
fi
fi
;;
'stop')
if [ -f /var/run/syslog-ng.pid ]; then
syspid=`/usr/bin/cat /var/run/syslog-ng.pid`
[ "$syspid" -gt 0 ] && kill -15 $syspid &&
echo "Killed syslog-ng"
fi
if [ -f /var/run/stunnel/run/stunnel.pid ]; then
syspid=`/usr/bin/cat /var/run/stunnel/run/stunnel.pid`
[ "$syspid" -gt 0 ] && kill -15 $syspid &&
echo "Killed stunnel"
fi
Гибкость syslog-ng обусловлена файлом конфигурации. Конфигурационные
директивы манипулируют такими понятиями как source, filter,
destination и log. Директива source указывает на источник журнальных
сообщений - локальный или удаленный. Директива filter позволяет
разделять сообщения базируясь на параметрах уровень/приоритет, имя
программы, имя хоста или регулярное выражение. Директива destination
может быть файлом, каналом, потоком, UDP или TCP соединением, ttys или
программой. Директива log обьединяет source, filter и destination,
определяя как будет обработано журнальное сообщение. Описание всех
доступных директив может быть найдено в справочном руководстве
syslog-ng (http://www.balabit.com/products/syslog_ng/reference/book1.html)
или syslog-ng FAQ (http://www.campin.net/syslog-ng/faq.html).
В следующем примере приводится конфигурационный файл, сохраняющий логи
клиентских машин в /var/log и ведущий центральный лог в
/var/log/clients/$YEAR/$MONTH/$HOST. Нижеприведенный
/usr/local/etc/syslog-ng/syslog-ng.conf поддерживает сообщения с
локального хоста, хосты, криптованные по stunnel и обычные UDP хосты.
(маленькие роутеры и свичи не могут работать по stunnel).
Продвинутые пользователи могут включить в syslog-ng инструкции по
приему сообщений от принтеров, баз данных, вести почтовые логи. Также
полезным будет посылать критически важные сообщения в отдельный лог, с
тем чтобы можно было обеспечить его анализ в реальном масштабе времени
с использованием
swatch ftp://ftp.cert.dfn.de/pub/tools/audit/swatch/
logsurfer http://www.cert.dfn.de/eng/logsurf/
Log Tool http://xjack.org/logtool/
или Logwatch http://www.logwatch.org/
Возможности для автоматизирования процесса мониторинга
файлов журналов весьма обширны, так как вывод логов можно организовать
достаточно гибко.
Ресурсы
Software packages on the reference systems:
* OpenSSL http://www.openssl.org/
* A HOW-TO for SSL certificates http://tldp.org/HOWTO/SSL-Certificates-HOWTO/
* OpenSSL mailing lists http://www.openssl.org/support/
* tcp wrappers ftp://ftp.porcupine.org/pub/security/
* /dev/urandom patch for the Solaris 8 OS http://sunsolve6.sun.com/search/document.do?assetkey=112438
* GNU gcc http://gcc.gnu.org/
* GNU wget http://www.gnu.org/software/wget/wget.html
Stunnel resources:
* The latest Stunnel source code http://www.stunnel.org/download/stunnel/src/stunnel-4.05.tar.gz
* The Stunnel FAQ http://www.stunnel.org/faq/
* Some Stunnel examples http://www.stunnel.org/examples/
* The stunnel-users mail archive http://marc.theaimsgroup.com/?l=stunnel-users
syslog-ng resources:
* The syslog-ng home page http://www.balabit.com/products/syslog_ng/
* The latest libol source code
http://www.balabit.com/downloads/libol/0.3/libol-0.3.14.tar.gz
* The latest syslog-ng source code
http://www.balabit.com/downloads/syslog-ng/1.6/src/syslog-ng-1.6.5.tar.gz
* The syslog-ng reference manual
http://www.balabit.com/products/syslog_ng/reference/book1.html
* The syslog-ng FAQ
http://www.campin.net/syslog-ng/faq.html
* Support packages for syslog-ng
http://www.balabit.com/products/support/syslog-ng/
* The syslog-ng mail archive
https://lists.balabit.hu/pipermail/syslog-ng/
* The syslog-ng-announce mail archive
https://lists.balabit.hu/pipermail/syslog-ng-announce/