כיצד להגדיר את Elasticsearch כדי למנוע דליפות

במהלך השנה האחרונה היו הדלפות רבות ממאגרי מידע 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. באמצעות הפקודה למטה, אנו מוציאים את ה-hash של הסיסמה למסוף:

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

  2. שנה את ה-hash בקובץ לזה שהתקבל:

    /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

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster