За апошні год узнікала шмат уцечак з баз
Адразу абмовімся, што ў сваёй практыцы выкарыстоўваем Elasticsearch для захоўвання логаў і аналізу часопісаў сродкаў абароны інфармацыі, АС і ПА у нашай IaaS-платформе, якая адпавядае патрабаванні 152-ФЗ, Cloud-152.
Правяраем, "не тырчыць" ці база ў інтэрнэт
У большасці вядомых выпадкаў уцечак (
Спачатку разбяромся з публікацыяй у інтэрнэце. Чаму так атрымоўваецца? Справа ў тым, што для больш гнуткай працы Elasticsearch
Калі атрымліваецца зайсці, значыць бягом зачыняць.
Абараняем падлучэнне да БД
Цяпер зробім так, каб да базы нельга было падключыцца без аўтэнтыфікацыі.
У Elasticsearch ёсць модуль аўтэнтыфікацыі, які абмяжоўвае доступ да базы, але ён толькі ў платным наборы плагінаў X-Pack (1 месяц бясплатнага выкарыстання).
Добрыя навіны ў тым, што ўвосень 2019 гады Amazon адкрыў свае напрацоўкі, якія перасякаюцца з X-Pack. Функцыя аўтэнтыфікацыі пры падлучэнні да базы стала даступная пад вольнай ліцэнзіяй для версіі Elasticsearch 7.3.2., і ўжо ў працы новы рэліз для Elasticsearch 7.4.0.
Усталёўваецца гэтая плягін проста. Заходзім у кансоль сервера і падлучальны рэпазітар:
RPM Based:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
DEB Based:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -
Наладжваем узаемадзеянне паміж серверамі праз SSL
Пры ўсталёўцы плагіна змяняецца канфігурацыя порта падлучэння да базы. На ім уключаецца шыфраванне SSL. Каб сервера кластара змаглі і далей сябар з сябрам працаваць, трэба наладзіць узаемадзеянне паміж імі з дапамогай SSL.
Давер паміж хастамі можна ўсталяваць з дапамогай уласнага які сведчыць цэнтра або без яго. З першым спосабам усё зразумела: проста трэба звярнуцца да адмыслоўцаў па CA. Пяройдзем адразу да другога.
- Ствараем зменную з поўным імем дамена:
export DOMAIN_CN="example.com"
- Ствараем прыватны ключ:
openssl genrsa -out root-ca-key.pem 4096
- Падпісваем каранёвы сертыфікат. Захоўвайце яго як зрэнку вока: пры яго страце або кампраметацыі давер паміж усімі хастамі трэба будзе пераналаджваць.
openssl req -new -x509 -sha256 -subj "/C=RU/ST=Moscow/O=Moscow, Inc./CN=${DOMAIN_CN}" -key root-ca-key.pem -out root-ca.pem
- Ствараем ключ адміністратара:
openssl genrsa -out admin-key-temp.pem 4096 openssl pkcs8 -inform PEM -outform PEM -in admin-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out admin-key.pem
- Ствараем запыт для подпісу сертыфіката:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr
- Ствараем сертыфікат адміністратара:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- Ствараем сертыфікаты для ноды Elasticsearch:
export NODENAME="node-01" openssl genrsa -out ${NODENAME}-key-temp.pem 4096 openssl pkcs8 -inform PEM -outform PEM -in ${NODENAME}-key-temp.pem -topk8 -nocrypt -v1 PBE-SHA1-3DES -out ${NODENAME}-key.pem
- Ствараем запыт на подпіс:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${NODENAME}.${DOMAIN_CN}" -addext"subjectAltName=DNS:${NODENAME}.${DOMAIN_CN},DNS:www.${NODENAME}.${DOMAIN_CN}" -key ${NODENAME}-key.pem -out ${NODENAME}.csr
- Падпісваем сертыфікат:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem
- Раскладваем сертыфікат паміж нодамі Elasticsearch у тэчку:
/etc/elasticsearch/
нам спатрэбяцца файлы:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem
- Наладжваем /etc/elasticsearch/elasticsearch.yml – мяняем назву файлаў з сертыфікатамі, на згенераваныя намі:
opendistro_security.ssl.transport.pemcert_filepath: node-01.pem opendistro_security.ssl.transport.pemkey_filepath: node-01-key.pem opendistro_security.ssl.transport.pemtrustedcas_filepath: root-ca.pem opendistro_security.ssl.transport.enforce_hostname_verification: false opendistro_security.ssl.http.enabled: true opendistro_security.ssl.http.pemcert_filepath: node-01.pem opendistro_security.ssl.http.pemkey_filepath: node-01-key.pem opendistro_security.ssl.http.pemtrustedcas_filepath: root-ca.pem opendistro_security.allow_unsafe_democertificates: false opendistro_security.allow_default_init_securityindex: true opendistro_security.authcz.admin_dn: − CN=admin,CN=example.com,O=Moscow Inc.,ST=Moscow,C=RU opendistro_security.nodes_dn: − CN=node-01.example.com,O=Moscow Inc.,ST=Moscow,C=RU
Змяняем паролі ўнутраных карыстальнікаў
- З дапамогай каманды ніжэй выводны ў кансоль хэш пароля:
sh ${OD_SEC}/tools/hash.sh -p [пароль]
- Мяняем хэш у файле на атрыманы:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Наладжваем міжсеткавы экран у АС
- Дазваляем запуск міжсеткавага экрана:
systemctl enable firewalld
- Запускаем яго:
systemctl start firewalld
- Дазваляем падлучэнне да Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent
- Перазагружаем правілы міжсеткавага экрана:
firewall-cmd --reload
- Выводзім працуючыя правілы:
firewall-cmd --list-all
Ужывальны ўсе нашы змены да Elasticsearch
- Ствараем зменную з поўным шляхам да тэчкі з убудовай:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- Запускаем скрыпт, які абновіць паролі і праверыць налады:
${OD_SEC}/tools/securityadmin.sh -cd ${OD_SEC}/securityconfig/ -icl -nhnv -cacert /etc/elasticsearch/root-ca.pem -cert /etc/elasticsearch/admin.pem -key /etc/elasticsearch/admin-key.pem
- Правяраем, ці прымяніліся змены:
curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure
Усё, гэта мінімальныя наладкі, якія зачыняюць Elasticsearch ад неаўтарызаванага падлучэння.
Крыніца: habr.com