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 и këtu). Në shumë raste, të dhënat personale ruheshin në bazën e të dhënave. Këto rrjedhje mund të ishin shmangur nëse, pas vendosjes së bazës së të dhënave, administratorët do të kishin munduar të kontrollonin disa cilësime të thjeshta. Sot do të flasim për to.

Le të bëjmë menjëherë një rezervë që në praktikën tonë ne përdorim Elasticsearch për të ruajtur regjistrat dhe për të analizuar regjistrat e mjeteve të sigurisë së informacionit, OS dhe softuerët në platformën tonë IaaS, e cila përputhet me kërkesat e 152-FZ, Cloud-152. 

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

Ne kontrollojmë nëse baza e të dhënave "ngjitet" në internet

Në rastet më të njohura të rrjedhjeve (këtu, këtu) sulmuesi fitoi akses në të dhënat thjesht dhe pa pretendime: baza e të dhënave u publikua në internet dhe ishte e mundur të lidheshim me të pa vërtetim.  

Së pari, le të merremi me publikimin në internet. Pse ndodh kjo? Fakti është se për funksionimin më fleksibël të Elasticsearch rekomanduar krijoni një grup prej tre serverash. Në mënyrë që bazat e të dhënave të komunikojnë me njëra-tjetrën, duhet të hapni portet. Si rezultat, administratorët nuk kufizojnë qasjen në bazën e të dhënave në asnjë mënyrë, dhe ju mund të lidheni me bazën e të dhënave nga kudo. Është e lehtë të kontrollosh nëse baza e të dhënave është e aksesueshme nga jashtë. Thjesht futeni në shfletuesin http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Nëse mund të futesh, atëherë vrapo ta mbyllësh.

Mbrojtja e lidhjes me bazën e të dhënave

Tani do ta bëjmë atë në mënyrë që të jetë e pamundur të lidheni me bazën e të dhënave pa vërtetim.

Elasticsearch ka një modul vërtetimi që kufizon aksesin në bazën e të dhënave, por ai është i disponueshëm vetëm në grupin e shtojcave me pagesë X-Pack (përdorim 1 muaj falas).

Lajmi i mirë është se në vjeshtën e vitit 2019, Amazon hapi zhvillimet e saj, të cilat mbivendosen me X-Pack. Funksioni i vërtetimit kur lidheni me një bazë të dhënash është bërë i disponueshëm nën një licencë falas për versionin Elasticsearch 7.3.2 dhe një version i ri për Elasticsearch 7.4.0 është tashmë në punë.

Ky plugin është i lehtë për t'u instaluar. Shkoni te tastiera e serverit dhe lidhni depon:

Bazuar 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


Bazuar në DEB:

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

Vendosja e ndërveprimit midis serverëve përmes SSL

Kur instaloni shtojcën, ndryshon konfigurimi i portit që lidhet me bazën e të dhënave. Ai mundëson enkriptimin SSL. Në mënyrë që serverët e grupeve të vazhdojnë të punojnë me njëri-tjetrin, duhet të konfiguroni ndërveprimin midis tyre duke përdorur SSL.

Besimi midis hosteve mund të krijohet me ose pa autoritetin e vet të certifikatës. Me metodën e parë, gjithçka është e qartë: thjesht duhet të kontaktoni specialistët e CA. Le të kalojmë drejtpërdrejt në të dytin.

  1. Krijo një variabël me emrin e plotë të domenit:

    export DOMAIN_CN="example.com"

  2. Krijo një çelës privat:

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

  3. Nënshkruani certifikatën rrënjësore. Mbajeni të sigurt: nëse humbet ose rrezikohet, besimi midis të gjithë hosteve do të duhet të rikonfigurohet.

    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. Krijo një çelës administratori:

    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. Krijo një kërkesë për të nënshkruar certifikatën:

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

  6. Krijo një certifikatë administratori:

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

  7. Krijo certifikata për nyjen 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. Krijoni një kërkesë nënshkrimi:

    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ënshkrimi i certifikatës:

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

  10. Vendosni certifikatën midis nyjeve Elasticsearch në dosjen e mëposhtme:

    /etc/elasticsearch/


    na duhen skedarët:

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

  11. Po konfiguron /etc/elasticsearch/elasticsearch.yml – ndryshoni emrin e skedarëve me certifikata 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=Moscow Inc.,ST=Moscow,C=RU                                                                                                                                                                                                  
    	opendistro_security.nodes_dn:                                                                                                                                                                                                                      
    	  − CN=node-01.example.com,O=Moscow Inc.,ST=Moscow,C=RU

Ndryshimi i fjalëkalimeve për përdoruesit e brendshëm

  1. Duke përdorur komandën e mëposhtme, ne nxjerrim hash-in e fjalëkalimit në tastierë:

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

  2. Ndryshoni hash-in në skedar në atë të marrë:

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

Vendosja e një muri zjarri në OS

  1. Lejo që muri i zjarrit të fillojë:

    systemctl enable firewalld

  2. Le ta nisim:

    systemctl start firewalld

  3. Lejo lidhjen me Elasticsearch:

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

  4. Ringarko rregullat e murit të zjarrit:

    firewall-cmd --reload

  5. Këtu janë rregullat e punës:

    firewall-cmd --list-all

Duke aplikuar të gjitha ndryshimet tona në Elasticsearch

  1. Krijo një variabël me shtegun e plotë për në dosje me shtojcën:

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

  2. Le të ekzekutojmë një skript që do të përditësojë fjalëkalimet dhe do të kontrollojë 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. Kontrolloni nëse ndryshimet janë zbatuar:

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

Kjo është e gjitha, këto janë cilësimet minimale që mbrojnë Elasticsearch nga lidhjet e paautorizuara.

Burimi: www.habr.com

Shto një koment