Sådan konfigurerer du Elasticsearch for at undgå lækager

Der har været mange databaselækager i løbet af det seneste år. Elasticsearch (her, her и her). I mange tilfælde indeholdt databasen personoplysninger. Disse lækager kunne have været undgået, hvis administratorerne havde gjort sig ulejligheden med at kontrollere et par enkle indstillinger efter implementering af databasen. Vi vil tale om dem i dag.

Lad os straks slå fast, at vi i vores praksis bruger Elasticsearch til at gemme logs og analysere logs af informationssikkerhedsværktøjer, operativsystemer og software i vores IaaS-platform, hvilket overholder kravene i Federal Law 152, Cloud-152. 

Sådan konfigurerer du Elasticsearch for at undgå lækager

Vi tjekker, om databasen "stikker ud" på internettet

I de fleste kendte lækagetilfælde (her, her) angriberen fik enkelt og nemt adgang til dataene: databasen var offentliggjort på internettet, og der kunne oprettes forbindelse til den uden godkendelse.  

Lad os først se på publicering på internettet. Hvorfor sker dette? Sagen er, at Elasticsearch for mere fleksibelt arbejde anbefales Opret en klynge af tre servere. For at databaserne kan kommunikere med hinanden, skal porte åbnes. Som følge heraf begrænser administratorer ikke adgangen til databasen på nogen måde, og du kan oprette forbindelse til databasen hvor som helst fra. Det er nemt at kontrollere, om der er adgang til databasen udefra. Bare indtast i browseren. http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Hvis du kommer ind, skal du løbe og lukke den.

Beskyttelse af forbindelsen til databasen

Lad os nu gøre det umuligt at oprette forbindelse til databasen uden godkendelse.

Elasticsearch har et godkendelsesmodul, der begrænser adgangen til databasen, men det findes kun i det betalte X-Pack plugin-sæt (1 måneds gratis brug).

Den gode nyhed er, at Amazon i efteråret 2019 åbnede op for sine udviklinger, der overlapper med X-Pack. Godkendelsesfunktionen ved forbindelse til databasen blev tilgængelig under en gratis licens til Elasticsearch 7.3.2, og en ny udgivelse til Elasticsearch 7.4.0 er allerede under udvikling.

Dette plugin er nemt at installere. Gå til serverkonsollen og forbind repository'et:

RPM-baseret:

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

yum update

yum install opendistro-security


DEB-baseret:

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

Opsætning af interaktion mellem servere via SSL

Når du installerer plugin'et, ændres konfigurationen af ​​databaseforbindelsesporten. SSL-kryptering er aktiveret på den. For at klyngeserverne kan fortsætte med at arbejde sammen, skal du konfigurere interaktionen mellem dem ved hjælp af SSL.

Tillid mellem værter kan etableres med eller uden dit eget certificeringscenter. Den første metode er ligetil: du skal blot kontakte CA-specialister. Lad os gå videre til den anden.

  1. Opret en variabel med det fulde domænenavn:

    export DOMAIN_CN="example.com"

  2. Opret en privat nøgle:

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

  3. Underskriv rodcertifikatet. Behold det som din øjesten: Hvis det går tabt eller kompromitteres, skal tilliden mellem alle værter omkonfigureres.

    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. Opret en administratornøgle:

    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. Opret en anmodning om at underskrive certifikatet:

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

  6. Opret et administratorcertifikat:

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

  7. Opret certifikater til Elasticsearch-noden:

    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. Opret en underskriftsanmodning:

    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. Vi underskriver certifikatet:

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

  10. Vi placerer certifikatet mellem Elasticsearch-noderne i mappen:

    /etc/elasticsearch/


    Vi skal bruge følgende filer:

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

  11. Sætte op /etc/elasticsearch/elasticsearch.yml – vi ændrer navnet på filerne med certifikater til dem, vi genererer:

    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

Ændring af adgangskoder for interne brugere

  1. Ved hjælp af kommandoen nedenfor sender vi adgangskoden hash til konsollen:

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

  2. Vi ændrer hashen i filen til den modtagne:

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

Opsætning af en firewall i operativsystemet

  1. Tillad firewallen at køre:

    systemctl enable firewalld

  2. Lad os lancere det:

    systemctl start firewalld

  3. Tillad forbindelse til Elasticsearch:

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

  4. Genindlæs firewallreglerne:

    firewall-cmd --reload

  5. Vi udleder arbejdsreglerne:

    firewall-cmd --list-all

Anvend alle vores ændringer på Elasticsearch

  1. Opret en variabel med den fulde sti til mappen med plugin'et:

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

  2. Vi kører et script, der opdaterer adgangskoder og kontrollerer indstillinger:

    ${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. Lad os kontrollere, om ændringerne er blevet anvendt:

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

Det var det, dette er minimumsindstillingerne, der lukker Elasticsearch fra uautoriserede forbindelser.

Kilde: www.habr.com

Køb pålidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster