Rexxer

Some tips for me and other

EasyIDS + Rsyslog

Следуя поговорке «предупрежден – значит вооружен», решил поставить IDS и Rsyslog в пределах вверенной мне сети.

Сначала, был опробован OSSIM (http://www.alienvault.com/products.php?section=OpenSourceSIM). Однако, мне он показался слишком мудреным и туговатым в настроуке, несмотря на наличие обширного веб-интерфейса. После некоторых поисков, я остановился на EasyIDS (http://www.skynet-solutions.net/easyids/). Это Snort + NTOP + Arpwatch + … в одном флаконе на базе CentOS 5.2. Выглядит попроще, чем OSSIM, но и более проста в настройке, как по мне. Итак, начнем …

Для начала, я провел подготовительные работы:

1.       Имеем DHCP-сервер. Я зарезервировал IP для IDS. (Рекомендации по установке)

2.       Развернем систему на виртуальной машине в среде VMWare ESXi 4. Для этого была докуплена дополнительная сетевая плата Intel 1000MT (40$) и создан еще один Virtual Switch в ESXi, куда и вошла эта сетевая. Внимание! Нужно включить на этом свитче Promiscuous mode.

image001

3.       На управляемом свитче AT-8000S настроил «Port Mirroring». Source port – порт моего инет-шлюза смотрящий во внутреннюю сеть, Destination Port – порт, куда смотрит дополнительная сетевая плата ESXi. При этом Destination Port «изолируется».

Переходим непосредственно к установке.

Заливаем скачанный образ «EasyIDS-0.4.iso» в хранилище ESXi. Создаем виртуальную машину: я выбрал шаблон Debian 5 32-bit, 8Gb HDD, 512Mb Memory, подключил основную сетевую и дополнительную, CD c замапленным ISO.

Установка проходит без проблем – указываем все запрошенные данные, запоминаем рутовый пароль и для mysql. Система сама получит адрес по DHCP на первый интерфейс eth0, второй интерфейс eth1 будет «слушать» то что идет через шлюз из нашей сети.

Уже на данном этапе мы можем зайти на страничку браузером и посмотреть результат: по-умолчанию Login: admin

Password: password

image003

Система уже работает и собирает данные.

Чтобы не смотреть все время логи, настроим уведомление по e-mail: Settings – Snort – Notify Settings.

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

Не буду описывать все пункты меню J, остановлюсь на пунке Analysis – мне очень нравится смотреть отчет NTOP:

image005

Видим, что 84 хост усиленно качал, следующий за ним и 48 тоже развил небывалую активность (см. Host Contacts), жмакаем на хост – попадаем в отчет – смотрим по какому протоколу – HTTP – иду ставить клизму. По колонке Host Contacts можно сразу определить кто использует торренты J.

На мыло мне приходят такие сообщения, например:

easyids detected ICMP Destination Unreachable Communication Administratively Prohibited from 195.66.138.10 to 192.168.2.139 11 times last at 2010-01-06 10:54:21

easyids detected SQL probe response overflow attempt from 69.203.141.40 to 192.168.2.236 2 times last at 2010-01-06 10:51:28

Первый тип приходит регулярно, на него можно не обращать внимания. Нагуглил вот такое:
In your snort.conf, the default value for your SQL servers is:
var SQL_SERVERS $HOME_NET
Replace $HOME_NET with the actual IP addrs of any internal SQL servers.
Or comment out the alert for SID 2329 in sql.rules.
Then you won’t see these false positives any more.

Идем дальше – прилепим сюда же систему централизованного сбора логов с Win-серверов.

Логинимся в систему либо через консоль ESXi, либо через SSH.

Без mc неудобно J – ставим (нужен инет):

yum install mc

Можно жить! J

Устанавливаем rsyslog вместо стандартного syslog.

Делал по этой статье http://openskill.info/infobox.php?ID=1475, поставил и снес ввиду устаревшего дистриба.

Ensure all necessary packages are installed:
yum install rsyslog rsyslog-mysql

If you want local mysql server and web interface:
yum install mysql-server
yum install httpd php php-mysyql php-gd

If not running, start mysqld:
service mysqld status || service mysqld start

Create mysql database for rsyslog (file path changes on other distros/releases ):
mysql < /usr/share/doc/rsyslog-mysql-2.0.0/createDB.sql

Set mysql permissions (must be the same in /etc/rsyslog.conf and /path/top/phplogcon/config.php )
mysql> grant all on Syslog.* to syslog@localhost identified by ‘mypass’;
mysql> flush privileges ;

vi /etc/rsyslog.conf
# Log to Mysql Settings
$ModLoad ommysql
*.*       :ommysql:localhost,Syslog,syslog,phplogcon
#Standard Redhat syslog settings
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

Try rsyslog (disable sysklogd):
service syslog stop
service rsyslog start

If you get messages like:
Feb 23 23:43:30 mon rsyslogd:could not load module ‘/usr/lib/rsyslog/ommysql’, dlopen: /usr/lib/rsyslog/ommysql: cannot open shared object file: No such file or directory

fix fast with:
ln -s /usr/lib/rsyslog/ommysql.so /usr/lib/rsyslog/ommysql

Enable rsyslog service at boot time (and disable default syslog)
chkconfig syslog off
chkconfig rsyslog on

CENTRAL RSYSLOG
As with standard syslogd edit /etc/sysconfig/rsyslog with option -r:
SYSLOGD_OPTIONS=”-m 0 -r”
to enable the listening of syslog on the default 514 UDP port.
This is necessary for a centralized syslog server.

PHPLOGCON
Get latest package from http://www.phplogcon.org/
Unpack and move relevant files under Apache documents:
tar -zxvf phplogcon-2.5.24.tar.gz
cd phplogcon-2.5.24
mkdir /var/www/html/syslog
cp -a src/* /var/www/html/syslog

cd /var/www/html/syslog
To permit web configuration:
chmod 666 config.php
Browse to web interface: http://yourserver/syslog/ and follow on screen instructions.
Enable a Mysql source and use the authentication settings defined before.
Note that the logs table name is SystemEvents
To restore safe settings (do it after web configuration):
chmod 644 config.php

В репозиториях CentOS была версия 2.0.6, хотя на официальном сайте уже намного свежее – скачиваем понравившийся, на тот момент была версия 5.5.1: http://rsyslog.com/, там же куча документации и т.п.

Распаковываем и приступаем к конфигурированию и компиляции. Тут не забываем включить поддержку mysql:

./configure – -enable-mysql – -enable-rsyslogd – -enable-mail

Компилируем:

make

и … облом – вылетаем с ошибкой. Погуглив, нахожу решение, видимо не понравилась виртуальная среда: чтобы не запускать конфиг поновой – иду в соданный Makefile и добавляю в переменную CFLAGS новый флаг “-march=i686”.

Или поновой:

./configure CFLAGS=”-march=i686 – -enable-mysql – -enable-rsyslogd – -enable-mail

Все проходит на ура. Устанавливаем:

make install

Создаем базу в mysql если она не создана автоматом (файлик находится в папке дистрибутива /plugins/ommysql/createDB.sql):

mysql  -uroot -p”password” < createDB.sql

Создаем пользователя для базы:

adduser syslog

Даем разрешения на базу для пользователя, прописываем в /etc/rsyslog.conf и /path/top/phplogcon/config.php.

mysql> grant all on Syslog.* to syslog@localhost identified by ‘mypass’;

mysql> flush privileges ;

Активируем rsyslog в автозагрузке (и деактивируем syslog)

chkconfig syslog off

chkconfig rsyslog on

Если такого сервиса не оказалось – создаем rsyslog.sh и кладем в init.d:

#!/bin/bash

# Source function library.

. /etc/init.d/functions

RETVAL=0

start() {

[ -x /usr/local/sbin/rsyslogd ] || exit 5

[ -x /usr/local/sbin/rklogd ] || exit 5

# Source config

if [ -f /etc/sysconfig/rsyslog ] ; then

. /etc/sysconfig/rsyslog

else

SYSLOGD_OPTIONS=”-m 0″

KLOGD_OPTIONS=”-2″

fi

umask 077

echo -n $”Starting system logger (rsyslog): ”

daemon /usr/local/sbin/rsyslogd $SYSLOGD_OPTIONS

RETVAL=$?

echo

echo -n $”Starting kernel logger (rklogd): ”

daemon /usr/local/sbin/rklogd $KLOGD_OPTIONS

echo

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/rsyslog

return $RETVAL

}

stop() {

echo -n $”Shutting down kernel logger (rklogd): ”

killproc rklogd

echo

echo -n $”Shutting down system logger (rsyslog): ”

killproc rsyslogd

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/rsyslog

return $RETVAL

}

rhstatus() {

status rsyslogd

status rklogd

}

restart() {

stop

start

}

case “$1″ in

start)

start

;;

stop)

stop

;;

status)

rhstatus

;;

restart|reload)

restart

;;

condrestart)

[ -f /var/lock/subsys/rsyslog ] && restart || :

;;

*)

echo $”Usage: $0 {start|stop|status|restart|condrestart}”

exit 2

esac

exit $?

Даем команду:

chkconfig -add rsyslog

Правим конфиг /etc/rsyslog.conf

$ModLoad ommysql.so

*.*    :ommysql:localhost,Syslog,syslog,Password

$ModLoad imudp.so

$ModLoad imtcp.so

$UDPServerRun 514

$InputTCPServerRun 514

$AllowedSender UDP, 127.0.0.1, 192.168.2.0/24, 192.168.1.0/24

$AllowedSender TCP, 127.0.0.1, 192.168.2.0/24, 192.168.1.0/24

$EscapeControlCharactersOnReceive off

$ModLoad ommail.so

$ActionMailSMTPServer 192.168.1.217

$ActionMailFrom test@mydomain.com

$ActionMailTo admin@mydomain.com

$template mailSubject,”EventLog Message”

$template mailBody,”RSYSLOG Alertrn’%msg%'”

$ActionMailSubject mailSubject

if $syslogseverity-text==’alert’

or $syslogseverity-text==’err’

then :ommail:;mailBody

# Log all kernel messages to the console.

# Logging much else clutters up the screen.

#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.

# Don’t log private authentication messages!

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.

authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.

mail.*                                                  -/var/log/maillog

# Log cron stuff

cron.*                                                  /var/log/cron

# Everybody gets emergency messages

*.emerg                                                 *

# Save news errors of level crit and higher in a special file.

uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log

local7.*                                                /var/log/boot.log

Краткое пояснение: загружаются модули для mysql, udp, tcp, mail, все события пишутся в базу mysql и локальные файлы. Для сообщения с пометкой ALERT и ERR генерятся сообщения и отправляются по email.

В /etc/sysconfig/rsyslog правим строку к виду:

SYSLOGD_OPTIONS=”-c4″

Чтобы не наступать на грабли, как я J, в системе по-умолчанию работает строгий файрволл. Поэтому идем в /etc/sysconfig/iptables и добавляем перед всеобщим дропом, т.е. открываем 514 порт udp и tcp:

-A RH-Firewall-1-INPUT -m state –state NEW -m udp -p udp –dport 514 -j ACCEPT

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 514 -j ACCEPT

Ставим PHPLogCon для визуализации.

PHPLOGCON
Get latest package from http://www.phplogcon.org/
Unpack and move relevant files under Apache documents:
tar -zxvf phplogcon-2.5.24.tar.gz
cd phplogcon-2.5.24
mkdir /var/www/html/syslog
cp -a src/* /var/www/html/syslog

cd /var/www/html/syslog
To permit web configuration:
chmod 666 config.php
Browse to web interface: http://yourserver/syslog/ and follow on screen instructions.
Enable a Mysql source and use the authentication settings defined before.
Note that the logs table name is SystemEvents
To restore safe settings (do it after web configuration):
chmod 644 config.php

При первом входе на страничку потребуется пройти по шагам для создания конфиг-файла. Не забудьте выбрать источник событий – база данных.

image007

С серверной частью все – перейдем к клиентской.

Клиентами у нас выступают Windows 2003 Server и Windows 2008 Server. На 2003м я установил el2sl, на 2008 Snare, хотя, можно было ограничиться только Snare(http://www.intersectalliance.com/projects/SnareWindows/).

Snare конфигурируется через веб-интерфейс – Network Settings: указываем адрес нашего syslog-сервера, ставим галочку SYSLOG HEADERS. Далее, по желанию, можно настроить какие сообщения будут передаваться на сислог – я, например, выбрал warning, error, audit failure. Это же можно настроить через rsyslog.conf – смотрите офиц.сайт. На сайте http://www.intersectalliance.com еще есть много интересностей и вкусностей.

Все! У меня все заработало – навожу красоту и допиливаю напильником под себя.

Не очень красиво выглядят записи, но, поработав напильником, можно это исправить.

Leave a Reply