Решил на днях настроить сбор сетевой статистики внутри своей сети - кто, куда и на какой порт ходит. Первое что пришло в голову — настроить Netflow коллектор и направлять на него данные с оборудования (Mikrotik). Через некоторое время, проведенное за поиском решений для моей задачи нашел несколько вариантов, однако почти все из них были платными. А хотелось бы решение бесплатное, и еще лучше если это будет opensource. Тут то я и набрел на ELK. Стек ELK это набор совместно работающих инструментов:

  • Elastiсsearch — инструмент для полнотекстового поиска
  • Logstach — инструмент для сборки, обработки и последующей отправки данных в хранилище
  • Kibana — отвечает за поиск данных по elastiksearch и позволяет построить различные графики для последующего анализа полученных данных

Стоит отметить, что стек ELK довольно требовательный к ресурсам, поэтому даже для работы с одним Netflow потоком необходимо минимум 2 процессорных ядра и 4 гигобайта оперативной памяти.

Прежде чем отправлять Netflow поток, установким и настроим ELK. Установку стека ELK будем производить на Ubuntu 16.04

Установка Java 8

Установка Java необходима для работы Logstash, поэтому с нее и начнем

sudo add-apt-repository ppa:webupd8team/java
sudo apt update
sudo apt -y install oracle-java8-installer

Если не будет хватать каких то зависимостей, выполните

sudo apt install -f

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

Установка Elasticsearch

Установка всех компонентов ELK будем производить из официальных репозитеориев, поэтому нам понадобятся приватные ключи

Скачиваем и устанавливаем приватный ключ:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Установим необхоимый пакет для APT

sudo apt-get install apt-transport-https

Добавляем репозиторий Elastiksearch в source.list

echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list

И переходим непосредственно к установке

sudo apt-get update && sudo apt-get install elasticsearch

После установки запускаем Elasticsearch

sudo systemctl enable elasticsearch

sudo systemctl start elasticsearch

Установка Logstach Поскольку пакеты ELK находятся в одном репозитории, который мы уже добавили, остается только установить пакет

sudo apt-get install logstash

После заверешения установки, необходимо создать конфигурационный файл для Logstash, в котором укажем, на каком порту будет работать Netflow коллектор:

nano /etc/logstash/conf.d/netflow.conf

И вставляем следующую конфигурацию:

 input {
udp {
  port => 9996
codec => netflow {
  versions => [5, 9]
}
type => netflow
tags => "port_9996"
}
udp {
 port => 9995
codec => netflow {
  versions => [5, 9]
}
type => netflow
tags => "port_9995"
}
}
output {
  if "port_9996" in [tags] {
  elasticsearch {
    hosts => "127.0.0.1"
    index => "logstash-netflow-9996-%{+YYYY.MM.dd}"
  }
  } else if "port_9995" in [tags] {
elasticsearch {
    hosts => "127.0.0.1"
    index => "logstash-netflow-9995-%{+YYYY.MM.dd}"
}
}
 }

Если коротко, то тут мы обьявляем, что будем собирать данные с 9995 и 9996 UDP портов, версии Netflow — 5 и 9, и даем название потоку logstash-netflow-9995-(дата) — это понадобится Elasticsearch для создания индексов.

Так же для работы logstash с Netflow необходимо уставновить плагин codec-netflow:

cd /usr/share/logstash/bin 
./logstash-plugin install logstash-codec-netflow

Перезапускаем Logstash:

sudo systemctl enable logstash
sudo systemctl restart logstash

Установка Kibana

Все так же как и с Logstash — просто установим пакет:

sudo apt install kibana
sudo systemctl enable kibana
sudo systemctl start kibana

Важное замечание — доступ к Web интерфейсу Kibana осуществяляется по умолчанию только с локального компьютера на порту 5601. Если вы устанавливаете ELK на свой компьютер, то уже можете перейти по адресу localhost:5601 и проверить работу Kibana, однако вы не получите доступа к интерфейсу с других компьютеров. Для того чтобы это исправить необходимо установить Apache и настроить его в качестве обратного прокси.

Установка Apache как обратного прокси

Устанавливаем пакет Apache

sudo apt install apache2

После установки необходимо активировать некоторые модули apache:

sudo a2enmod

И вводим строку со списком необходимых модулей:

proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html

Теперь перейдем к правке дефолтной конфигурации виртуального хоста apache, чтобы направить все подключения к 80 порту узла на localhost:5601 :

sudo nano /etc/apache2/sites-enabled/000-default.conf

Очищаем конфигурацию и вставляем следующее:

<VirtualHost *:80>
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5601/
ProxyPassReverse / http://127.0.0.1:5601/
ServerName kibana
</VirtualHost>

Выходим из редактора и перезагружаем apache:

sudo systemctl restart apache2

Пока на этом все. Теперь, если обратиться по адресу http://ВАШ_IP вы будете попадать на web-интерфейс Kibana. В следующей статье рассмотрим как добавить поток данных Netflow в Kibana и построим пару простых графиков.