در طول سال گذشته، نشت های زیادی از پایگاه های داده وجود داشته است
بیایید فوراً رزرو کنیم که در عمل خود از 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