Cumu cunfigurà Elasticsearch per evità perdite

In l'annu passatu, ci sò state parechje fughe da basa di dati Elasticsearch (eccu, eccu и eccu). In parechji casi, i dati persunali sò stati guardati in a basa di dati. Queste fughe puderianu esse evitate se, dopu avè implementatu a basa di dati, l'amministratori s'eranu preoccupatu di verificà uni pochi di paràmetri simplici. Oghje parlemu di elli.

Facemu subitu una riservazione chì in a nostra pratica usemu Elasticsearch per almacenà logs è analizà logs di strumenti di sicurezza di l'infurmazioni, OS è software in a nostra piattaforma IaaS, chì cumpone cù i requisiti di 152-FZ, Cloud-152. 

Cumu cunfigurà Elasticsearch per evità perdite

Cuntrollamu se a basa di dati "si ferma" à Internet

In i casi più noti di perdite (eccu, eccu) l'attaccante hà acquistatu l'accessu à e dati simpliciamente è senza pretensione: a basa di dati hè stata publicata in Internet, è era pussibule cunnetta cù questu senza autentificazione.  

Prima, facemu a publicazione in Internet. Perchè succede questu? U fattu hè chì per un'operazione più flexible di Elasticsearch cunsigliatu crea un cluster di trè servitori. Per chì e basa di dati per cumunicà cù l'altri, avete bisognu di apre i porti. In u risultatu, l'amministratori ùn limitanu micca l'accessu à a basa di dati in ogni modu, è pudete cunnette à a basa di dati da ogni locu. Hè facilitu per verificà se a basa di dati hè accessibile da fora. Basta à entre in u navigatore http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Se pudete entre, corre per chjude.

Prutezzione di a cunnessione à a basa di dati

Avà avemu da fà cusì chì hè impussibile di cunnette à a basa di dati senza autentificazione.

Elasticsearch hà un modulu di autentificazione chì limita l'accessu à a basa di dati, ma hè solu dispunibule in u set di plugin X-Pack pagatu (1 mese d'usu gratuitu).

A bona nutizia hè chì in a caduta di u 2019, Amazon hà apertu i so sviluppi, chì si sovrapponenu cù X-Pack. A funzione di autentificazione quandu si cunnetta à una basa di dati hè diventata dispunibule sottu una licenza libera per a versione Elasticsearch 7.3.2, è una nova versione per Elasticsearch 7.4.0 hè digià in u travagliu.

Stu plugin hè facile à stallà. Andate à a cunsola di u servitore è cunnette u repository:

Basatu in RPM:

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

yum update

yum install opendistro-security


Basatu in DEB:

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

Configurazione di l'interazzione trà i servitori via SSL

Quandu si stallanu u plugin, a cunfigurazione di u portu di cunnessione à a basa di dati cambia. Permette a criptografia SSL. Per chì i servitori di cluster cuntinueghjanu à travaglià cù l'altri, avete bisognu di cunfigurà l'interazzione trà elli cù SSL.

A fiducia trà l'ospiti pò esse stabilita cù o senza a so propria autorità di certificazione. Cù u primu mètudu, tuttu hè chjaru: basta à cuntattà i specialisti CA. Andemu direttamente à a seconda.

  1. Crea una variabile cù u nome di dominiu cumpletu:

    export DOMAIN_CN="example.com"

  2. Crea una chjave privata:

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

  3. Firmà u certificatu root. Mantene a sicura: s'ellu hè persu o cumprumissu, a fiducia trà tutti l'ospiti deve esse reconfigurata.

    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. Crea una chjave 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

  5. Crea una dumanda per firmà u certificatu:

    openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " 
    -key admin-key.pem -out admin.csr

  6. Crea un certificatu 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

  7. Crea certificati per u node 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

  8. Crea una dumanda 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

  9. Firmà u certificatu:

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

  10. Pone u certificatu trà i nodi Elasticsearch in u cartulare seguente:

    /etc/elasticsearch/


    avemu bisognu di i schedari:

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

  11. Cunfigurazione /etc/elasticsearch/elasticsearch.yml - cambià u nome di i schedari cù certificati à 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

Cambia password per l'utilizatori internu

  1. Utilizendu u cumandimu quì sottu, emettemu a password hash à a cunsola:

    sh ${OD_SEC}/tools/hash.sh -p [пароль]

  2. Cambia l'hash in u schedariu à quellu ricevutu:

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

Configurazione di un firewall in u SO

  1. Permette à u firewall di inizià:

    systemctl enable firewalld

  2. Lanciamu:

    systemctl start firewalld

  3. Permette a cunnessione à Elasticsearch:

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

  4. Ricaricate e regule di u firewall:

    firewall-cmd --reload

  5. Eccu i reguli di travagliu:

    firewall-cmd --list-all

Applicà tutti i nostri cambiamenti à Elasticsearch

  1. Crea una variabile cù u percorsu sanu à u cartulare cù u plugin:

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

  2. Eseguimu un script chì aghjurnà e password è verificate i paràmetri:

    ${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. Verificate se i cambiamenti sò stati applicati:

    curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure

Hè tuttu, questi sò i paràmetri minimi chì prutegge Elasticsearch da e cunnessione micca autorizate.

Source: www.habr.com

Add a comment