Найти в Дзене

Threat Hunting: установка лаборатории мониторинга журналов с ELK

Оглавление

В этой статье пойдет речь об установке и настройке лаборатории мониторинга журналов с ELK. Читатели смогут увидеть практический пример использования данной программы, познакомиться с ее полезными функциями.

Elastic Stack (еще известный как ELK Stack) – это сборник бесплатного программного обеспечения с открытым исходным кодом от компании Elastic. Оно было специально разработано для централизованного ведения журналов. ПО позволяет осуществлять поиск, анализ и визуализацию журналов из различных источников. В этой статье будет уделено особое внимание установке Elastic Stack на Ubuntu.

Для настройки Elk Stack на своей платформе Ubuntu, необходимо выполнить некоторые предварительные подготовления:

  • Ubuntu 20.04;
  • Привилегии root.

Компоненты ELK Stack

  • Elasticsearch: поисковая система, которая хранит в безопасности все собранные данные.
  • Logstash: компонент обработки данных, который отправляет входящие данные в Elasticsearch.
  • Kibana: веб-интерфейс для поиска и визуализации журналов.
  • Filebeat: легкий одноцелевой переадресатор данных, который может отправлять данные с тысяч машин либо в Logstash, либо в Elasticsearch.
-2

Установка Java и всех необходимых элементов

Elasticsearch требует наличия OpenJDK на машине пользователя. Нужно установить Java с помощью приведенной ниже команды вместе с поддержкой HTTPS и пакетами wget для APT.

apt install -y openjdk-11-jdk wget apt-transport-https curl

-3

Теперь пользователь собирается импортировать открытый ключ Elasticsearch в APT. Для импорта ключа GPG ему следует ввести следующую команду:

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

После он добавит репозиторий Elastic к sources.list.d с помощью следующей команды:

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

-4

Установка и настройка Elasticsearch

Обновление системного репозитория

apt update

Пользователю нужно установить Elasticsearch с помощью следующей команды:

apt install elasticsearch

-5

Далее пользователь настраивает Elasticsearch.

Elasticsearch способен просматривать трафик на порту 9200. Пользователь собирается ограничить внешний доступ к этому экземпляру Elasticsearch, чтобы посторонние не смогли раскрыть секретные данные или остановить кластер Elastic через REST API. Теперь человеку необходимо внести некоторые изменения в конфигурационный файл Elasticsearch – elasticsearch.yml.

Он введет следующую команду:

nano /etc/elasticsearch/elasticsearch.yml

-6

Следует найти строку, которая указывает на атрибут network.host и раскомментировать ее, добавив localhost в качестве его значения. Также пользователь раскомментирует атрибут http.port.

network.host: localhost
http.port: 9200

-7

Теперь надо запустить и включить службы Elasticsearch.

systemctl start elasticsearch
systemctl enable elasticsearch

-8

Настала пора проверить статус Elasticsearch.

systemctl status elasticsearch
curl -X GET "localhost:9200"

-9

По умолчанию Elasticsearch просматривает порт 9200. Пользователь также может проверить его в своем веб-браузере с помощью пинга https://localhost:9200.

-10

Теперь Elasticsearch установлен и готов к работе.

Установка и настройка Logstash

Logstash используется для сбора и централизации журналов с разных серверов с помощью filebeat

Сначала стоит проверить, что OpenSSL работает, а затем установить Logstash, при этом выполнив следующую команду:

openssl version -a
apt install logstash -y

-11

Необходимо отредактировать файл /etc / hosts и добавить следующую строку:

nano /etc/hosts

-12

Здесь: 18.224.44.11 – IP-адрес сервера Elk-master.

Пользователю нужно создать SSL-сертификат для защиты передачи данных журнала с клиента Rsyslog & Filebeat на сервер Logstash.

Для этого открывается новый каталог SSL в разделе Logstash configuration. Пользователь перейдет в этот каталог, создаст сертификат SSL, выполнив следующую команду:

mkdir -p /etc/logstash/ssl
cd /etc/logstash/
openssl req -subj '/CN=elk-master/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt

-13

Теперь он собирается создать новые конфигурационные файлы для Logstash с именем «filebeat-input.conf». В качестве входного файла из системного журнала – «syslog-filter.conf» – для обработки системных журналов, и «output- output-elasicsearch.conf» – для определения вывода результатов работы Elasticsearch.

Пользователю следует перейти в каталог Logstash и создать там файл «filebeat-input.conf» по пути conf.D, выполнив команду:

cd /etc/logstash/
nano conf.d/filebeat-input.conf

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

input {
beats {
port => 5443
type => syslog
ssl => true
ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt"
ssl_key => "/etc/logstash/ssl/logstash-forwarder.key"
}
}

-14

Для обработки данных системного журнала человек будет использовать плагин фильтра под названием “grok”. Ему надо создать новый файл .conf (syslog-filter.conf) в той же папке.

nano conf.d/syslog-filter.conf

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

filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}

-15

И, наконец, пользователь создаст файл конфигурации «output-elasticsearch.conf» для вывода результатов работы Еlasticsearch.

nano conf.d/output-elasticsearch.conf

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

output {
elasticsearch { hosts => ["localhost:9200"]
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}

-16

После этого нужно сохранить изменения и выйти.

Теперь пользователю необходимо запустить и проверить статус службы Logstash.

systemctl start logstash
systemctl enable logstash
systemctl status logstash

-17

Установка и настройка Kibana

Пользователь может установить Kibana с помощью следующей команды:

apt install kibana

-18

Он собирается внести некоторые изменения в конфигурационный файл Kibana.

nano /etc/kibana/kibana.yml

-19

Нужно найти и раскомментировать следующие атрибуты.

-20

Теперь осталось только запустить и активировать сервис Kibana:

systemctl enable kibana
systemctl start kibana

-21

Установка и настройка NGINX

Пользователю необходимо установить и настроить Nginx и ‘Apache2-utlis’.

apt install nginx apache2-utils -y

-22

Он создаст новый файл виртуального хоста с именем Kibana.

nano /etc/nginx/sites-available/kibana

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

server {
listen 80;
server_name localhost;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.kibana-user;
location / {
proxy_pass https://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

-23

Настало время создать необходимую аутентификацию для панели мониторинга Kibana и активировать конфигурацию виртуального хоста Kibana. После этого пользователь сможет протестировать конфигурацию Nginx, включив и перезапустив службу Nginx с помощью следующей команды:

sudo htpasswd -c /etc/nginx/.kibana-user elastic
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
nginx -t
systemctl enable nginx
systemctl restart nginх

-24

Установка и настройка Filebeat

Пользователь собирается настроить отправителей данных Filebeat на своем сервере Еlk-master. Это будет использоваться для сбора данных из различных источников и транспортировки их в Logstash и Elasticsearch.

Ему нужно загрузить и установить Filebeat, выполнив следующую команду:

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.11-amd64.deb

-25

Стоит также переупаковать загруженный файл с помощью следующей команды:

sudo dpkg -i filebeat-6.8.11-amd64.deb

-26

Затем открыть конфигурационный файл Filebeat с именем «filebeat.yml».

nano /etc/filebeat/filebeat.yml

Пользователь отредактирует файл конфигурации:

Он собирается использовать Elasticsearch для выполнения дополнительной обработки данных, собранных Filebeat. Поэтому стоит запустить поисковики Filebeat, изменив значение строки “Еnabled” на “Тrue”.

-27

Затем пользователь перейдет в раздел вывода результатов работы Elasticsearch и добавит следующие строки:

output.elasticsearch:

hosts: ["192.168.0.156:9200"]
username: "elastic"
password: "123"
setup.kibana:
host: "192.168.0.156:5601"

-28

Включить и настроить модуль Elasticsearch можно с помощью следующей команды:

sudo filebeat modules enable elasticsearch

Пора запустить Filebeat.

sudo filebeat setup
sudo service filebeat start

И, наконец, пользователь скопирует файл logstash-forwarder.crt в /etc/filebeat directory, выполнив следующую команду:

cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/
sudo service filebeat restart

Чтобы протестировать ELK Stack, пользователю необходимо открыть браузер и просмотреть IP-адрес своего сервера, а затем – сам порт 5601.

https://localhost:5601

-29

Маршрутизация журналов Linux в Elasticsearch

Пользователь займется маршрутизацией журналов из rsyslog в Logstash, ведь они автоматически передаются в Elasticsearch.

Маршрутизация журналов из Logstash в Elasticsearch

Прежде чем маршрутизировать журналы из rsyslog в Logstash, пользователю нужно настроить переадресацию журналов между Logstash и Elasticsearch.

Для этого будет создан конфигурационный файл Logstash. Чтобы создать его, человеку следует перейти в каталог /etc/logstash / conf.d и создать там файл logstash.conf.

cd /etc/logstash/conf.d
nano logstash.conf

Также он добавит следующую конфигурацию в него.

input {
udp {
host => "127.0.0.1"
port => 10514
codec => "json"
type => "rsyslog"
}
}

# The Filter pipeline stays empty here, no formatting is done.
filter { }


# Every single log will be forwarded to ElasticSearch. If you are using another port, you should specify it here.
output {
if [type] == "rsyslog" {
elasticsearch {
hosts => [ "127.0.0.1:9200" ]
}
}
}

-30

Пользователь перезапустит службу Logstash.

systemctl restart logstash

Стоит проверить, что все работает нормально. Пользователь выполнит следующую команду:

netstat -na | grep 10514

-31

Маршрутизация журналов из rsyslog в Logstash

Rsyslog способен преобразовывать журналы с помощью шаблонов для их пересылки в rsylog. Пользователю следует открыть каталог /etc/rsylog.d и создать там новый файл с именем 70-output.conf.

cd /etc/rsyslog.d
nano 70-output.conf

Человек добавит следующую конфигурацию в файл 70-output.conf.

# This line sends all lines to defined IP address at port 10514
# using the json-template format.
*.* @127.0.0.1:10514;json-template

-32

Теперь пользователь настроил переадресацию журналов, создав файл 01-json-template.conf в той же папке.

nano 01-json-template.conf

Человек добавит следующую конфигурацию в файл 01-json-template.conf.

template(name="json-template"
type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"@version\":\"1")
constant(value="\",\"message\":\"") property(name="msg" format="json")
constant(value="\",\"sysloghost\":\"") property(name="hostname")
constant(value="\",\"severity\":\"") property(name="syslogseverity-text")
constant(value="\",\"facility\":\"") property(name="syslogfacility-text")
constant(value="\",\"programname\":\"") property(name="programname")
constant(value="\",\"procid\":\"") property(name="procid")
constant(value="\"}\n")
}

Следует перезапустить службу rsyslog и убедиться, что данные правильно направляются в Elasticsearch.

systemctl restart rsyslog
curl -XGET 'http://localhost:9200/logstash-*/_search?q=*&pretty'

-33

Примечание: журналы будут пересылаться с индексом в имени logstash-*.

Создание панели для входа в Kibana

Пользователю следует открыть браузер и перейти в раздел https://localhost:5601. Там он должен увидеть следующий экран.

Перейдя в раздел «Управление», человек может создать шаблон индекса logstash-* и двигаться к следующему шагу.

Пользователь определил logstash – * как свой шаблон индекса. Теперь он может задать некоторые настройки, прежде чем создавать его. В поле Time Filter field name нужновыбрать @timestamp и создать шаблон индекса.

-34

Мониторинг записей SSH

Этот вариант немного специфический, так как пользователь может перейти на вкладку “Discover”, чтобы выстроить свою панель.

При входе на вкладку “Discover” следует выбрать logstash-*.

Там, в Filterbat, пользователь поставит фильтр запроса «programename:ssh*».

Теперь он может видеть каждый журнал, связанный с сервисом SSHd на его машине.

-35

Как видно на картинке, теперь у пользователя есть прямой доступ ко всем журналам, связанным с сервисом SSHd. Например, он способен отслеживать незаконные попытки доступа или ввод неправильных логинов.

Точно также он может отслеживать различные попытки незаконного доступа, такие как ftp, telnet и т.д.

Например, человек получил доступ Telnet к серверу с другой машины.

-36

Настала пора посмотреть, что происходит на панели Kibana.

Приготовиться всем!

-37

Здорово! Теперь панель видна в личном кабинете.

Автор переведенной статьи: Vijay.