ELK Stack

от автора

Установка и настройка Squid proxy

Сначала устанавливаем squid для дальнейшего использования в качестве прокси-сервера с помощью следующей команды:

sudo apt install squid 

После установки, squid необходимо настроить. Для этого открываем файл .conf с помощью следующей команды:

sudo nano /etc/squid/squid.conf 

В открытом файле необходимо нажимаем Ctrl+W для того, чтобы чтобы найти необходимое место и прописать:

include /etc/squid/conf.d/* 

В найденном месте ниже добавим строчки и поле сохраняем измененный файл:

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwords` auth_param basic realm proxy` acl authenticated proxy_auth REQUIRED` acl localnet src  176.59.142.172 http_access allow authenticated 

176.59.142.172 — ip адрес локальной машины.

Установка Apache

Устанавливаем Apache для дальнейшего осуществления передачи данных при запросе и настраиваем аутентификацию по паролю

sudo apt install apache2-utils sudo htpasswd -c /etc/squid/passwords *squid_username* 

Запуск сервера

По умолчанию squid слушает 3128 порт

sudo systemctl start squid sudo systemctl enable squid sudo ufw allow 3128 

Видим, что прокси успешно работает:

Elasticsearch

Установка Java

Установим Java с помощью следующих команд:

sudo apt update sudo apt install default-jre sudo apt install default-jdk 

Установка Elasticsearch

Elasticsearch используется для хранения, анализа, поиска по логам.
Для начала используем cURL, инструмент командной строки для передачи данных с помощью URL, для импорта открытого ключа Elasticsearch GPG в APT. Так же используем аргументы -fsSL для подавления всех текущих и возможных ошибок (кроме сбоя сервера), а также, чтобы разрешить cURL подать запрос на другой локации при переадресации. Выводим результаты команды cURL в программу apt-key, которая добавит открытый ключ GPG в APT

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

Добавим список источников Elastic в каталог sources.list.d, где APT будет искать новые источники:

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

Обновляем список пакетов, чтобы APT мог прочитать новый источник Elastic и устанавливаем Elasticksearch с помощью следующей команды:

sudo apt update sudo apt install elasticsearch 

Настройка Elasticsearch

Для настройки Elasticsearch мы отредактируем файлы конфигурации. В Elasticsearch имеется три файла конфигурации:

  • elasticsearch.yml для настройки Elasticsearch, главный файл конфигурации

  • jvm.options для настройки виртуальной машины Elasticsearch Java Virtual Machine (JVM)

  • log4j2.properties для настройки журнала Elasticsearch

Открываем файл elasticsearch.yml для изменения конфигураций. Файл elasticsearch.yml предоставляет варианты конфигурации для кластера, узла, пути, памяти, сети, обнаружения и шлюза. Нам необходимо изменить настройки только для хоста сети.

sudo nano /etc/elasticsearch/elasticsearch.yml 

Для ограничения доступа и повышения безопасности находим строку с указанием network.host и убираем с нее значок комментария, после чего заменяем значение на 0.0.0.0, чтобы она выглядела следующим образом: «network.host: 0.0.0.0».
Elasticsearch формирует одноузловой кластер: discovery.type: single-node.
Включаем функции безопасности Elasticsearch на узле: xpack.security.enabled: true.

Запуск Elasticsearch

Запускаем Elasticsearch с помощью следующих команд:

sudo systemctl start elasticsearch sudo systemctl enable elasticsearch 

Создание пользователей

sudo -u root /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto 

Сохраняем вывод

Changed password for user apm_system PASSWORD apm_system = Ff7GWmJSS4X45NewBNZN  Changed password for user kibana_system PASSWORD kibana_system = OZ7w09XTeHBg3rfihAsm  Changed password for user kibana PASSWORD kibana = OZ7w09XTeHBg3rfihAsm  Changed password for user logstash_system PASSWORD logstash_system = AKtK2rmOmkAwWfL17jCh  Changed password for user beats_system PASSWORD beats_system = ymq4MVVHCdDIVBohH5l7  Changed password for user remote_monitoring_user PASSWORD remote_monitoring_user = RbkSKKbivgZOoq02plda  Changed password for user elastic PASSWORD elastic = nrRO28jYIplnaEP3JBou 

Kibana

Установка Kibana

Установим Kibana, которая представляет собой удобную и красивую web панель для работы с логами, с помощью следующей команды:

sudo apt install kibana 

Настройка Kibana

Откроем файл конфигурации:

sudo nano /etc/kibana/kibana.yml 

Настроим username и укажем, что Elasticsearch должна работать на порту 9200, а Kibana на 5601:

elasticsearch.username: "kibana_system" elasticsearch.host: "0.0.0.0:9200" kibana.port: 5601 

Запуск Kibana

Запустим Kibana с помощью следующих команд:

sudo systemctl start kibana sudo systemctl enable kibana 

Добавление пароля

sudo -u root /usr/share/kibana/bin/kibana-keystore create sudo -u root /usr/share/kibana/bin/kibana-keystore add elasticsearch.password 

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

Changed password for user kibana_system PASSWORD kibana_system = OZ7w09XTeHBg3rfihAsm 

Заходим в Elasticsearch, создаем суперпользователя

Logstash

Установка Logstash

Устанавливаем Logstash- сервис для сбора логов и отправки их в Elasticsearch.

sudo apt install logstash 

Настройка Logstash

Открываем файл конфигураций:

sudo nano /etc/logstash/conf.d/logstash.conf 

Указываем, что принимаем информацию на 5044 порт, формируем функцию, где в дальнейшем будут находиться правила, описываем передачу данных в Elasticsearch и сохраняем.

input {      beats {          port => 5044      } }  filter {   **Место для правил Grok** }  output {   elasticsearch {     hosts => ["139.59.247.231:9200"]     manage_template => false      index => "%{[@metadata][beat]}-%{[@metadata[version]}-%{+YYYY.MM.dd}"     user => "user"     password => "password"   } }  

Проверяем синтаксис, чтобы в дальнейшем не появились ошибки

sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t 

Запуск Logstash

Запускаем Logstash с помощью следующих команд:

sudo systemctl start logstash sudo systemctl enable logstash 

Filebeat

Установка Filebeat — клиент для передачи логов в logstash

Заходим на прокси сервер

curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list sudo apt install filebeat 

Настройка Filebeat

Изменяем файл конфигураций:

sudo filebeat modules enable system sudo nano /etc/filebeat/filebeat.yml 

Комментируем строчки «output.elasticsearch» и «hosts: [«localhost:9200″]»

Раскомментируем строчки «output.logstash» и «hosts: [«localhost:5044″]»

Изменим localhost на ip нашего сервера с ELK

Проверяем конфигурацию «sudo filebeat -e test output»
Так как мы отправляем события в Logstash, то необходимо вручную загрузить конвейеры загрузки. Для этого запустим команду:

sudo filebeat setup --pipelines --modules system 

Установим index templates для Elasticsearch вручную.

Чтобы загрузить шаблон индекса вручную, запустим команду установки. Требуется подключение к Elasticsearch, но т.к. включен другой вывод, необходимо временно отключить этот вывод и включить Elasticsearch с помощью параметра -E. Отключаем выходные данные Logstash.

sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["139.59.247.231:9200"]' -E 'output.elasticsearch.username="dasha"' -E 'output.elasticsearch.password="123456"' sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["139.59.247.231:9200"]' -E 'output.elasticsearch.username="dasha"' -E 'output.elasticsearch.password="123456"' -E setup.kibana.host=139.59.247.231:5601 

139.59.247.231 elk ip

Запуск Filebeat

Запускаем Filebeat с помощью следующих команд:

sudo systemctl start filebeat sudo systemctl enable filebeat curl -u dasha:123456 -XGET 'http://139.59.247.231:9200/filebeat-*/_search?pretty' 

GROK

Grok-это фильтр внутри Logstash, который используется для разбора неструктурированных данных на что-то структурированное и подлежащее запросу. Он находится поверх регулярного выражения (regex) и использует текстовые шаблоны для сопоставления строк в файлах журналов.

Правило 1

Полученные логи

{   "fields" : {     "message": [         "May  1 10:01:37 proxy sshd[87897]: Failed password for root from 49.88.112.76 port 14398 ssh2"       ]   } } 

Grok

%{SYSLOGTIMESTAMP} %{WORD:server_name} %{WORD:service_name}\[%{NUMBER:pid}\]: Failed password for %{WORD:user_name} from %{IP:source_ip} port %{NUMBER:port} 

Новые полученные логи

{   "fields": {     "server_name": [       "proxy"     ],     "user_name": [       "root"     ],     "pid": [       "87897"     ],     "source_ip": [       "49.88.112.76"     ],     "service_name": [       "sshd"     ],     "message": [       "May  1 10:01:37 proxy sshd[87897]: Failed password for root from 49.88.112.76 port 14398 ssh2"     ],     "tags": [       "beats_input_codec_plain_applied"     ],     "port": [       "14398"     ]   } } 

Правило 2

Полученные логи

{   "fields": {     "message": [       "Apr 27 02:13:09 proxy sshd[5803]: Received disconnect from 124.156.222.134 port 46278:11: Bye Bye [preauth]"     ]   } } 

Grok

%{SYSLOGTIMESTAMP} %{WORD:server_name} sshd\[%{NUMBER}\]: Received disconnect from %{IP:source_ip} port %{NUMBER:port}:%{DATA}: %{GREEDYDATA:msg} 

Новые полученные логи

{   "fields": {     "msg": [       "Bye Bye [preauth]"     ],     "server_name": [       "proxy"     ],     "source_ip": [       "14.224.148.16"     ],     "message": [       "May  1 10:25:28 proxy sshd[88097]: Received disconnect from 14.224.148.16 port 36408:11: Bye Bye [preauth]"     ],     "tags": [       "beats_input_codec_plain_applied"     ],     "port": [       "36408"     ]   } } 

Правило 3

Полученные логи

{   "fields": {     "message": [       "May  1 10:31:28 proxy sshd[88184]: Disconnected from authenticating user root 165.22.63.216 port 33010 [preauth]"     ]   } } 

Grok

%{SYSLOGTIMESTAMP} %{WORD:server_name} sshd\[%{NUMBER}\]: %{WORD:status} from authenticating user %{WORD:user_name} %{IP:source_ip} port %{NUMBER:port} 

Новые полученные логи

{   "fields": {     "server_name": [       "proxy"     ],     "user_name": [       "root"     ],     "source_ip": [       "124.194.74.203"     ],     "message": [       "May  1 10:39:30 proxy sshd[88242]: Disconnected from authenticating user root 124.194.74.203 port 40918 [preauth]"     ],     "tags": [       "beats_input_codec_plain_applied"     ],     "port": [       "40918"     ],     "status": [       "Disconnected"     ]   } } 


ссылка на оригинал статьи https://habr.com/ru/post/665072/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *