Установка и настройка OpenSearch. Debian 12.
OpenSearch – система полнотекстового поиска. Является форком Elasticsearch. Разработана компанией A9.com, дочерней компанией Amazon.com.
Стэк OpenSearch (OpenSearch + Logstash-oss-with-OpenSearch-output-plugin + OpenSearch–Dashboards) является бесплатным аналогом с отрытым исходным кодом стэку ELK (Elasticsearch + Logstash + Kibana). В совокупности с Beat’ами (Filebeat, Winlogbeat, и т.д.) образуют полный цикл управления логами: сбор, систематизация, поиск.
На момент установки актуальная версия OpenSearch — 2.18
Данная версия работает с Java 11, 17, 21.
Установка производится на Debian 12.
Установка Java:
# apt install openjdk-17-jre
Включение требуемой версии версии Java:
# update-alternatives --config java
Установка корневых сертификатов:
# apt-get install ca-certificates
В файл /etc/sysctl.conf добавляю параметр vm.max_map_count=262144 и перечитываю параметры ядра:
# sysctl -p
Создаю пользователя openserach
:
# adduser --system --shell /bin/bash --no-create-home opensearch
Создаю группу:
# addgroup opensearch
Добавляю пользователя в группу:
# usermod -aG opensearch opensearch
Дистрибутивы находятся на странице https://opensearch.org/downloads.html
Устанавливать компоненты стека буду в каталог /var/lib.
Установка OpenSearch.
Скачиваю и разархивирую нужную версию OpenSearch:
# mkdir -p /usr/local/src/Opensearch
# cd /usr/local/src/Opensearch
# wget https://artifacts.opensearch.org/releases/bundle/opensearch/2.18.0/opensearch-2.18.0-linux-x64.tar.gz
# tar zxvf ./opensearch-2.18.0-linux-x64.tar.gz
# cp -r ./opensearch-2.18.0/ /var/lib/opensearch
# chown -R opensearch /var/lib/opensearch
Настраиваю параметры JVM в файле /var/lib/opensearch/config/jvm.options
:
-Xms4g
-Xmx4g
Настройка TLS.
Самодписанные сертификаты будут храниться в каталоге /var/lib/opensearch/config. Перехожу в данный каталог и генерирую сертификаты:
# cd /var/lib/opensearch/config
Генерация приватного ключа:
openssl genrsa -out root-ca-key.pem 2048
На основе приватного ключа создаётся корневой сертификат:
openssl req -new -x509 -sha256 -key root-ca-key.pem -subj "/C=RU/ST=Ekat/L=Ekat/O=ORG/OU=IT/CN=ROOT" -out root-ca.pem -days 3650
Создаю админский ключ:
# openssl genrsa -out admin-key-temp.pem 2048
Конвертация админского ключа в формат PKCS#8:
# openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
Формирование запроса на генерацию сертификата:
# openssl req -new -key admin-key.pem -subj "/C=RU/ST=EKAT/L=EKAT/O=ORG/OU=IT/CN=A" -out admin.csr
Генерация сертификата:
# openssl x509 -req -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem -days 3650
Создаю ключ для ноды:
# openssl genrsa -out node1-key-temp.pem 2048
Конвертация ключа в формат PKCS#8:
# openssl pkcs8 -inform PEM -outform PEM -in node1-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out node1-key.pem
Формирование запроса на генерацию сертификата:
openssl req -new -key node1-key.pem -subj "/C=RU/ST=Ekat/L=Ekat/O=ORG/OU=IT/CN=node1" -out node1.csr
Создание файла расширения, определяющий DNS-имя SAN для хоста. Оно должно соответствовать DNS-записи A хоста.
# echo 'subjectAltName=DNS:node1' > node1.ext
Генерация сертификата:
# openssl x509 -req -in node1.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node1.pem -days 3650 -extfile node1.ext
В файл /var/lib/opensearch/config/opensearch.yml
добавляю строки:
plugins.security.disabled: false discovery.type: single-node plugins.security.ssl.transport.pemcert_filepath: /var/lib/opensearch/config/node1.pem plugins.security.ssl.transport.pemkey_filepath: /var/lib/opensearch/config/node1-key.pem plugins.security.ssl.transport.pemtrustedcas_filepath: /var/lib/opensearch/config/root-ca.pem plugins.security.ssl.http.enabled: true plugins.security.ssl.http.pemcert_filepath: /var/lib/opensearch/config/node1.pem plugins.security.ssl.http.pemkey_filepath: /var/lib/opensearch/config/node1-key.pem plugins.security.ssl.http.pemtrustedcas_filepath: /var/lib/opensearch/config/root-ca.pem plugins.security.allow_default_init_securityindex: true plugins.security.authcz.admin_dn: - 'CN=A,OU=IT,O=ORG,L=Ekat,ST=Ekat,C=RU' plugins.security.nodes_dn: - 'CN=node1,OU=IT,O=ORG,L=Ekat,ST=Ekat,C=RU' plugins.security.audit.type: internal_opensearch plugins.security.enable_snapshot_restore_privilege: true plugins.security.check_snapshot_restore_write_privileges: true plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
Также в этом файле настраиваю параметры хоста:
node.name: node1
network.host: 0.0.0.0
Значение node.name
должно соответствовать имени хоста в ДНС и открываем доступ к сервису снаружи.
Добавление самоподписанного корневого сертификата в доверенные провожу по методике: Добавление корневого сертификата(CA) в доверенные.
Настройка пользователей.
Внутренние пользователи хранятся в файле /var/lib/opensearch/config/opensearch-security/internal_users.yml
.
Из этого файла рекомендуется удалить все демо-учётки за исключением admin
, а для admin
сменить пароль.
Для смены пароля выполняю следующие действия.
Делаю скрипты исполняемыми:
# chmod 755 /var/lib/opensearch/plugins/opensearch-security/tools/*.sh
Запускаю скрипт генерации хеша пароля:
# /var/lib/opensearch/plugins/opensearch-security/tools/hash.sh
Задаю новый пароль, полученный хеш помещаю в файл /var/lib/opensearch/config/opensearch-security/internal_users.yml
Для принятия изменений требуется запустить opensearch
в консоли и выполнить скрипт securityadmin.sh
# # OPENSEARCH_JAVA_HOME=/var/lib/opensearch/jdk sudo -u opensearch /var/lib/opensearch/bin/opensearch
Открываю второе окно терминала и в нём выполняю:
# OPENSEARCH_JAVA_HOME=/var/lib/opensearch/jdk /var/lib/opensearch/plugins/opensearch-security/tools/securityadmin.sh -cd /var/lib/opensearch/config/opensearch-security/ -cacert /var/lib/opensearch/config/root-ca.pem -cert /var/lib/opensearch/config/admin.pem -key /var/lib/opensearch/config/admin-key.pem -icl -nhnv
Для чистоты эксперимента рестартую сервис в первом окне. Во втором окне выполняю:
# curl https://127.0.0.1:9200 -u admin:password -k
В качестве результата возвращается структура:
{ "name" : "node1", "cluster_name" : "opensearch", "cluster_uuid" : "QuMQZc5qQj6cA0nUAR-h_Q", "version" : { "distribution" : "opensearch", "number" : "2.18.0", "build_type" : "tar", "build_hash" : "99a9a81da366173b0c2b963b26ea92e15ef34547", "build_date" : "2024-10-31T19:08:39.157471098Z", "build_snapshot" : false, "lucene_version" : "9.12.0", "minimum_wire_compatibility_version" : "7.10.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "The OpenSearch Project: https://opensearch.org/" }
На первый взгляд всё хорошо. Иду дальше.
Запуск сервиса через systemd.
Настраиваю запуск сервиса через systemd
:
# touch /etc/systemd/system/opensearch.service
В файл добавляю:
[Unit] Description=OpenSearch Wants=network-online.target After=network-online.target [Service] Type=forking RuntimeDirectory=data Environment="OPENSEARCH_JAVA_OPTS=-Xms4g -Xmx4g" WorkingDirectory=/var/lib/opensearch ExecStart=/var/lib/opensearch/bin/opensearch -d User=opensearch Group=opensearch StandardOutput=journal StandardError=inherit LimitNOFILE=65535 LimitNPROC=4096 LimitAS=infinity LimitFSIZE=infinity TimeoutStopSec=0 KillSignal=SIGTERM KillMode=process SendSIGKILL=no SuccessExitStatus=143 TimeoutStartSec=75 [Install] WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl enable opensearch.service
# systemctl start opensearch
Установка OpenSearch Dashboards.
Данный сервис предпочитаю устанавливать из пакета. Качаю со страницы https://opensearch.org/downloads.html ( прямая ссылка OpenSearch Dashboards DEB-package v.2.18 )
# cd cd /usr/local/src/Opensearch
# wget https://artifacts.opensearch.org/releases/bundle/opensearch-dashboards/2.18.0/opensearch-dashboards-2.18.0-linux-x64.deb
# dpkg -i ./opensearch-dashboards-2.18.0-linux-x64.deb
После завершения установки перезагружаю systemd, включаю автозапуск и стартую OpenSearch Dashboards:
# systemctl daemon-reload
# systemctl enable opensearch-dashboards.service
# systemctl start opensearch-dashboards.service
По умолчанию OpenSearch Dashboards слушает порт 5601 на локальном интерфейсе, для доступа снаружи требуется настроить реверс-прокси на базе nginx или в файле конфигурации /etc/opensearch-dashboards/opensearch_dashboards.yml прописать строку:
server.host: 0.0.0.0
В последнем случае доступ к веб-интерфейсу будет по адресу http://ИмяХоста:5601
Добавить комментарий