نحوه پیکربندی Elasticsearch برای جلوگیری از نشت

در طول سال گذشته، نشت های زیادی از پایگاه های داده وجود داشته است ارزیابی جستجو (اینجا, اینجا и اینجا). در بسیاری از موارد، داده های شخصی در پایگاه داده ذخیره می شد. اگر پس از استقرار پایگاه داده، مدیران برای بررسی چند تنظیمات ساده به خود زحمت می دادند، از این نشت ها جلوگیری می شد. امروز در مورد آنها صحبت خواهیم کرد.

بیایید فوراً رزرو کنیم که در عمل خود از Elasticsearch برای ذخیره گزارش‌ها و تجزیه و تحلیل گزارش‌های ابزارهای امنیت اطلاعات، سیستم‌عامل و نرم‌افزار در پلتفرم IaaS خود استفاده می‌کنیم که با الزامات 152-FZ، Cloud-152 مطابقت دارد. 

نحوه پیکربندی Elasticsearch برای جلوگیری از نشت

ما بررسی می کنیم که آیا پایگاه داده به اینترنت "چسبیده است".

در بیشتر موارد شناخته شده نشت (اینجا, اینجا) مهاجم به سادگی و بدون تکلف به داده ها دسترسی پیدا کرد: پایگاه داده در اینترنت منتشر شد و امکان اتصال به آن بدون احراز هویت وجود داشت.  

ابتدا به انتشار در اینترنت بپردازیم. چرا این اتفاق می افتد؟ واقعیت این است که برای عملکرد انعطاف پذیرتر Elasticsearch توصیه می شود یک خوشه از سه سرور ایجاد کنید. برای اینکه پایگاه های داده با یکدیگر ارتباط برقرار کنند، باید پورت ها را باز کنید. در نتیجه مدیران به هیچ وجه دسترسی به پایگاه داده را محدود نمی کنند و می توانید از هر جایی به پایگاه داده متصل شوید. بررسی اینکه آیا پایگاه داده از خارج قابل دسترسی است یا خیر، آسان است. کافیست وارد مرورگر شوید http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

اگر می توانید وارد شوید، بدوید تا آن را ببندید.

محافظت از اتصال به پایگاه داده

اکنون ما آن را طوری می کنیم که اتصال به پایگاه داده بدون احراز هویت غیرممکن باشد.

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 تماس بگیرید. بیایید مستقیم به دومی برویم.

  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 در برابر اتصالات غیرمجاز محافظت می کنند.

منبع: www.habr.com

اضافه کردن نظر