Kuidas seadistada Elasticsearch, et lekkeid ei tekiks

Viimase aasta jooksul on ilmunud palju andmelekkeid. Elasticsearch (siin on, siin on ja siin on). Paljudes juhtumites olid andmebaasis isikuandmed. Nende lekkide vastu oleks olnud võimalik kaitsta, kui administraatorid oleks pärast andmebaasi käivitamist kontrolle teinud mõningate lihtsate seadistuste suhtes. Räägime neist täna.

Koheselt olgem selged, et oma praktikas kasutame Elasticsearchi logide salvestamiseks ja infotehnoloogia, operatsioonisüsteemide ning tarkvara päevikute analüüsimiseks meie IaaS-platvormil, mis vastab 152-FZ nõuetele, Cloud-152. 

Kuidas seadistada Elasticsearch, et lekkeid ei tekiks

Kontrollime, kas andmebaas pole internetis avatud.

Tuntud lekke juhtumite enamuses (siin on, siin on) sai kurjategija andmetele juurdepääsu lihtsalt ja vaevata: andmebaas avaldati internetis ning sellele sai ühenduda ilma autentimiseta.  

Alustame internetis avaldamise küsimusest. Miks see juhtub? Asi on selles, et Elasticsearchi paindlikuma töö jaoks soovitatakse loob kolme serveri klastri. Et andmebaasid saaksid omavahel suhelda, tuleb avada pordid. Lõpuks ei piira administraatorid juurdepääsu andmebaasile ning sellele saab ühenduda igal pool. On lihtne kontrollida, kas andmebaasile on väljastpoolt juurdepääs. Lihtsalt sisestage brauserisse http://[IP/Elasticsearchi nimi]:9200/_cat/nodes?v

Kui sa saad sisse logida, siis tuleb kindlasti see sulgeda.

Kaitseme andmebaasi ühendust.

Teeme nüüd nii, et andmebaasile ei saa juurde pääseda ilma autentimiseta.

Elasticsearchil on autentimise moodul, mis piirab juurdepääsu andmebaasile, kuid see on saadaval ainult tasulises X-Pack pluginakomplektis (1 kuu tasuta kasutamist).

Hea uudis on see, et 2019. aasta sügisel avas Amazon oma arendused, mis kattuvad X-Packiga. Andmebaasi ühendamisel autentimise funktsioon sai kätte tasuta litsentsiga Elasticsearchi versioonile 7.3.2 ning juba on töös uus väljaanne Elasticsearch 7.4.0 jaoks.

Selle pluginaga on lihtne tegutseda. Siseneme serveri konsooli ja ühendame hoidla:

RPM-põhine:

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

yum update

yum install opendistro-security


DEB-põhine:

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

Seame serverite vahelise suhtluse SSL-i kaudu

Plugin installation changes the database connection port configuration. SSL encryption is enabled on it. To ensure that the cluster servers continue to work together, it is necessary to configure their interaction using SSL.

Trust between hosts can be established with or without a private certificate authority. The first method is straightforward: just consult CA specialists. Let's move on to the second.

  1. We create a variable with the full domain name:

    export DOMAIN_CN="example.com"

  2. We create a private key:

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

  3. We sign the root certificate. Keep it close to your heart: if it is lost or compromised, trust between all hosts will need to be reconfigured.

    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 create an administrator key:

    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 create a certificate signing request:

    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 create the administrator certificate:

    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 create certificates for the 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 create a signing request:

    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 sign the certificate:

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

  10. We distribute the certificate between the Elasticsearch nodes into the folder:

    /etc/elasticsearch/


    We will need the following files:

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

  11. Seame üles /etc/elasticsearch/elasticsearch.yml – we rename the certificate files to those generated by us:

    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

Muudame sisemiste kasutajate paroolid

  1. Käesoleva käsuga prindime parooli räsi konsooli:

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

  2. Muudame faili räsi saadud väärtusega:

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

Seame tulemüüri operatsioonisüsteemis

  1. Lubame tulemüüri käivitamise:

    systemctl enable firewalld

  2. Käivitame selle:

    systemctl start firewalld

  3. Lubame ühenduse Elasticsearchiga:

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

  4. Taaskäivitame tulemüüri reeglid:

    firewall-cmd --reload

  5. Kuvame töötavad reeglid:

    firewall-cmd --list-all

Rakendame kõik meie muudatused Elasticsearchile

  1. Loome muutujat, millel on täielik tee plugini kaustani:

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

  2. Käivitame skripti, mis värskendab paroole ja kontrollib seadeid:

    ${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. Kontrollime, kas muudatused on rakendatud:

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

Kõik, need on minimaalsed seaded, mis kaitsevad Elasticsearchi volitamata ühenduse eest.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster