Найти в Дзене
Драневич Анастасия

Выходные с ELK. Часть 1: установка elasticsearch и kibana, решение проблемы с блокировкой репозитория, настройка конфигурационных файлов

Коль скоро Выпускная Квалификационная работа наконец-то оказалась благополучно защищена, а до выдачи диплома оставалось еще порядка месяца, было решено посвятить внезапно освободившееся время тому, чтобы поизучать что-нибудь "для себя". И таковая возможность не заставила себя долго ждать, так как внезапно мне поступило приглашение записаться на курс по противодействию кибератакам. Можно сказать, что таким образом я убивала сразу нескольких зайцев, так как в конечном тоге мне так или иначе пришлось бы освежить в памяти все эти вопросы перед предстоящими собеседованиями, да и возможность проверить в деле новую рабочую станцию (апдейт в честь окончания ВУЗа!) была слишком уж соблазнительна. С самого начала хотелось бы отметить то, что не смотря на то, что курс был помечен как "для новичков", на мой взгляд он оказался достаточно "забористым" и требующим хорошей теоретической базы - хотя бы на уровне умения гуглить, внимательно читать документацию к используемому ПО и быть готовым к тому, ч
Оглавление

Коль скоро Выпускная Квалификационная работа наконец-то оказалась благополучно защищена, а до выдачи диплома оставалось еще порядка месяца, было решено посвятить внезапно освободившееся время тому, чтобы поизучать что-нибудь "для себя". И таковая возможность не заставила себя долго ждать, так как внезапно мне поступило приглашение записаться на курс по противодействию кибератакам. Можно сказать, что таким образом я убивала сразу нескольких зайцев, так как в конечном тоге мне так или иначе пришлось бы освежить в памяти все эти вопросы перед предстоящими собеседованиями, да и возможность проверить в деле новую рабочую станцию (апдейт в честь окончания ВУЗа!) была слишком уж соблазнительна.

С самого начала хотелось бы отметить то, что не смотря на то, что курс был помечен как "для новичков", на мой взгляд он оказался достаточно "забористым" и требующим хорошей теоретической базы - хотя бы на уровне умения гуглить, внимательно читать документацию к используемому ПО и быть готовым к тому, что с первого (второго, третьего, десятого...) раза у вас ни черта не будет работать, хотя вы делаете все точно также, как указано в Задании. Также, если вы не знакомы с такими терминами, как "виртуальная машина", "публичный ключ" или "сокет", не владеете командной строкой Linux с изяществом мертвой петли, выписываемой на вертолете и не имеете опыта в работе с самого разного рода конфигурационными файлами, то не стоит даже и начинать.

Попросту говоря, фоновых знаний требуется примерно столько, сколько было получено мной за предшествующие пять лет учебы в ВУЗе и попутного прохождения дополнительных факультативных программ. Однако же перейдем к непосредственной стороне вопроса.

Собственно, одним из первых задач было развертывание ELK-системы на виртуальной машине Ubuntu - новехонькой, только что из коробки. И тут-то началось самое интересное.

Что такое ELK?

Собственно, ELK - это никакая не программа, а полноценный стек программного обеспечения, ответственный за мониторинг и управление событиями в системе (SIEM), состоящий из трех отдельных компонент - elasticsearch, logstash и kibana. Теоретически, каждая из этих программ может быть установлена обособлено от остальных, но фактически это не имеет особого смысла, т.к. все они выполняют логически самостоятельные, но все же тесно связанные друг с другом роли, а именно:

  • elasticsearch - нечто вроде СУБД для хранения и навигации по разнородным системным логам;
  • logstash - модуль, ответственный за непосредственный сбор информации;
  • kibana - графический интерфейс для всей этой истории.

Как уже было сказано ранее, установка этих программ может осуществляться и по отдельности в произвольном порядке, однако, логичнее всего начинать с elasticdearch, т.к. возможности оставшихся двух полностью основываются на предоставляемых ей ресурсах.

Часть 1. Установка Elasticsearch

Если до сего дня вам не доводилось работать в операционной системе, отличной от Windows, то имеет смысл начать с того, что в Linux установка практически любого ПО осуществляется посредством той самой консоли. При этом, существуют как программы, для которых эта процедура обходится в одну-две незамысловатых команды, после чего все файлы распаковываются самостоятельно, так и те, для которых надо самостоятельно создавать директории, прописывать конфигурационные файлы, возиться с ключами и запускать вышеобозначенную службу через systemctl, etc. Нетрудно догадаться, что elasticsearch относится ко второй категории.

В теории, процесс установки elasticsearsh сводится к этапам:

  • получение публичного ключа
  • установка вспомогательного пакета apt-transport-tools
  • добавление нужных репозиториев в sources.list.d
  • непосредственная установка пакета elasticsearch.

1.1. Публичный ключ

С получением публичного ключа особых проблем не возникло, и предложенная в методическом пособии команда

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

выполнилась без каких-либо осечек. С установкой apt-transport-tools (apt-get install apt-transport-https) все также прошло как по маслу.

1.2. Установка пакета и обход блокировки репозитория

Собственно, проблемы начались уже на этапе попытки скачивания самого пакета: благополучно вбив в консоль

echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

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

sudo apt-get update && sudo apt-get install elasticsearch

в то время как с сервера был получен ответ 403 - мол, отказано в доступе (примечательно, что публичные ключи-то официальный сайт по-прежнему раздает...).

-2

К счастью, на такой случай существуют зеркала: проблема решилась тем, что (предварительно вычистив все лишнее из sources.list.d) я самостоятельно создала файл elasticrepo.list, записав в него

deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://[URL-зеркала] bullseye main
-3

после чего выполнение все той же команды

sudo apt-get update && sudo apt-get install elasticsearch

прошло на "ура":

-4

1.3. Подготовка к запуску

Теперь можно удостовериться, что все действительно хорошо и запустить сервис, выполнив предложенные Установщиком команды:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
sudo systemctl status elasticsearch.service
-5

1.4. Настройка учетной записи

Ну вроде бы и все, да не совсем: сервер-то есть, а аутентификационных данных для входа в учетную запись администратора/суперпользователя - нет. Давайте получим их. Для этого, используется команда

/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
-6

Не вполне очевидный (в особенности для тех, кто не слишком-то любит читать официальную документацию) факт состоит в том, что в elasticsearch имеется встроенная учетная запись суперпользователя, которого зовут elastic - то есть, команда elasticsearch-reset-password -u elastic меняет значение пароля именно для этого пользователя.

Пароль, кстати говоря, имеет смысл куда-нибудь сохранить. Пригодится.

1.5. Контроль

На этом этапе мне удалось удостовериться в том, что сервер действительно развернут, совершив соответствующее обращение к только что развернутому серверу через curl на localhost (а где же ему еще быть?) по 9200-му порту.

-7

Кстати говоря, имеет смысл обратить внимание на то, что по умолчанию elasticsearch использует именно http, а не https, так как при указании неверной схемы SSL будет бунтовать.

Часть 2. Установка Kibana

Ну да лиха беда началом, т.к. впереди у меня оставалось еще два недостающих модуля. Следующей по очереди была kibana, установка которой осуществлялась предельно сходным образом: сперва публичный ключ (общий для всего стека ELK), затем установка самой программы из репозитория.

2.1. Установка пакета

Ключ у нас уже имеется, так что дело оставалось за малым - просто выполнить команду

sudo apt install kibana

После чего установочный пакет благополучно перелетает из выбранного ранее репозитория к нам на ПК. Далее, аналогичным образом запускаю службу

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable kibana.service
sudo systemctl start kibana.service

2.2. Настройка конфигурационного файла

И... Разумеется, ничего не заработало, в чем было нетрудно убедиться, вбив в поисковую строку браузера localhost:5601 (в свою очередь, kibana слушает именно 5601-й порт) - а все потому, что помимо всего прочего у kibana имеется конфигурационный файл /etc/kibana/kibana.yml, в котором мне также пришлось кое-что подправить. В первую очередь, интерес представляли поля:

server.host: "localhost"
elasticsearch.hosts: [https://localhost:9200]

Где первый отвечает за сетевое расположение самой kibana, а второй - связывает ее с сервером elasticsearch. Опять же, обращаю внимание на используемый протокол: на этот раз для связи между elasticsearch и kibana используется именно https... Как говорится, дьявол кроется в деталях, и в противном случае ничего работать не будет.

Далее, следуют аутентификационные данные. У kibana также имеется учетная запись "по умолчанию", а именно kibana_system.

elasticsearch.username: "kibana_system"
elasticsearch.password: "[сгенерированный-пароль]"

Откуда взять пароль? Точно таким же образом, как только что был получен пароль для суперпользователя elastic:

/usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system

2.3. SSL и сертификаты

Хм, кажется, чего-то не хватает... Раз уж мы используем https, то нужен и SSL, а, говоря чуть конкретнее, сертификаты. Давайте пропишем и их:

cp -R /etc/elasticsearch/certs /etc/kibana
# chown -R root:kibana /etc/kibana/certs

Здесь, первая команда (cp) копирует содержимое папки с сертификатами elasticsearch в аналогичную директорию kibana, а вторая (chown) предоставляет службе права доступа к ним.

Остается лишь сослаться на эту папку (а, говоря точнее, вполне конкретный сертификат, отвечающий за https) в конфигурационном файле:

elasticsearch.ssl.certificateAuthorities: [ "/etc/kibana/certs/http_ca.crt" ]

Альтернативный подход может заключаться в том, чтобы отключить использование сертификатов (server.ssl.enabled: false) вовсе и работать с "небезопасным" http - собственно, в конечном итоге мне и пришлось так поступить, хотя, сами понимаете, что такое решение уместно лишь в контексте домашней лаборатории, но не мало-мальски серьезного проекта.

Ух. Перезапускаем kibana и смотрим, что получилось:

-8

Теперь отправляемся на http://localhost:5601 и - о чудо:

-9

Остается лишь залогиниться в систему от имени суперпользователя и любоваться результатами приложенных усилий:

-10

Несмотря на то, что GUI, реализуемый kibana, рассчитан на то, чтобы облегчить жизнь конечному пользователю, он далеко не так прост и требует определенного времени на свое освоение. Таким образом, к сему моменту у нас имеется развернутая система мониторинга и управления логами с графическим интерфейсом, которая... не делает ровным счетом ничего, включая сбор этих самых логов. Однако, поскольку материал вышел и без того достаточно громоздким, речь о последующей настройке и практическом применении ELK пойдет уже в следующей статье.

Резюме

В этой статье я постаралась изложить всю непростую последовательность действий по развертыванию elasticsearch и kibana, включающая различные "подводные камни", с которыми мне пришлось столкнуться в продолжение собственных экспериментов с ELK, тем самым - хочется верить - избавив читателя от необходимости собственноручного разрешения common issues.