Oqishning oldini olish uchun Elasticsearch-ni qanday sozlash kerak

O'tgan yil davomida ma'lumotlar bazalaridan ko'plab oqishlar bo'lgan Elasticsearch (ko'raylik, ko'raylik и ko'raylik). Ko'p hollarda shaxsiy ma'lumotlar ma'lumotlar bazasida saqlangan. Agar ma'lumotlar bazasini joylashtirgandan so'ng, ma'murlar bir nechta oddiy sozlamalarni tekshirib ko'rishsa, bu oqishlarning oldini olish mumkin edi. Bugun biz ular haqida gaplashamiz.

Darhol ta'kidlaymizki, biz o'z amaliyotimizda 152-FZ, Cloud-152 talablariga javob beradigan IaaS platformamizdagi axborot xavfsizligi vositalari, OS va dasturiy ta'minot jurnallarini saqlash va tahlil qilish uchun Elasticsearch-dan foydalanamiz. 

Oqishning oldini olish uchun Elasticsearch-ni qanday sozlash kerak

Biz ma'lumotlar bazasi Internetga "yopishib qolgan" yoki yo'qligini tekshiramiz

Oqishning ko'p hollarda (ko'raylik, ko'raylik) tajovuzkor ma'lumotlarga oddiy va oddiygina kirish huquqiga ega bo'ldi: ma'lumotlar bazasi Internetda nashr etilgan va unga autentifikatsiyasiz ulanish mumkin edi.  

Birinchidan, Internetda nashr qilish bilan shug'ullanamiz. Nima uchun bu sodir bo'ladi? Gap shundaki, Elasticsearch-ning yanada moslashuvchan ishlashi uchun tavsiya etiladi uchta serverdan iborat klaster yarating. Ma'lumotlar bazalari bir-biri bilan bog'lanishi uchun siz portlarni ochishingiz kerak. Natijada, ma'murlar ma'lumotlar bazasiga kirishni hech qanday tarzda cheklamaydilar va siz istalgan joydan ma'lumotlar bazasiga ulanishingiz mumkin. Ma'lumotlar bazasiga tashqaridan kirish mumkinligini tekshirish oson. Faqat brauzerga kiring http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

Agar kirishingiz mumkin bo'lsa, uni yopish uchun yuguring.

Ma'lumotlar bazasiga ulanishni himoya qilish

Endi biz buni shunday qilamizki, autentifikatsiyasiz ma'lumotlar bazasiga ulanish imkonsiz bo'ladi.

Elasticsearch ma'lumotlar bazasiga kirishni cheklovchi autentifikatsiya moduliga ega, lekin u faqat pullik X-Pack plaginlari to'plamida mavjud (1 oylik bepul foydalanish).

Yaxshi xabar shundaki, 2019 yil kuzida Amazon X-Pack bilan bir-biriga mos keladigan ishlanmalarini ochdi. Ma'lumotlar bazasiga ulanishda autentifikatsiya funksiyasi Elasticsearch 7.3.2 versiyasi uchun bepul litsenziya ostida mavjud bo'ldi va Elasticsearch 7.4.0 uchun yangi reliz allaqachon ishlamoqda.

Ushbu plaginni o'rnatish oson. Server konsoliga o'ting va omborni ulang:

RPM asosida:

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

yum update

yum install opendistro-security


DEB asosida:

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

SSL orqali serverlar o'rtasida o'zaro aloqani o'rnatish

Plaginni o'rnatishda ma'lumotlar bazasiga ulanadigan portning konfiguratsiyasi o'zgaradi. Bu SSL shifrlash imkonini beradi. Klaster serverlari bir-biri bilan ishlashda davom etishi uchun siz SSL yordamida ular o'rtasidagi o'zaro aloqani sozlashingiz kerak.

Xostlar o'rtasidagi ishonch o'z sertifikat vakolatiga ega yoki bo'lmasdan o'rnatilishi mumkin. Birinchi usul bilan hamma narsa aniq: faqat CA mutaxassislariga murojaat qilishingiz kerak. Keling, to'g'ridan-to'g'ri ikkinchisiga o'tamiz.

  1. To'liq domen nomi bilan o'zgaruvchi yarating:

    export DOMAIN_CN="example.com"

  2. Shaxsiy kalit yarating:

    openssl genrsa -out root-ca-key.pem 4096

  3. Ildiz sertifikatiga imzo cheking. Uni xavfsiz saqlang: agar u yo'qolsa yoki buzilgan bo'lsa, barcha xostlar o'rtasidagi ishonchni qayta sozlash kerak bo'ladi.

    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. Administrator kalitini yarating:

    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. Sertifikatni imzolash uchun so'rov yarating:

    openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " 
    -key admin-key.pem -out admin.csr

  6. Administrator sertifikatini yarating:

    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 tuguniga sertifikatlar yarating:

    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. Imzo so'rovini yarating:

    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. Sertifikatni imzolash:

    openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial 
    -sha256 -out node.pem

  10. Sertifikatni Elasticsearch tugunlari orasiga quyidagi papkaga joylashtiring:

    /etc/elasticsearch/


    bizga fayllar kerak:

            node-01-key.pem
    	node-01.pem
    	admin-key.pem
    	admin.pem
    	root-ca.pem

  11. Konfiguratsiya /etc/elasticsearch/elasticsearch.yml - sertifikatlari bo'lgan fayllar nomini biz yaratganlarga o'zgartiring:

    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

Ichki foydalanuvchilar uchun parollarni o'zgartirish

  1. Quyidagi buyruqdan foydalanib, konsolga parol xeshini chiqaramiz:

    sh ${OD_SEC}/tools/hash.sh -p [пароль]

  2. Fayldagi xeshni qabul qilinganga o'zgartiring:

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

OTda xavfsizlik devorini o'rnatish

  1. Xavfsizlik devorini ishga tushirishga ruxsat bering:

    systemctl enable firewalld

  2. Keling, uni ishga tushiramiz:

    systemctl start firewalld

  3. Elasticsearch-ga ulanishga ruxsat bering:

    firewall-cmd --set-default-zone work
    firewall-cmd --zone=work --add-port=9200/TCP --permanent

  4. Xavfsizlik devori qoidalarini qayta yuklang:

    firewall-cmd --reload

  5. Mana ish qoidalari:

    firewall-cmd --list-all

Barcha o'zgarishlarimizni Elasticsearch-ga qo'llash

  1. Plagin bilan jildga to'liq yo'l bilan o'zgaruvchi yarating:

    export  OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"

  2. Keling, parollarni yangilaydigan va sozlamalarni tekshiradigan skriptni ishga tushiramiz:

    ${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. O'zgarishlar qo'llanganligini tekshiring:

    curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure

Hammasi shu, bular Elasticsearch-ni ruxsatsiz ulanishlardan himoya qiluvchi minimal sozlamalar.

Manba: www.habr.com

a Izoh qo'shish