Paano i-configure ang Elasticsearch upang maiwasan ang mga tagas

Sa nakalipas na taon, maraming tumagas mula sa mga database Elasticsearch (dito, dito ΠΈ dito). Sa maraming mga kaso, ang personal na data ay naka-imbak sa database. Ang mga pagtagas na ito ay maaaring naiwasan kung, pagkatapos na i-deploy ang database, ang mga administrador ay nag-abala na suriin ang ilang simpleng mga setting. Ngayon ay pag-uusapan natin sila.

Agad tayong magpareserba na sa aming pagsasanay ay gumagamit kami ng Elasticsearch upang mag-imbak ng mga log at magsuri ng mga log ng mga tool sa seguridad ng impormasyon, OS at software sa aming platform ng IaaS, na sumusunod sa mga kinakailangan ng 152-FZ, Cloud-152. 

Paano i-configure ang Elasticsearch upang maiwasan ang mga tagas

Sinusuri namin kung ang database ay "nananatili" sa Internet

Sa karamihan ng mga kilalang kaso ng pagtagas (dito, dito) ang umaatake ay nakakuha ng access sa data nang simple at hindi mapagpanggap: ang database ay nai-publish sa Internet, at posible na kumonekta dito nang walang pagpapatunay.  

Una, harapin natin ang paglalathala sa Internet. Bakit ito nangyayari? Ang katotohanan ay para sa mas nababaluktot na operasyon ng Elasticsearch inirerekomenda lumikha ng isang kumpol ng tatlong server. Upang ang mga database ay makipag-usap sa isa't isa, kailangan mong buksan ang mga port. Bilang resulta, hindi pinaghihigpitan ng mga administrator ang pag-access sa database sa anumang paraan, at maaari kang kumonekta sa database mula sa kahit saan. Madaling suriin kung ang database ay naa-access mula sa labas. Ipasok lamang sa browser http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Kung maaari kang makapasok, pagkatapos ay tumakbo upang isara ito.

Pagprotekta sa koneksyon sa database

Ngayon ay gagawin namin ito upang imposibleng kumonekta sa database nang walang pagpapatunay.

Ang Elasticsearch ay may isang authentication module na naglilimita sa pag-access sa database, ngunit ito ay magagamit lamang sa bayad na X-Pack plugin set (1 buwang libreng paggamit).

Ang mabuting balita ay sa taglagas ng 2019, binuksan ng Amazon ang mga pag-unlad nito, na nag-overlap sa X-Pack. Ang pagpapatunay na function kapag kumokonekta sa isang database ay naging available sa ilalim ng isang libreng lisensya para sa bersyon Elasticsearch 7.3.2, at isang bagong release para sa Elasticsearch 7.4.0 ay nasa gawa na.

Ang plugin na ito ay madaling i-install. Pumunta sa server console at ikonekta ang repositoryo:

Batay sa RPM:

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

yum update

yum install opendistro-security


Batay sa DEB:

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

Pagse-set up ng pakikipag-ugnayan sa pagitan ng mga server sa pamamagitan ng SSL

Kapag nag-i-install ng plugin, nagbabago ang configuration ng port na kumukonekta sa database. Pinapagana nito ang pag-encrypt ng SSL. Upang patuloy na gumana ang mga cluster server sa isa't isa, kailangan mong i-configure ang pakikipag-ugnayan sa pagitan ng mga ito gamit ang SSL.

Ang tiwala sa pagitan ng mga host ay maaaring maitatag nang mayroon o walang sariling awtoridad sa sertipiko. Sa unang paraan, malinaw ang lahat: kailangan mo lang makipag-ugnayan sa mga espesyalista sa CA. Dumiretso tayo sa pangalawa.

  1. Gumawa ng variable na may buong domain name:

    export DOMAIN_CN="example.com"

  2. Gumawa ng pribadong key:

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

  3. Lagdaan ang root certificate. Panatilihin itong ligtas: kung ito ay nawala o nakompromiso, ang tiwala sa pagitan ng lahat ng mga host ay kailangang muling i-configure.

    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. Lumikha ng administrator key:

    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. Gumawa ng kahilingan para lagdaan ang sertipiko:

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

  6. Lumikha ng sertipiko ng administrator:

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

  7. Lumikha ng mga sertipiko para sa Elasticsearch node:

    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. Lumikha ng kahilingan sa lagda:

    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. Pagpirma ng sertipiko:

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

  10. Ilagay ang certificate sa pagitan ng mga Elasticsearch node sa sumusunod na folder:

    /etc/elasticsearch/


    kailangan namin ang mga file:

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

  11. Kino-configure /etc/elasticsearch/elasticsearch.yml – baguhin ang pangalan ng mga file na may mga sertipiko sa mga nabuo sa amin:

    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

Pagbabago ng mga password para sa mga panloob na user

  1. Gamit ang command sa ibaba, inilalabas namin ang hash ng password sa console:

    sh ${OD_SEC}/tools/hash.sh -p [ΠΏΠ°Ρ€ΠΎΠ»ΡŒ]

  2. Baguhin ang hash sa file sa natanggap:

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

Pagse-set up ng firewall sa OS

  1. Payagan ang firewall na magsimula:

    systemctl enable firewalld

  2. Ilunsad natin ito:

    systemctl start firewalld

  3. Payagan ang koneksyon sa Elasticsearch:

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

  4. I-reload ang mga panuntunan sa firewall:

    firewall-cmd --reload

  5. Narito ang mga patakaran sa pagtatrabaho:

    firewall-cmd --list-all

Inilapat ang lahat ng aming mga pagbabago sa Elasticsearch

  1. Lumikha ng isang variable na may buong path sa folder na may plugin:

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

  2. Magpatakbo tayo ng script na mag-a-update ng mga password at suriin ang mga setting:

    ${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. Suriin kung nailapat ang mga pagbabago:

    curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[ΠΏΠ°Ρ€ΠΎΠ»ΡŒ] --insecure

Iyon lang, ito ang mga minimum na setting na nagpoprotekta sa Elasticsearch mula sa mga hindi awtorisadong koneksyon.

Pinagmulan: www.habr.com

Magdagdag ng komento