Привет, привет!
Сегодня хочу поделиться с вами опытом по настройке ELK и IDS Suricata. В инете много мануалов, но ни один из них не позволит «завезти» связку этих продуктов в текущих версиях.
Также есть готовый дистрибутив SELKS — www.stamus-networks.com/open-source/#selks или же, в качестве альтернативы, связка snort, snorby и barnyard2 в SecOnion — blog.securityonion.net.
Для остальных прошу под кат.
Итак, что нам надо:
Систему, которая будет наглядно отображать события с IDS, и чтобы это не был ArcSight, OSSIM, QRadar и т.п.
Для начала найдем что-нибудь из RHEL7 или CentOS7. Можно и Ubuntu LTS, что вам больше нравится для продакшена.
А также сами компоненты ELK и IDS.
Suricata — suricata-ids.org
ElasticSearch — www.elastic.co/products/elasticsearch
Logstash — www.elastic.co/products/logstash
Kibana — www.elastic.co/products/kibana
Ну и дунуть, чтобы получилось чудо… В смысле, думать!
Для начала доустановим необходимые компоненты (java, json):
Скачиваем и устанавливаем ids suricata:
Далее
Или следующие команды для автоматического конфигурирования: make install-conf; make install-rules
make install-full –если вам не нужно что-то тонко настраивать, рекомендую использовать данную команду. Автоматически будут созданы переменные, папки и правила докачаются соостветсвенно в директорию /rules
При автоматической установке нужная нам директория с логами будет располагаться в:
Здесь будут файлы: eve.json fast.log http.log stats.log. Но не все файлы одинаково полезны. Нам нужен тот у которого хвост json
Теперь необходимо настроить IDS. Мы остановимся только на том, чтобы alerts попадали в json файл. Идем в /etc/suricata/suricata.yaml и находим там блок вывода логов или alerts. Для вывода в json нужен такой конфиг:
Остальной конфиг на ваше усмотрение. Благо там есть над чем задуматься.
Далее elsasticsearch:
Проверяем что там с java:
Если все ок, продолжаем (иначе, в начало заметки).
Скачиваем и устанавливаем elasticsearch:
Status –OK? Поехали за Logstash
Тверь нужно его настроить, идем в /etc/logstash/conf.d/
Вот так выглядит рабочий конфиг logstash для текущих версий компонентов ПО:
Сохраняем, проверяем конфигурацию:
Напоследок устанавливаем web лицо нашей системы IDS — Kibana4.
Распаковываем в папку, например так: /opt/kibana4/ или /var/www/html/. В директории /opt/kibana4/bin/ стартуем веб-интерфейс. Можно сделать службу, как — описано здесь discuss.elastic.co/t/run-kibana-as-service-on-centos/23971/2. Я не делал.
Бывает, что при запуске kibana появляется ошибка «kibana is still indexing», это можно увидеть в консоли или на вэбке в дашборде «Status». Для устранения ошибки делаем следующие команды с проверкой успешности:
Теперь нам нужны индексы. Идем сюда github.com/StamusNetworks/KTS. Здесь мы найдем уже подготовленные индексы и дашборды.
Для запуска движка IDS вводим:
Обратите внимание на название интерфейса и режим его работы. Для пассивного анализа, необходимо перевезти интерфейс в режим promisc ну и SPAN сессией тоже лучше обзавестись:
После запуска IDS, размер лог файлов должен существенно увеличиваться.
Если критичных ошибок при старте не было, заходим на 5601 порт. Выбираем индексы logstash-*, идем в Dashboards и создаем интерфейс отображения под себя. Может получиться что-нибудь похожее на это:
Или на это (скрин не мой):
Для того чтобы смотреть на карту, нужно раскоментировать в конфиге logstash эту строку: #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat" и скачать собственно указанный или аналогичный файл с геолокацией по IP.
Да еще не забудьте про Log rotation.
В /etc/logrotate.d/ создаем файл suricata cо следующим содержанием:
Буду рад вашим комментариям.
Если будете пробовать и не заведтся ELK или suricata, пишите, может что и выйдет=)
Сегодня хочу поделиться с вами опытом по настройке ELK и IDS Suricata. В инете много мануалов, но ни один из них не позволит «завезти» связку этих продуктов в текущих версиях.
Также есть готовый дистрибутив SELKS — www.stamus-networks.com/open-source/#selks или же, в качестве альтернативы, связка snort, snorby и barnyard2 в SecOnion — blog.securityonion.net.
Для остальных прошу под кат.
Итак, что нам надо:
Систему, которая будет наглядно отображать события с IDS, и чтобы это не был ArcSight, OSSIM, QRadar и т.п.
Для начала найдем что-нибудь из RHEL7 или CentOS7. Можно и Ubuntu LTS, что вам больше нравится для продакшена.
А также сами компоненты ELK и IDS.
Suricata — suricata-ids.org
ElasticSearch — www.elastic.co/products/elasticsearch
Logstash — www.elastic.co/products/logstash
Kibana — www.elastic.co/products/kibana
Ну и дунуть, чтобы получилось чудо… В смысле, думать!
IDS
Для начала доустановим необходимые компоненты (java, json):
yum -y install java-1.8.0-openjdk-devel.x86_64
yum -y install gcc libpcap-devel pcre-devel libyaml-devel file-devel zlib-devel jansson-devel nss-devel libcap-ng-devel libnet-devel tar make libnetfilter_queue-devel lua-devel
Скачиваем и устанавливаем ids suricata:
wget http://www.openinfosecfoundation.org/download/suricata-3.0.tar.gz
tar -xvzf suricata-3.0.tar.gz
cd suricata-3.0
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua
Далее
make; sudo make install; sudo ldconfig
Или следующие команды для автоматического конфигурирования: make install-conf; make install-rules
make install-full –если вам не нужно что-то тонко настраивать, рекомендую использовать данную команду. Автоматически будут созданы переменные, папки и правила докачаются соостветсвенно в директорию /rules
При автоматической установке нужная нам директория с логами будет располагаться в:
@srv-ids ~]# cd /var/log/suricata/
Здесь будут файлы: eve.json fast.log http.log stats.log. Но не все файлы одинаково полезны. Нам нужен тот у которого хвост json
Теперь необходимо настроить IDS. Мы остановимся только на том, чтобы alerts попадали в json файл. Идем в /etc/suricata/suricata.yaml и находим там блок вывода логов или alerts. Для вывода в json нужен такой конфиг:
- eve-log:
enabled: yes
filetype: regular #regular|syslog|unix_dgram|unix_stream|redis
filename: eve.json
Остальной конфиг на ваше усмотрение. Благо там есть над чем задуматься.
ELK
Далее elsasticsearch:
Проверяем что там с java:
java –version
echo $JAVA_HOME
Если все ок, продолжаем (иначе, в начало заметки).
Скачиваем и устанавливаем elasticsearch:
wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.2.1/elasticsearch-2.2.1.rpm
sudo rpm -Uvh ./elasticsearch-2.2.1.rpm
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
sudo systemctl status elasticsearch.service
Status –OK? Поехали за Logstash
wget https://download.elastic.co/logstash/logstash/packages/centos/logstash-2.2.2-1.noarch.rpm
sudo rpm -Uvh ./logstash-2.2.2-1.noarch.rpm
Тверь нужно его настроить, идем в /etc/logstash/conf.d/
Вот так выглядит рабочий конфиг logstash для текущих версий компонентов ПО:
input {
file {
path => ["/var/log/suricata/eve.json"]
#sincedb_path => ["/var/lib/logstash/"]
codec => json
type => "SuricataIDPS-logs"
start_position => "beginning"
}
}
filter {
if [type] == "SuricataIDPS-logs" {
date {
match => [ "timestamp", "ISO8601" ]
}
ruby {
code => "if event['event_type'] == 'fileinfo'; event['fileinfo']['type']=event['fileinfo']['magic'].to_s.split(',')[0]; end;"
}
}
if [src_ip] {
geoip {
source => "src_ip"
target => "geoip"
#database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert => [ "[geoip][coordinates]", "float" ]
}
}
}
output {
elasticsearch { hosts => ["localhost:9200"] }
#stdout { codec => rubydebug }
}
Сохраняем, проверяем конфигурацию:
@srv-ids ~]# service logstash configtest
Configuration OK
Напоследок устанавливаем web лицо нашей системы IDS — Kibana4.
wget https://download.elastic.co/kibana/kibana/kibana-4.4.2-linux-x64.tar.gz
Распаковываем в папку, например так: /opt/kibana4/ или /var/www/html/. В директории /opt/kibana4/bin/ стартуем веб-интерфейс. Можно сделать службу, как — описано здесь discuss.elastic.co/t/run-kibana-as-service-on-centos/23971/2. Я не делал.
Бывает, что при запуске kibana появляется ошибка «kibana is still indexing», это можно увидеть в консоли или на вэбке в дашборде «Status». Для устранения ошибки делаем следующие команды с проверкой успешности:
curl -XDELETE http://localhost:9200/.kibana
curl -XDELETE http://localhost:9200/*
Теперь нам нужны индексы. Идем сюда github.com/StamusNetworks/KTS. Здесь мы найдем уже подготовленные индексы и дашборды.
git clone https://github.com/StamusNetworks/KTS.git
patch -p1 -d /opt/kibana4/ < /opt/kibana4/KTS/patches/kibana-integer.patch
patch -p1 -d /opt/kibana4/ < /opt/kibana4/KTS/patches/timelion-integer.patch
./load.sh
Go, go, go!
Для запуска движка IDS вводим:
@srv-ids ~]# /usr/bin/suricata -c /etc/suricata//suricata.yaml -i eth0
Обратите внимание на название интерфейса и режим его работы. Для пассивного анализа, необходимо перевезти интерфейс в режим promisc ну и SPAN сессией тоже лучше обзавестись:
@srv-ids ~]# ifconfig eth0 promisc
После запуска IDS, размер лог файлов должен существенно увеличиваться.
Если критичных ошибок при старте не было, заходим на 5601 порт. Выбираем индексы logstash-*, идем в Dashboards и создаем интерфейс отображения под себя. Может получиться что-нибудь похожее на это:
Или на это (скрин не мой):
Для того чтобы смотреть на карту, нужно раскоментировать в конфиге logstash эту строку: #database => "/opt/logstash/vendor/geoip/GeoLiteCity.dat" и скачать собственно указанный или аналогичный файл с геолокацией по IP.
Да еще не забудьте про Log rotation.
В /etc/logrotate.d/ создаем файл suricata cо следующим содержанием:
/var/log/suricata/*.log /var/log/suricata/*.json
{
rotate 3
missingok
nocompress
create
sharedscripts
postrotate
/bin/kill -HUP $(cat /var/run/suricata.pid)
endscript
}
Буду рад вашим комментариям.
Если будете пробовать и не заведтся ELK или suricata, пишите, может что и выйдет=)
nikerossxp
Да, совместимость продуктов меня повергла в смятение. Пытался поднять ELK "родным" методом — репозиторий, установка, конфигурация — фигли, последние версии продуктов друг друга не видят! Нашел готовый SELKS, а там используются более старые пакеты :) Попробовал их же вручную — с полпинка завелись.
Где я свернул невтуды на последних версиях? Или это не баг, а фича?
kimssster
Это open source=), приходится читать про те малюсенькие изменения, которые делают разработчики, так сказать своеобразная плата за продукты.
nikerossxp
да у того же logstash уже так просто порт на прослушку не откроешь :D А если откроешь, он не будет отдавать их в elasticsearch..