Доброго дня, уважаемый читатель!
Пока пишу большой пост посвященный созданию дашбордов для 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 источника:
| 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-имя"
| 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:
Надеюсь кому-то пригодится!
Комментариев нет:
Отправить комментарий