Kuidas konfigureerida Elasticsearchi lekete vältimiseks

Viimase aasta jooksul on andmebaasidest palju lekkeid Elasticsearch (siin, siin и siin). Paljudel juhtudel salvestati andmebaasi isikuandmeid. Neid lekkeid oleks saanud vältida, kui administraatorid oleksid pärast andmebaasi juurutamist vaevunud mõnda lihtsat seadet kontrollima. Täna räägime neist.

Teeme kohe reservatsiooni, et oma praktikas kasutame Elasticsearchi logide salvestamiseks ja infoturbe tööriistade, OS-i ja tarkvara logide analüüsimiseks meie IaaS platvormil, mis vastab 152-FZ, Cloud-152 nõuetele. 

Kuidas konfigureerida Elasticsearchi lekete vältimiseks

Kontrollime, kas andmebaas “kleepub” Internetti

Enamikul teadaolevatel lekkejuhtudel (siin, siin) pääses ründaja andmetele ligi lihtsalt ja tagasihoidlikult: andmebaas avaldati Internetis ja sellega oli võimalik ilma autentimiseta ühendust luua.  

Kõigepealt tegeleme Internetis avaldamisega. Miks see juhtub? Fakt on see, et Elasticsearchi paindlikumaks kasutamiseks on soovitatav luua kolmest serverist koosnev klaster. Selleks, et andmebaasid saaksid omavahel suhelda, tuleb avada pordid. Sellest tulenevalt ei piira administraatorid kuidagi juurdepääsu andmebaasile ning andmebaasiga saab ühenduse luua kõikjal. Lihtne on kontrollida, kas andmebaas on väljastpoolt juurdepääsetav. Sisestage lihtsalt brauserisse http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Kui saad sisse, jookse seda sulgema.

Andmebaasi ühenduse kaitsmine

Nüüd teeme selle nii, et ilma autentimiseta pole võimalik andmebaasiga ühendust luua.

Elasticsearchil on autentimismoodul, mis piirab juurdepääsu andmebaasile, kuid see on saadaval ainult tasulises X-Packi pluginate komplektis (1 kuu tasuta kasutamine).

Hea uudis on see, et 2019. aasta sügisel avas Amazon oma arendused, mis kattuvad X-Packiga. Autentimisfunktsioon andmebaasiga ühenduse loomisel on saadaval tasuta litsentsi alusel versioonile Elasticsearch 7.3.2 ja Elasticsearch 7.4.0 uus väljalase on juba töös.

Seda pistikprogrammi on lihtne installida. Minge serverikonsooli ja ühendage hoidla:

Põhineb pöörete arvul:

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

yum update

yum install opendistro-security


DEB-põhine:

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

Serveritevahelise suhtluse seadistamine SSL-i kaudu

Plugina installimisel muutub andmebaasiga ühendava pordi konfiguratsioon. See võimaldab SSL-krüptimist. Selleks, et klastriserverid saaksid üksteisega edasi töötada, peate konfigureerima nendevahelise suhtluse SSL-i abil.

Hostide vahelist usaldust saab luua oma sertifitseerimisasutusega või ilma. Esimese meetodi puhul on kõik selge: peate lihtsalt võtma ühendust CA spetsialistidega. Liigume otse teise juurde.

  1. Looge muutuja täieliku domeeninimega:

    export DOMAIN_CN="example.com"

  2. Looge privaatvõti:

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

  3. Allkirjastage juursertifikaat. Hoidke seda turvaliselt: kui see kaob või satub ohtu, tuleb kõigi hostide vaheline usaldus uuesti konfigureerida.

    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. Looge administraatori võti:

    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. Looge sertifikaadi allkirjastamise taotlus:

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

  6. Looge administraatori sertifikaat:

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

  7. Looge Elasticsearchi sõlme sertifikaadid:

    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. Looge allkirjataotlus:

    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. Sertifikaadi allkirjastamine:

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

  10. Asetage sertifikaat Elasticsearchi sõlmede vahele järgmises kaustas:

    /etc/elasticsearch/


    vajame faile:

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

  11. Konfigureerimine /etc/elasticsearch/elasticsearch.yml – muuda sertifikaatidega failide nimed meie poolt genereeritavateks:

    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

Sisekasutajate paroolide muutmine

  1. Kasutades allolevat käsku, väljastame konsooli parooliräsi:

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

  2. Muutke failis räsi vastuvõetud räsi vastu:

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

Tulemüüri seadistamine OS-is

  1. Luba tulemüüril käivituda:

    systemctl enable firewalld

  2. Käivitame selle:

    systemctl start firewalld

  3. Luba ühendus Elasticsearchiga:

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

  4. Laadige uuesti tulemüürireeglid:

    firewall-cmd --reload

  5. Siin on tööreeglid:

    firewall-cmd --list-all

Kõigi meie muudatuste rakendamine Elasticsearchile

  1. Looge muutuja kausta täieliku teega pistikprogrammiga:

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

  2. Käivitame skripti, mis värskendab paroole ja kontrollib seadeid:

    ${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. Kontrollige, kas muudatused on rakendatud:

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

See on kõik, need on minimaalsed seaded, mis kaitsevad Elasticsearchi volitamata ühenduste eest.

Allikas: www.habr.com

Lisa kommentaar