Како да конфигуришете Еластицсеарцх да бисте избегли цурење

Током протекле године било је много цурења из база података Еластицсеарцх (овде, овде и овде). У многим случајевима, лични подаци су чувани у бази података. Ова цурења су се могла избећи да су се, након постављања базе података, администратори потрудили да провере неколико једноставних подешавања. Данас ћемо причати о њима.

Одмах да резервишемо да у нашој пракси користимо Еластицсеарцх да складиштимо евиденције и анализирамо евиденције алата за безбедност информација, ОС и софтвера у нашој ИааС платформи, која је у складу са захтевима 152-ФЗ, Цлоуд-152. 

Како да конфигуришете Еластицсеарцх да бисте избегли цурење

Проверавамо да ли база података „штрчи“ на Интернет

У већини познатих случајева цурења (овде, овде) нападач је приступио подацима једноставно и непретенциозно: база података је објављена на Интернету и било је могуће повезати се са њом без аутентификације.  

Прво, хајде да се позабавимо објављивањем на Интернету. Зашто се то дешава? Чињеница је да за флексибилнији рад Еластицсеарцх-а препоручује се креирајте кластер од три сервера. Да би базе података комуницирале једна са другом, потребно је да отворите портове. Као резултат тога, администратори ни на који начин не ограничавају приступ бази података и можете се повезати са базом података са било ког места. Лако је проверити да ли је база података доступна споља. Само унесите у претраживач http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Ако можете да уђете, трчите да га затворите.

Заштита везе са базом података

Сада ћемо то учинити тако да је немогуће повезати се са базом података без аутентификације.

Еластицсеарцх има модул за аутентификацију који ограничава приступ бази података, али је доступан само у плаћеном сету додатака Кс-Пацк (1 месец бесплатног коришћења).

Добра вест је да је у јесен 2019. Амазон отворио свој развој који се преклапа са Кс-Пацк-ом. Функција аутентификације приликом повезивања на базу података постала је доступна под бесплатном лиценцом за верзију Еластицсеарцх 7.3.2, а ново издање за Еластицсеарцх 7.4.0 је већ у припреми.

Овај додатак се лако инсталира. Идите на конзолу сервера и повежите спремиште:

На основу броја обртаја:

curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo

yum update

yum install opendistro-security


Засновано на ДЕБ-у:

wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -

Подешавање интеракције између сервера преко ССЛ-а

Приликом инсталирања додатка мења се конфигурација порта за повезивање са базом података. Омогућава ССЛ енкрипцију. Да би сервери кластера наставили да раде једни са другима, потребно је да конфигуришете интеракцију између њих користећи ССЛ.

Поверење између хостова може се успоставити са или без сопственог ауторитета за сертификацију. Са првим методом, све је јасно: само треба да контактирате ЦА специјалисте. Пређимо право на другу.

  1. Направите променљиву са пуним именом домена:

    export DOMAIN_CN="example.com"

  2. Направите приватни кључ:

    openssl genrsa -out root-ca-key.pem 4096

  3. Потпишите роот сертификат. Чувајте га: ако се изгуби или компромитује, поверење између свих хостова ће морати да се поново конфигурише.

    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

  4. Креирајте администраторски кључ:

    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

  5. Направите захтев за потписивање сертификата:

    openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " 
    -key admin-key.pem -out admin.csr

  6. Креирајте сертификат администратора:

    openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem 
    -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem

  7. Креирајте сертификате за чвор Еластицсеарцх:

    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

  8. Направите захтев за потпис:

    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

  9. Потписивање сертификата:

    openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial 
    -sha256 -out node.pem

  10. Поставите сертификат између чворова Еластицсеарцх у следећој фасцикли:

    /etc/elasticsearch/


    потребни су нам фајлови:

            node-01-key.pem
    	node-01.pem
    	admin-key.pem
    	admin.pem
    	root-ca.pem

  11. Прилагоди /етц/еластицсеарцх/еластицсеарцх.имл – промените назив датотека са сертификатима у оне које смо генерисали:

    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

Промена лозинки за интерне кориснике

  1. Користећи наредбу испод, шаљемо хеш лозинке на конзолу:

    sh ${OD_SEC}/tools/hash.sh -p [пароль]

  2. Промените хеш у датотеци у примљени:

    /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml

Подешавање заштитног зида у ОС

  1. Дозволите заштитном зиду да се покрене:

    systemctl enable firewalld

  2. Хајде да га покренемо:

    systemctl start firewalld

  3. Дозволите везу са Еластицсеарцх:

    firewall-cmd --set-default-zone work
    firewall-cmd --zone=work --add-port=9200/TCP --permanent

  4. Поново учитајте правила заштитног зида:

    firewall-cmd --reload

  5. Ево правила рада:

    firewall-cmd --list-all

Примењујући све наше промене на Еластицсеарцх

  1. Направите променљиву са пуном путањом до фасцикле са додатком:

    export  OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"

  2. Хајде да покренемо скрипту која ће ажурирати лозинке и проверити подешавања:

    ${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

  3. Проверите да ли су промене примењене:

    curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure

То је све, ово су минимална подешавања која штите Еластицсеарцх од неовлашћених веза.

Извор: ввв.хабр.цом

Додај коментар