במהלך השנה האחרונה היו הדלפות רבות ממאגרי מידע (, и ). במקרים רבים, נתונים אישיים נשמרו במאגר המידע. ניתן היה להימנע מהדלפות אלו אם לאחר פריסת בסיס הנתונים, המנהלים היו טורחים לבדוק כמה הגדרות פשוטות. היום נדבר עליהם.
בואו נסתיימר מיד שבפרקטיקה שלנו אנו משתמשים ב- Elasticsearch כדי לאחסן יומנים ולנתח יומנים של כלי אבטחת מידע, מערכת הפעלה ותוכנה בפלטפורמת IaaS שלנו, התואמת את הדרישות של 152-FZ, Cloud-152.

אנו בודקים אם מסד הנתונים "נדבק" לאינטרנט
ברוב המקרים הידועים של דליפות (, ) התוקף השיג גישה לנתונים בפשטות וללא יומרה: מסד הנתונים פורסם באינטרנט, וניתן היה להתחבר אליו ללא אימות.
ראשית, נעסוק בפרסום באינטרנט. למה זה קרה? העובדה היא שעבור פעולה גמישה יותר של 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. בוא נעבור ישר לשני.
- צור משתנה עם שם הדומיין המלא:
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
שינוי סיסמאות למשתמשים פנימיים
- באמצעות הפקודה למטה, אנו מוציאים את ה-hash של הסיסמה למסוף:
sh ${OD_SEC}/tools/hash.sh -p [пароль] - שנה את ה-hash בקובץ לזה שהתקבל:
/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
