Det siste året har det vært mange lekkasjer fra databaser
La oss umiddelbart ta forbehold om at vi i vår praksis bruker Elasticsearch til å lagre logger og analysere logger over informasjonssikkerhetsverktøy, OS og programvare i vår IaaS-plattform, som oppfyller kravene i 152-FZ, Cloud-152.
Vi sjekker om databasen "stikker ut" til Internett
I de fleste kjente tilfeller av lekkasjer (
La oss først ta for oss publisering på Internett. Hvorfor skjer dette? Faktum er at for mer fleksibel drift av Elasticsearch
Hvis du kan komme inn, så løp for å lukke den.
Beskytter tilkoblingen til databasen
Nå skal vi gjøre det slik at det er umulig å koble til databasen uten autentisering.
Elasticsearch har en autentiseringsmodul som begrenser tilgangen til databasen, men den er kun tilgjengelig i det betalte X-Pack-pluginsettet (1 måned gratis bruk).
Den gode nyheten er at høsten 2019 åpnet Amazon sine utviklinger, som overlapper med X-Pack. Autentiseringsfunksjonen ved tilkobling til en database har blitt tilgjengelig under en gratis lisens for versjon Elasticsearch 7.3.2, og en ny utgivelse for Elasticsearch 7.4.0 er allerede i arbeid.
Denne plugin er enkel å installere. Gå til serverkonsollen og koble til depotet:
RPM-basert:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
DEB-basert:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -
Sette opp interaksjon mellom servere via SSL
Når du installerer plugin, endres konfigurasjonen av porten som kobles til databasen. Den muliggjør SSL-kryptering. For at klyngeserverne skal fortsette å jobbe med hverandre, må du konfigurere interaksjon mellom dem ved hjelp av SSL.
Tillit mellom verter kan etableres med eller uten egen sertifiseringsinstans. Med den første metoden er alt klart: du trenger bare å kontakte CA-spesialister. La oss gå rett til den andre.
- Opprett en variabel med hele domenenavnet:
export DOMAIN_CN="example.com"
- Opprett en privat nøkkel:
openssl genrsa -out root-ca-key.pem 4096
- Signer rotsertifikatet. Hold det trygt: hvis det går tapt eller kompromittert, må tilliten mellom alle verter rekonfigureres.
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
- Opprett en administratornøkkel:
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
- Opprett en forespørsel om å signere sertifikatet:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr
- Opprett et administratorsertifikat:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- Opprett sertifikater for 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
- Opprett en signaturforespørsel:
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
- Signering av sertifikatet:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem
- Plasser sertifikatet mellom Elasticsearch-noder i følgende mappe:
/etc/elasticsearch/
vi trenger filene:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem
- Konfigurerer /etc/elasticsearch/elasticsearch.yml – endre navnet på filene med sertifikater til de som er generert av oss:
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
Endring av passord for interne brukere
- Ved å bruke kommandoen nedenfor sender vi ut passordhashen til konsollen:
sh ${OD_SEC}/tools/hash.sh -p [пароль]
- Endre hashen i filen til den mottatte:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Sette opp en brannmur i operativsystemet
- La brannmuren starte:
systemctl enable firewalld
- La oss lansere det:
systemctl start firewalld
- Tillat tilkobling til Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent
- Last inn brannmurreglene på nytt:
firewall-cmd --reload
- Her er arbeidsreglene:
firewall-cmd --list-all
Bruker alle endringene våre på Elasticsearch
- Lag en variabel med hele banen til mappen med plugin:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- La oss kjøre et skript som vil oppdatere passord og sjekke innstillinger:
${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
- Sjekk om endringene er tatt i bruk:
curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure
Det er alt, dette er minimumsinnstillingene som beskytter Elasticsearch mot uautoriserte tilkoblinger.
Kilde: www.habr.com