Создание централизованного безопасного syslog сервера на FreeBSD

Создание централизованного безопасного сервера регистрации событий с использованием 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 выбираем произвольно):

/usr/sbin/groupadd -g 122 stunnel

/usr/sbin/useradd -c stunnel -d /nonexistent -m -g 122 -u 122 stunnel

Теперь берем архив 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

./configure --localstatedir=/var/run/stunnel

--with-pem-dir=/usr/local/etc/openssl/certs --datadir=/usr/local

make

make install

Создание файлов сертификатов для 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 для сервера:

openssl req -new -days 3650 -nodes -config stunnel.cnf -out serverreq.pem

-keyout syslog-ng-server.pem

Также создаем передаваемый файл pem для каждого клиента.

openssl req -new -days 3650 -nodes -config stunnel.cnf -out clientreq.pem

-keyout syslog-ng-client.pem

Подписываем каждый pem на локальном или публичном СА. Я использую sign.sh из комплекта apache mod_ssl.

sign.sh /tmp/serverreq.pem

sign.sh /tmp/client1req.pem

sign.sh /tmp/client2req.pem

sign.sh /tmp/client3req.pem

Результатом будет файл crt, содержащий сертификат для каждого передаваемого файла pem. Для сервера требуется файл syslog-ng-server.pem с приватным ключом и сертификатом (скопируйте его из /tmp/serverreq.pem.crt). сервера:

-----BEGIN RSA PRIVATE KEY-----

MIICXAIBAAKBgQDSAJ0kULvKxIhFtz1ctXlDWY0CcTpIscEAXy90nAuwwvshji39

abZH5Z9PfTOoT/zO6ZyQ0lOJ2LzYcS/JQmR+4wLggf5yi8K3BrBIwaAHbfAya8C9

5g9oINTkjM5Y3zdkMhvPwmivMV+lBa07Qk0SZg8xYblUiafisQplGzjWvwIDAQAB

AoGAEqYzTlJNGwixAV/wdxc2maCOQTVE88e1WA8b68Mf1qa6HpS9yM9mfKQLrcd0

mvHfhZCBcur6uDcjLiV/FORsgB7/3wRF0a08ZJdwlMSn9844jeRlSDbEE1wqAcyj

pnHwcxnErzA0REDuD+EmH0xsh23/Rn/mv7gBpm5Am/UK86ECQQDs5RmiJzQOprsT

ArcTQq3VTmHLtfu7HAQ7+You7XDL+iOVOsbJZWgBKc0oTcNNBpJzkHPrvaOBbFpg

dQZKE3BLAkEA4vBLWsojb0tosXiZuFxzMBrcMhzanzzXerOt0v6BbeZKMTXMaJX+

/4wyVc6lanZc/793S4aHY0/VvCDMLp7y3QJBAKPnX3Tx6vK4KXddyY1p9RxAvylT

IHi1Sbif49DpAkIfL79wi1mM8AjeAzR/mUER6wJKT+orq5VAgsd6MH/QM0ECQHvw

YDclTlTqCjNiehGF7CLJiJiVyZBN2iDZIIWrGWS78KkPiKNVx/4owxS51v1dx0yl

dLF6t1Y1s7Ua9GhBxsECQD3+/khj/lzYUC9KaDIHItO7LHkO1IcxZUZJ0YNaukUB

v1Vh9B3IK5m2bSsOYtOYxbpjoHL8pZG1Bf1lLH32dqw=

-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----

MIICZDCCAc0CAQIwDQYJKoZIhvcNAQEEBQAwcTELMAkGA1UEBhMCVVMxFjAUBgNV

BAgTDU1hc3NhY2h1c2V0dHMxEDAOBgNVBAcTB0JldmVybHkxFTATBgNVBAoTDE9j

ZWFud2F2ZSBDQTEhMB8GCSqGSIb3DQEJARYScm9vdEBvY2VhbndhdmUuY29tMB4X

DTA0MDcxOTEzNTExNVoXDTA1MDcxOTEzNTExNVowgYMxCzAJBgNVBAYTAlVTMRYw

FAYDVQQIEw1NYXNzYWNodXNldHRzMRAwDgYDVQQHEwdCZXZlcmx5MSMwIQYDVQQK

ExpPY2VhbndhdmUgQ29uc3VsdGluZywgSW5jLjElMCMGA1UEAxMcbG9naG9zdC5v

ZmZpcdaub2NlYW53YXZlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA

0gCdJFC7ysSIRbc9XLV5Q1mNAnE6SLHBAF8vdJwLsML7IY4t/Wm2R+WfT30zqE/8

zumckNJTidi82HEvyUJkfuMC4IH+covCtwawSMGgB23wMmvAveYPaCDU5IzOWN83

ZDIbz8JorzFfpQWtO0JNEmYPMWG5VImn4rEKZRs41r8CAwEAATANBgkqhkiG9w0B

AQQFAAOBgQAvaaoVvP267QbxBOeBDBeP3CCpOskT5YJUHWQE2QmH5wR/5iwQqvrU

Fo8V2JbaaauN9sa5CQutthUK1D3Ub+nHuHgGPFfdkL0Ll+5+LVf1swKXy8H1Q8CA

Aiq0dK0EJQ+taQTw+KD7MBOzIJk0OF76uwdNxgaATQEVjxi6M0MG5g==

-----END CERTIFICATE-----

Также требуется клиентский pem файл, syslog-ng-client.pem, содержащий только сертификат (берем его из файла crt) от подписывающего CA и от каждого клиента (в данном примере их три штуки).

-----BEGIN CERTIFICATE-----

MIIDJzCCApCgAwIBAgIBADANBgkqhkiG9w0BAQQFADBxMQswCQYDVQQGEwJVUzEW

MBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4GA1UEBxMHQmV2ZXJseTEVMBMGA1UE

ChMMT2NlYW53YXZlIENBMSEwHwYJKoZIhvcNAQkBFhJyb290QG9jZWFud2F2ZS5j

b20wHhcNMDIwNjIzMjIyODIxWhcNMTIwNjIwMjIyODIxWjBxMQswCQYDVQQGEwJV

UzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4GA1UEBxMHQmV2ZXJseTEVMBMG

A1UEChMMT2NlYW53YXZlIENBMSEwHwYJKoZIhvcNAQkBFhJyb290QG9jZWFud2F2

ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMSqIDhWZDLO2ptG9ebx

FUycmXoMNPCLWmsFgRBQKG5vgOQruX8jpXqHOFCxjhO4ZsSUWwd8eO4J/4A9kTao

VFzi4P63A8xyN92Gbh4BfvmFecDhLaoZ+5zMNclNOlom2Rda75Fj8iYhtSIrbOcq

Mc8KkRriG3+Hl6ptW0XibqznAgMBAAGjgc4wgcswHQYDVR0OBBYEFDlBMdhKkmEm

pQkan14xNA3a646MMIGbBgNVHSMEgZMwgZCAFDlBMdhKkmEmpQkan14xNA3a646M

oXWkczBxMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4G

A1UEBxMHQmV2ZXJseTEVMBMGA1UEChMMT2NlYW53YXZlIENBMSEwHwYJKoZIhvcN

AQkBFhJyb290QG9jZWFud2F2ZS5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG

9w0BAQQFAAOBgQB8Xzn/UioFZV2Osyt0oz8/3Eu1GmQx4Cpaw4o7GBKg52IQA0Sv

qfvUmeuFZ6sSDYEI6bC/u6MkyvRwV7pOtqzUoGbvtGDhnFIxdiyiEOfZosdvadBx

ilXHU/tYDXffxFBcBoeoFHkYyX1vAY4uFsPBEywF3NBUGuoP5Ed5+AS+rQ==

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

MIICZTCCAc4CAQMwDQYJKoZIhvcNAQEEBQAwcTELMAkGA1UEBhMCVVMxFjAUBgNV

BAgTDU1hc3NhY2h1c2V0dHMxEDAOBgNVBAcTB0JldmVybHkxFTATBgNVBAoTDE9j

ZWFud2F2ZSBDQTEhMB8GCSqGSIb3DQEJARYScm9vdEBvY2VhbndhdmUuY29tMB4X

0510MDcxOTEzNTc0M1oXDTA1MDcxOTEzNTc0M1owgYQxCzAJBgNVBAYTAlVTMRYw

FAYDVQQIEw1NYXNzYWNodXNldHRzMRAwDgYDVQQHEwdCZXZlcmx5MSMwIQYDVQQK

ExpPY2VhbndhdmUgQ29uc3VsdGluZywgSW5jLjEmMCQGA1UEAxMdcmVhbHNvb24u

b2ZmaWNlLm9jZWFud2F2ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB

AKKXR7OTQYKDWHvh0jCYSM2Y6gx+Lh2iE1hEVR4xE5UnGNv+/LzgGIYalmD86Vok

KkwdI+5cVp0JhF3gIUgL2+OoerE68AEQwv+tpzx4Px4Ze1pRjw9f6UW+17C3PICG

P4SpC6avMljj8lnv9Rmb300/Yz8ZzyAIzt8CjNu7lTCFAgMBAAEwDQYJKoZIhvcN

AQEEBQADgYEAleB5Xk0BnHu3g6ron5qcjBtDgnOnvzsX3v+KVaFGZiufdWtILCMn

58HrXCV2zoUlUcbnrqHgov47qvZBlh2HR7fT7MQYXFTKOFDXwCdSDfXHTUmmQHzq

cctX025yo45obGgI9LWDjip0/PW0k3r4IuVRtfOz+gHf1ZyEVjIuXkE=

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

MIICZDCCAc0CAQQwDQYJKoZIhvcNAQEEBQAwcTELMAkGA1UEBhMCVVMxFjAUBgNV

BAgTDU1hc3NhY2h1c2V0dHMxEDAOBgNVBAcTB0JldmVybHkxFTATBgNVBAoTDE9j

ZWFud2F2ZSBDQTEhMB8GCSqGSIb3DQEJARYScm9vdEBvY2VhbndhdmUuY29tMB4X

DTA0MDcxOTE0MTUwNloXDTA1MDcxOTE0MTUwNlowgYMxCzAJBgNVBAYTAlVTMRYw

FAYDVQQIEw1NYXNzYWNodXNldHRzMRAwDgYDVQQHEwdCZXZlcmx5MSMwIQYDVQQK

ExpPY2VhbndhdmUgQ29uc3VsdGluZywgSW5jLjElMCMGA1UEAxMcbGl6YXJkby5v

ZmZpY2Uub2NlYW53YXZlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA

ogtXoF+49I/CoSP+CUZ4jX+pLMsIXvta/MqqKlTuvEgauRSw385Aict7rGIR6B3u

BUEBFN4Q+WzuYVJfbBMsUq/A6bilMpq/vbBrPAB9s/BkC5FAx2tMuMpgWn6ZXs/W

iRiEWULAHa4k7rgmonXk47r0bBuSVrozdgKd4u2iB6sCAwEAATANBgkqhkiG9w0B

AQQFAAOBgQBCCMhUdlfRk5owxpUIgtNLQ6/wfPgyUtIm7M4Mg0tHLD2ILCiaJLie

x+Di5+09nciadYxn7fZhFdvnSpsthDX0/P6/H/iLTZnyK3k0PegzYx8Mwo4mnS/X

Bt1cOuciRrd1tPHZ+st2Zqz/UO1jhbtEx7RNjtpxypChFQ2SB63wuA==

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

MIICYzCCAcwCAQUwDQYJKoZIhvcNAQEEBQAwcTELMAkGA1UEBhMCVVMxFjAUBgNV

BAgTDU1hc3NhY2h1c2V0dHMxEDAOBgNVBAcTB0JldmVybHkxFTATBgNVBAoTDE9j

ZWFud2F2ZSBDQTEhMB8GCSqGSIb3DQEJARYScm9vdEBvY2VhbndhdmUuY29tMB4X

DTA0MDcxOTE0MTUyMFoXDTA1MDcxOTE0MTUyMFowgYIxCzAJBgNVBAYTAlVTMRYw

FAYDVQQIEw1NYXNzYWNodXNldHRzMRAwDgYDVQQHEwdCZXZlcmx5MSMwIQYDVQQK

ExpPY2VhbndhdmUgQ29uc3VsdGluZywgSW5jLjEkMCIGA1UEAxMbc2Vrcml0Lm9m

ZmljZS5vY2VhbndhdmUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDG

+OMOU6o3rCSyXMRRzwPKO/Yi9SjcT/5uwJh4x4a/iPlVNhbcG15PLpwmIiEvaKQe

PTwJNEWAMnDBWyT6bmdN9xa0X1pzCDiLGMKJ2PFzoL6b9VwQSx9zp9fTPinh+mVw

484Hf8nQOSs+HKVAltCvJWcFq04aqbauE817Og369wIDAQABMA0GCSqGSIb3DQEB

BAUAA4GBAJ6feAOv8bvGdk01QyupdIJVvp8IBv5ZJD1VLofoj/C4JYLsHWTV0IZI

rhw37hI9y9wAiiZVrbEM88N0FgFfHN2hoymvRmvg0Y7l7OuMQWz2vSMJYIyeI2Wb

uMWGN+klM77OxRXWseUOWaPp0RqW3MGqMV7+SU8sN9gVdEZdLxnj

-----END CERTIFICATE-----

Каждый клиент нуждается в его собственном сертификате и секретном ключе в pem файле, syslog-ng-client.pem:

-----BEGIN RSA PRIVATE KEY-----

MIICXAIBAAKBgQCil0ezk0GCg1h74dIwmEjNmOoMfi4dohNYRFUeMROVJxjb/vy8

4BiGGpZg/OlaJCpMHSPuXFadCYRd4CFIC9vjqHqxOvABEML/rac8eD8eGXtaUY8P

X+lFvtewtzyAhj+EqQumrzJY4/JZ7/UZm99NP2M/Gc8gCM7fAozbu5UwhQIDAQAB

AoGAGhMErqm44cNKl2NZn+1sD3ysXCCIKLxrOcaLl/Hq4AqLFAzKX0fY5viwkRE+

IvSVy+sIbhtk0H5MOfnNnI46TwCvgelMbb8FtRDpZrwA7AgH9+scnjfpuibVZdoW

9fR2HoOOevffDU9ZfFlthsOKJp+xb7PRFcsxlV3ihla9aKkCQQDNt3gcE9goGyBj

kWkgB1Ydmov155xC1ozGpeyEVm3fGtD+sfgIxYuaV1xFhQKZMR2QeEnX3v5mqP31

zf5dnj47AkEAylVB95ZGvG91H4uUXrSW53djD2a5GtVjXNoDWLs7Hp7sbUkbRexa

5cSZ7EFqbyXHYx1xKMgYwqgIhbV1CU2gPwJAZBnMtkzpt8pLXmfZcZ5gRxN223eS

T+u6oMcIafTsjc2suOK8wPfvUHEGE0X/169QpYYC2KpHvIiq2zsbdU6VFQJAYibZ

yXFs/xxShOsBHrAcREz2ERKT2SCLAw//b5vkIgaWSq2cPV9a+PtWb/WL3D9Hah1u

N4pZ+JPrDnHoRIsToQJBAJ4IG4AAgIPkmIVbROXXpt/2YBbP1WQI1suKzWy6r4V4

E0fiwYh1REik4+WRCRBabzjFA7GIDiD2QQGzTa8m0nQ=

-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----

MIICZTCCAc4CAQMwDQYJKoZIhvcNAQEEBQAwcTELMAkGA1UEBhMCVVMxFjAUBgNV

BAgTDU1hc3NhY2h1c2V0dHMxEDAOBgNVBAcTB0JldmVybHkxFTATBgNVBAoTDE9j

ZWFud2F2ZSBDQTEhMB8GCSqGSIb3DQEJARYScm9vdEBvY2VhbndhdmUuY29tMB4X

0510MDcxOTEzNTc0M1oXDTA1MDcxOTEzNTc0M1owgYQxCzAJBgNVBAYTAlVTMRYw

FAYDVQQIEw1NYXNzYWNodXNldHRzMRAwDgYDVQQHEwdCZXZlcmx5MSMwIQYDVQQK

ExpPY2VhbndhdmUgQ29uc3VsdGluZywgSW5jLjEmMCQGA1UEAxMdcmVhbHNvb24u

b2ZmaWNlLm9jZWFud2F2ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB

AKKXR7OTQYKDWHvh0jCYSM2Y6gx+Lh2iE1hEVR4xE5UnGNv+/LzgGIYalmD86Vok

KkwdI+5cVp0JhF3gIUgL2+OoerE68AEQwv+tpzx4Px4Ze1pRjw9f6UW+17C3PICG

P4SpC6avMljj8lnv9Rmb300/Yz8ZzyAIzt8CjNu7lTCFAgMBAAEwDQYJKoZIhvcN

AQEEBQADgYEAleB5Xk0BnHu3g6ron5qcjBtDgnOnvzsX3v+KVaFGZiufdWtILCMn

58HrXCV2zoUlUcbnrqHgov47qvZBlh2HR7fT7MQYXFTKOFDXwCdSDfXHTUmmQHzq

cctX025yo45obGgI9LWDjip0/PW0k3r4IuVRtfOz+gHf1ZyEVjIuXkE=

-----END CERTIFICATE-----

Каждый клиент также нуждается в pem файле, syslog-ng-server.pem, содержащем сертификат сервера и подписанный СА.

-----BEGIN CERTIFICATE-----

MIIDJzCCApCgAwIBAgIBADANBgkqhkiG9w0BAQQFADBxMQswCQYDVQQGEwJVUzEW

MBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4GA1UEBxMHQmV2ZXJseTEVMBMGA1UE

ChMMT2NlYW53YXZlIENBMSEwHwYJKoZIhvcNAQkBFhJyb290QG9jZWFud2F2ZS5j

b20wHhcNMDIwNjIzMjIyODIxWhcNMTIwNjIwMjIyODIxWjBxMQswCQYDVQQGEwJV

UzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4GA1UEBxMHQmV2ZXJseTEVMBMG

A1UEChMMT2NlYW53YXZlIENBMSEwHwYJKoZIhvcNAQkBFhJyb290QG9jZWFud2F2

ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMSqIDhWZDLO2ptG9ebx

FUycmXoMNPCLWmsFgRBQKG5vgOQruX8jpXqHOFCxjhO4ZsSUWwd8eO4J/4A9kTao

VFzi4P63A8xyN92Gbh4BfvmFecDhLaoZ+5zMNclNOlom2Rda75Fj8iYhtSIrbOcq

Mc8KkRriG3+Hl6ptW0XibqznAgMBAAGjgc4wgcswHQYDVR0OBBYEFDlBMdhKkmEm

pQkan14xNA3a646MMIGbBgNVHSMEgZMwgZCAFDlBMdhKkmEmpQkan14xNA3a646M

oXWkczBxMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTWFzc2FjaHVzZXR0czEQMA4G

A1UEBxMHQmV2ZXJseTEVMBMGA1UEChMMT2NlYW53YXZlIENBMSEwHwYJKoZIhvcN

AQkBFhJyb290QG9jZWFud2F2ZS5jb22CAQAwDAYDVR0TBAUwAwEB/zANBgkqhkiG

9w0BAQQFAAOBgQB8Xzn/UioFZV2Osyt0oz8/3Eu1GmQx4Cpaw4o7GBKg52IQA0Sv

qfvUmeuFZ6sSDYEI6bC/u6MkyvRwV7pOtqzUoGbvtGDhnFIxdiyiEOfZosdvadBx

ilXHU/tYDXffxFBcBoeoFHkYyX1vAY4uFsPBEywF3NBUGuoP5Ed5+AS+rQ==

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

MIICZDCCAc0CAQIwDQYJKoZIhvcNAQEEBQAwcTELMAkGA1UEBhMCVVMxFjAUBgNV

BAgTDU1hc3NhY2h1c2V0dHMxEDAOBgNVBAcTB0JldmVybHkxFTATBgNVBAoTDE9j

ZWFud2F2ZSBDQTEhMB8GCSqGSIb3DQEJARYScm9vdEBvY2VhbndhdmUuY29tMB4X

DTA0MDcxOTEzNTExNVoXDTA1MDcxOTEzNTExNVowgYMxCzAJBgNVBAYTAlVTMRYw

FAYDVQQIEw1NYXNzYWNodXNldHRzMRAwDgYDVQQHEwdCZXZlcmx5MSMwIQYDVQQK

ExpPY2VhbndhdmUgQ29uc3VsdGluZywgSW5jLjElMCMGA1UEAxMcbG9naG9zdC5v

ZmZpcdaub2NlYW53YXZlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA

0gCdJFC7ysSIRbc9XLV5Q1mNAnE6SLHBAF8vdJwLsML7IY4t/Wm2R+WfT30zqE/8

zumckNJTidi82HEvyUJkfuMC4IH+covCtwawSMGgB23wMmvAveYPaCDU5IzOWN83

ZDIbz8JorzFfpQWtO0JNEmYPMWG5VImn4rEKZRs41r8CAwEAATANBgkqhkiG9w0B

AQQFAAOBgQAvaaoVvP267QbxBOeBDBeP3CCpOskT5YJUHWQE2QmH5wR/5iwQqvrU

Fo8V2JbaaauN9sa5CQutthUK1D3Ub+nHuHgGPFfdkL0Ll+5+LVf1swKXy8H1Q8CA

Aiq0dK0EJQ+taQTw+KD7MBOzIJk0OF76uwdNxgaATQEVjxi6M0MG5g==

-----END CERTIFICATE-----

Удостоверьтесь, что на каждой машине только root может читать файлы сертификатов.

chmod 400 /usr/local/etc/openssl/certs/syslog-ng-*

chown root:other /usr/local/etc/openssl/certs/syslog-ng-*

Конфигурирование Stunnel для работы с syslog-ng

На сервере создайте файл конфигурации Stunnel , /usr/local/etc/stunnel/stunnel.conf, содержащий информацию по типу нижеприведенной. В этом примере в файле определяются сертификаты/ключи, сертификаты сервера, пользователь и группа stunnel, каталог chroot. Значение verify, равное 3, говорит о том, что stunnel будет проверять клиента с использованием локально установленных сертификатов. Stunnel пропускает верификацию по умолчанию, поэтому этот параметр необходимо задать явно. В заключительной части файла конфигурации определяется порт для сессии SSL и IP:port, где соединения будут приняты и перенаправлены. Порт 514 - это стандартный порт syslog, а 5140 - свободен и был нами выбран случайно. Для получения дополнительной информации и опций конфигурации обратитесь к странице руководства man stunnel.

cert = /usr/local/etc/openssl/certs/syslog-ng-server.pem

CAfile = /usr/local/etc/openssl/certs/syslog-ng-client.pem

chroot = /var/run/stunnel

pid = /run/stunnel.pid

setuid = stunnel

setgid = stunnel

verify = 3

[5140]

accept = 192.168.1.10:5140

connect = 127.0.0.1:514

На каждом клиенте файл конфигурации /usr/local/etc/stunnel/stunnel.conf содержит директивы, подобно файлу конфигурации сервера. Значения cert, CAfile, accept и connect меняются местами и добавляется директива client:

client = yes

cert = /usr/local/etc/openssl/certs/syslog-ng-client.pem

CAfile = /usr/local/etc/openssl/certs/syslog-ng-server.pem

chroot = /var/run/stunnel

pid = /run/stunnel.pid

setuid = stunnel

setgid = stunnel

verify = 3

[5140]

accept = 127.0.0.1:514

connect = 192.168.1.10:5140

Теперь 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

;;

*)

echo "Usage: $0 { start | stop }"

exit 1

;;

esac

Необходимо удалить скрипты запуска и останова дефолтного демона syslog и создать соответствующие ссылки на syslog-ng:

rm /etc/rc*.d/???syslog

ln -s /etc/init.d/syslog-ng /etc/rc0.d/K40syslog-ng

ln -s /etc/init.d/syslog-ng /etc/rc1.d/K40syslog-ng

ln -s /etc/init.d/syslog-ng /etc/rc2.d/S74syslog-ng

ln -s /etc/init.d/syslog-ng /etc/rcS.d/K40syslog-ng

Конфигурирование syslog-ng

Гибкость 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).

# Options

options {

use_fqdn(yes);

sync(0);

keep_hostname(yes);

chain_hostnames(no);

create_dirs(yes);

};

# Sources of syslog messages (both local and remote messages on the server)

source s_local {

sun-streams("/dev/log" door("/etc/.syslog_door"));

internal();

};

source s_stunnel {

tcp(ip("127.0.0.1")

port(514)

max-connections(1));

};

source s_udp { udp(); };

# Level Filters

filter f_emerg { level (emerg); };

filter f_alert { level (alert .. emerg); };

filter f_crit { level (crit .. emerg); };

filter f_err { level (err .. emerg); };

filter f_warning { level (warning .. emerg); };

filter f_notice { level (notice .. emerg); };

filter f_info { level (info .. emerg); };

filter f_debug { level (debug .. emerg); };

# Facility Filters

filter f_kern { facility (kern); };

filter f_user { facility (user); };

filter f_mail { facility (mail); };

filter f_daemon { facility (daemon); };

filter f_auth { facility (auth); };

filter f_syslog { facility (syslog); };

filter f_lpr { facility (lpr); };

filter f_news { facility (news); };

filter f_uucp { facility (uucp); };

filter f_cron { facility (cron); };

filter f_local0 { facility (local0); };

filter f_local1 { facility (local1); };

filter f_local2 { facility (local2); };

filter f_local3 { facility (local3); };

filter f_local4 { facility (local4); };

filter f_local5 { facility (local5); };

filter f_local6 { facility (local6); };

filter f_local7 { facility (local7); };

# Custom Filters

filter f_user_none { not facility (user); };

filter f_kern_debug { filter (f_kern) and filter (f_debug); };

filter f_daemon_notice { filter (f_daemon) and filter (f_notice); };

filter f_mail_crit { filter (f_mail) and filter (f_crit); };

filter f_mesg { filter (f_kern_debug) or

filter (f_daemon_notice) or

filter (f_mail_crit); };

filter f_authinfo { filter (f_auth) or program (sudo); };

# Destinations: local files, the console, and the client files

destination l_authlog { file ("/var/log/authlog"); };

destination l_messages { file ("/var/log/messages"); };

destination l_maillog { file ("/var/log/maillog"); };

destination l_ipflog { file ("/var/log/ipflog"); };

destination l_imaplog { file ("/var/log/imaplog"); };

destination l_syslog { file ("/var/log/syslog"); };

destination l_console { file ("/dev/console"); };

destination r_authlog { file

("/var/log/clients/$YEAR/$MONTH/$HOST/authlog"); };

destination r_messages { file

("/var/log/clients/$YEAR/$MONTH/$HOST/messages"); };

destination r_maillog { file

("/var/log/clients/$YEAR/$MONTH/$HOST/maillog"); };

destination r_ipflog { file

("/var/log/clients/$YEAR/$MONTH/$HOST/ipflog"); };

destination r_imaplog { file

("/var/log/clients/$YEAR/$MONTH/$HOST/imaplog"); };

destination r_console { file

("/var/log/clients/$YEAR/$MONTH/$HOST/consolelog"); };

destination r_syslog { file

("/var/log/clients/$YEAR/$MONTH/$HOST/syslog"); };

destination r_fallback { file

("/var/log/clients/$YEAR/$MONTH/$HOST/$FACILITY-$LEVEL"); };

# Log statements

# Local sources

log { source (s_local); filter (f_authinfo) destination (l_authlog); };

log { source (s_local); filter (f_mail); destination (l_maillog); };

log { source (s_local); filter (f_local0); destination (l_ipflog); };

log { source (s_local); filter (f_local1); destination (l_imaplog); };

log { source (s_local); filter (f_syslog); destination (l_syslog); };

log { source (s_local); filter (f_emerg); filter (f_user_none);

destination (l_console); };

log { source (s_local); filter (f_mesg); filter (f_user_none);

destination (l_messages); };

# All sources, since we want to archive local and remote logs

log { source (s_local); source (s_stunnel); filter (f_authinfo);

destination (r_authlog); };

log { source (s_local); source (s_stunnel); filter (f_mail);

destination (r_maillog); };

log { source (s_local); source (s_stunnel); filter (f_local0);

destination (r_ipflog); };

log { source (s_local); source (s_stunnel); filter (f_local1);

destination (r_imaplog); };

log { source (s_local); source (s_stunnel); filter (f_syslog);

destination (r_syslog); };

log { source (s_local); source (s_stunnel); filter (f_emerg);

filter (f_user_none);

destination (l_console); };

log { source (s_local); source (s_stunnel); filter (f_mesg);

filter (f_user_none);

destination (l_messages); };

Для клиентского файла syslog-ng.conf фильтры остаются темиже самыми, но все остальной изменяется.

# Options

options {

sync(0);

use_fqdn(yes);

};

# Sources of syslog messages (only local on clients)

source s_local {

sun-streams("/dev/log" door("/etc/.syslog_door"));

internal();

};

# Destinations: local files, the console, and the remote syslog server

destination l_authlog { file ("/var/log/authlog"); };

destination l_messages { file ("/var/log/messages"); };

destination l_maillog { file ("/var/log/maillog"); };

destination l_ipflog { file ("/var/log/ipflog"); };

destination l_imaplog { file ("/var/log/imaplog"); };

destination l_console { file ("/dev/console"); };

destination l_syslog { file ("/var/log/syslog"); };

destination stunnel { tcp ("127.0.0.1", port(514)); };

# Level Filters

filter f_emerg { level (emerg); };

filter f_alert { level (alert .. emerg); };

filter f_crit { level (crit .. emerg); };

filter f_err { level (err .. emerg); };

filter f_warning { level (warning .. emerg); };

filter f_notice { level (notice .. emerg); };

filter f_info { level (info .. emerg); };

filter f_debug { level (debug .. emerg); };

# Facility Filters

filter f_kern { facility (kern); };

filter f_user { facility (user); };

filter f_mail { facility (mail); };

filter f_daemon { facility (daemon); };

filter f_auth { facility (auth); };

filter f_syslog { facility (syslog); };

filter f_lpr { facility (lpr); };

filter f_news { facility (news); };

filter f_uucp { facility (uucp); };

filter f_cron { facility (cron); };

filter f_local0 { facility (local0); };

filter f_local1 { facility (local1); };

filter f_local2 { facility (local2); };

filter f_local3 { facility (local3); };

filter f_local4 { facility (local4); };

filter f_local5 { facility (local5); };

filter f_local6 { facility (local6); };

filter f_local7 { facility (local7); };

# Custom Filters

filter f_user_none { not facility (user); };

filter f_kern_debug { filter (f_kern) and filter (f_debug); };

filter f_daemon_notice { filter (f_daemon) and filter (f_notice); };

filter f_mail_crit { filter (f_mail) and filter (f_crit); };

filter f_mesg { filter (f_kern_debug) or

filter (f_daemon_notice) or

filter (f_mail_crit); };

filter f_authinfo { filter (f_auth) or program (sudo); };

# Log statements

# Log things locally

log { source (s_local); filter (f_authinfo); destination (l_authlog); };

log { source (s_local); filter (f_mail); destination (l_maillog); };

log { source (s_local); filter (f_local0); destination (l_ipflog); };

log { source (s_local); filter (f_local1); destination (l_imaplog); };

log { source (s_local); filter (f_syslog); destination (l_syslog); };

log { source (s_local); filter (f_emerg); filter (f_user_none);

destination (l_console); };

log { source (s_local); filter (f_mesg); filter (f_user_none);

destination (l_messages); };

# Log everything remotely via stunnel

log { source (s_local); destination (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/

Возможности для автоматизирования процесса мониторинга файлов журналов весьма обширны, так как вывод логов можно организовать достаточно гибко.

Оригинал: http://dreamcatcher.ru/docs/secure_syslog.html

http://www.sun.com/bigadmin/features/articles/syslog_ng.html?biga=15

Обновлено: 12.03.2015