Sızıntıları önlemek için Elasticsearch nasıl yapılandırılır

Geçtiğimiz yıl boyunca veritabanlarından çok sayıda sızıntı yaşandı Elasticsearch (burada, burada и burada). Çoğu durumda kişisel veriler veri tabanında saklanıyordu. Yöneticiler veritabanını dağıttıktan sonra birkaç basit ayarı kontrol etme zahmetine girselerdi bu sızıntılar önlenebilirdi. Bugün onlar hakkında konuşacağız.

Uygulamamızda 152-FZ, Cloud-152 gereksinimlerine uygun IaaS platformumuzda bilgi güvenliği araçları, işletim sistemi ve yazılımlara ait logları depolamak ve logları analiz etmek için Elasticsearch'ü kullandığımıza hemen rezervasyon yaptıralım. 

Sızıntıları önlemek için Elasticsearch nasıl yapılandırılır

Veritabanının İnternet'e "yapışıp yapışmadığını" kontrol ediyoruz

Bilinen sızıntı vakalarının çoğunda (burada, burada) saldırgan verilere basit ve gösterişsiz bir şekilde erişim sağladı: veritabanı internette yayınlandı ve ona kimlik doğrulama olmadan bağlanmak mümkündü.  

Öncelikle internette yayınlama konusunu ele alalım. Bu neden oluyor? Gerçek şu ki, Elasticsearch'ün daha esnek çalışması için tavsiye üç sunucudan oluşan bir küme oluşturun. Veritabanlarının birbirleriyle iletişim kurabilmesi için portları açmanız gerekir. Sonuç olarak yöneticiler hiçbir şekilde veritabanına erişimi kısıtlamaz ve veritabanına her yerden bağlanabilirsiniz. Veritabanına dışarıdan erişilip erişilemeyeceğini kontrol etmek kolaydır. Tarayıcıya girmeniz yeterli http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

İçeri girebilirsen koşarak kapat.

Veritabanına olan bağlantıyı koruma

Şimdi bunu, kimlik doğrulama olmadan veritabanına bağlanmayı imkansız hale getireceğiz.

Elasticsearch'ün veritabanına erişimi sınırlayan bir kimlik doğrulama modülü vardır, ancak bu yalnızca ücretli X-Pack eklenti setinde mevcuttur (1 aylık ücretsiz kullanım).

İyi haber şu ki Amazon, X-Pack ile örtüşen geliştirmelerini 2019 sonbaharında açtı. Bir veritabanına bağlanırken kimlik doğrulama işlevi, Elasticsearch 7.3.2 sürümü için ücretsiz lisans kapsamında kullanılabilir hale geldi ve Elasticsearch 7.4.0 için yeni bir sürüm halihazırda yapım aşamasındadır.

Bu eklentinin kurulumu kolaydır. Sunucu konsoluna gidin ve depoyu bağlayın:

RPM Tabanlı:

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

yum update

yum install opendistro-security


DEB Tabanlı:

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

SSL aracılığıyla sunucular arasında etkileşim kurma

Eklentiyi kurarken veritabanına bağlanan portun konfigürasyonu değişir. SSL şifrelemesini etkinleştirir. Küme sunucularının birbirleriyle çalışmaya devam edebilmesi için aralarındaki etkileşimi SSL kullanarak yapılandırmanız gerekir.

Ana bilgisayarlar arasında güven, kendi sertifika yetkilisi olsun veya olmasın kurulabilir. İlk yöntemle her şey açıktır: CA uzmanlarıyla iletişime geçmeniz yeterlidir. Hemen ikinciye geçelim.

  1. Tam alan adına sahip bir değişken oluşturun:

    export DOMAIN_CN="example.com"

  2. Özel bir anahtar oluşturun:

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

  3. Kök sertifikayı imzalayın. Güvende tutun: Kaybolursa veya ele geçirilirse tüm ana bilgisayarlar arasındaki güvenin yeniden yapılandırılması gerekecektir.

    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. Yönetici anahtarı oluşturun:

    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. Sertifikayı imzalamak için bir istek oluşturun:

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

  6. Yönetici sertifikası oluşturun:

    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 düğümü için sertifikalar oluşturun:

    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. Bir imza isteği oluşturun:

    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. Sertifikanın imzalanması:

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

  10. Sertifikayı aşağıdaki klasördeki Elasticsearch düğümleri arasına yerleştirin:

    /etc/elasticsearch/


    dosyalara ihtiyacımız var:

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

  11. özelleştirilebilir /etc/elasticsearch/elasticsearch.yml – Sertifikalı dosyaların adını bizim tarafımızdan oluşturulanlarla değiştirin:

    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

Dahili kullanıcılar için şifreleri değiştirme

  1. Aşağıdaki komutu kullanarak şifre karmasını konsola çıktılıyoruz:

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

  2. Dosyadaki karmayı alınan karmayla değiştirin:

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

İşletim sisteminde bir güvenlik duvarı kurma

  1. Güvenlik duvarının başlamasına izin ver:

    systemctl enable firewalld

  2. Hadi başlatalım:

    systemctl start firewalld

  3. Elasticsearch'e bağlantıya izin ver:

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

  4. Güvenlik duvarı kurallarını yeniden yükleyin:

    firewall-cmd --reload

  5. İşte çalışma kuralları:

    firewall-cmd --list-all

Tüm değişikliklerimizi Elasticsearch'e uyguluyoruz

  1. Eklentinin bulunduğu klasörün tam yolunu içeren bir değişken oluşturun:

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

  2. Şifreleri güncelleyecek ve ayarları kontrol edecek bir komut dosyası çalıştıralım:

    ${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. Değişikliklerin uygulanıp uygulanmadığını kontrol edin:

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

Hepsi bu kadar, bunlar Elasticsearch'ü yetkisiz bağlantılardan koruyan minimum ayarlardır.

Kaynak: habr.com

Yorum ekle