Nell'ultimo anno ci sono state molte fughe di informazioni dai database
Precisiamo subito che nella nostra pratica utilizziamo Elasticsearch per archiviare e analizzare i log di strumenti di sicurezza delle informazioni, sistema operativo e software nella nostra piattaforma IaaS, che è conforme ai requisiti di 152-FZ, Cloud-152.
Controlliamo se il database “sporge” su Internet
Nella maggior parte dei casi noti di perdite (
Innanzitutto, occupiamoci della pubblicazione su Internet. Perché succede questo? Il fatto è che per un funzionamento più flessibile di Elasticsearch
Se riesci ad entrare, corri a chiuderlo.
Protezione della connessione al database
Ora faremo in modo che sia impossibile connettersi al database senza autenticazione.
Elasticsearch dispone di un modulo di autenticazione che limita l'accesso al database, ma è disponibile solo nel set di plug-in X-Pack a pagamento (1 mese di utilizzo gratuito).
La buona notizia è che nell’autunno del 2019 Amazon ha aperto i suoi sviluppi, che si sovrappongono a X-Pack. La funzione di autenticazione durante la connessione a un database è diventata disponibile con una licenza gratuita per la versione Elasticsearch 7.3.2 ed è già in lavorazione una nuova versione per Elasticsearch 7.4.0.
Questo plugin è facile da installare. Vai alla console del server e collega il repository:
Basato sul numero di giri:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
Basato su DEB:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -
Configurazione dell'interazione tra server tramite SSL
Durante l'installazione del plugin, la configurazione della porta di connessione al database cambia. Abilita la crittografia SSL. Affinché i server del cluster continuino a funzionare tra loro, è necessario configurare l'interazione tra loro utilizzando SSL.
La fiducia tra host può essere stabilita con o senza la propria autorità di certificazione. Con il primo metodo tutto è chiaro: basta contattare gli specialisti di CA. Passiamo direttamente al secondo.
- Crea una variabile con il nome di dominio completo:
export DOMAIN_CN="example.com"
- Crea una chiave privata:
openssl genrsa -out root-ca-key.pem 4096
- Firma il certificato radice. Mantienilo al sicuro: se viene perso o compromesso, la fiducia tra tutti gli host dovrà essere riconfigurata.
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
- Crea una chiave amministratore:
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
- Crea una richiesta per firmare il certificato:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr
- Crea un certificato di amministratore:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- Crea certificati per il nodo Elasticsearch:
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
- Crea una richiesta di firma:
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
- Firma del certificato:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem
- Posiziona il certificato tra i nodi Elasticsearch nella seguente cartella:
/etc/elasticsearch/
abbiamo bisogno dei file:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem
- Configurazione /etc/elasticsearch/elasticsearch.yml – cambiare il nome dei file con i certificati in quelli generati da noi:
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
Modifica delle password per gli utenti interni
- Utilizzando il comando seguente, inviamo l'hash della password alla console:
sh ${OD_SEC}/tools/hash.sh -p [пароль]
- Cambia l'hash nel file con quello ricevuto:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Configurazione di un firewall nel sistema operativo
- Consenti l'avvio del firewall:
systemctl enable firewalld
- Lanciamolo:
systemctl start firewalld
- Consenti la connessione a Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent
- Ricaricare le regole del firewall:
firewall-cmd --reload
- Ecco le regole di lavoro:
firewall-cmd --list-all
Applicazione di tutte le nostre modifiche a Elasticsearch
- Crea una variabile con il percorso completo della cartella con il plugin:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- Eseguiamo uno script che aggiornerà le password e controllerà le impostazioni:
${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
- Controlla se le modifiche sono state applicate:
curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure
Questo è tutto, queste sono le impostazioni minime che proteggono Elasticsearch da connessioni non autorizzate.
Fonte: habr.com