خلال العام الماضي، كانت هناك العديد من التسريبات من قواعد البيانات
دعونا نحجز على الفور أننا نستخدم Elasticsearch في ممارستنا لتخزين السجلات وتحليل سجلات أدوات أمن المعلومات ونظام التشغيل والبرامج في منصة IaaS الخاصة بنا، والتي تتوافق مع متطلبات 152-FZ وCloud-152.
نتحقق مما إذا كانت قاعدة البيانات "ملتصقة" بالإنترنت
في معظم حالات التسرب المعروفة (
أولاً، دعونا نتعامل مع النشر على الإنترنت. لماذا يحدث هذا؟ الحقيقة هي أنه من أجل التشغيل الأكثر مرونة لـ Elasticsearch
إذا تمكنت من الدخول، فاركض لإغلاقه.
حماية الاتصال بقاعدة البيانات
الآن سنفعل ذلك بحيث يكون من المستحيل الاتصال بقاعدة البيانات دون مصادقة.
يحتوي Elasticsearch على وحدة مصادقة تحد من الوصول إلى قاعدة البيانات، ولكنها متاحة فقط في مجموعة المكونات الإضافية X-Pack المدفوعة (استخدام مجاني لمدة شهر واحد).
والخبر السار هو أنه في خريف عام 2019، افتتحت أمازون تطوراتها التي تتداخل مع X-Pack. أصبحت وظيفة المصادقة عند الاتصال بقاعدة بيانات متاحة بموجب ترخيص مجاني للإصدار Elasticsearch 7.3.2، وهناك إصدار جديد لـ Elasticsearch 7.4.0 قيد التنفيذ بالفعل.
هذا البرنامج المساعد سهل التثبيت. انتقل إلى وحدة تحكم الخادم وقم بتوصيل المستودع:
على أساس دورة في الدقيقة:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
على أساس DEB:
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 من الاتصالات غير المصرح بها.
المصدر: www.habr.com