Het afgelopen jaar zijn er veel lekken uit databases geweest
Laten we meteen een voorbehoud maken dat we in onze praktijk Elasticsearch gebruiken om logs op te slaan en logs van informatiebeveiligingstools, OS en software te analyseren in ons IaaS-platform, dat voldoet aan de eisen van 152-FZ, Cloud-152.
We controleren of de database ‘opvalt’ op internet
In de meeste bekende gevallen van lekkage (
Laten we eerst eens kijken naar het publiceren op internet. Waarom gebeurt dit? Feit is dat voor een flexibelere werking van Elasticsearch
Als je erin kunt komen, ren dan om het te sluiten.
Beveiliging van de verbinding met de database
Nu gaan we ervoor zorgen dat het onmogelijk is om zonder authenticatie verbinding te maken met de database.
Elasticsearch beschikt over een authenticatiemodule die de toegang tot de database beperkt, maar is alleen beschikbaar in de betaalde X-Pack plugin set (1 maand gratis gebruik).
Het goede nieuws is dat Amazon in het najaar van 2019 zijn ontwikkelingen opende, die overlappen met X-Pack. De authenticatiefunctie bij het verbinden met een database is beschikbaar gekomen onder een gratis licentie voor versie Elasticsearch 7.3.2, en een nieuwe release voor Elasticsearch 7.4.0 is al in de maak.
Deze plug-in is eenvoudig te installeren. Ga naar de serverconsole en sluit de repository aan:
Op basis van toerental:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
DEB-gebaseerd:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -
Interactie tussen servers instellen via SSL
Wanneer u de plug-in installeert, verandert de configuratie van de poort die verbinding maakt met de database. Het maakt SSL-codering mogelijk. Om ervoor te zorgen dat de clusterservers met elkaar kunnen blijven samenwerken, moet u de interactie tussen de servers configureren met behulp van SSL.
Vertrouwen tussen hosts kan tot stand worden gebracht met of zonder een eigen certificeringsinstantie. Bij de eerste methode is alles duidelijk: u hoeft alleen maar contact op te nemen met CA-specialisten. Laten we meteen naar de tweede gaan.
- Maak een variabele met de volledige domeinnaam:
export DOMAIN_CN="example.com"
- Maak een privésleutel:
openssl genrsa -out root-ca-key.pem 4096
- Onderteken het rootcertificaat. Houd het veilig: als het verloren gaat of in gevaar komt, moet het vertrouwen tussen alle hosts opnieuw worden geconfigureerd.
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
- Maak een beheerderssleutel:
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
- Maak een verzoek om het certificaat te ondertekenen:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr
- Maak een beheerderscertificaat aan:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- Maak certificaten voor het Elasticsearch-knooppunt:
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
- Maak een handtekeningverzoek aan:
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
- Ondertekening van het certificaat:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem
- Plaats het certificaat tussen Elasticsearch-knooppunten in de volgende map:
/etc/elasticsearch/
we hebben de bestanden nodig:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem
- Opzetten /etc/elasticsearch/elasticsearch.yml – wijzig de naam van de bestanden met certificaten naar de bestanden die door ons zijn gegenereerd:
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
Wachtwoorden wijzigen voor interne gebruikers
- Met behulp van de onderstaande opdracht voeren we de wachtwoord-hash uit naar de console:
sh ${OD_SEC}/tools/hash.sh -p [пароль]
- Verander de hash in het bestand naar de ontvangen hash:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Een firewall instellen in het besturingssysteem
- Laat de firewall starten:
systemctl enable firewalld
- Laten we het lanceren:
systemctl start firewalld
- Verbinding met Elasticsearch toestaan:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent
- Laad de firewallregels opnieuw:
firewall-cmd --reload
- Dit zijn de werkregels:
firewall-cmd --list-all
Al onze wijzigingen toepassen op Elasticsearch
- Maak een variabele met het volledige pad naar de map met de plug-in:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- Laten we een script uitvoeren dat wachtwoorden bijwerkt en instellingen controleert:
${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
- Controleer of de wijzigingen zijn toegepast:
curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure
Dat is alles, dit zijn de minimale instellingen die Elasticsearch beschermen tegen ongeautoriseerde verbindingen.
Bron: www.habr.com