Under det senaste Äret har det uppstÄtt mÄnga lÀckor frÄn databaser. (, och ). I mÄnga fall lagrades personuppgifter i databasen. Dessa lÀckor kunde ha undvikits om administratörerna efter distributionen av databasen hade kontrollerat nÄgra enkla instÀllningar. Idag kommer vi att diskutera dem.
För att vara tydlig, i vĂ„r praktik anvĂ€nder vi Elasticsearch för lagring av loggar och analys av informationsskydd, operativsystem och programvara pĂ„ vĂ„r IaaS-plattform som uppfyller kraven i 152-FZ, Cloud-152.Â

Vi kontrollerar om databasen 'tycker' ut pÄ internet.
I de flesta kĂ€nda fallen av lĂ€ckor (, ) fick angriparen enkelt och okomplicerat tillgĂ„ng till data: databasen publicerades pĂ„ internet och kunde anslutas utan autentisering. Â
LÄt oss först ta itu med publicering pÄ internet. Varför hÀnder det? Det handlar om att för att fÄ en mer flexibel anvÀndning av Elasticsearch skapar man en kluster med tre servrar. För att databaserna ska kunna kommunicera behöver man öppna portar. Till slut begrÀnsar administratörerna inte Ätkomsten till databasen, och databasen kan anslutas frÄn var som helst. Att kontrollera om det finns extern Ätkomst till databasen Àr enkelt. Skriv helt enkelt in http://[IP/ElasticsearchNamn]:9200/_cat/nodes?v
Om du kan komma in, betyder det att du snabbt ska stÀnga av Ätkomsten.
Vi skyddar anslutningen till databasen.
Nu gör vi sÄ att databasen inte kan anslutas utan autentisering.
Elasticsearch har en autentiseringsmodul som begrÀnsar Ätkomsten till databasen, men den ingÄr bara i den betalda plugin-samlingen X-Pack (1 mÄnads gratis anvÀndning).
De goda nyheterna Àr att Amazon under hösten 2019 öppnade sina arbeten som överlappar med X-Pack. Autentiseringsfunktionen vid anslutning till databasen blev tillgÀnglig under en öppen licens för version Elasticsearch 7.3.2., och redan i arbete finns en ny version för Elasticsearch 7.4.0.
Denna plugin installeras enkelt. GĂ„ in i serverkonsolen och anslut till repot:
RPM-baserad:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
DEB-baserad:
wget -qO â https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -Konfigurerar interaktionen mellan servrarna via SSL
Vid installation av pluginen Àndras konfigurationen för anslutningsporten till databasen. SSL-kryptering aktiveras pÄ den. För att klusterservrarna ska kunna fortsÀtta samarbeta mÄste interaktionen mellan dem konfigureras med hjÀlp av SSL.
Förtroendet mellan vÀrdar kan etableras med hjÀlp av en egen certifikatutfÀrdare eller utan. Med den första metoden Àr allt tydligt: man mÄste bara vÀnda sig till CA-specialister. LÄt oss gÄ direkt till den andra.
- Vi skapar en variabel med det fullstÀndiga domÀnnamnet:
export DOMAIN_CN="example.com" - Vi skapar en privat nyckel:
openssl genrsa -out root-ca-key.pem 4096 - Vi signerar rotcertifikatet. Förvara det som en ögonsten: om det gÄr förlorat eller komprometteras, mÄste förtroendet mellan alla vÀrdar konfigureras om.
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 - Vi skapar en administratörsnyckel:
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 - Vi skapar en begÀran för certifikatssignering:
openssl req -new -subj "\/C=RU\/ST=Moscow\/O=Moscow Inc.\/CN=${DOMAIN_CN}\/CN=admin " -key admin-key.pem -out admin.csr - Vi skapar administratörscertifikatet:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem - Vi skapar certifikat för Elasticsearch-noden:
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 - Vi skapar en signeringsbegÀran:
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 - Vi signerar certifikatet:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem - Vi distribuerar certifikatet mellan Elasticsearch-noderna i mappen:
/etc/elasticsearch/
Vi kommer att behöva filerna:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem - Vi konfigurerar /etc/elasticsearch/elasticsearch.yml â vi Ă€ndrar namnen pĂ„ certifikatfilerna till de vi har genererat:
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=Moskva Inc.,ST=Moskva,C=RU opendistro_security.nodes_dn: Â Â â CN=node-01.example.com,O=Moskva Inc.,ST=Moskva,C=RU
Ăndrar lösenord för interna anvĂ€ndare
- AnvÀnd kommandot nedan för att skriva ut hash-lösenordet till konsolen:
sh ${OD_SEC}/tools/hash.sh -p [lösenord] - Ăndrar hashen i filen till den mottagna:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Konfigurerar brandvÀggen i OS
- TillÄter start av brandvÀggen:
systemctl enable firewalld - Startar den:
systemctl start firewalld - TillÄter anslutning till Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent - Laddar om brandvÀggsreglerna:
firewall-cmd --reload - Visar aktiva regler:
firewall-cmd --list-all
TillÀmpa alla vÄra Àndringar till Elasticsearch
- Skapa en variabel med den fullstÀndiga sökvÀgen till mappen med plugin:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/" - Kör skriptet som uppdaterar lösenord och kontrollerar instÀllningarna:
${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 - Kontrollera om Àndringarna har tillÀmpats:
curl -XGET https://[IP/Namn Elasticsearch]:9200/_cat/nodes?v -u admin:[lösenord] --insecure
Detta Àr alla grundlÀggande instÀllningar som skyddar Elasticsearch frÄn obehörig Ätkomst.
KĂ€lla: habr.com
