Si të konfiguroni Elasticsearch për të shmangur rrjedhjet

Gjatë vitit të fundit, ka pasur shumë rrjedhje nga bazat e të dhënave Elasticsearch (ja, ja dhe ja). Në shumë raste, në bazë ka qenë informacion personal. Këto rrjedhje do të kishin mundur të evitohej nëse, pas konfigurimit të bazës, administratorët do të ishin angazhuar të kontrollonin disa cilësime të thjeshta. Sot do të flasim për to.

Së pari, le të themi se në praktikën tonë përdorim Elasticsearch për ruajtjen e log-eve dhe analizën e regjistrave të mjeteve të mbrojtjes, Sistemit Operativ dhe Software-it në platformën tonë IaaS, që i përgjigjet kërkesave të ligjit 152-FZ, Cloud-152. 

Si të konfiguroni Elasticsearch për të shmangur rrjedhjet

Kontrollojmë, "a del" baza në internet

Në shumicën e rasteve të njohura të rrjedhjeve (ja, ja) sulmuesi fitoi qasje në të dhëna në mënyrë të thjeshtë dhe të lehtë: baza ishte publikuar në internet dhe mund të lidhej pa autentifikim.  

Së pari, le të kuptojmë pse ndodh publikimi në internet. Arsyeja është se për një punë më fleksibile me Elasticsearch rekomandohet krijojmë një kluster nga tre servera. Në mënyrë që bazat të komunikojnë me njëra-tjetrën, duhet të hapen porta. Si rezultat, administratorët nuk e kufizojnë aksesin në bazë, dhe mund të lidhen me BDb nga çdo vend. Të kontrollosh nëse ka qasje nga jashtë është e lehtë. Thjesht shënoni në shfletuesin http://[IP/Emri Elasticsearch]:9200/_cat/nodes?v

Nëse arrini të qaseni, atëherë nxitojini ta mbyllni.

Mbrojmë lidhjen me BDb

Tani do ta bëjmë që lidhja në bazë të mos jetë e mundur pa autentifikim.

Elasticsearch ka një modul autentifikimi që kufizon qasje në bazë, por ai është vetëm në paketën e paguar të plugins X-Pack (1 muaj përdorim falas).

Lajmet e mira janë se në vjeshtën e vitit 2019, Amazon publikoi zhvillimet e saj, të cilat përputhen me X-Pack. Funksioni i autentifikimit për lidhjen në bazë u bë i disponueshëm me licencë të lirë për versionin Elasticsearch 7.3.2, dhe tashmë është në punë një version i ri për Elasticsearch 7.4.0.

Ky plugin instalohet lehtësisht. Hyjmë në konsolën e serverit dhe lidhim depo:

Për Bazën RPM:

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

yum update

yum install opendistro-security


Për Bazën DEB:

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

Konfigurojmë ndërveprimin mes serverëve përmes SSL

Kur gjatë instalimit të pluginit, ndryshohet konfigurimi i portit të lidhjes me bazën. Ky port aktivizon enkriptimin SSL. Për të siguruar vazhdimësinë e komunikimit ndërmjet serverëve të grupit, është e nevojshme të konfigurohet interaksioni i tyre përmes SSL.

Mund të vendosim besimin midis hosteve me një qendër të vetme certifikimi ose pa të. Me mënyrën e parë është e thjeshtë: thjesht duhet të kontaktojmë specialistët e CA. Tani le të kalojmë te e dyta.

  1. Krijojmë një variabël me emrin e plotë të domain-it:

    export DOMAIN_CN="example.com"

  2. Krijojmë çelësin privat:

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

  3. Nënshkruajmë certifikatën rrënjë. Ruajeni si sytë e përhumbur: nëse humbet ose kompromentohet, do të duhet të rivendosni besimin midis të gjitha hosteve.

    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. Krijojmë çelësin e administratorit:

    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. Krijojmë kërkesën për nënshkrimin e certifikatës:

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

  6. Krijojmë certifikatën e administratorit:

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

  7. Krijojmë certifikatat për nodën 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. Krijojmë kërkesën për nënshkrim:

    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. Nënshkruajmë certifikatën:

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

  10. Shpërndajmë certifikatën midis nodave Elasticsearch në dosje:

    /etc/elasticsearch/


    Na nevojiten skedarët:

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

  11. KonfigurojmĂ« /etc/elasticsearch/elasticsearch.yml – ndryshojmĂ« emrat e skedarĂ«ve me certifikatat qĂ« kemi gjeneruar:

    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

Ndërrimi i fjalëkalimeve të përdoruesve të brendshëm

  1. Me komandën më poshtë shfaqim hash-in e fjalëkalimit në konsolë:

    sh ${OD_SEC}\/tools\/hash.sh -p [fjalëkalimi]

  2. Ndërroni hash-in në skedarin në rezultat:

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

Konfigurimi i firewall-it në OS

  1. Lejoni aktivizimin e firewall-it:

    systemctl enable firewalld

  2. Aktivizoni atë:

    systemctl start firewalld

  3. Lejoni lidhjen me Elasticsearch:

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

  4. Rikthejni rregullat e firewall-it:

    firewall-cmd --reload

  5. Dukemi rregullat që funksionojnë:

    firewall-cmd --list-all

Aplikojmë të gjitha prej ndryshimeve tona në Elasticsearch

  1. Krijojmë një variabël me rrugën e plotë deri në dosjen me shtesa:

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

  2. Nisni skriptin që do të përditësojë fjalëkalimet dhe do të verifikojë cilësimet:

    ${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. Kontrollojmë nëse janë aplikuar ndryshimet:

    curl -XGET https://[IP/Emri Elasticsearch]:9200/_cat/nodes?v -u admin:[fjalëkalimi] --insecure

Këto janë cilësimet minimale që mbyllin Elasticsearch nga lidhjet e paautorizuara.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster