Настройка безопасности стека ELK с помощью Nginx

Стек ELK (стек Elastic) — это набор открытых программ, разработанных Elastic, которые позволяют выполнять поиск, анализ и визуализацию записей журналов.

Стек ELK состоит из четырех основных компонентов:

  • Elasticsearch. Распределенная поисковая система, доступная по RESTful протоколу, которая хранит все собранные данные.
  • Logstash. Компонент, осуществляющий предобработку, дополнение, фильтрацию и маршрутизацию загружаемых в Elasticsearch данных.
  • Kibana. Аналитическая и визуализационная система с web-интерфейсом, позволяющая выполнять комплексные запросы к Elasticsearch и отображать их результаты в виде таблиц и диаграмм.
  • Beats. Семейство легких специализированных отправителей данных, тесно интегрированных с Logstash и Elasticsearch.

Если вы следите за новостями об Elasticsearch, то могли слышать о ряде случаев раскрытия конфиденциальных данных, хранящихся в кластерах Elasticsearch. Вот только некоторые ссылки на статьи: Equifax, CITI, AIESEC.

Поскольку Elasticsearch и Kibana поставляются без встроенного механизма аутентификации, данные могут легко подвергнуться атаке, если не предпринять простые меры по их защите.

В этой статье мы рассмотрим, как реализовать один из наиболее распространенных и простых методов защиты стека ELK — установку Nginx в качестве обратного прокси-сервера перед Elasticsearch и Kibana.

Статья является переводом и адаптацией англоязычной статьи.

Настройка стека ELK

Полную инструкцию по установке Kibana и Elasticsearch можно найти в руководстве по развертыванию стека ELK, в этой статье мы не будем затрагивать эту тему. Для безопасного функционирования Kibana и Elasticsearch, которое обеспечивает невозможность получения неавторизованного доступа к этим службам извне, требуется обеспечить правильные значения для ряда параметров конфигурации.

Параметры конфигурации для Kibana

Откроем файл конфигурации Kibana, изменим адрес так, чтобы Kibana была привязана к localhost:

sudo nano /etc/kibana/kibana.yml

server.host: "127.0.0.1"

Сохраним файл и перезапустим Kibana:

sudo service kibana restart

Параметры конфигурации для Elasticsearch

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

sudo nano /etc/elasticsearch/elasticsearch.yml

network.host: "127.0.0.1"

Сохраним файл и перезапустим Elasticsearch:

sudo service elasticsearch restart

Теперь получить доступ к Kibana и Elasticsearch с удаленных узлов невозможно, однако, с локального узла доступ предоставляется:

http://localhost:5601/

Установка и настройка Nginx с поддержкой аутентификации

Для реализации аутентификации, будем использовать Nginx:

sudo apt-get install -y nginx

Установим пакет apache2-utils, который содержит утилиту, предназначенную для генерации учетных записей, используемых в базовой аутентификации:

sudo apt-get install -y apache2-utils

Создадим учетную запись пользователя, которая будет использоваться для базовой аутентификации:

sudo htpasswd -c /etc/nginx/htpasswd.elk kibanauser

После нажатия кнопки ввода система предложит нам ввести и подтвердить пароль для пользователя.

New password:
Re-type new password:
Adding password for user kibanauser

Далее создадим файл конфигурации Nginx:

sudo nano /etc/nginx/conf.d/elk.conf

Зададим следующие настройки:

worker_processes  1;
events {
  worker_connections 1024;
}

http {
  upstream elasticsearch {
    server 127.0.0.1:9200;
    keepalive 15;
  }

  upstream kibana {
    server 127.0.0.1:5601;
    keepalive 15;
  }

  server {
    listen 8881;

    location / {
      auth_basic "Restricted Access";
      auth_basic_user_file /etc/nginx/htpasswd.elk;


      proxy_pass http://elasticsearch;
      proxy_redirect off;
      proxy_buffering off;

      proxy_http_version 1.1;
      proxy_set_header Connection "Keep-Alive";
      proxy_set_header Proxy-Connection "Keep-Alive";
    }

  }

  server {
    listen 8882;

    location / {
      auth_basic "Restricted Access";
      auth_basic_user_file /etc/nginx/htpasswd.elk;

      proxy_pass http://kibana;
      proxy_redirect off;
      proxy_buffering off;

      proxy_http_version 1.1;
      proxy_set_header Connection "Keep-Alive";
      proxy_set_header Proxy-Connection "Keep-Alive";
    }
  }
}

Nginx будет слушать порт 8881 для установки соединений с Elasticsearch и порт 8882 для соединений с Kibana, используя базовую аутентификацию HTTP для учетных записей, которые мы сгенерировали с помощью htpasswd.

Соединение со службами Elasticsearch и Kibana с поддержкой аутентификации можно установить с любого адреса. Если вы хотите ограничить адреса, с которых пользователи могут устанавливать соедениения, обратитесь к нашей статье на эту тему. Перезапустите Nginx для применения настроек:

sudo nginx -t && sudo service nginx restart

Проверка работы аутентификации

Elasticsearch и Kibana теперь защищены с помощью мехатизма базовой аутентификации HTTP. Проверим это с помощью команды cURL.

Elasticsearch

curl --verbose http://kibanauser:1234@127.0.0.1:8881

Должен вернуться следующий вывод:

* Rebuilt URL to: http://kibanauser:1234@127.0.0.1:8881/
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8881 (#0)
* Server auth using Basic with user 'kibanauser'
> GET / HTTP/1.1
> Host: 127.0.0.1:8881
> Authorization: Basic a2liYW5hdXNlcjoxMjM0
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.10.3 (Ubuntu)
< Date: Sun, 10 Feb 2019 11:14:13 GMT
< Content-Type: application/json; charset=UTF-8
< Content-Length: 493
< Connection: keep-alive
<
{
  "name" : "9qenDRz",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "rbfDdSWaRmyrh9kOSVNwyg",
  "version" : {
    "number" : "6.6.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "a9861f4",
    "build_date" : "2019-01-24T11:27:09.439740Z",
    "build_snapshot" : false,
    "lucene_version" : "7.6.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
* Connection #0 to host 127.0.0.1 left intact

Kibana

curl --verbose http://kibanauser:1234@127.0.0.1:8882

Должен вернуться следующий вывод:

* Rebuilt URL to: http://kibanauser:1234@127.0.0.1:8882/
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 8882 (#0)
* Server auth using Basic with user 'kibanauser'
> GET / HTTP/1.1
> Host: 127.0.0.1:8882
> Authorization: Basic a2liYW5hdXNlcjoxMjM0
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 302 Found
< Server: nginx/1.10.3 (Ubuntu)
< Date: Sun, 10 Feb 2019 11:15:43 GMT
< Content-Type: text/html; charset=utf-8
< Content-Length: 0
< Connection: keep-alive
< location: /app/kibana
< kbn-name: kibana
< kbn-xpack-sig: 4081d734fcd0e7d12f32aeb71f111a2d
< cache-control: no-cache
<
* Connection #0 to host 127.0.0.1 left intact

При открытии браузера по адресу http://website:8882 будет отображено диалоговое окно аутентификации:

Введите имя пользователя и заданный при настройке пароль, на экране отобразится Kibana.

Заключение

Как часто бывает в проектах с открытым исходным кодом, в стеке ELK некоторые компоненты не реализованы, а должны обеспечиваться внешними службами. Одним из таких компонентов является компонент аутентификации. Использование Nginx в качестве обратного прокси-сервера позволяет обеспечить защиту служб Elasticsearch и Kibana от доступа неавторизованных пользователей.

Для полноценной настройки защиты ELK с помощью Nginx необходимо включить протокол HTTPS с использованием корректного сертификата SSL:

Установка балансирующего прокси-сервера Nginx в CentOS 7 с поддержкой SSL и сертификатом Let’s Encrypt

Установка балансирующего прокси-сервера Nginx в Debian 9 с поддержкой SSL и сертификатом Let’s Encrypt

Установка балансирующего прокси-сервера Nginx в Ubuntu 18.04 с поддержкой SSL и сертификатом Let’s Encrypt

Настройка безопасности стека ELK с помощью Nginx: 32 комментария

  1. Nydia

    Fantastic beat ! I wish to apprentice while
    you amend your site, how can i subscribe for a blog website?
    The account helped me a acceptable deal. I had been tiny bit acquainted of
    this your broadcast provided bright clear concept

  2. Salvatore

    I’m extremely impressed with your writing skills as well as with the layout on your weblog.
    Is this a paid theme or did you modify it yourself? Either way keep
    up the excellent quality writing, it’s rare to see a
    nice blog like this one today.

  3. Jorja

    This website certainly has all of the information I needed
    about this subject and didn’t know who to ask.

  4. forum.adm-tolka.ru

    I’ll immediately seize your rss feed as I can not
    to find your email subscription link or e-newsletter service.
    Do you’ve any? Kindly permit me recognise in order that I may just subscribe.
    Thanks.

    Also visit my site — forum.adm-tolka.ru

  5. judi slot pulsa

    Ӏ’m impressed, I һave tto aԁmit. Seldom do I encounter a blog thɑt’s ƅoth еquaⅼly educative and amusing,
    and let me tell you, yoᥙ haѵе hit the naill oon tһe head.
    The issue iіs soimething not enough folks are speaҝing intelligently aboսt.
    I am verу happy that I stumbled across
    this during my search for something relating to this.

    Here is my website — judi slot pulsa

  6. shihan.com.ru

    hello there and thank you for your information —
    I have certainly picked up something new from right here.
    I did however expertise a few technical points using this website, since I experienced to
    reload the web site a lot of times previous to I could get it to load correctly.
    I had been wondering if your web hosting is OK? Not that I’m complaining,
    but sluggish loading instances times will very frequently affect your placement in google and can damage your high-quality score if advertising
    and marketing with Adwords. Anyway I am adding this
    RSS to my e-mail and could look out for a lot more of your respective exciting content.
    Ensure that you update this again soon..

    Also visit my homepage: shihan.com.ru

  7. best online casinos that payout usa

    Hi there! This article couldn’t be written much better!

    Reading through this post reminds me of my previous roommate!
    He continually kept talking about this. I most certainly will forward this post to him.
    Pretty sure he’s going to have a good read. I appreciate you for sharing!

  8. MaxExtend Male Enhancement

    It’s the best time to make a few plans for the longer term and it is time to be happy.
    I have read this submit and if I may just I want to
    suggest you some attention-grabbing issues or suggestions.
    Perhaps you can write next articles referring to this article.
    I desire to read more issues about it!

    Check out my web blog :: MaxExtend Male Enhancement

  9. http://duna-anapa.net.ru/modules.php?name=Your_Account&op=userinfo&username=CorbittAlissa

    Simply to follow up on the up-date of this subject matter on your web site and would wish to
    let you know simply how much I appreciated the time you
    took to create this handy post. Inside the post,
    you spoke on how to definitely handle this issue
    with all convenience. It would be my pleasure to build up some more tips from your web-site
    and come up to offer others what I discovered from you. Thank you for your usual fantastic effort.

    Visit my web blog; http://duna-anapa.net.ru/modules.php?name=Your_Account&op=userinfo&username=CorbittAlissa

  10. casino and resorts near me

    Good post. I learn something new and challenging on sites
    I stumbleupon everyday. It will always be interesting to read articles from other writers and use something from other websites.

  11. Keto Redux

    First off I want to say superb blog! I had a quick question that I’d like to ask if you don’t mind.
    I was interested to find out how you center yourself and clear your head
    before writing. I have had difficulty clearing my thoughts in getting my thoughts out there.
    I do take pleasure in writing however it just seems like the first 10 to 15 minutes are
    wasted simply just trying to figure out how to begin. Any recommendations or tips?
    Many thanks!

    Check out my web page — Keto Redux

  12. download ace333 ios

    Fantastic goods from you, man. I have understand your stuff previous to
    and you are just extremely magnificent. I actually like what you’ve acquired here,
    really like what you are stating and the way in which you say it.
    You make it entertaining and you still take care of to keep it smart.
    I can’t wait to read much more from you. This is actually a great web site.

    My web page: download ace333 ios

  13. Slimingo Keto

    We are a gaggle of volunteers and starting a new scheme
    in our community. Your website offered us with useful information to paintings on. You’ve performed
    a formidable task and our whole neighborhood will probably be grateful to you.

    My web blog; Slimingo Keto

  14. ituqq

    Hurrah! In the end I got a blog from where I be capable of genuinely obtain valuable information concerning my study and knowledge.

  15. Spark Aura Serum

    Hi, Neat post. There is a problem with your website in web explorer, might check this…

    IE still is the marketplace chief and a large component to other folks will miss your fantastic
    writing due to this problem.

    Feel free to surf to my website: Spark Aura Serum

Добавить комментарий

Ваш адрес email не будет опубликован.