Kuinka määrittää Elasticsearch vuotojen välttämiseksi

Kuluneen vuoden aikana tietokannoista on vuotanut paljon Elasticsearch (täällä, täällä и täällä). Monissa tapauksissa henkilötietoja on tallennettu tietokantaan. Nämä vuodot olisi voitu välttää, jos järjestelmänvalvojat olisivat vaivautuneet tarkistamaan muutamia yksinkertaisia ​​asetuksia tietokannan käyttöönoton jälkeen. Tänään puhumme niistä.

Tehdään heti varaus, että käytämme käytännössä Elasticsearchia lokien tallentamiseen ja tietoturvatyökalujen, käyttöjärjestelmän ja ohjelmistojen lokien analysointiin IaaS-alustallamme, joka täyttää 152-FZ, Cloud-152 vaatimukset. 

Kuinka määrittää Elasticsearch vuotojen välttämiseksi

Tarkistamme, pysyykö tietokanta Internetissä

Useimmissa tunnetuissa vuototapauksissa (täällä, täällä) hyökkääjä pääsi tietoihin yksinkertaisesti ja vaatimattomasti: tietokanta julkaistiin Internetissä, ja siihen oli mahdollista muodostaa yhteys ilman todennusta.  

Ensin käsitellään Internetissä julkaisemista. Miksi näin tapahtuu? Tosiasia on, että Elasticsearchin joustavampaan toimintaan suositeltava luo kolmen palvelimen klusteri. Jotta tietokannat voivat kommunikoida keskenään, sinun on avattava portit. Tämän seurauksena järjestelmänvalvojat eivät rajoita pääsyä tietokantaan millään tavalla, ja voit muodostaa yhteyden tietokantaan mistä tahansa. On helppo tarkistaa, pääseekö tietokantaan ulkopuolelta. Kirjoita vain selaimeen http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Jos pääset sisään, juokse sulkemaan se.

Suojaa yhteys tietokantaan

Nyt teemme sen niin, että on mahdotonta muodostaa yhteyttä tietokantaan ilman todennusta.

Elasticsearchissa on todennusmoduuli, joka rajoittaa pääsyä tietokantaan, mutta se on saatavilla vain maksullisessa X-Pack-laajennuksessa (1 kuukauden ilmainen käyttö).

Hyvä uutinen on, että syksyllä 2019 Amazon avasi kehitystyönsä, jotka ovat päällekkäisiä X-Packin kanssa. Todennustoiminto tietokantayhteyden yhteydessä on tullut saataville Elasticsearch 7.3.2 -version ilmaisella lisenssillä, ja Elasticsearch 7.4.0:n uusi julkaisu on jo työn alla.

Tämä laajennus on helppo asentaa. Siirry palvelinkonsoliin ja yhdistä arkisto:

RPM-perusteinen:

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

yum update

yum install opendistro-security


DEB-pohjainen:

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

Palvelinten välisen vuorovaikutuksen määrittäminen SSL:n kautta

Lisäosaa asennettaessa tietokantaan yhdistävän portin konfiguraatio muuttuu. Se mahdollistaa SSL-salauksen. Jotta klusteripalvelimet voivat edelleen toimia keskenään, sinun on määritettävä niiden välinen vuorovaikutus SSL:n avulla.

Isäntien välinen luottamus voidaan muodostaa oman varmenneviranomaisen kanssa tai ilman sitä. Ensimmäisellä menetelmällä kaikki on selvää: sinun tarvitsee vain ottaa yhteyttä CA-asiantuntijoihin. Siirrytään suoraan toiseen.

  1. Luo muuttuja koko verkkotunnuksen nimellä:

    export DOMAIN_CN="example.com"

  2. Luo yksityinen avain:

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

  3. Allekirjoita juurisertifikaatti. Pidä se turvassa: jos se katoaa tai vaarantuu, kaikkien isäntien välinen luottamus on määritettävä uudelleen.

    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. Luo järjestelmänvalvojan avain:

    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. Luo pyyntö allekirjoittaa varmenne:

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

  6. Luo järjestelmänvalvojan varmenne:

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

  7. Luo sertifikaatit Elasticsearch-solmulle:

    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. Luo allekirjoituspyyntö:

    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. Varmenteen allekirjoittaminen:

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

  10. Sijoita varmenne Elasticsearch-solmujen väliin seuraavaan kansioon:

    /etc/elasticsearch/


    tarvitsemme tiedostot:

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

  11. Määritetään /etc/elasticsearch/elasticsearch.yml – vaihda varmenteilla varustettujen tiedostojen nimet meidän luomiksi:

    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

Sisäisten käyttäjien salasanojen vaihtaminen

  1. Käytä alla olevaa komentoa, annamme salasanan hajautuskoodin konsoliin:

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

  2. Muuta tiedoston tiiviste vastaanotetuksi:

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

Palomuurin määrittäminen käyttöjärjestelmässä

  1. Anna palomuurin käynnistyä:

    systemctl enable firewalld

  2. Käynnistetään se:

    systemctl start firewalld

  3. Salli yhteys Elasticsearchiin:

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

  4. Lataa palomuurisäännöt uudelleen:

    firewall-cmd --reload

  5. Tässä työsäännöt:

    firewall-cmd --list-all

Otamme kaikki muutokset käyttöön Elasticsearchissa

  1. Luo muuttuja, jossa on kansion koko polku laajennuksen avulla:

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

  2. Suoritetaan skripti, joka päivittää salasanat ja tarkistaa asetukset:

    ${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. Tarkista, onko muutokset otettu käyttöön:

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

Siinä kaikki, nämä ovat vähimmäisasetukset, jotka suojaavat Elasticsearchia luvattomilta yhteyksiltä.

Lähde: will.com

Lisää kommentti