Kā konfigurēt Elasticsearch, lai izvairītos no noplūdēm

Pēdējā gada laikā no datubāzēm ir bijušas daudzas informācijas noplūdes Elastikas meklēšana (šeit, šeit и šeit). Daudzos gadījumos personas dati tika glabāti datu bāzē. Šīs noplūdes varēja izvairīties, ja pēc datu bāzes izvietošanas administratori būtu pacentušies pārbaudīt dažus vienkāršus iestatījumus. Šodien mēs par tiem runāsim.

Nekavējoties atrunāsim, ka savā praksē mēs izmantojam Elasticsearch, lai uzglabātu žurnālus un analizētu informācijas drošības rīku, OS un programmatūras žurnālus mūsu IaaS platformā, kas atbilst 152-FZ, Cloud-152 prasībām. 

Kā konfigurēt Elasticsearch, lai izvairītos no noplūdēm

Mēs pārbaudām, vai datubāze “pielīp” pie interneta

Vairumā zināmo noplūdes gadījumu (šeit, šeit) uzbrucējs piekļuvi datiem ieguva vienkārši un nepretenciozi: datu bāze tika publicēta internetā, un tai bija iespēja pieslēgties bez autentifikācijas.  

Pirmkārt, nodarbosimies ar publicēšanu internetā. Kāpēc tas notiek? Fakts ir tāds, ka elastīgākai Elasticsearch darbībai ieteicams izveidot trīs serveru kopu. Lai datu bāzes varētu sazināties savā starpā, jums ir jāatver porti. Rezultātā administratori nekādi neierobežo piekļuvi datu bāzei, un jūs varat izveidot savienojumu ar datu bāzi no jebkuras vietas. Ir viegli pārbaudīt, vai datu bāze ir pieejama no ārpuses. Vienkārši ievadiet pārlūkprogrammā http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Ja vari iekāpt, tad skrien to aizvērt.

Savienojuma ar datubāzi aizsardzība

Tagad mēs to padarīsim tā, lai nebūtu iespējams izveidot savienojumu ar datu bāzi bez autentifikācijas.

Elasticsearch ir autentifikācijas modulis, kas ierobežo piekļuvi datu bāzei, taču tas ir pieejams tikai maksas X-Pack spraudņu komplektā (1 mēneša bezmaksas izmantošana).

Labā ziņa ir tā, ka 2019. gada rudenī Amazon atklāja savas izstrādes, kas pārklājas ar X-Pack. Autentifikācijas funkcija, pieslēdzoties datu bāzei, ir kļuvusi pieejama ar bezmaksas licenci versijai Elasticsearch 7.3.2, un jau tiek izstrādāts jauns Elasticsearch 7.4.0 laidiens.

Šo spraudni ir viegli instalēt. Dodieties uz servera konsoli un pievienojiet repozitoriju:

Pamatojoties uz RPM:

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

yum update

yum install opendistro-security


Pamatojoties uz DEB:

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

Mijiedarbības iestatīšana starp serveriem, izmantojot SSL

Instalējot spraudni, mainās porta konfigurācija, kas savieno ar datu bāzi. Tas nodrošina SSL šifrēšanu. Lai klasteru serveri turpinātu strādāt viens ar otru, jums ir jākonfigurē mijiedarbība starp tiem, izmantojot SSL.

Uzticību starp resursdatoriem var izveidot ar savu sertifikātu iestādi vai bez tās. Ar pirmo metodi viss ir skaidrs: jums vienkārši jāsazinās ar CA speciālistiem. Pāriesim tieši uz otro.

  1. Izveidojiet mainīgo ar pilnu domēna nosaukumu:

    export DOMAIN_CN="example.com"

  2. Izveidojiet privāto atslēgu:

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

  3. Parakstiet saknes sertifikātu. Saglabājiet to drošībā: ja tas tiek pazaudēts vai apdraudēts, uzticēšanās starp visiem saimniekdatoriem būs jākonfigurē no jauna.

    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. Izveidojiet administratora atslēgu:

    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. Izveidojiet sertifikāta parakstīšanas pieprasījumu:

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

  6. Izveidojiet administratora sertifikātu:

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

  7. Izveidojiet sertifikātus Elasticsearch mezglam:

    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. Izveidojiet paraksta pieprasījumu:

    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. Sertifikāta parakstīšana:

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

  10. Novietojiet sertifikātu starp Elasticsearch mezgliem šādā mapē:

    /etc/elasticsearch/


    mums nepieciešami faili:

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

  11. Pielāgot /etc/elasticsearch/elasticsearch.yml – mainiet failu nosaukumus ar sertifikātiem uz mūsu ģenerētajiem:

    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

Paroļu maiņa iekšējiem lietotājiem

  1. Izmantojot tālāk norādīto komandu, mēs konsolei izvadām paroles jaucējkodu:

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

  2. Mainiet faila jaucējkodu uz saņemto:

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

Ugunsmūra iestatīšana operētājsistēmā

  1. Ļaujiet ugunsmūrim startēt:

    systemctl enable firewalld

  2. Palaidīsim to:

    systemctl start firewalld

  3. Atļaut savienojumu ar Elasticsearch:

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

  4. Atkārtoti ielādējiet ugunsmūra noteikumus:

    firewall-cmd --reload

  5. Šeit ir darba noteikumi:

    firewall-cmd --list-all

Visas mūsu izmaiņas tiek piemērotas Elasticsearch

  1. Izveidojiet mainīgo ar pilnu ceļu uz mapi ar spraudni:

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

  2. Palaidīsim skriptu, kas atjauninās paroles un pārbaudīs iestatījumus:

    ${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. Pārbaudiet, vai izmaiņas ir piemērotas:

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

Tas arī viss, šie ir minimālie iestatījumi, kas aizsargā Elasticsearch no nesankcionētiem savienojumiem.

Avots: www.habr.com

Pievieno komentāru