Следуя поговорке «предупрежден - значит вооружен», решил поставить 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.

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

Система уже работает и собирает данные.
Чтобы не смотреть все время логи, настроим уведомление по e-mail: Settings - Snort - Notify Settings.
Все конфиги можно отредактировать через веб, либо прямо в системе - все просто и понятно.
Не буду описывать все пункты меню J, остановлюсь на пунке Analysis - мне очень нравится смотреть отчет NTOP:

Видим, что 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 Alert\r\n’%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 генерятся сообщения и отправляются по e-mail.
В /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 |
При первом входе на страничку потребуется пройти по шагам для создания конфиг-файла. Не забудьте выбрать источник событий - база данных.

С серверной частью все - перейдем к клиентской.
Клиентами у нас выступают 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 еще есть много интересностей и вкусностей.
Все! У меня все заработало - навожу красоту и допиливаю напильником под себя.
Не очень красиво выглядят записи, но, поработав напильником, можно это исправить.