Kuidas seadistada Elasticsearch'i, et vältida lekkeid

Viimase aasta jooksul on toimunud palju andmelekkeid Elasticsearch (siin on, siin on ja siin on). Paljuski olid andmebaasis isikuandmed. Neid lekeid oleks saanud vältida, kui administratorid oleksid andmebaasi käivitamise järel kontrollinud mõningaid lihtsaid seadeid. Täna räägime neist.

Koheselt märgime ära, et oma praktikas kasutame logide ja teabe kaitse vahendite, operatsioonisüsteemide ja tarkvara analüüsimiseks Elasticsearchi meie IaaS platvormil, mis vastab 152-ФZ ning Cloud-152 nõuetele. 

Kuidas seadistada Elasticsearch'i, et vältida lekkeid

Kontrollime, kas andmebaas ei ole internetis avatud

Tuntud lekete enamikul juhtudel (siin on, siin on) sai kurjategija andmetele lihtsalt ja keerukalt ligi: andmebaas oli internetis avalikustatud ning sellele pääses ligi ilma autentimiseta.  

Alustame internetis avalikustamisega. Miks see juhtub? Asi on selles, et Elasticsearchi tõhusamaks tööks soovitame on vaja luua kolmese serveri klaster. Et andmebaasid omavahel suhtleksid, tuleb avada pordid. Tulemusena ei piira administratorid juurdepääsu andmebaasile, ja sellele pääseb ligi igalt poolt. Kontrollida, kas andmebaasile on juurdepääs väljastpoolt, on lihtne. Lihtsalt kirjutame brauserisse http://[IP/Nimi Elasticsearch]:9200/_cat/nodes?v

Kui pääseb ligi, siis tuleb kiiresti sulgeda.

Kaitseme andmebaasiga ühendust

Nüüd teeme nii, et andmebaasi ei saa ühendada ilma autentimiseta.

Elasticsearchil on autentimise moodul, mis piirab juurdepääsu andmebaasile, kuid see on saadaval ainult tasulises X-Pack pistikprogrammide komplektis (1 kuu tasuta kasutamist).

Hea uudis on see, et 2019. aasta sügisel avas Amazon oma arendused, mis kattuvad X-Packiga. Andmebaasi ühendamise autentimise funktsioon sai vabaks litsentsiks versioonile Elasticsearch 7.3.2, ning uus väljaanne Elasticsearch 7.4.0 on juba töös.

Seda pistikprogrammi installitakse lihtsalt. Siseneme serveri konsooli ja ühendame hoidla:

RPM-põhine:

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 -

Seame serverite vahel SSL-i kaudu suhtlemise

Plugin'i installimisel muutub andmebaasi ühenduse porti konfiguratsioon. SSL-krüptimine aktiveeritakse. Et klastriserverid saaksid omavahel jätkuvalt töötada, tuleb nende vaheliste suhete seadistamiseks kasutada SSL-i.

Usaldust hostide vahel saab luua kas oma tunnistusasutuse abil või ilma. Esimese variandi puhul on kõik selge: peate lihtsalt pöörduma CA spetsialistide poole. Liikume kohe teise juurde.

  1. Loome muutuja domeeni täisnime jaoks:

    export DOMAIN_CN="example.com"

  2. Loome privaatvõtme:

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

  3. Allkirjastame juurtunnistuse. Hoidke seda nagu silmapaistvat silma: selle kadumise või kompromiteerimise korral tuleb kõikide hostide vahelne usaldus uuesti seadistada.

    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. Loome administraatori võtme:

    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. Loome sertifikaadi allkirjastamise päringu:

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

  6. Loome administraatori sertifikaadi:

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

  7. Loome Elasticsearchi sõlme sertifikaate:

    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. Loome allkirjastamisettepaneku:

    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. Allkirjastame sertifikaadi:

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

  10. Paigutame sertifikaadi Elasticsearchi sõlmede vahel kausta:

    /etc/elasticsearch/


    me vajame faile:

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

  11. Seadistame /etc/elasticsearch/elasticsearch.yml – muudame sertifikaatide failide nimed meie genereeritud nimedeks:

    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

Vahetame sisekasutajate paroole

  1. Aluselt käivitatakse järgmine käsk, mis väljastab parooli hash'i konsoolis:

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

  2. Vahetame hash'i failis saadud vastu:

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

Seadistame tulemüürisüsteemi

  1. Lubame tulemüüri käivitamise:

    systemctl enable firewalld

  2. Käivitame selle:

    systemctl start firewalld

  3. Lubame ühenduse Elasticsearchiga:

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

  4. Taaskäivitame tulemüüri reeglid:

    firewall-cmd --reload

  5. Kuvame töötavad reeglid:

    firewall-cmd --list-all

Rakendame kõik meie muudatused Elasticsearchile

  1. Loome muutuja täispöördena kausta pluginiga:

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

  2. Käivitame skripti, mis uuendab 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. Kontrollime, kas muudatused on rakendunud:

    curl -XGET https://[IP/Elasticsearchi nimi]:9200/_cat/nodes?v -u admin:[пароль] --insecure

Kõik, need on minimaalsete seadistuste, mis kaitsevad Elasticsearchi autoriseerimata ühenduste eest.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster