Durante o ano pasado, houbo moitas filtracións das bases de datos
De inmediato, fagamos unha reserva de que na nosa práctica utilizamos Elasticsearch para almacenar rexistros e analizar rexistros de ferramentas de seguridade da información, SO e software na nosa plataforma IaaS, que cumpre cos requisitos de 152-FZ, Cloud-152.
Comprobamos se a base de datos "se pega" a Internet
Na maioría dos casos coñecidos de fugas (
En primeiro lugar, imos ocuparnos da publicación en Internet. Por que ocorre isto? O caso é que para un funcionamento máis flexible de Elasticsearch
Se podes entrar, corre para pechalo.
Protexer a conexión coa base de datos
Agora faremos que sexa imposible conectarse á base de datos sen autenticación.
Elasticsearch ten un módulo de autenticación que limita o acceso á base de datos, pero só está dispoñible no conxunto de complementos X-Pack de pago (un mes de uso gratuíto).
A boa noticia é que no outono de 2019, Amazon abriu os seus desenvolvementos, que se solapan con X-Pack. A función de autenticación ao conectarse a unha base de datos quedou dispoñible baixo unha licenza gratuíta para a versión Elasticsearch 7.3.2, e xa está en proceso unha nova versión para Elasticsearch 7.4.0.
Este complemento é fácil de instalar. Vaia á consola do servidor e conecte o repositorio:
Baseado en RPM:
curl https://d3g5vo6xdbdb9a.cloudfront.net/yum/opendistroforelasticsearch-artifacts.repo -o /etc/yum.repos.d/opendistroforelasticsearch-artifacts.repo
yum update
yum install opendistro-security
Baseado en DEB:
wget -qO ‐ https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch | sudo apt-key add -
Configurar a interacción entre servidores mediante SSL
Ao instalar o complemento, a configuración do porto que se conecta á base de datos cambia. Permite o cifrado SSL. Para que os servidores do clúster sigan traballando entre si, cómpre configurar a interacción entre eles mediante SSL.
A confianza entre hosts pódese establecer con ou sen a súa propia autoridade de certificación. Co primeiro método, todo está claro: só tes que contactar con especialistas de CA. Imos directamente ao segundo.
- Crea unha variable co nome de dominio completo:
export DOMAIN_CN="example.com"
- Crea unha clave privada:
openssl genrsa -out root-ca-key.pem 4096
- Asina o certificado raíz. Mantéñase seguro: se se perde ou se compromete, a confianza entre todos os hosts terá que ser reconfigurada.
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
- Crea unha clave de administrador:
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
- Crea unha solicitude para asinar o certificado:
openssl req -new -subj "/C=RU/ST=Moscow/O=Moscow Inc./CN=${DOMAIN_CN}/CN=admin " -key admin-key.pem -out admin.csr
- Crear un certificado de administrador:
openssl x509 -req -extensions usr_cert -in admin.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out admin.pem
- Crea certificados para o nodo 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
- Crea unha solicitude de sinatura:
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
- Sinatura do certificado:
openssl x509 -req -in node.csr -CA root-ca.pem -CAkey root-ca-key.pem -CAcreateserial -sha256 -out node.pem
- Coloque o certificado entre os nós de Elasticsearch no seguinte cartafol:
/etc/elasticsearch/
necesitamos os ficheiros:node-01-key.pem node-01.pem admin-key.pem admin.pem root-ca.pem
- Personalizar /etc/elasticsearch/elasticsearch.yml – cambiar o nome dos ficheiros con certificados polos xerados por nós:
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
Cambio de contrasinais para usuarios internos
- Usando o seguinte comando, saímos o hash do contrasinal á consola:
sh ${OD_SEC}/tools/hash.sh -p [пароль]
- Cambia o hash do ficheiro polo recibido:
/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml
Configurar un firewall no SO
- Permitir que o firewall se inicie:
systemctl enable firewalld
- Imos lanzalo:
systemctl start firewalld
- Permitir conexión a Elasticsearch:
firewall-cmd --set-default-zone work firewall-cmd --zone=work --add-port=9200/TCP --permanent
- Volve cargar as regras do firewall:
firewall-cmd --reload
- Aquí están as normas de traballo:
firewall-cmd --list-all
Aplicando todos os nosos cambios a Elasticsearch
- Cree unha variable coa ruta completa ao cartafol co complemento:
export OD_SEC="/usr/share/elasticsearch/plugins/opendistro_security/"
- Imos executar un script que actualizará os contrasinais e comprobará a configuración:
${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
- Comproba se se aplicaron os cambios:
curl -XGET https://[IP/Имя Elasticsearch]:9200/_cat/nodes?v -u admin:[пароль] --insecure
Iso é todo, estas son as configuracións mínimas que protexen Elasticsearch das conexións non autorizadas.
Fonte: www.habr.com