Sådan konfigureres Elasticsearch for at undgå lækager

Det seneste år har der været mange læk fra databaser Elasticsearch (her, her и her). I mange tilfælde blev personoplysninger gemt i databasen. Disse lækager kunne have været undgået, hvis administratorerne, efter at have installeret databasen, havde besværet sig med at kontrollere nogle få simple indstillinger. I dag vil vi tale om dem.

Lad os straks tage forbehold for, at vi i vores praksis bruger Elasticsearch til at gemme logfiler og analysere logfiler af informationssikkerhedsværktøjer, OS og software i vores IaaS-platform, som overholder kravene i 152-FZ, Cloud-152. 

Sådan konfigureres Elasticsearch for at undgå lækager

Vi tjekker om databasen "stikker ud" til internettet

I de fleste kendte tilfælde af lækager (her, her) angriberen fik adgang til dataene enkelt og uhøjtideligt: ​​databasen blev offentliggjort på internettet, og det var muligt at oprette forbindelse til den uden godkendelse.  

Lad os først beskæftige os med publicering på internettet. Hvorfor sker dette? Faktum er, at for mere fleksibel drift af Elasticsearch anbefales oprette en klynge af tre servere. For at databaserne kan kommunikere med hinanden, skal du åbne porte. Som et resultat begrænser administratorer ikke adgangen til databasen på nogen måde, og du kan oprette forbindelse til databasen hvor som helst. Det er nemt at kontrollere, om databasen er tilgængelig udefra. Bare indtast i browseren http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Hvis du kan komme ind, så løb for at lukke den.

Beskyttelse af forbindelsen til databasen

Nu vil vi gøre det, så det er umuligt at oprette forbindelse til databasen uden godkendelse.

Elasticsearch har et autentificeringsmodul, der begrænser adgangen til databasen, men det er kun tilgængeligt i det betalte X-Pack plugin sæt (1 måned gratis brug).

Den gode nyhed er, at Amazon i efteråret 2019 åbnede sine udviklinger, som overlapper med X-Pack. Godkendelsesfunktionen ved tilslutning til en database er blevet tilgængelig under en gratis licens til version Elasticsearch 7.3.2, og en ny udgivelse til Elasticsearch 7.4.0 er allerede på vej.

Dette plugin er nemt at installere. Gå til serverkonsollen og tilslut lageret:

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 plugin'et installeres, ændres konfigurationen af ​​den port, der forbinder til databasen. Det muliggør SSL-kryptering. For at klyngeserverne kan fortsætte med at arbejde med hinanden, skal du konfigurere interaktion mellem dem ved hjælp af SSL.

Tillid mellem værter kan etableres med eller uden deres egen certifikatmyndighed. Med den første metode er alt klart: du skal bare kontakte CA-specialister. Lad os gå direkte 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. Hold det sikkert: Hvis det går tabt eller kompromitteret, 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 signaturanmodning:

    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. Underskrivelse af certifikatet:

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

  10. Placer certifikatet mellem Elasticsearch-noder i følgende mappe:

    /etc/elasticsearch/


    vi har brug for filerne:

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

  11. Sætte op /etc/elasticsearch/elasticsearch.yml – ændre navnet på filerne med certifikater til dem, der er genereret af os:

    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 at bruge kommandoen nedenfor udsender vi adgangskodehashen til konsollen:

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

  2. Skift 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 starte:

    systemctl enable firewalld

  2. Lad os starte 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 firewall-reglerne:

    firewall-cmd --reload

  5. Her er arbejdsreglerne:

    firewall-cmd --list-all

Anvender alle vores ændringer på Elasticsearch

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

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

  2. Lad os køre 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. Tjek, om ændringerne er blevet anvendt:

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

Det er alt, disse er minimumsindstillingerne, der beskytter Elasticsearch mod uautoriserede forbindelser.

Kilde: www.habr.com

Tilføj en kommentar