Ինչպես կարգավորել 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-ի նոր թողարկումն արդեն մշակվում է:

Այս plugin-ը հեշտ է տեղադրել: Գնացեք սերվերի վահանակ և միացրեք պահեստը.

RPM-ի վրա հիմնված.

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

ՕՀ-ում firewall-ի կարգավորում

  1. Թույլ տալ, որ firewall-ը գործարկվի.

    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-ի կանոնները.

    firewall-cmd --reload

  5. Ահա աշխատանքային կանոնները.

    firewall-cmd --list-all

Մեր բոլոր փոփոխությունները կիրառելով Elasticsearch-ում

  1. Ստեղծեք փոփոխական՝ դեպի թղթապանակ տանող ամբողջ ճանապարհով plugin-ով.

    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-ը չարտոնված միացումներից:

Source: www.habr.com

Добавить комментарий