Jak nakonfigurovat Elasticsearch, aby se zabránilo únikům

Za poslední rok došlo k mnoha únikům z databází Elastickýsearch (zde, zde и zde). V mnoha případech byly osobní údaje uloženy v databázi. Těmto únikům se dalo předejít, kdyby se po nasazení databáze správci obtěžovali zkontrolovat pár jednoduchých nastavení. Dnes si o nich povíme.

Okamžitě si udělejme rezervaci, že v naší praxi používáme Elasticsearch k ukládání protokolů a analýze protokolů nástrojů pro bezpečnost informací, OS a softwaru v naší platformě IaaS, která splňuje požadavky 152-FZ, Cloud-152. 

Jak nakonfigurovat Elasticsearch, aby se zabránilo únikům

Zkontrolujeme, zda databáze „vyčnívá“ z internetu

Ve většině známých případů úniků (zde, zde) útočník získal přístup k datům jednoduše a nenáročně: databáze byla zveřejněna na internetu a bylo možné se k ní připojit bez autentizace.  

Nejprve se budeme zabývat publikováním na internetu. Proč se to děje? Faktem je, že pro flexibilnější provoz Elasticsearch je doporučeno vytvořit cluster tří serverů. Aby spolu databáze komunikovaly, musíte otevřít porty. Díky tomu administrátoři nijak neomezují přístup k databázi a k ​​databázi se můžete připojit odkudkoliv. Je snadné zkontrolovat, zda je databáze přístupná zvenčí. Stačí zadat v prohlížeči http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Pokud se můžete dostat dovnitř, běžte to zavřít.

Ochrana připojení k databázi

Nyní to uděláme tak, že se nebude možné připojit k databázi bez ověření.

Elasticsearch má autentizační modul, který omezuje přístup k databázi, ale je k dispozici pouze v placené sadě pluginů X-Pack (1 měsíc používání zdarma).

Dobrou zprávou je, že na podzim roku 2019 Amazon otevřel svůj vývoj, který se překrývá s X-Pack. Funkce ověřování při připojování k databázi je dostupná pod bezplatnou licencí pro verzi Elasticsearch 7.3.2 a nové vydání pro Elasticsearch 7.4.0 se již připravuje.

Tento plugin se snadno instaluje. Přejděte do konzoly serveru a připojte úložiště:

Na základě 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ákladě DEB:

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

Nastavení interakce mezi servery přes SSL

Při instalaci pluginu se změní konfigurace portu připojujícího se k databázi. Umožňuje šifrování SSL. Aby klastrové servery mohly nadále vzájemně spolupracovat, musíte mezi nimi nakonfigurovat interakci pomocí SSL.

Důvěru mezi hostiteli lze vytvořit s vlastní certifikační autoritou nebo bez ní. U první metody je vše jasné: stačí kontaktovat specialisty CA. Přejděme rovnou k druhému.

  1. Vytvořte proměnnou s celým názvem domény:

    export DOMAIN_CN="example.com"

  2. Vytvořte soukromý klíč:

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

  3. Podepište kořenový certifikát. Udržujte to v bezpečí: pokud dojde ke ztrátě nebo kompromitaci, bude nutné znovu nakonfigurovat důvěru mezi všemi hostiteli.

    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. Vytvořte klíč správce:

    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. Vytvořte žádost 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. Vytvořte certifikát správce:

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

  7. Vytvořte certifikáty pro uzel 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. Vytvořte žádost 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. Podepsání certifikátu:

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

  10. Umístěte certifikát mezi uzly Elasticsearch v následující složce:

    /etc/elasticsearch/


    potřebujeme soubory:

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

  11. Konfigurace /etc/elasticsearch/elasticsearch.yml – změnit názvy souborů s certifikáty na ty, které jsme 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

Změna hesel pro interní uživatele

  1. Pomocí níže uvedeného příkazu vydáme hash hesla do konzole:

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

  2. Změňte hash v souboru na přijatý:

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

Nastavení firewallu v OS

  1. Povolte spuštění brány firewall:

    systemctl enable firewalld

  2. Pojďme to spustit:

    systemctl start firewalld

  3. Povolit připojení k Elasticsearch:

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

  4. Znovu načtěte pravidla brány firewall:

    firewall-cmd --reload

  5. Zde jsou pracovní pravidla:

    firewall-cmd --list-all

Aplikujeme všechny naše změny na Elasticsearch

  1. Vytvořte proměnnou s úplnou cestou ke složce s pluginem:

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

  2. Spusťte skript, který aktualizuje hesla a zkontroluje nastavení:

    ${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. Zkontrolujte, zda byly změny použity:

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

To je vše, toto jsou minimální nastavení, která chrání Elasticsearch před neoprávněným připojením.

Zdroj: www.habr.com

Přidat komentář