Como Instalar e Proteger o Redis no Ubuntu
Introdução
O Redis é um armazenamento de chave-valor em memória conhecido por sua flexibilidade, desempenho e amplo suporte a linguagens. Ele é frequentemente usado como banco de dados, cache e intermediário de mensagens. Embora uma instalação padrão seja funcional, ela não é segura e deixa seus dados e servidor expostos a ataques. Uma instância do Redis sem proteção pode levar a vazamentos de dados, acesso não autorizado e até comprometimento do servidor.
Este tutorial irá guiá-lo na instalação da versão mais recente do Redis em um servidor Ubuntu e na implementação de uma configuração de segurança pronta para produção. Você aprenderá a configurar o acesso de usuários com Listas de Controle de Acesso (ACLs), criptografar o tráfego com TLS, restringir o acesso à rede com um firewall e aplicar medidas adicionais de reforço do sistema, abrangendo gerenciamento de memória, persistência e configurações de rede seguras.
Principais Conclusões
- Use ACLs para Autenticação Moderna: Sempre use Listas de Controle de Acesso (ACLs) para gerenciar usuários em vez da diretiva
requirepassdesatualizada. Desative o usuáriodefaulte crie usuários específicos com as permissões mínimas necessárias para uma maior segurança. - Criptografe Todo o Tráfego de Rede com TLS: Nunca transmita dados do Redis em texto simples. Implemente TLS para criptografar toda a comunicação entre os clientes e o servidor, protegendo informações sensíveis de serem interceptadas na rede.
- Nunca exponha o Redis diretamente à Internet: Expor uma porta do Redis ao público é um grande risco de segurança. Para acesso remoto, sempre use alternativas seguras, como uma VPN (WireGuard/OpenVPN) ou um túnel SSH, para criar uma conexão privada e criptografada.
- Implemente um Firewall Rigoroso: Um firewall é sua primeira linha de defesa. Se for necessário permitir conexões remotas, configure seu firewall (
ufw) para aceitar tráfego apenas na porta do Redis a partir de endereços IP específicos e confiáveis. - Prevenir Ataques de Esgotamento de Memória: Proteja seu servidor contra ataques de Negação de Serviço (DoS) definindo um limite de memória com a diretiva
maxmemoryna sua configuração. Além disso, defina umamaxmemory-policypara controlar como o Redis remove chaves quando o limite é atingido. - Prefira ACLs em vez de renomear comandos: Evite a prática antiga de renomear comandos perigosos. Isso é frágil e pode quebrar aplicativos clientes e replicação. Em vez disso, use regras de ACL para restringir o acesso a esses comandos por usuário (por exemplo,
-@dangerous). - Use sockets Unix para conexões locais: Para aplicativos que rodam no mesmo servidor que o Redis, use sockets Unix em vez de portas TCP. Eles são mais rápidos e mais seguros, pois evitam a pilha de rede e dependem das permissões do sistema de arquivos.
- Monitore Ativamente os Logs em Busca de Ameaças: Monitore regularmente os logs do sistema com
journalctle ative o log lento do Redis. Fique atento a padrões como autenticações falhas repetidas, conexões de fontes desconhecidas ou comandos abusivos que possam indicar um problema de segurança ou de desempenho. - Proteja Seus Dados em Repouso: Habilite a persistência do Redis (RDB e/ou AOF) para evitar perda de dados. Garanta que os arquivos de dados (
dump.rdb,appendonly.aof) possuam permissões de arquivo rigorosas e estejam incluídos em sua estratégia regular de backup criptografado e fora do local. - Aproveite a Segurança Integrada do Sistema: Aproveite os recursos de segurança fornecidos pelo sistema operacional. No Ubuntu, um perfil padrão do AppArmor é ativado automaticamente para o servidor Redis, o que confina seu processo e limita os danos potenciais de uma vulnerabilidade.
Pré-requisitos
Para completar este guia, você precisará de acesso a um servidor Ubuntu que tenha um usuário não-root com privilégios sudo e um firewall configurado com ufw. Você pode configurar isso seguindo nosso guia de Configuração Inicial do Servidor para Ubuntu.
Passo 1 — Instalando e Configurando o Redis
Usaremos o gerenciador de pacotes APT para instalar o Redis a partir dos repositórios oficiais do Ubuntu. Até o momento, a versão disponível nos repositórios padrão é a 7.0.15.
Comece atualizando o cache de pacotes apt local:
sudo apt updateEm seguida, instale o Redis digitando:
sudo apt install redis-serverIsso irá baixar e instalar o Redis e suas dependências. Uma vez concluída a instalação, é uma boa prática verificar a versão instalada:
redis-server --versionEm seguida, há uma alteração importante de configuração a ser feita no arquivo de configuração do Redis, que foi gerado automaticamente durante a instalação.
Abra este arquivo com o seu editor de texto preferido:
sudo nano /etc/redis/redis.confDentro do arquivo, encontre a diretiva supervised. Esta diretiva permite que você declare um sistema init para gerenciar o Redis como um serviço, proporcionando mais controle sobre sua operação. A diretiva supervised está definida como no por padrão. Como você está executando o Ubuntu, que usa o sistema init systemd, altere isso para systemd:
. . .
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .Essa é a única alteração que você precisa fazer no arquivo de configuração do Redis neste momento, então salve e feche-o quando terminar. Se você usou o nano para editar o arquivo, faça isso pressionando CTRL + X, Y e depois ENTER.
Em seguida, reinicie o serviço Redis para que as alterações feitas no arquivo de configuração entrem em vigor:
sudo systemctl restart redis.serviceCom isso, você instalou e configurou o Redis, e ele está funcionando na sua máquina. Antes de começar a usá-lo, é prudente primeiro verificar se o Redis está funcionando corretamente.
Passo 2 — Testando o Redis
Como acontece com qualquer software recém-instalado, é uma boa ideia garantir que o Redis esteja funcionando conforme o esperado antes de fazer quaisquer alterações adicionais em sua configuração. Nesta etapa, abordaremos algumas maneiras de verificar se o Redis está funcionando corretamente.
Comece verificando se o serviço Redis está em execução:
sudo systemctl status redisSe estiver funcionando sem erros, este comando produzirá uma saída semelhante à seguinte:
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-04-30 23:26:54 UTC; 4s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 36552 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=0/SUCCESS)
Main PID: 36561 (redis-server)
Tasks: 4 (limit: 2345)
Memory: 1.8M
CGroup: /system.slice/redis-server.service
└─36561 /usr/bin/redis-server 127.0.0.1:6379
. . .Aqui, você pode ver que o Redis está em execução e já está habilitado, o que significa que ele está configurado para iniciar toda vez que o servidor for ligado.
Nota: Esta configuração é desejável para muitos casos de uso comuns do Redis. No entanto, se você preferir iniciar o Redis manualmente toda vez que seu servidor for iniciado, você pode configurar isso com o seguinte comando:
sudo systemctl disable redisPara testar se o Redis está funcionando corretamente, conecte-se ao servidor usando redis-cli, o cliente de linha de comando do Redis:
redis-cliNo prompt que segue, teste a conectividade com o comando ping:
pingPONGEsta saída confirma que a conexão com o servidor ainda está ativa. Em seguida, verifique se você consegue definir chaves executando:
set test "It's working!"OKRecupere o valor digitando:
get testAssumindo que tudo esteja funcionando, você poderá recuperar o valor que armazenou:
"It's working!"
Após confirmar que você pode obter o valor, saia do prompt do Redis para voltar ao shell:
exitComo teste final, verificaremos se o Redis é capaz de persistir dados mesmo depois de ter sido interrompido ou reiniciado. Para fazer isso, primeiro reinicie a instância do Redis:
sudo systemctl restart redisEntão conecte-se novamente com o cliente de linha de comando:
redis-cliE confirme se o seu valor de teste ainda está disponível
get testO valor da sua chave ainda deve estar acessível:
"It's working!"Saia novamente para o shell quando terminar:
exitCom isso, sua instalação do Redis está totalmente operacional e pronta para uso. No entanto, algumas das configurações padrão são inseguras e podem fornecer oportunidades para agentes maliciosos atacarem e acessarem seu servidor e seus dados. As etapas restantes deste tutorial abordam métodos para mitigar essas vulnerabilidades, conforme prescrito pelo site oficial do Redis. Embora essas etapas sejam opcionais e o Redis ainda funcione caso você opte por não segui-las, é fortemente recomendado que você as complete para reforçar a segurança do seu sistema.
Etapa 3 — Vinculação ao localhost
Por padrão, o Redis só é acessível a partir de localhost. No entanto, se você instalou e configurou o Redis seguindo um tutorial diferente deste, pode ter atualizado o arquivo de configuração para permitir conexões de qualquer lugar. Isso não é tão seguro quanto vincular ao localhost.
Para corrigir isso, abra o arquivo de configuração do Redis para edição:
sudo nano /etc/redis/redis.confLocalize esta linha e certifique-se de que ela não está comentada (remova o # se existir):
bind 127.0.0.1 ::1Salve e feche o arquivo quando terminar (pressione CTRL + X, Y, e depois ENTER).
Em seguida, reinicie o serviço para garantir que o systemd leia suas alterações:
sudo systemctl restart redisPara verificar se essa alteração entrou em vigor, execute o seguinte comando netstat:
sudo netstat -lnp | grep redistcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 14222/redis-server
tcp6 0 0 ::1:6379 :::* LISTEN 14222/redis-server Nota: O comando netstat pode não estar disponível no seu sistema por padrão. Se for esse o caso, você pode instalá-lo (junto com várias outras ferramentas de rede úteis) com o seguinte comando:
sudo apt install net-toolsEsta saída mostra que o programa redis-server está vinculado a localhost (127.0.0.1), refletindo a alteração que você acabou de fazer no arquivo de configuração. Se você vir outro endereço IP nessa coluna (0.0.0.0, por exemplo), então você deve verificar novamente se descomentou a linha correta e reiniciar o serviço Redis.
Agora que a sua instalação do Redis está ouvindo apenas em localhost, será mais difícil para atores mal-intencionados fazerem solicitações ou obterem acesso ao seu servidor. No entanto, o Redis atualmente não está configurado para exigir que os usuários se autentiquem antes de fazer alterações em sua configuração ou nos dados que ele armazena. Para resolver isso, o Redis permite que você exija que os usuários se autentiquem com uma senha antes de fazer alterações via cliente Redis (redis-cli).
Passo 4 — Protegendo o Redis com Listas de Controle de Acesso (ACLs)
A partir do Redis 6, Listas de Controle de Acesso (ACLs) são o método preferido para gerenciar o acesso e as permissões dos usuários. As ACLs substituem a diretiva mais antiga requirepass por um sistema mais flexível que permite definir múltiplos usuários com senhas e permissões de comando distintas.
Gerando uma Senha Segura
Primeiro, gere uma senha forte para o seu usuário. Você pode usar o comando openssl para criar uma sequência longa e aleatória.
openssl rand 60 | openssl base64 -ACopie a saída, pois você a usará como a senha para seu novo usuário do Redis.
Configurando um Novo Usuário
Agora, abra o arquivo de configuração do Redis novamente.
sudo nano /etc/redis/redis.confRole até a seção ACL. Para criar um novo usuário, você adicionará uma diretiva user. Também é uma boa prática de segurança desativar o usuário default, que por padrão não tem senha e possui permissões completas.
Adicione as seguintes linhas à sua configuração:
# Disable the default user.
user default off
# Create a new user with a strong password and full permissions.
user myuser on >your_generated_password ~* &* +@allAqui está uma explicação da nova regra para usuários:
myuser: O nome de usuário.on: Habilita o usuário.>sua_senha_gerada: Define a senha do usuário.~* &* +@all: Uma regra que permite ao usuário executar todos os comandos (+@all) em todos os keyspaces (~*) e todos os canais de Pub/Sub (&*).
Salve e feche o arquivo, depois reinicie o Redis.
sudo systemctl restart redis.serviceVerificando a Configuração de ACL
Para verificar se as alterações funcionaram, tente se conectar com redis-cli e execute um comando sem autenticar.
redis-cli pingComo o usuário default está agora desativado, o Redis retornará um erro de autenticação.
NOAUTH Authentication required.Isso confirma que o acesso não autenticado está bloqueado. Agora, teste o novo usuário. Usar a flag --askpass é mais seguro do que digitar a senha diretamente, pois evita que a senha seja armazenada no histórico do seu shell.
redis-cli --user myuser --askpassDigite a senha que você gerou quando solicitado. Uma vez conectado, tente executar um comando.
pingO Redis deve retornar PONG. Sua configuração de ACL está funcionando corretamente.
Passo 5 — Criptografando Comunicações Redis com TLS
As ACLs protegem sua instância do Redis contra acessos não autorizados, mas não protegem os dados transmitidos pela rede. O TLS (Transport Layer Security) criptografa esse tráfego, evitando a interceptação entre o cliente e o servidor.
Gerando Certificados TLS
Primeiro, crie um diretório para armazenar seus certificados.
sudo mkdir /etc/redis/tlsEm seguida, use openssl para gerar uma autoridade certificadora (CA) autoassinada, uma chave de servidor e um certificado de servidor. Você será solicitado a inserir informações (Nome do País, Nome da Organização, etc.).
# Generate CA Key and Certificate
sudo openssl genrsa -out /etc/redis/tls/ca.key 4096
sudo openssl req -x509 -new -nodes -key /etc/redis/tls/ca.key -sha256 -days 365 -out /etc/redis/tls/ca.crt
# Generate Server Key and Certificate Signing Request (CSR)
sudo openssl genrsa -out /etc/redis/tls/redis.key 2048
sudo openssl req -new -key /etc/redis/tls/redis.key -out /etc/redis/tls/redis.csr
# Sign the server certificate with the CA
sudo openssl x509 -req -in /etc/redis/tls/redis.csr -CA /etc/redis/tls/ca.crt -CAkey /etc/redis/tls/ca.key -CAcreateserial -out /etc/redis/tls/redis.crt -days 365 -sha256Defina as permissões corretas para garantir que apenas o usuário redis possa acessar esses arquivos sensíveis.
sudo chmod 640 /etc/redis/tls/*
sudo chown redis:redis /etc/redis/tls/*Aviso: Certificados autoassinados são adequados para desenvolvimento, testes ou serviços internos onde você pode distribuir com segurança o certificado da CA para todos os clientes. Para ambientes de produção que se conectam pela internet pública, use certificados emitidos por uma Autoridade Certificadora (CA) confiável, como o Let’s Encrypt.
Configurando o Redis para TLS
Abra o arquivo de configuração do Redis.
sudo nano /etc/redis/redis.confAdicione ou modifique as seguintes linhas para habilitar o TLS. A melhor prática é desativar a porta não criptografada definindo port 0 e usar apenas a porta habilitada para TLS.
# Disable the non-encrypted TCP port.
port 0
# Enable the TLS port on the standard Redis port.
tls-port 6379
# Point to your certificate files.
tls-cert-file /etc/redis/tls/redis.crt
tls-key-file /etc/redis/tls/redis.key
tls-ca-cert-file /etc/redis/tls/ca.crtSalve o arquivo e reinicie o Redis.
sudo systemctl restart redis.serviceTestando a conexão TLS
Para se conectar com o redis-cli, agora você precisa especificar os parâmetros TLS.
redis-cli --user myuser --askpass --tls --cacert /etc/redis/tls/ca.crtApós a autenticação, sua conexão com o Redis está totalmente criptografada.
Opcional: Configurando TLS mútuo (mTLS)
Para um nível ainda mais alto de segurança, você pode configurar o TLS mútuo (mTLS), onde o cliente também deve apresentar um certificado válido ao servidor.
Primeiro, gere uma chave e um certificado de cliente, assinados pela sua CA.
# Generate client key and CSR
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out client.csr
# Sign the client certificate with your CA
sudo openssl x509 -req -in client.csr -CA /etc/redis/tls/ca.crt -CAkey /etc/redis/tls/ca.key -CAcreateserial -out client.crt -days 365 -sha256Em seguida, ative a autenticação do cliente em /etc/redis/redis.conf.
tls-auth-clients yesReinicie o Redis. Agora, os clientes devem apresentar seu certificado e chave para se conectar.
redis-cli --user myuser --askpass --tls \
--cacert /etc/redis/tls/ca.crt \
--cert client.crt \
--key client.keyPasso 6 — Configurando Regras de Firewall e Acesso Remoto Seguro
Um firewall é uma camada crítica de segurança que restringe o tráfego de rede para o seu servidor. Por padrão, o Redis apenas escuta na interface de loopback local (127.0.0.1), portanto não está exposto à internet pública. Se você precisar se conectar a partir de um servidor externo, deve configurar o Redis para escutar em seu IP público e definir regras de firewall rigorosas.
Aviso: Expor uma instância do Redis diretamente à internet pública é um risco significativo de segurança. Recomenda-se fortemente usar alternativas mais seguras para acesso remoto.
Regras de Firewall para um Servidor Remoto
Se você precisar permitir conexões diretas, use ufw para permitir o tráfego na porta TLS do Redis (6379) apenas de um endereço IP específico e confiável.
sudo ufw allow from your_trusted_ip/32 to any port 6379 proto tcpSubstitua your_trusted_ip pelo endereço IP estático do seu servidor de aplicação.
Sempre certifique-se de que a porta SSH está liberada.
sudo ufw allow OpenSSHPor fim, ative o firewall se ele ainda não estiver ativo.
sudo ufw enableAlternativas mais seguras para acesso remoto
Em vez de abrir a porta do Redis para o mundo, considere estes métodos mais seguros:
- VPN: Configure uma rede privada usando uma VPN como WireGuard ou OpenVPN. Seu servidor de aplicação e o servidor Redis podem então se comunicar por um canal seguro e privado, sem exposição ao público.
- Túnel SSH: Crie um túnel SSH criptografado da sua máquina cliente para o servidor Redis. Isso encaminha uma porta local do seu cliente para a porta do Redis no servidor através da conexão SSH segura.
Exemplo de criação de um túnel SSH:
ssh -L 8000:127.0.0.1:6379 user@your_redis_server_ipVocê pode então conectar seu cliente Redis local a localhost:8000, e o tráfego será encaminhado de forma segura para o servidor Redis.
Etapa 7 — Aplicando Técnicas Adicionais de Endurecimento
Você pode proteger ainda mais sua instância do Redis com estas medidas adicionais.
Restringindo Comandos com ACLs (A Abordagem Moderna)
Ao invés de renomear comandos perigosos (uma prática mais antiga), use regras de ACL para restringi-los por usuário. Isso oferece um controle mais granular e não quebra clientes ou ferramentas de monitoramento do Redis.
Por exemplo, para impedir que myuser use comandos que possam causar danos significativos (como FLUSHALL, DEBUG, SHUTDOWN), você pode modificar a regra ACL dele removendo a categoria @all e adicionando categorias mais específicas, além de bloquear explicitamente comandos perigosos.
# Example of a more restrictive user
user myuser on >your_generated_password ~* &* +@read +@write +@connection -@dangerous -FLUSHALLEsta regra permite que o usuário execute comandos de leitura, escrita e conexão, mas bloqueia explicitamente a categoria de comandos @dangerous e o comando FLUSHALL.
Renomeação de Comando (Método Legado - Não Recomendado)
A prática de renomear comandos é, em grande parte, obsoleta e deve ser evitada em favor de ACLs. Renomear comandos pode quebrar bibliotecas de clientes, complicar a manutenção e causar problemas com persistência (AOF) e replicação.
Se você encontrar um sistema usando este método, os comandos são renomeados em /etc/redis/redis.conf assim:
# rename-command FLUSHALL ""
# rename-command CONFIG MY_SECURE_CONFIG_COMMANDGerenciamento de Memória e Segurança
Um atacante poderia tentar um ataque de Negação de Serviço (DoS) preenchendo a memória do seu servidor. Configure o Redis para definir um limite de memória e prevenir isso.
No /etc/redis/redis.conf, descomente e configure as diretivas maxmemory e maxmemory-policy:
maxmemory 2gb
maxmemory-policy allkeys-lrumaxmemory: Define um limite rígido para a quantidade de memória que o Redis pode usar.maxmemory-policy: Indica ao Redis o que fazer quando o limite é atingido.allkeys-lruremove as chaves menos usadas recentemente, o que é uma escolha comum para caches.
Configuração de Rede e Tempos de Espera
Sockets Unix: Para aplicações executando na mesma máquina que o Redis, usar um socket Unix é mais seguro do que uma porta TCP, pois ele ignora a pilha de rede. Ative-o em
redis.conf:unixsocket /var/run/redis/redis.sock unixsocketperm 770Então conecte-se com
redis-cli -s /var/run/redis/redis.sock.Tempos de Inatividade: Feche conexões inativas automaticamente para liberar recursos e reduzir a superfície de ataque.
timeout 300Isso fechará conexões que estiverem ociosas por 300 segundos.
/etc/redis/redis.conf
/etc/redis/redis.conf
AppArmor
O Ubuntu inclui o AppArmor, um módulo de segurança que restringe programas a um conjunto limitado de recursos. O pacote redis-server vem com um perfil padrão do AppArmor que é ativado automaticamente.
Você pode verificar seu status com:
sudo aa-status | grep redisEste perfil fornece uma camada importante de defesa ao restringir o que o processo do Redis pode fazer no sistema. Em outras distribuições Linux, como o CentOS, o SELinux cumpre um propósito semelhante.
Passo 8 — Monitorando a Atividade e os Logs do Redis
Monitorar logs regularmente é importante para detectar erros, problemas de desempenho e atividades suspeitas.
Logs do Sistema
Você pode visualizar os logs em tempo real gerenciados pelo systemd com o journalctl.
sudo journalctl -u redis-server.service -fFique atento a padrões como:
- Um grande número de novas conexões de IPs desconhecidos.
- Falhas de autenticação repetidas (
NOAUTH). - Erros relacionados a comandos que você restringiu.
Para sistemas de produção, encaminhe esses logs para uma plataforma de log centralizada (como um stack ELK) para configurar alertas automáticos para padrões suspeitos.
Log lento do Redis
O log de lentidão do Redis registra consultas que excedem um tempo de execução especificado. Ele é útil para identificar gargalos de desempenho e também pode ajudar a identificar comandos abusivos ou ineficientes dos clientes.
Ative-o em /etc/redis/redis.conf:
slowlog-log-slower-than 10000
slowlog-max-len 128slowlog-log-slower-than: Registra comandos que demoram mais que este valor em microssegundos (10000=10ms).slowlog-max-len: O número máximo de entradas no log de lentidão.
Visualize o log lento com redis-cli:
redis-cli SLOWLOG GETEtapa 9 — Configurando Persistência e Backups do Redis
Por padrão, o Redis mantém todos os dados na memória. Os mecanismos de persistência salvam esses dados no disco, protegendo-os de serem perdidos caso o servidor seja reiniciado.
Opções de Persistência
O Redis oferece dois principais modos de persistência:
- RDB (Banco de Dados Redis): Realiza snapshots pontuais do seu conjunto de dados em intervalos especificados. Geralmente, é mais rápido.
- AOF (Arquivo de Somente Anexar): Registra todas as operações de escrita recebidas pelo servidor. Oferece melhor durabilidade, mas pode resultar em arquivos maiores.
Você pode ativar um ou ambos em /etc/redis/redis.conf. A configuração padrão ativa o RDB. Para ativar o AOF:
appendonly yesProtegendo Arquivos de Dados e Backups
Os arquivos de dados do Redis (dump.rdb, appendonly.aof) são armazenados em /var/lib/redis/ por padrão. Certifique-se de que este diretório e seus arquivos pertençam ao usuário redis e não sejam legíveis por todos.
sudo ls -l /var/lib/redisPara a recuperação de desastres, você deve fazer backup desses arquivos.
- Armazenamento Seguro: Armazene os backups em um local remoto e seguro (como um bucket de armazenamento de objetos).
- Criptografia: Criptografe seus arquivos de backup usando uma ferramenta como
gpgantes de transferi-los para fora do servidor. - Teste de Recuperação: Teste regularmente seus procedimentos de recuperação restaurando um backup em um servidor de teste para garantir que os backups sejam válidos e que o processo funcione como esperado.
Perguntas Frequentes
1. Por que devo usar ACLs do Redis em vez do método antigo requirepass?
As Listas de Controle de Acesso (ACLs) do Redis, introduzidas no Redis 6, são o padrão moderno para gerenciar permissões de usuários. Ao contrário da senha única fornecida pelo requirepass, as ACLs permitem criar vários usuários com senhas únicas e permissões detalhadas. Você pode controlar quais comandos um usuário pode executar, quais chaves ele pode acessar e quais canais Pub/Sub ele pode usar. Este “princípio do menor privilégio” é uma prática de segurança fundamental, pois limita os danos potenciais que um atacante pode causar se as credenciais de um único usuário forem comprometidas.
2. É seguro expor minha instância do Redis diretamente à internet pública?
Não, é altamente desaconselhável. Expor o Redis diretamente, mesmo com senha e TLS, o torna um alvo para ataques de força bruta e potenciais vulnerabilidades zero-day. Os métodos mais seguros para acesso remoto envolvem uma rede privada. Você deve usar uma VPN (como WireGuard ou OpenVPN) ou um túnel SSH para criar um canal seguro e criptografado entre seu servidor de aplicação e sua instância Redis, sem nunca expor a porta do Redis na internet aberta.
3. Qual é a diferença entre a persistência RDB e AOF, e qual devo usar?
Tanto RDB quanto AOF são métodos para salvar os dados do Redis que estão na memória para o disco.
- RDB (Redis Database): Cria instantâneos do seu conjunto de dados em pontos específicos no tempo, em intervalos determinados (por exemplo, a cada 5 minutos se houver pelo menos uma gravação). Geralmente é mais rápido para criar backups e reiniciar o Redis.
- AOF (Arquivo Apenas de Acréscimos): Registra cada operação de escrita recebida pelo servidor. Isso proporciona uma durabilidade de dados muito melhor, pois você corre o risco de perder no máximo um segundo de dados em caso de falha, mas os arquivos de log podem se tornar maiores.
Para a maioria dos casos de uso em produção, é recomendado habilitar ambos os métodos de persistência para obter os benefícios da durabilidade (AOF) e backups convenientes (RDB).
4. Como posso proteger o Redis de ficar sem memória?
Um atacante poderia lançar um ataque de Negação de Serviço (DoS) escrevendo dados continuamente até que a memória do seu servidor se esgote. Para evitar isso, você deve definir um limite de memória no seu arquivo redis.conf usando a diretiva maxmemory (por exemplo, maxmemory 2gb). Você também deve definir uma maxmemory-policy (como allkeys-lru) para informar ao Redis como remover chaves quando esse limite for atingido.
5. Devo renomear comandos perigosos do Redis por segurança?
Renomear comandos é uma prática de segurança antiga que não é mais recomendada. A abordagem moderna e mais eficaz é usar ACLs do Redis para restringir o acesso a comandos perigosos por usuário. Renomear comandos é difícil de manter, pode quebrar bibliotecas de clientes e ferramentas de monitoramento, e causa complicações com replicação e persistência AOF.
6. Eu tenho uma senha configurada com ACLs. Por que eu também preciso de TLS?
ACLs e senhas protegem seu servidor Redis contra acessos não autorizados (autenticação), mas não protegem os dados enquanto eles trafegam pela rede. Sem TLS (Transport Layer Security), todos os seus dados — incluindo comandos e respostas — são enviados em texto simples. Um invasor na rede poderia interceptar esse tráfego para roubar informações sensíveis. O TLS criptografa toda a conexão, garantindo que toda a comunicação entre seu cliente e o servidor Redis seja privada e segura.
7. Como posso monitorar minha instância do Redis para atividades suspeitas?
Você deve monitorar tanto os logs do sistema quanto o log de lentidão do Redis.
- Logs do Sistema (
journalctl -u redis-server.service): Verifique esses registros para um alto volume de tentativas de autenticação falhas, conexões inesperadas de endereços IP desconhecidos ou erros relacionados a comandos bloqueados. - Registro Lento do Redis: Ative este recurso para registrar consultas que demoram muito para serem executadas. Embora seja usado principalmente para ajuste de desempenho, também pode revelar comandos abusivos ou mal escritos de um cliente comprometido que possam fazer parte de um ataque.
Para sistemas de produção, esses logs devem ser enviados para uma plataforma de registro centralizada, onde você pode configurar alertas automáticos para esses padrões.
8. O que é o AppArmor e eu preciso configurá-lo para o Redis?
AppArmor é um módulo de segurança do Linux incluído no Ubuntu que limita os programas a um conjunto restrito de recursos do sistema. O pacote redis-server vem com um perfil AppArmor pré-configurado, que é habilitado por padrão. Este perfil restringe os arquivos e as capacidades de rede que o processo Redis pode acessar, oferecendo uma camada crítica de defesa caso um invasor encontre uma vulnerabilidade no próprio Redis. Para uma instalação padrão, nenhuma configuração adicional é necessária.
9. Como faço para me conectar com segurança ao Redis a partir de um aplicativo no mesmo servidor?
Quando sua aplicação e o Redis estão rodando na mesma máquina, o método de conexão mais seguro é um socket Unix, e não uma porta TCP. Um socket Unix é um arquivo no sistema de arquivos usado para comunicação entre processos, e ele ignora totalmente a pilha de rede. Isso é mais rápido e seguro porque está sujeito às permissões do sistema de arquivos e não pode ser acessado de fora do servidor.
10. Configurei o TLS com certificados autoassinados. Isso é aceitável para produção?
Certificados autoassinados são aceitáveis para desenvolvimento, testes ou serviços internos onde você pode distribuir com segurança a sua Autoridade Certificadora (CA) auto-gerada para todos os clientes. No entanto, para aplicações que se conectam pela internet pública ou em ambientes de produção maiores e mais complexos, é fortemente recomendado usar certificados TLS emitidos por uma Autoridade Certificadora pública e confiável, como a Let’s Encrypt. Isso simplifica o gerenciamento de certificados e evita problemas de confiança com os clientes.
Conclusão
Neste tutorial, você instalou e configurou o Redis, validou que sua instalação do Redis está funcionando corretamente e usou seus recursos de segurança integrados para torná-lo menos vulnerável a ataques de agentes maliciosos.
Lembre-se de que, uma vez que alguém esteja logado no seu servidor, é muito fácil contornar os recursos de segurança específicos do Redis que implementamos. Portanto, o recurso de segurança mais importante do seu servidor Redis é o seu firewall (que você configurou se seguiu o tutorial inicial de Configuração do Servidor), pois isso torna extremamente difícil para agentes maliciosos ultrapassarem essa barreira.
Embora este guia ajude você a começar a instalar e proteger o Redis, recomendamos fortemente consultar a documentação oficial para obter maior segurança:
- Administração do Redis
- Segurança do Redis
- Configuração do Redis
Obrigado por aprender com a comunidade Linux-Console.net.