Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы администрирования и системного программирования в операционной системе Linux. В 2 частях. Ч.2. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Рис. 4.6. Сборка Zeek из исходного кода
Для сборки и установки из исходников необходимо зайти в каталог Zeek и выполнить следующие команды:
./configure
make
make install
Результат выполнения команд показан на рис. 4.6.
Путь установки по умолчанию – /usr/local/zeek, который обычно требует привилегий root при выполнении установки make. Другой путь установки мож­но выбрать, указав опцию конфигурационного скрипта – prefix.
Чтобы настроить PATH переменную среды в соответствии с используе­мой платформой/оболочкой/пакетом, используется команда:
export PATH=/usr/local/zeek/bin:$PATH
Для управления экземпляром Zeek на локальном хосте используется ZeekControl – это интерактивная оболочка для простой эксплуатации установ-
ками Zeek в одной системе или даже в нескольких системах в кластере монито­ринга трафика. Чтобы использовать ZeekControl необходимо выполнить основ­ные изменения конфигурации для минимальной установки.
В $PREFIX/etc/node.cfg следует установить правильный интерфейс для мониторинга. Настройка интерфейса проиллюстрирована на рис. 4.7.
В $PREFIX/etc/networks.cfg необходимо закомментировать настройки по умолчанию и добавить сети, которые Zeek будет считать локальными для кон­тролируемой среды. В хост-системе устройство VirtualBox Host-Only Ethernet Adapter имеет собственную подсеть 192.168.56.0. На рисунке 4.8 показан при­мер настройки файла networks.cfg.
61
Рис. 4.7. Настройка интерфейса для мониторинга
Рис. 4.8. Содержимое файла networks.cfg
В $PREFIX/etc/zeekctl.cfg указывается MailTo адрес электронной почты на желаемого получателя и запись LogRotationInterval в желаемый журнал. Если электронная почта не требуется для использования, то данную запись следует закомментировать. На рисунке 4.9 показано содержимое файла zeekctl.cfg.
После настройки начальной минимальной конфигурации можно запус­тить оболочку ZeekControl, командой ./zeekctl. Поскольку это первое использо­вание оболочки, с помощью команды install выполняется начальная установка конфигурации. Данная процедура показана на рис. 4.10.
Затем осуществляется запуск экземпляра Zeek командой start. Если есть ошибки при попытке запустить экземпляр Zeek, можно просмотреть подробную информацию с помощью команды diag. Пример информации при ошибке пока­зан на рис. 4.11.
При успешном запуске экземпляр Zeek начнет анализировать трафик. Можно оставить Zeek запущенный на данный момент. Для остановки использу­ется команда stop. Для выхода из экземпляра Zeek используется команда exit. Действие команд изображено на рис. 4.12.
62
Рис. 4.9. Содержимое файла zeekctl.cfg
Рис. 4.10. Начальная установка конфигурации
Рис. 4.11. Подробная информация командой diag
63
Рис. 4.12. Операции, проведённые с ZeekControl
Рис. 4.13. Журнал dns.log до включения DoH
Рис. 4.14. Журнал dns.log после включения DoH
Политика и результаты журналирования находятся в $PREFIX/logs/ current/ (если Zeek не запущен, то директория будет пуста).
После запуска Zeek была проведена проверка функционала анализа тра­фика. На рисунке 4.13 представлен фрагмент журнала dns.log, полученного при переходе на сайты без использования DoH в настройках браузера.
Далее был проведён анализ журнала dns.log после включения DoH в при­ложении Mozila Firefox. Как видно из рис. 4.14 при использовании DoH были зафиксированы запросы к общедоступному DNS-серверу Google Public DNS.
Был проверен анализ данных на предмет наличия соединений с различ­ными DoH-провайдерами, упоминавшимися ранее. Анализ произведён сле­дующей командой:
cat conn.log | bro-cut -d ts id.orig_h id.resp_h id.resp_p proto service duration | grep «1\.1\.1\.1\|1\.0\.0\.1\|104\.16\.249\.249\|104\.16\.248\.249»
64
Рис. 4.15. Соединения с Cloudflare
Эта команда помогает отобразить нужные столбцы для парсинга в жур­нале conn.log, а с помощью опции – d производится конвертирование даты в формате Unix в стандартный формат Timestamp. На рисунке 4.15 показан ре­зультат выполнения команды.
Проверка работы Zeek прошла успешно, поэтому следующей задачей бу­дет централизованный сбор логов, их обработка и вывод в удобном виде для просмотра. Эту задачу поможет решить стек ELK.

4.5. НАСТРОЙКА СТЕКА ELK

ELK представляет собой стек трёх продуктов: Elasticsearch, Logstash и Kibana. Это три программных продукта с открытым кодом, на сегодняшний
день принадлежащие одной компании и развивающиеся в одном направлении, что обеспечивает стабильность совместной работы и простоту настройки.
Logstash – это инструмент получения, преобразования и сохранения дан­ных в общем хранилище. Его первой задачей является приём данных в каком­либо виде: из файла, базы данных, логов или информационных каналов. Далее полученная информация может модифицироваться с помощью фильтров, на­пример, единая строка может быть разбита на поля, могут добавляться или из­меняться данные, несколько строк могут быть агрегированы и т.п. Обработан­ная информация посылается в системы-потребители этой информации. Говоря о связке ELK, потребителем информации будет Elasticsearch, однако возможны другие варианты, например системы мониторинга и управления (Nagios, Jira и др.), системы хранения информации (Google Cloud Storage, syslog и др.), файлы на диске. Возможен даже запуск команды при получении особого набо­ра данных.
65
Elasticsearch – это механизм индексирования и хранения полученной ин­формации, а также полнотекстового поиска по ней. Он основан на библиотеке Apache Lucene и, по сути, является NoSQL database решением.
Главная задача этого инструмента – организация быстрого и гибкого по­иска по полученным данным. Для её решения имеется возможность выбора анализаторов текста, функционал «нечёткого поиска». Работа с информацией происходит с помощью REST API, который позволяет добавлять, просматри­вать, модифицировать и удалять данные. Однако, в случае использования ELK этот вопрос остаётся внутри «чёрного ящика», поскольку имеются выше опи­санные Logstash и Kibana. Elasticsearch легко масштабируется. К уже имею- щейся системе можно на ходу добавлять новые серверы, и поисковый движок сможет сам распределить на них нагрузку. При этом данные будут распределе­ны таким образом, что при отказе какой-то из них они не будут утеряны, и сама поисковая система продолжит работу без сбоев.
Kibana – это интерфейс для работы Elasticsearch, который имеет большое количество возможностей по поиску данных и отображению этих данных в удобочитаемых видах таблиц, графиков и диаграмм.
В качестве средства получения и отправки журнальных данных контей­неров может использоваться входящее в состав стека программное средство Filebeat. Данное средство может отслеживать журналы указанных контейнеров и пересылать журнальные данные либо в Logstash, либо непосредственно в Elasticsearch для индексирования. Применяется для сбора журналов Linux сис­тем. Схематично работу данной системы можно увидеть на рис. 4.16.
Рассмотрим вариант установки ELK, его конфигурации, получения log- сообщений от устройства, их обработки, создания графиков и таблиц, единого дашборда для отображения. В качестве хоста для разворачивания стека был выбран Ubuntu Server 18.04 LTS.
Все компоненты системы, за исключением агентов на серверах, написаны на Java, поэтому первым шагом сбора системы будет установка программного обеспечения Java 8, которое требуется для Elasticsearch и Logstash. Эта версия выбрана потому, что поддерживается всеми версиями Elasticsearch.
66
Рис. 4.16. Схема работы стека ELK
Со страницы oracle.com необходимо скачать файл *-linux-x64.tar.gz и по­сле загрузки скопировать его на целевой сервер, куда будет устанавливаться Java 8. Копировать файл следует в домашнюю директорию /root, потом создать директорию java и распаковать туда бинарные файлы:
# mkdir /usr/lib/jvm
# tar -zxf /root/jre-8u231-linux-x64.tar.gz -C /usr/lib/jvm
Java-машина должна располагаться в директории /usr/lib/jvm/jre1.8.0_231.
Дальше необходимо создать символьные ссылки на установленную версию
Java. Это можно сделать с помощью команды update-alternatives:
# update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jre1.8.0_231/bin/java" 1500
# update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jre1.8.0_231/bin/javaws" 1500
Для работы компонентов Elastic Stack следует задать переменную JAVA_HOME. Для этого в файл /etc/environment добавляется следующая строка:
JAVA_HOME="/usr/lib/jvm/jre1.8.0_231"
Чтобы сохранить и применить изменения используется команда:
# source /etc/environment
Для проверки правильности установки Java и переменной среды исполь­зуются следующие команды:
# java -version
# echo $JAVA_HOME
Компоненты комплекса Elastic отсутствуют в репозиториях пакетов Ubuntu по умолчанию. Однако их можно установить после добавления списка
источников пакетов Elastic.
Все пакеты комплекса Elastic подписаны ключом подписи Elasticsearch для защиты системы от поддельных пакетов. Диспетчер пакетов будет считать надёжными пакеты, для которых проведена аутентификация с помощью ключа. На первом шаге следует импортировать открытый ключ Elasticsearch GPG и добавить список источников пакетов Elastic для установки Elasticsearch.
Для начала нужно запустить следующую команду для импорта открытого ключа Elasticsearch GPG в APT:
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
Если в Ubuntu Server нет пакета apt-transport-https, предназначенного для того, чтобы менеджеры пакетов могли получать доступ к метаданным и паке-
67
там, доступным в источниках посредством протокола HTTPS, следует выпол­нить команду:
# apt install apt-transport-https
Затем чтобы добавить список источников 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 и установить Elasticsearch. Это можно сделать следую­щим образом:
# apt update && apt-get install elasticsearch
После установки Elasticsearch добавляется в автозагрузку и запускается следующими командами:
# systemctl daemon-reload
# systemctl enable elasticsearch.service
# systemctl start elasticsearch.service
Проверка статуса службы Elasticsearch:
# sudo service elasticsearch status
Из рисунка 4.17 видно, что все работает корректно.
Следующий шаг – настройка кластера таким образом, чтобы узлы могли подключаться и устанавливать соединение друг с другом. После завершения установки Elasticsearch нужно использовать предпочитаемый текстовый редак­тор для редактирования главного файла конфигурации Elasticsearch с именем
elasticsearch.yml. Для редактирования файла можно использовать nano:
sudo nano /etc/elasticsearch/elasticsearch.yml
Elasticsearch прослушивает весь трафик порта 9200. Имеется возможность ограничить внешний доступ к экземпляру Elasticsearch, чтобы посторонние
68
Рис. 4.17. Проверка работы службы Elasticsearch
не могли читать данные или отключать кластер Elasticsearch через REST API. Для этого нужно найти строку с указанием network.host, убрать с неё значок комментария и заменить значение на localhost.
По-умолчанию Elasticsearch прослушивает все имеющиеся сетевые ин­терфейсы. В этом нет необходимости, так как данные в него будет передавать Logstash, который будет установлен локально.
После изменения настроек следует перезапустить сервис:
# systemctl restart elasticsearch.service
Получить ответ, содержащий базовую информацию о локальном узле, можно с помощью следующей команды:
# netstat -tulnp | grep 9200
После настройки и запуска Elasticsearch стоит перейти к установке Kibana, следующего компонента комплекса Elastic. Согласно официальной до­кументации, Kibana следует устанавливать только после установки Elasticsearch. Установка в этом порядке обеспечивает правильность установки
зависимостей компонентов. Web-панель Kibana предназначена для визуализа­ции данных, полученных из Elasticsearch. Репозитории и публичный ключ для установки Kibana будут такими же, как при установке Elasticsearch.
Поскольку источник пакетов Elastic был добавлен на предыдущем шаге, все остальные компоненты комплекса Elastic можно установить с помощью apt. Для обновления и запуска установки Kibana выполняется команда:
# apt update && apt install kibana
Для добавления Kibana в автозагрузку и его запуска используются сле­дующие команды:
# systemctl daemon-reload
# systemctl enable kibana.service
# systemctl start kibana.service
Чтобы проверить состояние запущенного сервиса:
# systemctl status kibana.service
По-умолчанию Kibana прослушивает порт 5601, поэтому для проверки работы нужно выполнить команду:
# netstat -tulnp | grep 5601
Теперь информационная панель Kibana настроена, и можно перейти к ус­тановке следующего компонента Logstash. Beats может отправлять данные на­прямую в базу данных Elasticsearch, однако рекомендуется использовать для обработки данных Logstash. Это позволит собирать данные из разных источни­ков, преобразовывать их в общий формат и экспортировать в другую базу данных.
69
Для установки Logstash в Ubuntu необходимо выполнить команду:
# apt install logstash
Чтобы добавить Logstash в автозагрузку:
# systemctl enable logstash.service
После установки следует перейти к настройке. Файлы конфгурации
Logstash имеют формат JSON и находятся в каталоге /etc/logstash/conf.d. При настройке Logstash принимает данные от источника, обрабатывает их и отправ­ляет в Elasticsearch. Средство Logstash содержит три конфигурационных файла: input.conf, output.conf и filter.conf. Плагины ввода получают данные источника, плагины фильтра обрабатывают данные, а плагины вывода передают данные дальше. Первым шагом будет создание конфигурационного файла input.conf, который будет описывать получение данных с beats-агентов (для отправки журналов в Logstash). Пример настроек продемонстрирован на рис. 4.18.
В input.conf указываются настройки входных данных агента beats, кото­рые будут ожидать данные на TCP-порте 5044. Если нужно использовать SSL­сертификаты для передачи данных по защищённым соединениям, добавляются параметры SSL.
Дальше нужно указать, куда будут передаваться данные. Для этого созда­ётся конфигурационный файл output.conf, который описывает передачу данных в Elasticsearch. На рисунке 4.19 показан пример настройки output.conf.
Файл
filter.
conf предназначен для синтаксического анализа входящих сис-
темных журналов, их структуризации и преобразования в удобный для исполь­зования вид с помощью панелей Kibana. Данные будут передаваться в Elasticsearch под указанным индексом с маской в виде даты.
Рис. 4.18. Содержимое файла input.conf
70
Рис. 4.19. Содержимое файла output.conf
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]