Ағып кетуді болдырмау үшін Elasticsearch қалай конфигурациялауға болады

Соңғы бір жылда деректер қорынан көптеген ақпарат ағып кетті Elasticearch (қараңыз, қараңыз и қараңыз). Көптеген жағдайларда деректер базасында жеке деректер сақталды. Егер дерекқорды орналастырғаннан кейін әкімшілер бірнеше қарапайым параметрлерді тексеруге алаңдаса, бұл ағып кетуді болдырмауға болар еді. Бүгін біз олар туралы сөйлесетін боламыз.

Біздің тәжірибемізде 152-FZ, Cloud-152 талаптарына сәйкес келетін IaaS платформасында ақпараттық қауіпсіздік құралдарының, ОЖ және бағдарламалық қамтамасыз ету журналдарын сақтау және талдау үшін Elasticsearch қолданатынымызды бірден ескертейік. 

Ағып кетуді болдырмау үшін 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 үшін жаңа шығарылым қазірдің өзінде жұмыста.

Бұл плагинді орнату оңай. Сервер консоліне өтіп, репозиторийді қосыңыз:

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

Операциялық жүйеде брандмауэр орнату

  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

пікір қалдыру