Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы администрирования и системного программирования в операционной системе Linux. В 2 частях. Ч.2. Учебное пособие.pdf
X
- •ВВЕДЕНИЕ
- •1. АДМИНИСТРИРОВАНИЕ СЕРВИСА LDAP
- •1.1. ПРОТОКОЛ LDAP
- •1.2. БАЗОВАЯ НАСТРОЙКА 389 DIRECTORY SERVER
- •1.3. РЕАЛИЗАЦИЯ РЕШЕНИЯ НА ОСНОВЕ FREEIPA
- •2. АДМИНИСТРИРОВАНИЕ СЕТЕВЫХ СЕРВИСОВСОВ МЕСТНОГО ИСПОЛЬЗОВАНИЯ ДАННЫХ
- •2.1. СЕТЕВАЯ ФАЙЛОВАЯ СИСТЕМА NFS
- •2.2. ФАЙЛОВАЯ СИСТЕМА SMB
- •2.3. РАЗВЁРТЫВАНИЕ И КОНФИГУРИРОВАНИЕ СЕТИ
- •3. АДМИНИСТРИРОВАНИЕ СЕРВИСА OPENVPN
- •3.1. ТЕХНОЛОГИЯ OPENVPN
- •3.2. ПРИНЦИП РАБОТЫ OPENVPN
- •3.3. РАЗВЁРТЫВАНИЕ И КОНФИГУРИРОВАНИЕ СЕТИ
- •4. АДМИНИСТРИРОВАНИЕ СИСТЕМЫ ИНСПЕКЦИИ ТРАФИКА DNS
- •4.1. ТИПОВЫЕ ОПЕРАЦИИ DNS
- •4.2. СПОСОБЫШИФРОВАНИЯ DNS-ТРАФИКА
- •4.3. ОТКРЫТЫЕ DNS-СЕРВЕРЫ
- •4.4. НАСТРОЙКА ZEEK
- •4.5. НАСТРОЙКА СТЕКА ELK
- •ЗАКЛЮЧЕНИЕ
- •СПИСОК ЛИТЕРАТУРЫ

Рис. 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
