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 authenticated176.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 = nrRO28jYIplnaEP3JBouKibana
Установка 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 logstashFilebeat
Установка 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:5601139.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