Hoe Elasticsearch te configureren om lekken te voorkomen

Het afgelopen jaar zijn er veel lekken uit databases geweest Elasticsearch (hier, hier и hier). In veel gevallen werden persoonsgegevens in de database opgeslagen. Deze lekken hadden voorkomen kunnen worden als de beheerders na het implementeren van de database de moeite hadden genomen een paar eenvoudige instellingen te controleren. Vandaag zullen we erover praten.

Laten we meteen een voorbehoud maken dat we in onze praktijk Elasticsearch gebruiken om logs op te slaan en logs van informatiebeveiligingstools, OS en software te analyseren in ons IaaS-platform, dat voldoet aan de eisen van 152-FZ, Cloud-152. 

Hoe Elasticsearch te configureren om lekken te voorkomen

We controleren of de database ‘opvalt’ op internet

In de meeste bekende gevallen van lekkage (hier, hier) kreeg de aanvaller op eenvoudige en pretentieloze wijze toegang tot de gegevens: de database werd op internet gepubliceerd en het was mogelijk om er zonder authenticatie verbinding mee te maken.  

Laten we eerst eens kijken naar het publiceren op internet. Waarom gebeurt dit? Feit is dat voor een flexibelere werking van Elasticsearch aanbevolen maak een cluster van drie servers. Om de databases met elkaar te laten communiceren, moet u poorten openen. Hierdoor beperken beheerders op geen enkele manier de toegang tot de database en kunt u overal verbinding maken met de database. U kunt eenvoudig controleren of de database van buitenaf toegankelijk is. Voer het gewoon in de browser in http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Als je erin kunt komen, ren dan om het te sluiten.

Beveiliging van de verbinding met de database

Nu gaan we ervoor zorgen dat het onmogelijk is om zonder authenticatie verbinding te maken met de database.

Elasticsearch beschikt over een authenticatiemodule die de toegang tot de database beperkt, maar is alleen beschikbaar in de betaalde X-Pack plugin set (1 maand gratis gebruik).

Het goede nieuws is dat Amazon in het najaar van 2019 zijn ontwikkelingen opende, die overlappen met X-Pack. De authenticatiefunctie bij het verbinden met een database is beschikbaar gekomen onder een gratis licentie voor versie Elasticsearch 7.3.2, en een nieuwe release voor Elasticsearch 7.4.0 is al in de maak.

Deze plug-in is eenvoudig te installeren. Ga naar de serverconsole en sluit de repository aan:

Op basis van toerental:

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 -

Interactie tussen servers instellen via SSL

Wanneer u de plug-in installeert, verandert de configuratie van de poort die verbinding maakt met de database. Het maakt SSL-codering mogelijk. Om ervoor te zorgen dat de clusterservers met elkaar kunnen blijven samenwerken, moet u de interactie tussen de servers configureren met behulp van SSL.

Vertrouwen tussen hosts kan tot stand worden gebracht met of zonder een eigen certificeringsinstantie. Bij de eerste methode is alles duidelijk: u hoeft alleen maar contact op te nemen met CA-specialisten. Laten we meteen naar de tweede gaan.

  1. Maak een variabele met de volledige domeinnaam:

    export DOMAIN_CN="example.com"

  2. Maak een privésleutel:

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

  3. Onderteken het rootcertificaat. Houd het veilig: als het verloren gaat of in gevaar komt, moet het vertrouwen tussen alle hosts opnieuw worden geconfigureerd.

    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. Maak 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. Maak een verzoek om het certificaat te ondertekenen:

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

  6. Maak een beheerderscertificaat aan:

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

  7. Maak certificaten voor het Elasticsearch-knooppunt:

    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. Maak een handtekeningverzoek aan:

    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. Ondertekening van het certificaat:

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

  10. Plaats het certificaat tussen Elasticsearch-knooppunten in de volgende map:

    /etc/elasticsearch/


    we hebben de bestanden nodig:

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

  11. Opzetten /etc/elasticsearch/elasticsearch.yml – wijzig de naam van de bestanden met certificaten naar de bestanden die door ons zijn 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

Wachtwoorden wijzigen voor interne gebruikers

  1. Met behulp van de onderstaande opdracht voeren we de wachtwoord-hash uit naar de console:

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

  2. Verander de hash in het bestand naar de ontvangen hash:

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

Een firewall instellen in het besturingssysteem

  1. Laat de firewall starten:

    systemctl enable firewalld

  2. Laten we het lanceren:

    systemctl start firewalld

  3. Verbinding met Elasticsearch toestaan:

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

  4. Laad de firewallregels opnieuw:

    firewall-cmd --reload

  5. Dit zijn de werkregels:

    firewall-cmd --list-all

Al onze wijzigingen toepassen op Elasticsearch

  1. Maak een variabele met het volledige pad naar de map met de plug-in:

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

  2. Laten we een script uitvoeren dat wachtwoorden bijwerkt en instellingen controleert:

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

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

Dat is alles, dit zijn de minimale instellingen die Elasticsearch beschermen tegen ongeautoriseerde verbindingen.

Bron: www.habr.com

Voeg een reactie