Ako nastaviť Elasticsearch, aby nedochádzalo k únikom

V uplynulom roku došlo k mnohým únikom z databáz Elasticsearch (tu, tu a tu). Vo veľa prípadoch sa v databázach uchovávali osobné údaje. Týmto únikom by sa dalo predísť, keby po nasadení databáz administrátori venovali pozornosť niekoľkým jednoduchým nastaveniam. Dnes sa o nich porozprávame.

Hneď na úvod si ujasníme, že vo svojej praxi používame Elasticsearch na uchovávanie logov a analýzu protokolov ochranných prostriedkov, operačných systémov a softvéru na našej platforme IaaS, ktorá spĺňa požiadavky 152-FZ, Cloud-152. 

Ako nastaviť Elasticsearch, aby nedochádzalo k únikom

Kontrolujeme, či databáza nie je prístupná na internete

Vo väčšine známych prípadov únikov (tu, tu) sa útočník k údajom dostal jednoducho a bez námahy: databáza bola publikovaná na internete a bolo možné sa k nej pripojiť bez autentifikácie.  

Najprv si objasníme publikovanie na internete. Prečo sa to deje? Ide o to, že na flexibilnejšiu prácu s Elasticsearch odporúča sa je potreba vytvoriť cluster zo troch serverov. Aby si databázy medzi sebou mohli komunikovať, je potrebné otvoriť porty. Výsledkom je, že administrátori nijako neobmedzujú prístup k databáze a k databázam sa dá pripojiť odkiaľkoľvek. Skontrolovať, či je k databáze prístup zvonku, je jednoduché. Stačí do prehliadača zadať http://[IP/názov Elasticsearch]:9200/_cat/nodes?v

Ak sa dá prihlásiť, tak rýchlo zatvorte prístup.

Chráňte pripojenie k databáze

Teraz to nastavíme tak, aby sa k databáze nedalo pripojiť bez autentifikácie.

Elasticsearch má autentifikačný modul, ktorý obmedzuje prístup k databáze, ale je len v platenom balíku pluginov X-Pack (1 mesiac bezplatného používania).

Dobrá správa je, že na jeseň 2019 Amazon uvoľnil svoje vývojové práce, ktoré sa prekrývajú s X-Pack. Funkcia autentifikácie pri pripojení k databáze sa stala dostupnou pod voľnou licenciou pre verziu Elasticsearch 7.3.2, a nový release pre Elasticsearch 7.4.0 už je v práci.

Inštalácia tohto pluginu je jednoduchá. Prejdeme na konzolu servera a pripojíme repozitár:

RPM Based:

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

yum update

yum install opendistro-security


DEB Based:

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

Nastavujeme interakciu medzi servermi cez SSL

Pri inštalácii pluginu sa mení konfigurácia portu pripojenia k databáze. Na ňom sa aktivuje šifrovanie SSL. Aby servery klastra mohli naďalej spolupracovať, je potrebné nastaviť interakciu medzi nimi pomocou SSL.

Dôveru medzi hostiteľmi je možné ustanoviť pomocou vlastného certifikačného úradu alebo bez neho. Pri prvej možnosti je všetko jasné: stačí sa obrátiť na odborníkov na CA. Prejdime priamo k druhej.

  1. Vytvárame premennú s úplným menom domény:

    export DOMAIN_CN="example.com"

  2. Vytvárame súkromný kľúč:

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

  3. Podpisujeme koreňový certifikát. Ukladajte ho ako oko v hlave: pri jeho strate alebo kompromitácii bude potrebné prekonfigurovať dôveru medzi všetkými hostiteľmi.

    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. Vytvárame kľúč administrátora:

    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. Vytvárame žiadosť o podpis certifikátu:

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

  6. Vytvárame certifikát administrátora:

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

  7. Vytvárame certifikáty pre uzol Elasticsearch:

    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. Vytvárame žiadosť o podpis:

    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. Podpisujeme certifikát:

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

  10. Rozdeľujeme certifikát medzi uzlami Elasticsearch do zložky:

    /etc/elasticsearch/


    budeme potrebovať súbory:

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

  11. Nastavujeme /etc/elasticsearch/elasticsearch.yml – meníme názvy súborov s certifikátmi na vygenerované nami:

    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

Meníme heslá interných používateľov

  1. Pomocou nižšie uvedeného príkazu vypíšeme hash hesla do konzoly:

    sh ${OD_SEC}/tools/hash.sh -p [heslo]

  2. Meníme hash v súbore na získaný:

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

Nastavujeme firewall v OS

  1. Povoľujeme spustenie firewalu:

    systemctl enable firewalld

  2. Spúšťame ho:

    systemctl start firewalld

  3. Povoľujeme pripojenie k Elasticsearch:

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

  4. Reštartujeme pravidlá firewalu:

    firewall-cmd --reload

  5. Zobrazujeme aktívne pravidlá:

    firewall-cmd --list-all

Aplikujeme všetky naše zmeny do Elasticsearch

  1. Vytvárame premennú s kompletnou cestou k priečinku s pluginom:

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

  2. Spúšťame skript, ktorý aktualizuje heslá a skontroluje nastavenia:

    ${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. Kontrolujeme, či sa zmeny uplatnili:

    curl -XGET https://[IP/Meno Elasticsearch]:9200/_cat/nodes?v -u admin:[heslo] --insecure

To je všetko, to sú minimálne nastavenia, ktoré chránia Elasticsearch pred neoprávneným pripojením.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster