Elasticsearch-i sızmalara yol verməməsi üçün necə konfiqurasiya etmək olar

Son bir ildə çox sayda məlumat sızması baş verdi Elasticsearch (işte, işte işte). Bir çox hallarda məlumat bazasında şəxsi məlumatlar saxlanılırdı. Bu sızmaları önləmək olardı, əgər məlumat bazası açıldıqdan sonra administratorlar bir neçə sadə parametrləri yoxlasaydılar. Bu gün onlardan danışacağıq.

İlk öncə qeyd edək ki, praktikamızda Elasticsearch-u loq saxlamaq və məlumat təhlükəsizliyi, əməliyyat sistemləri və proqram təminatı üzrə jurnal analizi üçün istifadə edirik. IaaS platformamız 152-FZ və Cloud-152 tələblərinə cavab verir. 

Elasticsearch-i sızmalara yol verməməsi üçün necə konfiqurasiya etmək olar

Məlumat bazasının internetdə "açıqlanıb-açıqlanmadığını" yoxlayırıq

Məlumat sızmalarının əksər tanınmış hallarında (işte, işte) hücumçu verilənlərə sadəcə və asanlıqla daxil olub: məlumat bazası internetdə yayımlanıb və ona identifikasiyasız qoşulmaq mümkün olub.  

Əvvəlcə internetdə yayımlanma məsələsini izah edək. Niyə baş verir? Çünki Elasticsearch-ün daha çevik işləməsi üçün tövsiyə olunur üç serverdən ibarət klaster yaratmaq lazımdır. Məlumat bazalarının bir-biri ilə əlaqə qurması üçün portları açmaq lazımdır. Nəticədə administratorlar məlumat bazasına girişə heç bir məhdudiyyət qoymurlar və ona hər yerdən qoşulmaq olur. Məlumat bazasına xaricdən girişin olub-olmadığını yoxlamaq asandır. Sadəcə brauzerdə http://[IP/Elasticsearch Adı]:9200/_cat/nodes?v

Daxil olmağı bacarırsınızsa, dərhal bağlayın.

Məlumat bazasına qoşulmanı qoruyuruq

İndi məlumat bazasına identifikasiyasız qoşulmağın mümkün olmadığı şəkildə edəcəyik.

Elasticsearch-ün identifikasiya modulu var ki, bu da məlumat bazasına girişə məhdudiyyət qoyur, ancaq bu, yalnız X-Pack ödənişli plagin paketindədir (bir ay pulsuz istifadə imkanı).

Yaxşı xəbərdir ki, 2019-cu ilin payızında Amazon öz inkişaflarını açdı ki, bunlar X-Pack ilə kesişir. Məlumat bazasına qoşulma zamanı identifikasiya funksiyası Elasticsearch 7.3.2 versiyası üçün sərbəst lisenziya altında mövcud oldu və artıq Elasticsearch 7.4.0 üçün yeni versiya işlənir.

Bu plagini quraşdırmaq asandır. Server konsoluna daxil olub repo bağlayırıq:

RPM əsasında:

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

yum update

yum install opendistro-security


DEB əsasında:

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

Serverlər arasında SSL vasitəsilə qarşılıqlı əlaqəni tənzimləyirik

Plaginin qurulması zamanı məlumat bazasına qoşulma portunun konfiqurasiyası dəyişir. Orada SSL şifrələməsi aktiv olur. Klaster serverləri bir-biri ilə işləməyə davam etmək üçün SSL vasitəsilə qarşılıqlı əlaqə tənzimlənməlidir.

Ev sahibi arasında etimad öz CA sisteminiz vasitəsilə və ya olmadan qurula bilər. Birinci üsul hər kəsə məlumdur: sadəcə olaraq CA mütəxəssislərinə müraciət etməlisiniz. İkinciyə keçək.

  1. Tam domen adını ehtiva edən dəyişən yaradırıq:

    export DOMAIN_CN="example.com"

  2. Şəxsi açar yaradırıq:

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

  3. Köklü sertifikamızı imzalayırıq. Onu göz bəbəyiniz kimi saxlayın: itirilməsi və ya tehlil edilməsi halında bütün hostlar arasındaki güvənliyi yeniden ayarlamalısınız.

    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. İdarəçi açarı yaradırıq:

    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. Sertifikat imzalamaq üçün sorğu yaradı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. İdarəçi sertifikatını yaradırıq:

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

  7. Elasticsearch nodu üçün sertifikatlar yaradın:

    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. İmzalama sorğusu yaradın:

    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. Sertifikatı imzalayırıq:

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

  10. Elasticsearch nodları arasında sertifikatı paylayırıq:

    /etc/elasticsearch/


    Bizə aşağıdakı fayllar lazımdır:

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

  11. Parametrləri tənzimləyirik /etc/elasticsearch/elasticsearch.yml – yaratdığımız sertifikat fayllarının adlarını dəyişdiririk:

    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

Daxili istifadəçilərin şifrələrini dəyişdiririk

  1. Aşağıdakı əmrlə konsolda şifrənin hashını çıxarırıq:

    sh ${OD_SEC}/tools/hash.sh -p [şifrə]

  2. Alınan hashı faylda dəyişirik:

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

Əməliyyat sistemində firewall-u tənzimləyirik

  1. Firewall-un işə salınmasına icazə veririk:

    systemctl enable firewalld

  2. Onu işə salırıq:

    systemctl start firewalld

  3. Elasticsearch-ə qoşulmağa icazə veririk:

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

  4. Firewall qaydalarını yenidən yükləyirik:

    firewall-cmd --reload

  5. İşlədilən qaydaları çıxarırıq:

    firewall-cmd --list-all

Bütün dəyişikliklərimizi Elasticsearch-ə tətbiq edirik

  1. Plugin qovluğuna tam yol olan dəyişən yaradırıq:

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

  2. Şifrələri yeniləyəcək və ayarları yoxlayacaq skripti işə salırıq:

    ${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. Dəyişikliklərin tətbiq olunduğunu yoxlayırıq:

    curl -XGET https://[IP/Elasticsearch Adı]:9200/_cat/nodes?v -u admin:[şifre] --insecure

Bütün bunlar, Elasticsearch'u yetkisiz bağlantılara karşı koruyan minimum ayarlardır.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster