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.
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: If not running, start mysqld: Create mysql database for rsyslog (file path changes on other distros/releases ): Set mysql permissions (must be the same in /etc/rsyslog.conf and /path/top/phplogcon/config.php ) vi /etc/rsyslog.conf Try rsyslog (disable sysklogd): If you get messages like: fix fast with: Enable rsyslog service at boot time (and disable default syslog) CENTRAL RSYSLOG PHPLOGCON cd /var/www/html/syslog |
В репозиториях 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 генерятся сообщения и отправляются по 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 |
При первом входе на страничку потребуется пройти по шагам для создания конфиг-файла. Не забудьте выбрать источник событий – база данных.
С серверной частью все – перейдем к клиентской.
Клиентами у нас выступают 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 еще есть много интересностей и вкусностей.
Все! У меня все заработало – навожу красоту и допиливаю напильником под себя.
Не очень красиво выглядят записи, но, поработав напильником, можно это исправить.
Привет мир! Exchange 2007 SP2 + NTLM