Det senaste året har det varit många läckor från databaser
Låt oss omedelbart reservera att vi i vår praktik använder Elasticsearch för att lagra loggar och analysera loggar för informationssäkerhetsverktyg, OS och mjukvara i vår IaaS-plattform, som uppfyller kraven i 152-FZ, Cloud-152.
Vi kontrollerar om databasen "sticker ut" till Internet
I de flesta kända fall av läckor (
Låt oss först ta itu med publicering på Internet. Varför händer detta? Faktum är att för mer flexibel drift av Elasticsearch
Om du kan komma in, spring då för att stänga den.
Skyddar anslutningen till databasen
Nu ska vi göra det så att det är omöjligt att ansluta till databasen utan autentisering.
Elasticsearch har en autentiseringsmodul som begränsar åtkomsten till databasen, men den är endast tillgänglig i det betalda X-Pack-pluginsetet (1 månad gratis användning).
Den goda nyheten är att Amazon under hösten 2019 öppnade sin utveckling, som överlappar med X-Pack. Autentiseringsfunktionen vid anslutning till en databas har blivit tillgänglig under en gratis licens för version Elasticsearch 7.3.2, och en ny version för Elasticsearch 7.4.0 är redan på gång.
Detta plugin är lätt att installera. Gå till serverkonsolen och anslut arkivet:
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-baserat:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -
Ställa in interaktion mellan servrar via SSL
När plugin-programmet installeras ändras konfigurationen av porten som ansluter till databasen. Det möjliggör SSL-kryptering. För att klusterservrarna ska fortsätta att arbeta med varandra måste du konfigurera interaktionen mellan dem med hjälp av SSL.
Förtroende mellan värdar kan etableras med eller utan en egen certifikatutfärdare. Med den första metoden är allt klart: du behöver bara kontakta CA-specialister. Låt oss gå direkt till den andra.
- Skapa en variabel med det fullständiga domännamnet:
export DOMAIN_CN="example.com"
- Skapa en privat nyckel:
openssl genrsa -out root-ca-key.pem 4096
- Signera rotcertifikatet. Håll det säkert: om det går förlorat eller äventyras 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
- Skapa 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
- Skapa en begäran om att signera certifikatet:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr
- Skapa ett administratörscertifikat:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- Skapa 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
- Skapa en signaturförfrågan:
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
- Signering av certifikatet:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem
- Placera certifikatet mellan Elasticsearch-noder i följande mapp:
/etc/elasticsearch/
vi behöver filerna:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem
- Installation /etc/elasticsearch/elasticsearch.yml – ändra namnet på filerna med certifikat till de som genereras av oss:
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
Ändra lösenord för interna användare
- Med hjälp av kommandot nedan matar vi ut lösenordshashen till konsolen:
sh ${OD_SEC}/tools/hash.sh -p [пароль]
- Ändra hash i filen till den mottagna:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Konfigurera en brandvägg i operativsystemet
- Tillåt brandväggen att starta:
systemctl enable firewalld
- Låt oss lansera det:
systemctl start firewalld
- Tillåt anslutning till Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent
- Ladda om brandväggsreglerna:
firewall-cmd --reload
- Här är arbetsreglerna:
firewall-cmd --list-all
Tillämpar alla våra ändringar på Elasticsearch
- Skapa en variabel med den fullständiga sökvägen till mappen med plugin:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- Låt oss köra ett skript som uppdaterar lösenord och kontrollerar inställningar:
${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/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure
Det är allt, det här är minimiinställningarna som skyddar Elasticsearch från obehöriga anslutningar.
Källa: will.com