Hogyan állítsuk be az Elasticsearch-t, hogy elkerüljük az adatlopásokat

Az utolsó évben sok adatlopás történt az adatbázisokból Elasticsearch (itt van, itt van és itt van). Sok esetben az adatbázisokban személyes adatok voltak. Ezek az adatlopások elkerülhetőek lettek volna, ha az adatbázis telepítése után az adminisztrátorok figyeltek volna néhány egyszerű beállításra. Ma ezekről fogunk beszélni.

Előre bocsátjuk, hogy gyakorlatunkban az Elasticsearch-t a naplók tárolására és az információvédelmi eszközök, az operációs rendszerek és a szoftverek naplóinak elemzésére használjuk az IaaS-platformunkon, amely megfelel a 152-ФЗ előírásainak, Cloud-152. 

Hogyan állítsuk be az Elasticsearch-t, hogy elkerüljük az adatlopásokat

Ellenőrizzük, hogy „nincs-e kint” az adatbázis az interneten

A legtöbb ismert adatlopási esetben (itt van, itt van) a támadó egyszerűen hozzáfért az adatokhoz: az adatbázis publikálva volt az interneten, és hitelesítés nélkül csatlakozható volt.  

Először nézzük meg az internetes publikálást. Miért történik ez? Azért, mert az Elasticsearch rugalmasabb működése érdekében ajánlott három szerverből álló klasztereket létrehozni. Ahhoz, hogy az adatbázisok kommunikálni tudjanak egymással, portokat kell megnyitni. Így az adminisztrátorok nem korlátozzák a hozzáférést az adatbázishoz, és az adatbázisokhoz bárhonnan csatlakozni lehet. Könnyen ellenőrizhetjük, hogy van-e hozzáférés az adatbázishoz kívülről. Egyszerűen csak beírjuk a böngészőbe http://[IP/Elasticsearch név]:9200/_cat/nodes?v

Ha sikerül belépni, akkor gyorsan zárjuk le.

Védjük az adatbázishoz való kapcsolódást

Most olyan beállítást csinálunk, hogy az adatbázishoz ne lehessen csatlakozni hitelesítés nélkül.

Az Elasticsearch rendelkezik egy hitelesítési modullal, amely korlátozza az adatbázishoz való hozzáférést, de ez csak a X-Pack fizetős bővítménycsomagban található (1 hónap ingyenes használat).

A jó hír az, hogy 2019 őszén az Amazon megnyitotta az X-Pack-kel kapcsolatos fejlesztéseit. A hitelesítési funkció elérhetővé vált szabad licenc alatt az Elasticsearch 7.3.2 verzióhoz, és már folyamatban van az új kiadás az Elasticsearch 7.4.0-hoz.

Ez a bővítmény egyszerűen telepíthető. Belépünk a szerver konzoljába, és csatlakoztatjuk a tárolót:

RPM alapú:

curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo

yum update

yum install opendistro-security


DEB alapú:

wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -

Az SSL-en keresztüli szerverek közötti kapcsolatot állítjuk be

A bővítmény telepítésekor megváltozik az adatbázis kapcsolati portjának konfigurációja. Ezen aktiválódik az SSL titkosítás. Annak érdekében, hogy a klaszter szerverei továbbra is tudjanak együtt működni, be kell állítani a köztük lévő interakciót SSL segítségével.

A hostok közötti bizalmat létrehozhatjuk saját tanúsítványkibocsátó központ (CA) használatával, vagy anélkül. Az első módszer egyértelmű: csak szakértőkhöz kell fordulni a CA ügyében. Térjünk át egyből a másodikra.

  1. Hozzuk létre a teljes domain névhez tartozó változót:

    export DOMAIN_CN="example.com"

  2. Hozzuk létre a privát kulcsot:

    openssl genrsa -out root-ca-key.pem 4096

  3. Írjuk alá a gyökér tanúsítványt. Őrizzük meg, mint a szemben a szemet: ha elveszik vagy kompromittálódik, a bizalmat az összes hoszt között újra be kell állítani.

    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. Hozzuk létre az adminisztrátor kulcsot:

    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. Hozzunk létre egy tanúsítvány aláírási kérést:

    openssl req -new -subj "\/C=RU\/ST=Moscow\/O=Moscow Inc.\/CN=${DOMAIN_CN}\/CN=admin " 
    -key admin-key.pem -out admin.csr

  6. Hozzuk létre az adminisztrátor tanúsítványt:

    openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem 
    -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem

  7. Hozzunk létre tanúsítványokat az Elasticsearch csomópont számára:

    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. Hozzunk létre egy aláírási kérelmet:

    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. Írjuk alá a tanúsítványt:

    openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial 
    -sha256 -out node.pem

  10. Helyezzük el a tanúsítványokat az Elasticsearch csomópontok között a következő mappába:

    /etc/elasticsearch/


    Szükségünk lesz a következő fájlokra:

            node-01-key.pem
    	node-01.pem
    	admin-key.pem
    	admin.pem
    	root-ca.pem

  11. Beállítjuk /etc/elasticsearch/elasticsearch.yml – átnevezzük a tanúsítványokkal kapcsolatos fájlokat az általunk generált nevekre:

    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

Belső felhasználók jelszavait cseréljük

  1. Az alábbi parancs segítségével kiírjuk a jelszó hash-ét a konzolra:

    sh ${OD_SEC}/tools/hash.sh -p [jelszó]

  2. Kicseréljük a hash-t a fájlban a kapott értékre:

    /usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml

Tűzfal beállítása az operációs rendszerben

  1. Engedélyezzük a tűzfal indítását:

    systemctl enable firewalld

  2. Elindítjuk:

    systemctl start firewalld

  3. Elérhetőség engedélyezése az Elasticsearch-hez:

    firewall-cmd --set-default-zone work
    firewall-cmd --zone=work --add-port=9200/TCP --permanent

  4. Újraindítjuk a tűzfalszabályokat:

    firewall-cmd --reload

  5. Megjelenítjük a működő szabályokat:

    firewall-cmd --list-all

Alkalmazzuk az összes módosítást az Elasticsearch-ra

  1. Létrehozunk egy változót a plugin mappájának teljes elérési útjával:

    export  OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"

  2. Futtatjuk a scriptet, amely frissíti a jelszavakat és ellenőrzi a beállításokat:

    ${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. Ellenőrizzük, hogy a módosítások életbe léptek-e:

    curl -XGET https://[IP/Elasticsearch név]:9200/_cat/nodes?v -u admin:[jelszó] --insecure

Ezek a minimális beállítások, amelyek megakadályozzák az Elasticsearch nem engedélyezett csatlakozását.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster