Ako nakonfigurovať Elasticsearch, aby ste sa vyhli únikom

Za posledný rok došlo k mnohým únikom databáz. ElasticSearch (tu, tu и tu). V mnohých prípadoch databáza obsahovala osobné údaje. Týmto únikom sa dalo vyhnúť, keby si administrátori po nasadení databázy našli čas na kontrolu niekoľkých jednoduchých nastavení. Dnes si ich preberieme.

Hneď si ujasnime, že v našej praxi používame Elasticsearch na ukladanie a analýzu protokolov pre nástroje informačnej bezpečnosti, operačné systémy a softvér v našej platforme IaaS Cloud-152, ktorá spĺňa požiadavky federálneho zákona č. 152. 

Ako nakonfigurovať Elasticsearch, aby ste sa vyhli únikom

Skontrolujeme, či databáza „vyčnieva“ z internetu

Vo väčšine známych prípadov úniku (tu, tu) Útočník získal prístup k údajom jednoducho a ľahko: databáza bola zverejnená na internete a bolo k nej možné pristupovať bez overovania.  

Najprv sa pozrime na publikovanie na webe. Prečo sa to deje? Elasticsearch je navrhnutý pre flexibilnejšiu prevádzku. odporúča Vytvorte klaster troch serverov. Aby databázy mohli navzájom komunikovať, je potrebné otvoriť porty. Vďaka tomu administrátori nijako neobmedzujú prístup k databáze a vy sa k nej môžete pripojiť odkiaľkoľvek. Kontrola externého prístupu k databáze je jednoduchá. Stačí zadať [nejasné] do prehliadača. http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Ak sa vám podarí dostať dnu, musíte bežať a zavrieť ho.

Zabezpečenie pripojenia k databáze

Teraz to nastavme tak, aby nebolo možné pripojiť sa k databáze bez autentifikácie.

Elasticsearch má autentifikačný modul, ktorý obmedzuje prístup k databáze, ale je dostupný iba v platenej sade pluginov X-Pack (1 mesiac zadarmo).

Dobrou správou je, že na jeseň 2019 spoločnosť Amazon sprístupnila svoju prácu, ktorá sa prekrýva s X-Packom, ako otvorený zdrojový kód. Funkcia autentifikácie databázy sa stala dostupnou pod otvorenou licenciou pre Elasticsearch 7.3.2 a nová verzia pre Elasticsearch 7.4.0 sa už pripravuje.

Inštalácia tohto pluginu je jednoduchá. Stačí prejsť do konzoly servera a pripojiť sa k repozitáru:

Na základe RPM:

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

yum update

yum install opendistro-security


Na základe DEB:

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

Nastavenie komunikácie medzi servermi cez SSL

Pri inštalácii doplnku sa zmení konfigurácia portu pre pripojenie k databáze. Je na ňom povolené šifrovanie SSL. Aby ste zabezpečili, že klastrové servery môžu medzi sebou naďalej komunikovať, musíte nakonfigurovať komunikáciu medzi nimi pomocou SSL.

Dôveru medzi hostiteľmi je možné nadviazať s vlastnou certifikačnou autoritou alebo bez nej. Prvá metóda je jednoduchá: stačí kontaktovať špecialistu na certifikačnú autoritu. Prejdime k druhej.

  1. Vytvorme premennú s celým názvom domény:

    export DOMAIN_CN="example.com"

  2. Vytvorte si súkromný kľúč:

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

  3. Podpíšeme koreňový certifikát. Uchovávame ho v bezpečí: ak sa stratí alebo je zneužitý, 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. Vytvorte si administrátorský kľúč:

    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. Vytvorme si požiadavku na 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. Vytvorte certifikát správcu:

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

  7. Vytvorte 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. Vytvorme ž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. Certifikát umiestnime medzi uzly Elasticsearch v priečinku:

    /etc/elasticsearch/


    Budeme potrebovať nasledujúce súbory:

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

  11. Konfigurácia /etc/elasticsearch/elasticsearch.yml – zmeníme názvy súborov s certifikátmi na tie, ktoré sme vygenerovali:

    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

Zmena hesiel pre interných používateľov

  1. Pomocou nasledujúceho príkazu vypíšeme hash hesla do konzoly:

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

  2. Zmeníme hash v súbore na prijatý:

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

Konfigurácia firewallu v operačnom systéme

  1. Povoliť spustenie firewallu:

    systemctl enable firewalld

  2. Spustime to:

    systemctl start firewalld

  3. Povoliť pripojenie k Elasticsearch:

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

  4. Znovu načítajte pravidlá brány firewall:

    firewall-cmd --reload

  5. Vyvodzujeme pracovné pravidlá:

    firewall-cmd --list-all

Aplikovanie všetkých našich zmien do Elasticsearch

  1. Vytvorte premennú s úplnou cestou k priečinku s pluginom:

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

  2. Spustime 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. Skontrolujme, či sa zmeny uplatnili:

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

To je všetko, toto sú minimálne nastavenia, ktoré zabraňujú neoprávnenému pripojeniu k Elasticsearch.

Zdroj: hab.com

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