Viimase aasta jooksul on ilmunud palju andmelekkeid. (, ja ). 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.

Kontrollime, kas andmebaas pole internetis avatud.
Tuntud lekke juhtumite enamuses (, ) 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 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.
- We create a variable with the full domain name:
export DOMAIN_CN="example.com" - We create a private key:
openssl genrsa -out root-ca-key.pem 4096 - 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 - 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 - 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 - 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 - 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 - 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 - We sign the certificate:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem - 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 - 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
- Käesoleva käsuga prindime parooli räsi konsooli:
sh ${OD_SEC}/tools/hash.sh -p [parool] - Muudame faili räsi saadud väärtusega:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Seame tulemüüri operatsioonisüsteemis
- Lubame tulemüüri käivitamise:
systemctl enable firewalld - Käivitame selle:
systemctl start firewalld - Lubame ühenduse Elasticsearchiga:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent - Taaskäivitame tulemüüri reeglid:
firewall-cmd --reload - Kuvame töötavad reeglid:
firewall-cmd --list-all
Rakendame kõik meie muudatused Elasticsearchile
- Loome muutujat, millel on täielik tee plugini kaustani:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/" - 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 - 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
