لیک سے بچنے کے لیے Elasticsearch کو کیسے ترتیب دیا جائے۔

پچھلے ایک سال کے دوران، ڈیٹا بیس سے کئی لیک ہو چکے ہیں۔ Elasticsearch (یہاں, یہاں и یہاں)۔ بہت سے معاملات میں، ذاتی ڈیٹا کو ڈیٹا بیس میں محفوظ کیا گیا تھا۔ ان لیکس سے بچا جا سکتا تھا اگر، ڈیٹا بیس کی تعیناتی کے بعد، منتظمین نے چند آسان ترتیبات کو چیک کرنے کی زحمت کی۔ آج ہم ان کے بارے میں بات کریں گے۔

آئیے فوری طور پر ایک ریزرویشن کرتے ہیں کہ اپنی مشق میں ہم اپنے IaaS پلیٹ فارم میں لاگز کو اسٹور کرنے اور انفارمیشن سیکیورٹی ٹولز، OS اور سافٹ ویئر کے لاگز کا تجزیہ کرنے کے لیے Elasticsearch کا استعمال کرتے ہیں، جو 152-FZ، Cloud-152 کے تقاضوں کی تعمیل کرتا ہے۔ 

لیک سے بچنے کے لیے Elasticsearch کو کیسے ترتیب دیا جائے۔

ہم چیک کرتے ہیں کہ آیا ڈیٹا بیس انٹرنیٹ سے "چپ جاتا ہے"

لیک کے زیادہ تر معلوم معاملات میں (یہاں, یہاں) حملہ آور نے آسانی سے اور غیر واضح طور پر ڈیٹا تک رسائی حاصل کی: ڈیٹا بیس انٹرنیٹ پر شائع کیا گیا تھا، اور بغیر تصدیق کے اس سے جڑنا ممکن تھا۔  

سب سے پہلے، انٹرنیٹ پر اشاعت کے ساتھ نمٹنے دو. ایسا کیوں ہوتا ہے؟ حقیقت یہ ہے کہ Elasticsearch کے زیادہ لچکدار آپریشن کے لیے تجویز کردہ تین سرورز کا ایک کلسٹر بنائیں۔ ڈیٹا بیس کو ایک دوسرے کے ساتھ بات چیت کرنے کے لیے، آپ کو بندرگاہیں کھولنے کی ضرورت ہے۔ نتیجے کے طور پر، منتظمین کسی بھی طرح سے ڈیٹا بیس تک رسائی پر پابندی نہیں لگاتے ہیں، اور آپ کہیں سے بھی ڈیٹا بیس سے جڑ سکتے ہیں۔ یہ چیک کرنا آسان ہے کہ آیا ڈیٹا بیس باہر سے قابل رسائی ہے۔ بس براؤزر میں داخل ہوں۔ http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

اگر آپ اندر جا سکتے ہیں، تو اسے بند کرنے کے لیے دوڑیں۔

ڈیٹا بیس سے کنکشن کی حفاظت کرنا

اب ہم اسے اس طرح بنائیں گے کہ بغیر تصدیق کے ڈیٹا بیس سے جڑنا ناممکن ہے۔

Elasticsearch میں ایک تصدیقی ماڈیول ہے جو ڈیٹا بیس تک رسائی کو محدود کرتا ہے، لیکن یہ صرف ادا شدہ X-Pack پلگ ان سیٹ (1 ماہ مفت استعمال) میں دستیاب ہے۔

اچھی خبر یہ ہے کہ 2019 کے موسم خزاں میں، ایمیزون نے اپنی پیشرفت کو کھولا، جو ایکس پیک کے ساتھ اوورلیپ ہے۔ ڈیٹا بیس سے منسلک ہونے پر توثیق کا فنکشن Elasticsearch 7.3.2 ورژن کے لیے ایک مفت لائسنس کے تحت دستیاب ہو گیا ہے، اور Elasticsearch 7.4.0 کے لیے ایک نئی ریلیز پہلے سے ہی کام میں ہے۔

یہ پلگ ان انسٹال کرنا آسان ہے۔ سرور کنسول پر جائیں اور ریپوزٹری کو جوڑیں:

RPM کی بنیاد پر:

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

yum update

yum install opendistro-security


ڈی ای بی کی بنیاد پر:

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

OS میں فائر وال سیٹ کرنا

  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

نیا تبصرہ شامل کریں