Kiel agordi Elasticsearch por eviti likojn

Dum la pasinta jaro, estis multaj likoj de datumbazoj Elasta esploro (jen, jen и jen). En multaj kazoj, personaj datumoj estis konservitaj en la datumbazo. Ĉi tiuj likoj povus esti evititaj se, post deplojado de la datumbazo, la administrantoj ĝenus kontroli kelkajn simplajn agordojn. Hodiaŭ ni parolos pri ili.

Ni tuj faru rezervon, ke en nia praktiko ni uzas Elasticsearch por stoki protokolojn kaj analizi protokolojn de informaj sekurecaj iloj, OS kaj programaro en nia IaaS-platformo, kiu konformas al la postuloj de 152-FZ, Cloud-152. 

Kiel agordi Elasticsearch por eviti likojn

Ni kontrolas ĉu la datumbazo "altenas" al la Interreto

En la plej multaj konataj kazoj de likoj (jen, jen) la atakanto akiris aliron al la datumoj simple kaj senpretende: la datumbazo estis publikigita en la Interreto, kaj eblis konekti al ĝi sen aŭtentigo.  

Unue, ni traktu eldonadon en Interreto. Kial ĉi tio okazas? La fakto estas, ke por pli fleksebla operacio de Elasticsearch rekomendita krei aron de tri serviloj. Por ke la datumbazoj komunikiĝu inter si, vi devas malfermi havenojn. Kiel rezulto, administrantoj neniel limigas aliron al la datumbazo, kaj vi povas konektiĝi al la datumbazo de ie ajn. Estas facile kontroli ĉu la datumbazo estas alirebla de ekstere. Nur enigu en la retumilo http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Se vi povas eniri, tiam kuru por fermi ĝin.

Protektante la konekton al la datumbazo

Nun ni faros ĝin tiel ke estas neeble konekti al la datumbazo sen aŭtentigo.

Elasticsearch havas aŭtentikigmodulon, kiu limigas aliron al la datumbazo, sed ĝi nur haveblas en la pagita aldonaĵaro X-Pack (1 monato senpaga uzo).

La bona novaĵo estas, ke en la aŭtuno de 2019, Amazon malfermis siajn evoluojn, kiuj interkovras kun X-Pack. La aŭtentikiga funkcio dum konekto al datumbazo fariĝis havebla sub senpaga permesilo por versio Elasticsearch 7.3.2, kaj nova eldono por Elasticsearch 7.4.0 jam estas en la laboroj.

Ĉi tiu kromaĵo estas facile instalebla. Iru al la servila konzolo kaj konektu la deponejon:

Bazita RPM:

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

yum update

yum install opendistro-security


DEB Bazita:

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

Agordi interago inter serviloj per SSL

Instalante la kromprogramon, la agordo de la haveno konektanta al la datumbazo ŝanĝiĝas. Ĝi ebligas SSL-ĉifradon. Por ke la grapolserviloj daŭre funkciu unu kun la alia, vi devas agordi interagadon inter ili uzante SSL.

Fido inter gastigantoj povas esti establita kun aŭ sen sia propra atestila aŭtoritato. Kun la unua metodo, ĉio estas klara: vi nur bezonas kontakti CA-specialistojn. Ni movu rekte al la dua.

  1. Kreu variablon kun la plena domajna nomo:

    export DOMAIN_CN="example.com"

  2. Kreu privatan ŝlosilon:

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

  3. Subskribu la radikan atestilon. Konservu ĝin sekura: se ĝi estas perdita aŭ kompromitita, la konfido inter ĉiuj gastigantoj devos esti reagordita.

    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. Kreu administran ŝlosilon:

    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. Kreu peton por subskribi la atestilon:

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

  6. Kreu atestilon pri administranto:

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

  7. Kreu atestilojn por la 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

  8. Kreu subskriban peton:

    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. Subskribante la atestilon:

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

  10. Metu la atestilon inter Elasticsearch-nodoj en la sekvan dosierujon:

    /etc/elasticsearch/


    ni bezonas la dosierojn:

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

  11. Agordi /etc/elasticsearch/elasticsearch.yml – ŝanĝu la nomon de la dosieroj kun atestiloj al tiuj kreitaj de ni:

    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

Ŝanĝante pasvortojn por internaj uzantoj

  1. Uzante la suban komandon, ni eligas la pasvorton hash al la konzolo:

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

  2. Ŝanĝu la haŝon en la dosiero al la ricevita:

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

Establi fajroŝirmilon en la OS

  1. Permesu al la fajroŝirmilo komenci:

    systemctl enable firewalld

  2. Ni lanĉu ĝin:

    systemctl start firewalld

  3. Permesu konekton al Elasticsearch:

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

  4. Reŝargi la regulojn pri fajroŝirmilo:

    firewall-cmd --reload

  5. Jen la laborreguloj:

    firewall-cmd --list-all

Aplikante ĉiujn niajn ŝanĝojn al Elasticsearch

  1. Kreu variablon kun la plena vojo al la dosierujo per la kromaĵo:

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

  2. Ni rulu skripton, kiu ĝisdatigos pasvortojn kaj kontrolos agordojn:

    ${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. Kontrolu ĉu la ŝanĝoj estas aplikitaj:

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

Jen ĉio, ĉi tiuj estas la minimumaj agordoj, kiuj protektas Elasticsearch de neaŭtorizitaj konektoj.

fonto: www.habr.com

Aldoni komenton