ELK Stack

ELK Stack

the Matrix

Установка и настройка 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.172http_access allow authenticated

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

Установка Apache

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

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

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

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

sudo systemctl start squidsudo systemctl enable squidsudo ufw allow 3128

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

Elasticsearch

Установка Java

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

sudo apt updatesudo apt install default-jresudo 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 updatesudo 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 elasticsearchsudo systemctl enable elasticsearch

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

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

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

Changed password for user apm_systemPASSWORD apm_system = Ff7GWmJSS4X45NewBNZNChanged password for user kibana_systemPASSWORD kibana_system = OZ7w09XTeHBg3rfihAsmChanged password for user kibanaPASSWORD kibana = OZ7w09XTeHBg3rfihAsmChanged password for user logstash_systemPASSWORD logstash_system = AKtK2rmOmkAwWfL17jChChanged password for user beats_systemPASSWORD beats_system = ymq4MVVHCdDIVBohH5l7Changed password for user remote_monitoring_userPASSWORD remote_monitoring_user = RbkSKKbivgZOoq02pldaChanged password for user elasticPASSWORD 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 kibanasudo systemctl enable kibana

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

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

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

Changed password for user kibana_systemPASSWORD 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 logstashsudo 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.listsudo apt install filebeat

Настройка Filebeat

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

sudo filebeat modules enable systemsudo 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 filebeatsudo systemctl enable filebeatcurl -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"    ]  }}


Наши проекты:

- Кибер новости: the Matrix
- Хакинг: /me Hacker
- Кодинг: Minor Code

Report Page