Det seneste år har der været mange læk fra databaser
Lad os straks tage forbehold for, at vi i vores praksis bruger Elasticsearch til at gemme logfiler og analysere logfiler af informationssikkerhedsværktøjer, OS og software i vores IaaS-platform, som overholder kravene i 152-FZ, Cloud-152.
Vi tjekker om databasen "stikker ud" til internettet
I de fleste kendte tilfælde af lækager (
Lad os først beskæftige os med publicering på internettet. Hvorfor sker dette? Faktum er, at for mere fleksibel drift af Elasticsearch
Hvis du kan komme ind, så løb for at lukke den.
Beskyttelse af forbindelsen til databasen
Nu vil vi gøre det, så det er umuligt at oprette forbindelse til databasen uden godkendelse.
Elasticsearch har et autentificeringsmodul, der begrænser adgangen til databasen, men det er kun tilgængeligt i det betalte X-Pack plugin sæt (1 måned gratis brug).
Den gode nyhed er, at Amazon i efteråret 2019 åbnede sine udviklinger, som overlapper med X-Pack. Godkendelsesfunktionen ved tilslutning til en database er blevet tilgængelig under en gratis licens til version Elasticsearch 7.3.2, og en ny udgivelse til Elasticsearch 7.4.0 er allerede på vej.
Dette plugin er nemt at installere. Gå til serverkonsollen og tilslut lageret:
RPM baseret:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
DEB baseret:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -
Opsætning af interaktion mellem servere via SSL
Når plugin'et installeres, ændres konfigurationen af den port, der forbinder til databasen. Det muliggør SSL-kryptering. For at klyngeserverne kan fortsætte med at arbejde med hinanden, skal du konfigurere interaktion mellem dem ved hjælp af SSL.
Tillid mellem værter kan etableres med eller uden deres egen certifikatmyndighed. Med den første metode er alt klart: du skal bare kontakte CA-specialister. Lad os gå direkte til den anden.
- Opret en variabel med det fulde domænenavn:
export DOMAIN_CN="example.com"
- Opret en privat nøgle:
openssl genrsa -out root-ca-key.pem 4096
- Underskriv rodcertifikatet. Hold det sikkert: Hvis det går tabt eller kompromitteret, skal tilliden mellem alle værter omkonfigureres.
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
- Opret en administratornøgle:
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
- Opret en anmodning om at underskrive certifikatet:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr
- Opret et administratorcertifikat:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- Opret certifikater til 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
- Opret en signaturanmodning:
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
- Underskrivelse af certifikatet:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem
- Placer certifikatet mellem Elasticsearch-noder i følgende mappe:
/etc/elasticsearch/
vi har brug for filerne:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem
- Sætte op /etc/elasticsearch/elasticsearch.yml – ændre navnet på filerne med certifikater til dem, der er genereret af os:
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
Ændring af adgangskoder for interne brugere
- Ved at bruge kommandoen nedenfor udsender vi adgangskodehashen til konsollen:
sh ${OD_SEC}/tools/hash.sh -p [пароль]
- Skift hashen i filen til den modtagne:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Opsætning af en firewall i operativsystemet
- Tillad firewallen at starte:
systemctl enable firewalld
- Lad os starte det:
systemctl start firewalld
- Tillad forbindelse til Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent
- Genindlæs firewall-reglerne:
firewall-cmd --reload
- Her er arbejdsreglerne:
firewall-cmd --list-all
Anvender alle vores ændringer på Elasticsearch
- Opret en variabel med den fulde sti til mappen med plugin:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- Lad os køre et script, der opdaterer adgangskoder og kontrollerer indstillinger:
${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
- Tjek, om ændringerne er blevet anvendt:
curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure
Det er alt, disse er minimumsindstillingerne, der beskytter Elasticsearch mod uautoriserede forbindelser.
Kilde: www.habr.com