وخلال العام الماضي، كانت هناك العديد من التسريبات من 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. ننتقل على الفور إلى الثانية.- قم بإنشاء متغير باسم المجال المؤهل بالكامل:
export DOMAIN_CN="example.com"
- إنشاء مفتاح خاص:
openssl genrsa -out root-ca-key.pem 4096
- وقعنا على شهادة الجذر. احتفظ بها على أنها تفاحة عينك: إذا فقدت أو تعرضت للخطر ، فستحتاج الثقة بين جميع المضيفين إلى إعادة تكوينها.
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
- إنشاء مفتاح مسؤول:
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
- إنشاء طلب لتوقيع شهادة:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " \
-key admin-key.pem -out admin.csr
- إنشاء شهادة مسؤول:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem \
-CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- إنشاء شهادات لعقدة 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
- إنشاء طلب للتوقيع:
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
- وقعنا على الشهادة:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial \
-sha256 -out node.pem
- نحلل الشهادة بين عُقد Elasticsearch في المجلد:
/etc/elasticsearch/
نحتاج الملفات:
node-01-key.pem
node-01.pem
admin-key.pem
admin.pem
root-ca.pem
- قم بإعداد /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
نقوم بتغيير كلمات المرور للمستخدمين الداخليين
- باستخدام الأمر أدناه ، نقوم بعرض تجزئة كلمة المرور في وحدة التحكم:
sh ${OD_SEC}/tools/hash.sh -p []
- قم بتغيير التجزئة في الملف إلى الملف الذي تم استلامه:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
قم بتكوين جدار الحماية في نظام التشغيل
- السماح بتشغيل جدار الحماية:
systemctl enable firewalld
- شغلها:
systemctl start firewalld
- نحن نسمح بالاتصال بـ Elasticsearch:
firewall-cmd --set-default-zone work
firewall-cmd --zone=work --add-port=9200/TCP --permanent
- إعادة تشغيل قواعد جدار الحماية:
firewall-cmd --reload
- نستمد قواعد العمل:
firewall-cmd --list-all
تطبيق جميع تغييراتنا على Elasticsearch
- أنشئ متغيرًا مع المسار الكامل للمجلد باستخدام المكون الإضافي:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- قم بتشغيل برنامج نصي يقوم بتحديث كلمات المرور والتحقق من الإعدادات:
${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
- تحقق مما إذا كانت التغييرات مطبقة:
curl -XGET https://[IP/ Elasticsearch]:9200/_cat/nodes?v -u admin:[] --insecure
هذا كل شيء ، هذه هي الحد الأدنى من الإعدادات التي تمنع Elasticsearch من اتصال غير مصرح به.