пятница, 19 июля 2019 г.

graylog - геолокация

Ориентируемся на местности в graylog





Основная работа geo-ip модуля - это создавать дополнительные поля основываясь на БД MaxMind.
Эти поля могу содержать массу различных данных - начиная от страны, города и заканчивая координатами. Интересно, что названия стран предоставляются на нескольких языках.

Включить его несложно, нужно просто подкинуть файл MaxMind (https://dev.maxmind.com/geoip/geoip2/geolite2/)
Но есть пару нюансов, которые не описаны в документации, поэтому рассмотрим процесс подробно и по шагам.

Первое что нужно сделать это скачать саму БД (нужен файл GeoLite2-City.mmdb).
Разместить можно где угодно, но удобнее будет по дефолтному пути /etc/graylog/server/GeoLite2-City.mmdb

1) Lookup table
Далее, нужно создать Lookup таблицу. Что это и для чего используется можно прочитать в документации https://docs.graylog.org/en/3.0/pages/lookuptables.html. Технология весьма полезная, и может применяться даже в купе с текстовыми CSV файлами.
Переходим в System - Lookup Tables, выбираем "Data Adapters" и нажимаем создать.
К счастью, из предустановленного списка можно выбрать нужный нам тип "Geo IP - MaxMind Databases". Теперь нужно заполнить пару полей - указать имя и убедиться, что прописан правильный путь до скаченного файла.




Еще для таблицы неплохо бы создать кеш, в случае большого количества запросов часть из них будет закеширована и повторное обращение будет гораздо быстрее.




И наконец, остается создать саму таблицу Lookup.
Для этого нужно будет просто выбрать ранее созданный адаптер и кеш.


2) Pipeline
Второй и заключительный шаг настройки - это создание правил pipeline, которые и будут непосредственно использовать созданную lookup таблицу.
Перед тем как к нему приступать, нужно определиться какие поля содержат ip-адрес, который и будет использоваться в геолокации. В нашем примере это будет поле "Client", но может быть всё что угодно хоть ip_addr или src_ip.
Идем в System - Pipelines - Manage rules и создаем новое правило.


rule "Client geoip lookup"
when
 has_field("Client")
then
  let geo = lookup("geoip-lookup", to_string($message.Client));
  set_field("Client_geolocation", geo["coordinates"]);
  set_field("Client_geo_country_code", geo["country"].iso_code);
  set_field("Client_geo_country_name", geo["country"].names.ru);
  set_field("Client_geo_city_name", geo["city"].names.ru);
end


Правило очень простое, вначале проверяется существует ли поле "Сlient", и если да, то создается переменная geo, которая будет содержать json результат вызова свежесозданной lookup таблицы.
Понятно, что в таблицу в качестве запроса будет передаваться ip-адрес содержащийся в поле "Client".
После этого, создается ряд новых полей, в которые и будет записана необходимая информация. Обратите внимание на поле "Client_geolocation", именно в нем будут записаны координаты - широта и долгота.

Как можно догадаться, просто созданное правило не слишком полезно, его нужно куда-нибудь применить.
Поэтому можно перейти в "Manage pipelines", и создать там новый пайплайн, с любым названием и в stage0 добавить это правило.







И так же, нужно не забыть подключить готовый пайплайн к потоку, который будет содержать приходящие сообщения. Для этого нужно нажать "Edit connections" и выбрать нужный поток.


Если нигде не ошиблись, то геолокация уже должна начать работу.

3) Проверяем результаты
Чтобы убедиться в жизнеспособности геолокации, достаточно перейти в раздел поиска и посмотреть список полей слева:


Видим, что появились новые поля и они заполнены корректными данными:



Кстати, чтобы узнать какие вообще есть поля в БД MaxMind, можно вернуться в lookup таблицы и отправить туда какой-нибудь ip-адрес:



Ну и в завершение, теперь в арсенале появилась карта мира, чтобы ей воспользоваться нужно в поиске развернуть поле "geolocation" и выбрать "World Map":


Слева сразу же появится карта.


При желании эту карту можно использовать и в свои дашбордах.

Что в итоге?
Отличный встроенный функционал, которому можно найти множество применений - от сбора инцидентов ИБ, до подсчета посещений какого-нибудь ресурса.

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

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