วิธีกำหนดค่า Elasticsearch เพื่อหลีกเลี่ยงการรั่วไหล

ในปีที่ผ่านมามีการรั่วไหลของฐานข้อมูลจำนวนมาก ElasticSearch (ที่นี่, ที่นี่ и ที่นี่). ในหลายกรณีข้อมูลส่วนบุคคลถูกเก็บไว้ในฐานข้อมูล การรั่วไหลเหล่านี้สามารถหลีกเลี่ยงได้หากหลังจากปรับใช้ฐานข้อมูลแล้ว ผู้ดูแลระบบได้ใส่ใจที่จะตรวจสอบการตั้งค่าง่ายๆ บางประการ วันนี้เราจะพูดถึงพวกเขา

ให้เราจองทันทีว่าในทางปฏิบัติของเรา เราใช้ Elasticsearch เพื่อจัดเก็บบันทึกและวิเคราะห์บันทึกของเครื่องมือรักษาความปลอดภัยข้อมูล ระบบปฏิบัติการ และซอฟต์แวร์ในแพลตฟอร์ม IaaS ของเรา ซึ่งสอดคล้องกับข้อกำหนดของ 152-FZ, Cloud-152 

วิธีกำหนดค่า Elasticsearch เพื่อหลีกเลี่ยงการรั่วไหล

เราตรวจสอบว่าฐานข้อมูล "เกาะติด" กับอินเทอร์เน็ตหรือไม่

ในกรณีส่วนใหญ่ของการรั่วไหล (ที่นี่, ที่นี่) ผู้โจมตีสามารถเข้าถึงข้อมูลได้อย่างง่ายดายและไม่โอ้อวด: ฐานข้อมูลถูกเผยแพร่บนอินเทอร์เน็ตและสามารถเชื่อมต่อได้โดยไม่ต้องมีการตรวจสอบสิทธิ์  

ขั้นแรก เรามาจัดการกับการเผยแพร่บนอินเทอร์เน็ตกันก่อน ทำไมสิ่งนี้ถึงเกิดขึ้น? ความจริงก็คือเพื่อการทำงานที่ยืดหยุ่นยิ่งขึ้นของ Elasticsearch แนะนำ สร้างคลัสเตอร์สามเซิร์ฟเวอร์ เพื่อให้ฐานข้อมูลสื่อสารกัน คุณต้องเปิดพอร์ต ด้วยเหตุนี้ ผู้ดูแลระบบจึงไม่จำกัดการเข้าถึงฐานข้อมูล แต่อย่างใด และคุณสามารถเชื่อมต่อกับฐานข้อมูลได้จากทุกที่ ง่ายต่อการตรวจสอบว่าฐานข้อมูลสามารถเข้าถึงได้จากภายนอกหรือไม่ เพียงเข้าไปที่เบราว์เซอร์ http://[IP/Имя Elasticsearch]:9200/_cat/nodes?v

ถ้าเข้าไปได้ก็วิ่งไปปิดเลย

การป้องกันการเชื่อมต่อไปยังฐานข้อมูล

ตอนนี้เราจะทำให้มันเป็นไปไม่ได้ที่จะเชื่อมต่อกับฐานข้อมูลโดยไม่มีการรับรองความถูกต้อง

Elasticsearch มีโมดูลการตรวจสอบสิทธิ์ที่จำกัดการเข้าถึงฐานข้อมูล แต่มีเฉพาะในชุดปลั๊กอิน X-Pack แบบชำระเงินเท่านั้น (ใช้งานฟรี 1 เดือน)

ข่าวดีก็คือในฤดูใบไม้ร่วงปี 2019 Amazon ได้เปิดการพัฒนาซึ่งทับซ้อนกับ 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. ด้วยการใช้คำสั่งด้านล่าง เราจะส่งออกแฮชรหัสผ่านไปยังคอนโซล:

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

  2. เปลี่ยนแฮชในไฟล์เป็นแฮชที่ได้รับ:

    /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 จากการเชื่อมต่อที่ไม่ได้รับอนุญาต

ที่มา: will.com

เพิ่มความคิดเห็น