Hoe Elasticsearch in te stellen om lekken te voorkomen

In het afgelopen jaar zijn er veel datalekken uit databases ontstaan. Elasticsearch (hier is, hier is en hier is). In veel gevallen bevonden zich persoonlijke gegevens in de database. Deze datalekken hadden voorkomen kunnen worden indien de beheerders na de implementatie van de database enkele eenvoudige instellingen hadden gecontroleerd. Vandaag bespreken we deze instellingen.

Laten we vooraf duidelijk maken dat we in onze praktijk Elasticsearch gebruiken voor het opslaan van logs en het analyseren van logboeken van informatiebeveiligingsmiddelen, besturingssystemen en software op ons IaaS-platform, dat voldoet aan de eisen van de 152-FZ, Cloud-152.Ā 

Hoe Elasticsearch in te stellen om lekken te voorkomen

We controleren of de database niet toegankelijk is via internet.

In de meeste bekende gevallen van datalekken (hier is, hier is) had de aanvaller eenvoudig toegang tot de gegevens: de database was openbaar gemaakt op internet en was zonder authenticatie bereikbaar.Ā Ā 

Laten we eerst de publicatie op internet bespreken. Hoe gebeurt dit? Het probleem is dat er voor een flexibeler gebruik van Elasticsearch is het aanbevolen een cluster van drie servers moet worden aangemaakt. Om ervoor te zorgen dat de databases met elkaar kunnen communiceren, moeten poorten worden geopend. Als gevolg hiervan beperken beheerders de toegang tot de database niet, waardoor deze vanaf elke locatie toegankelijk is. Het is eenvoudig te controleren of er externe toegang tot de database is. Voer gewoon in de browser in: http://[IP/Naam Elasticsearch]:9200/_cat/nodes?v

Als je toegang hebt, sluit deze dan onmiddellijk af.

Beveilig de verbinding met de database.

Laten we ervoor zorgen dat de database niet zonder authenticatie toegankelijk is.

Elasticsearch heeft een authentificatiewerkgelegenheid die de toegang tot de database beperkt, maar deze is alleen beschikbaar in het commerciƫle plug-inpakket X-Pack (1 maand gratis gebruik).

Het goede nieuws is dat Amazon in de herfst van 2019 zijn ontwikkelingen heeft vrijgegeven, die samenhangen met X-Pack. De functie voor authenticatie bij verbinding met de database is beschikbaar gekomen onder een gratis licentie voor versie Elasticsearch 7.3.2, en er is al een nieuwe release in de maak voor Elasticsearch 7.4.0.

Deze plug-in wordt eenvoudig geĆÆnstalleerd. Ga naar de serverconsole en voeg de repository toe:

RPM-gebaseerd:

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

yum update

yum install opendistro-security


DEB-gebaseerd:

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

Stel de interactie tussen servers in via SSL.

Bij de installatie van de plugin verandert de configuratie van de verbindingpoort naar de database. SSL-encryptie wordt geactiveerd. Om ervoor te zorgen dat de clusterservers met elkaar blijven samenwerken, moet de interactie tussen hen via SSL worden ingesteld.

Vertrouwen tussen hosts kan worden vastgesteld met behulp van een eigen certificeringsautoriteit of zonder. De eerste optie is duidelijk: je moet gewoon contact opnemen met CA-specialisten. Laten we meteen naar de tweede optie gaan.

  1. We creƫren een variabele voor de volledige domeinnaam:

    export DOMAIN_CN="example.com"

  2. We creƫren een privƩ-sleutel:

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

  3. We ondertekenen het rootcertificaat. Bewaar het als een kostbaar bezit: bij verlies of compromittering moet het vertrouwen tussen alle hosts opnieuw worden ingesteld.

    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. We creƫren een beheerderssleutel:

    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. We creƫren een verzoek voor het ondertekenen van het certificaat:

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

  6. We creƫren het beheerderscertificaat:

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

  7. We creƫren certificaten voor de Elasticsearch-node:

    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. We creƫren een verzoek om te ondertekenen:

    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. We ondertekenen het certificaat:

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

  10. We leggen het certificaat tussen de Elasticsearch-nodes in de map:

    /etc/elasticsearch/


    we hebben de volgende bestanden nodig:

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

  11. We configureren /etc/elasticsearch/elasticsearch.yml – we wijzigen de bestandsnamen van de certificaten naar diegene die we hebben gegenereerd:

    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

We wijzigen de wachtwoorden van interne gebruikers

  1. Met het onderstaande commando geven we de hash van het wachtwoord weer in de console:

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

  2. We wijzigen de hash in het bestand naar de verkregen:

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

We stellen de firewall in op het besturingssysteem

  1. We staan de uitvoering van de firewall toe:

    systemctl enable firewalld

  2. We starten het:

    systemctl start firewalld

  3. We staan verbinding met Elasticsearch toe:

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

  4. We herladen de firewallregels:

    firewall-cmd --reload

  5. We tonen de werkende regels:

    firewall-cmd --list-all

We passen al onze wijzigingen toe op Elasticsearch

  1. We maken een variabele met het volledige pad naar de map met de plugin:

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

  2. We starten het script dat de wachtwoorden zal bijwerken en de instellingen zal controleren:

    ${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. We controleren of de wijzigingen zijn toegepast:

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

Dat zijn de minimale instellingen die Elasticsearch beschermen tegen ongeautoriseerde toegang.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster