пятница, 16 октября 2015 г.

Splunk. Отправка результатов запроса на почту

Доброго дня, уважаемый читатель!


Пока пишу большой пост посвященный созданию дашбордов для Splunk, решил написать небольшой пост про фишку, которую недавно заиспользовал. Заключается она в отправке результатов запроса на почтовый ящик. Наверное, старожилы SIEM-систем сейчас подумают - "детский сад" делается одной кнопкой в QRadar или Arcsight, но тем не менее кому-то будет интересно, да и плюс опишу пару новых операторов  :) 

Собственно, что нам понадобится для отправки - запрос, который что-нибудь посчитает, почтовый сервер - у меня exim4, и почтовый ящик куда пошлем - у меня yandex.ru.

Как настраивать сервер exim4 писать не буду, лучше почитайте здесь - http://lib.clodo.ru/email/exim_debian.html. Предположим, что он работает и всё хорошо. 



Приступим к запросу. 

Чтобы Вам было поинтереснее, сегодня мы поэкспериментируем не с логами fail to ban, а с журналами веб-сервера Apache (а точнее - access.log). Живёт он тут - /var/log/apache2/access.log. Как подключить его логи к Splunk писать не буду, всё как по аналогии из первого поста. Splunk из коробки понимает его логи, и даже более того для него есть встроенный sourcetype. 

Что можно понять из данного лога? Если коротко - кто, что, когда, как часто, с каким юзер агентом запрашивал с вашего веб-сервера, и каким кодом веб-сервер ему ответил.   

Напишем следующий запрос, который вернёт статистику по запросам сгруппированную по ip источника:

sourcetype=AC
| stats count,list(_time) as time,list(http_uri) as uri by clientip
| head 10
| convert timeformat="%Y-%m-%d %H:%M:%S" ctime(time) as logtime
| sort -count
| lookup dnslookup ip as clientip
| table clientip,host,logtime,uri
| rename logtime as "Время", clientip as "IP-адрес", host as "DNS-имя"



Результат будет как на скрине ниже:




Теперь, что делает запрос:

| stats count,list(_time) as time,list(http_uri) as uri by clientip 
Данный блок выводит время и запрашиваемую страницу с каждого ip-адреса в хронологической последовательности (но за временной ограничитель указанный в строке поиска). Основным тут является оператор List, который как раз и обеспечивает хронологию.

| head 10
Последние 10 результатов.

| convert timeformat="%Y-%m-%d %H:%M:%S" ctime(time) as logtime
Очень интересный оператор convert, мы его не раз встретим, он позволяет творить со временем все возможные извращенства какие видел свет, в данном случае он переводит время события из Unix Epoch time в человекообразный вид.

| sort -count
Сортировка по убыванию.

| lookup dnslookup ip as clientip
Данный блок на лету резолвит IP-адрес в доменное имя, фактически для этого необходимо вызвать python-скрипт с именем dnslookup.  

| table clientip,host,logtime,uri
Вывод результатов 

| rename logtime as "Время", clientip as "IP-адрес", host as "DNS-имя"
Переименовываем поля.


Собственно, теперь немного усложним запрос и добавим отправку по e-mail. Для этого добавим ещё один блок, а именно:

| sendemail to=spl@yandex.ru server=mx.yandex.ru subject="Письмо от Splunk" message="Результаты запроса Apache log" sendresults=true inline=true format=table 


Оператор sendemail, как очевидно из названия, отправляет результаты на почту.
to=spl@yandex.ru  -  на какой почтовый ящик шлём
server=mx.yandex.ru  -  имя почтовый сервера, куда отправляем почту
subject="Письмо от Splunk"   -  тема письма
message="Результаты выполнения запроса"  -  текст письма
sendresults=true  -  отправить результаты запроса
format=table  -  в каком формате отправить результат


Получится такой запрос:

sourcetype=AC
| stats count,list(_time) as time,list(http_uri) as uri by clientip
| head 10
| convert timeformat="%Y-%m-%d %H:%M:%S" ctime(time) as logtime
| sort -count
| lookup dnslookup ip as clientip
| table clientip,host,logtime,uri
| rename logtime as "Время", clientip as "IP-адрес", host as "DNS-имя"
| sendemail to=spl@yandex.ru server=mx.yandex.ru subject="Письмо от Splunk" message="Результаты запроса Apache log" sendresults=true inline=true format=table 



Теперь в почтовом ящике вы увидите письмо от Splunk:





Надеюсь кому-то пригодится! 

Комментариев нет:

Отправить комментарий