كيفية تكوين Elasticsearch بحيث لا توجد تسربات

وخلال العام الماضي، كانت هناك العديد من التسريبات من Elasticsearch قواعد البيانات ( هنا ، هنا و هناك ). في كثير من الحالات ، تم تخزين البيانات الشخصية في قاعدة البيانات. يمكن تجنب هذه التسريبات إذا ، بعد نشر قاعدة البيانات ، واجه المسؤولون مشكلة التحقق من بعض الإعدادات البسيطة. اليوم سنتحدث عنها.

سنحجز على الفور أننا في ممارستنا نستخدم Elasticsearch لتخزين السجلات وتحليل سجلات أدوات حماية المعلومات ونظام التشغيل والبرامج في منصة IaaS التي تلبي متطلبات 152- و Cloud-152. 



تحقق مما إذا كانت قاعدة البيانات "ملتصقة"


في معظم حالات التسرب المعروفة ( هنا ، هنا ) ، تمكن المهاجم من الوصول إلى البيانات ببساطة وببساطة: تم نشر قاعدة البيانات على الإنترنت ، وكان من الممكن الاتصال بها دون مصادقة.  

أولاً ، سنتعامل مع النشر على الإنترنت. لماذا هو كذلك؟ والحقيقة هي أنه من أجل التشغيل الأكثر مرونة لـ Elasticsearch ، يوصى بإنشاء مجموعة من ثلاثة خوادم. لكي تتمكن قواعد البيانات من التواصل مع بعضها البعض ، تحتاج إلى فتح المنافذ. نتيجة لذلك ، لا يقوم المسؤولون بتقييد الوصول إلى قاعدة البيانات ، ويمكنك الاتصال بقاعدة البيانات من أي مكان. من السهل التحقق مما إذا كان هناك وصول خارجي إلى قاعدة البيانات. ما عليك سوى إدخال http: // [IP / Elasticsearch Name]: 9200 / _cat / nodes؟ في المتصفح ؟ V

إذا تمكنت من تسجيل الدخول ، فقم بتشغيلها للإغلاق.

نحن نحمي الاتصال بقاعدة البيانات


الآن سنجعل من المستحيل الاتصال بقاعدة البيانات بدون مصادقة.

يحتوي Elasticsearch على وحدة مصادقة تقيد الوصول إلى قاعدة البيانات ، ولكنها موجودة فقط في المجموعة المدفوعة من ملحقات X-Pack (شهر واحد من الاستخدام المجاني).

الخبر السار هو أنه في خريف عام 2019 ، فتحت أمازون أساسها الذي يتقاطع مع X-Pack. أصبحت وظيفة المصادقة عند الاتصال بقاعدة البيانات متاحة بموجب ترخيص مجاني للإصدار Elasticearch 7.3.2. ، وهناك إصدار جديد لـ Elasticsearch 7.4.0 قيد التشغيل بالفعل.

من السهل تثبيت هذا البرنامج المساعد. نذهب إلى وحدة تحكم الخادم ونقوم بتوصيل المستودع:

RPM Based:

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

yum update

yum install opendistro-security

DEB Based:

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

نقوم بتكوين التفاعل بين الخوادم من خلال SSL


عند تثبيت البرنامج المساعد ، يتغير تكوين منفذ اتصال قاعدة البيانات. يتضمن تشفير SSL. لكي تستمر خوادم المجموعة في العمل مع بعضها البعض ، تحتاج إلى تكوين التفاعل بينها باستخدام SSL.

يمكن تأسيس الثقة بين المضيفين مع أو بدون سلطة التصديق الخاصة بك. باستخدام الطريقة الأولى ، كل شيء واضح: ما عليك سوى الاتصال بأخصائي في CA. ننتقل على الفور إلى الثانية.

  1. قم بإنشاء متغير باسم المجال المؤهل بالكامل:

    export DOMAIN_CN="example.com"
  2. إنشاء مفتاح خاص:

    openssl genrsa -out root-ca-key.pem 4096
  3. وقعنا على شهادة الجذر. احتفظ بها على أنها تفاحة عينك: إذا فقدت أو تعرضت للخطر ، فستحتاج الثقة بين جميع المضيفين إلى إعادة تكوينها.

    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. إنشاء مفتاح مسؤول:

    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. إنشاء طلب لتوقيع شهادة:

    openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " \
    -key admin-key.pem -out admin.csr
  6. إنشاء شهادة مسؤول:

    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:

    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. إنشاء طلب للتوقيع:

    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. وقعنا على الشهادة:

    openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial \
    -sha256 -out node.pem
  10. نحلل الشهادة بين عُقد Elasticsearch في المجلد:

    /etc/elasticsearch/

    نحتاج الملفات:

            node-01-key.pem
    	node-01.pem
    	admin-key.pem
    	admin.pem
    	root-ca.pem
  11. قم بإعداد /etc/elasticsearch/elasticsearch.yml - قم بتغيير اسم ملفات الشهادة إلى الملفات التي أنشأناها :

    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

نقوم بتغيير كلمات المرور للمستخدمين الداخليين


  1. باستخدام الأمر أدناه ، نقوم بعرض تجزئة كلمة المرور في وحدة التحكم:

    sh ${OD_SEC}/tools/hash.sh -p []
  2. قم بتغيير التجزئة في الملف إلى الملف الذي تم استلامه:

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

قم بتكوين جدار الحماية في نظام التشغيل


  1. السماح بتشغيل جدار الحماية:

    systemctl enable firewalld
  2. شغلها:

    systemctl start firewalld
  3. نحن نسمح بالاتصال بـ Elasticsearch:

    firewall-cmd --set-default-zone work
    firewall-cmd --zone=work --add-port=9200/TCP --permanent
  4. إعادة تشغيل قواعد جدار الحماية:

    firewall-cmd --reload
  5. نستمد قواعد العمل:

    firewall-cmd --list-all

تطبيق جميع تغييراتنا على Elasticsearch


  1. أنشئ متغيرًا مع المسار الكامل للمجلد باستخدام المكون الإضافي:

    export  OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
  2. قم بتشغيل برنامج نصي يقوم بتحديث كلمات المرور والتحقق من الإعدادات:

    ${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. تحقق مما إذا كانت التغييرات مطبقة:

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

هذا كل شيء ، هذه هي الحد الأدنى من الإعدادات التي تمنع Elasticsearch من اتصال غير مصرح به.

Source: https://habr.com/ru/post/undefined/


All Articles