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

Gjatë vitit të kaluar ka pasur shumë rrjedhje nga bazat e të dhënave Elasticsearch (këtu, këtu dhe këtu). Në shumë raste, në bazë ishin ruajtur të dhëna personale. Këto rrjedhje mund të ishin shmangur nëse pas vendosjes së bazës, administratorët do të kishin bërë një kontroll të disa cilësimeve të thjeshta. Sot do të flasim për to.

Fillimisht, le të sqarojmë se në praktikën tonë përdorim Elasticsearch për ruajtjen e log-ve dhe për analizimin e regjistrimeve të mjeteve të mbrojtjes së informacionit, OS dhe software në platformën tonë IaaS, e cila i përmbush kërkesat e ligjit 152-FZ, Cloud-152. 

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

KontrollojmĂ« nĂ«se baza nuk ‘kano’ nĂ« internet

Në shumicën e rasteve të njohura të rrjedhjeve (këtu, këtu) sulmuesi mori akses në të dhënat thjesht dhe pa ndonjë vështirësi: baza u publikua në internet dhe mund të lidhej pa autentifikim.  

SĂ« pari, le tĂ« merremi me publikimin nĂ« internet. Pse ndodh kjo? Çështja Ă«shtĂ« se pĂ«r njĂ« punĂ« mĂ« fleksibĂ«l me Elasticsearch rekomandohet duhet tĂ« krijoni njĂ« kluster me tre servera. PĂ«r t'u komunikua shkallĂ« me njĂ«ri-tjetrin, duhet tĂ« hapen portet. Si rezultat, administratorĂ«t nuk e kufizojnĂ« aksesin nĂ« bazĂ« dhe mund tĂ« lidhen me DB nga kudo. TĂ« kontrollosh nĂ«se ka akses nĂ« bazĂ« nga jashtĂ« Ă«shtĂ« e lehtĂ«. Thjesht shkruajmĂ« nĂ« shfletues http://[IP/Nomination Elasticsearch]:9200/_cat/nodes?v

Nëse mund të hyni, atëherë urgjent mbyllni.

Mbrojtja e lidhjes me DB

Tani do të bëjmë që të mos mund të lidhet me bazën pa autentifikim.

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

Lajmi i mirë është se në vjeshtën e vitit 2019 Amazon hapi përvojat e tij, të cilat përputhen me X-Pack. Funksioni i autentifikimit gjatë lidhjes me bazën u bë i disponueshëm nën një licencë të lirë për versionin Elasticsearch 7.3.2, dhe tashmë është në punë një botim i ri për Elasticsearch 7.4.0.

Ky plugin instalohet lehtësisht. Hyni në konsolën e serverit dhe lidheni me repo:

Me bazë RPM:

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

yum update

yum install opendistro-security


Me bazë DEB:

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

Konfigurojmë bashkëpunimin midis serverëve përmes SSL

Kur instaloni pluginin, konfigurimi i portit të lidhjes me bazën e të dhënave ndryshon. Atij i aktivizohet kriptimi SSL. Për t'u siguruar që serverat e klasterit të vazhdojnë të punojnë me njëri-tjetrin, është e nevojshme të konfigurohet ndërveprimi midis tyre përmes SSL.

Besimi midis hosts mund të vendoset duke përdorur një autoritet të besueshëm (CA) privat ose pa të. Me metoden e parë është e qartë: thjesht duhet të kontaktoni specialistë për CA. Tani do të kalojmë menjëherë në të dytën.

  1. Krijojmë një variabël me emrin e plote të domenit:

    export DOMAIN_CN="example.com"

  2. Krijojmë çelësin privat:

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

  3. Nënshkruajmë certifikatë bazë. Ruajeni si syin e kokës: në rast se humbet ose kompromentohet, besimi midis të gjitha hosteve do të duhet të ri-konfigurohet.

    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ë një kërkesë 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ë sertifikata 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ë 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ë sertifikatin:

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

  10. Shpërndajmë sertifikatin mes nodave Elasticsearch në folder:

    /etc/elasticsearch/


    na duhen 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 sertifikatat, nĂ« ato tĂ« krijuara nga ne:

    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=Kompania Moskva,ST=Moskva,C=RU                                                                                                                                                                                                  
    	opendistro_security.nodes_dn:                                                                                                                                                                                                                      
    	  − CN=node-01.example.com,O=Kompania Moskva,ST=Moskva,C=RU

Ndryshojmë fjalëkalimet e përdoruesve të brendshëm

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

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

  2. Ndryshojmë hash-in në skedarin e marrë:

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

Konfigurojmë firewullin në sistemin operacional

  1. Lejojmë aktivizimin e firewullit:

    systemctl enable firewalld

  2. E nisim atë:

    systemctl start firewalld

  3. Lejojmë lidhjen me Elasticsearch:

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

  4. Rikthejmë rregullat e firewullit:

    firewall-cmd --reload

  5. Listojmë rregullat në fuqi:

    firewall-cmd --list-all

Zbatoni të gjitha ndryshimet 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. Nisim skriptin që do të përditësojë fjalëkalimet dhe do të kontrollojë konfigurimet:

    ${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 ndryshimet u aplikuan:

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

Këto janë konfigurimet minimale që mbrojnë Elasticsearch nga lidhjet e paautorizuara.

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster