Como Instalar e Proteger o Redis no Ubuntu
Introdução
O Redis é um armazenamento de chave-valor em memória conhecido pela sua flexibilidade, desempenho e amplo suporte a linguagens. É frequentemente usado como base de dados, cache e intermediário de mensagens. Embora uma instalação padrão seja funcional, não é segura e deixa os seus dados e servidor expostos a ataques. Uma instância do Redis sem segurança pode levar a fugas 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 num servidor Ubuntu e na implementação de uma configuração de segurança pronta para produção. Irá aprender a configurar o acesso dos utilizadores com Listas de Controlo de Acesso (ACLs), a encriptar o tráfego com TLS, a restringir o acesso à rede com um firewall e a aplicar medidas adicionais de reforço do sistema, abrangendo gestão de memória, persistência e configurações de rede seguras.
Principais Conclusões
- Use ACLs para Autenticação Moderna: Utilize sempre Listas de Controlo de Acesso (ACLs) para gerir utilizadores em vez da desatualizada diretiva
requirepass. Desative o utilizadordefaulte crie utilizadores específicos com as permissões mínimas necessárias para maior segurança. - Criptografar 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, utilize sempre alternativas seguras, como uma VPN (WireGuard/OpenVPN) ou um túnel SSH, para criar uma ligação privada e encriptada.
- Implemente um Firewall Rigoroso: Um firewall é a sua primeira linha de defesa. Se precisar de permitir ligações remotas, configure o 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 o 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 elimina chaves quando o limite é atingido. - Prefira ACLs em vez de renomear comandos: Evite a prática antiga de renomear comandos perigosos. É frágil e pode quebrar aplicações cliente e a replicação. Em vez disso, use regras ACL para restringir o acesso a estes comandos por utilizador (por exemplo,
-@dangerous). - Utilize Sockets Unix para Conexões Locais: Para aplicações a correr no mesmo servidor que o Redis, utilize sockets Unix em vez de portas TCP. São mais rápidos e seguros, uma vez que contornam a pilha de rede e dependem das permissões do sistema de ficheiros.
- Monitorize Ativamente os Registos em Busca de Ameaças: Monitorize regularmente os registos do sistema com
journalctle ative o registo lento do Redis. Esteja atento a padrões como autenticações falhadas repetidas, ligações de fontes desconhecidas ou comandos abusivos que possam indicar um problema de segurança ou de desempenho. - Proteja os Seus Dados em Repouso: Ative a persistência do Redis (RDB e/ou AOF) para evitar a perda de dados. Certifique-se de que os ficheiros de dados (
dump.rdb,appendonly.aof) têm permissões de ficheiro rigorosas e estão incluídos na sua estratégia regular de backup encriptado e fora do local. - Aproveitar a Segurança Incorporada no Sistema: Tire partido das funcionalidades de segurança fornecidas pelo sistema operativo. No Ubuntu, um perfil AppArmor predefinido é automaticamente ativado para o servidor Redis, o que limita o processo e restringe os danos potenciais de uma vulnerabilidade.
Pré-requisitos
Para completar este guia, precisará de acesso a um servidor Ubuntu que tenha um utilizador não-root com privilégios sudo e um firewall configurado com ufw. Pode configurar isto seguindo o nosso guia de Configuração Inicial do Servidor para Ubuntu.
Passo 1 — Instalar e Configurar o Redis
Vamos usar o gestor de pacotes APT para instalar o Redis a partir dos repositórios oficiais do Ubuntu. À data de escrita, a versão disponível nos repositórios padrão é a 7.0.15.
Comece por atualizar a cache de pacotes apt local:
sudo apt updateEm seguida, instale o Redis digitando:
sudo apt install redis-serverIsto irá descarregar e instalar o Redis e as suas dependências. Após a conclusão da instalação, é uma boa prática verificar a versão instalada:
redis-server --versionA seguir, há uma alteração importante de configuração a fazer no ficheiro de configuração do Redis, que foi gerado automaticamente durante a instalação.
Abra este ficheiro com o seu editor de texto preferido:
sudo nano /etc/redis/redis.confDentro do ficheiro, encontre a diretiva supervised. Esta diretiva permite-lhe declarar um sistema init para gerir o Redis como um serviço, proporcionando-lhe mais controlo sobre a sua operação. A diretiva supervised está definida como no por defeito. Como está a usar o Ubuntu, que utiliza o sistema init systemd, altere isto 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 precisas de fazer no ficheiro de configuração do Redis neste momento, por isso guarda-o e fecha-o quando terminares. Se usaste o nano para editar o ficheiro, faz isso premindo CTRL + X, Y e depois ENTER.
Em seguida, reinicie o serviço Redis para refletir as alterações feitas no ficheiro de configuração:
sudo systemctl restart redis.serviceCom isso, instalou e configurou o Redis e ele está a correr no seu computador. Antes de começar a usá-lo, no entanto, é aconselhável verificar primeiro se o Redis está a funcionar correctamente.
Passo 2 — Testar o Redis
Como acontece com qualquer software recém-instalado, é uma boa ideia garantir que o Redis está a funcionar como esperado antes de fazer quaisquer alterações adicionais na sua configuração. Nesta etapa, vamos rever algumas formas de verificar se o Redis está a funcionar corretamente.
Comece por verificar se o serviço Redis está a funcionar:
sudo systemctl status redisSe estiver a correr sem quaisquer erros, este comando irá 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, pode ver que o Redis está em execução e já está ativado, o que significa que está configurado para iniciar sempre que o servidor arranca.
Nota: Esta configuração é desejável para muitos casos de uso comuns do Redis. No entanto, se preferir iniciar o Redis manualmente cada vez que o seu servidor arranca, pode configurar isto com o seguinte comando:
sudo systemctl disable redisPara testar se o Redis está a funcionar corretamente, ligue-se ao servidor utilizando o redis-cli, o cliente de linha de comandos do Redis:
redis-cliNo prompt que se segue, teste a conectividade com o comando ping:
pingPONGEsta saída confirma que a ligação ao servidor ainda está activa. De seguida, verifique se é capaz de definir chaves executando:
set test "It's working!"OKRecupere o valor digitando:
get testAssumindo que tudo esteja a funcionar, poderá recuperar o valor que armazenou:
"It's working!"
Após confirmar que consegue obter o valor, saia do prompt do Redis para voltar ao shell:
exitComo teste final, vamos verificar se o Redis é capaz de persistir dados mesmo depois de ter sido interrompido ou reiniciado. Para isso, primeiro reinicie a instância do Redis:
sudo systemctl restart redisEm seguida, ligue-se novamente com o cliente de linha de comandos:
redis-cliE confirme que 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 tiver terminado:
exitCom isso, a sua instalação do Redis está totalmente operacional e pronta para ser utilizada. No entanto, algumas das suas configurações padrão são inseguras e podem oferecer oportunidades a atores maliciosos para atacar e aceder ao seu servidor e aos seus dados. Os passos restantes neste tutorial abordam métodos para mitigar estas vulnerabilidades, conforme recomendado pelo site oficial do Redis. Embora estes passos sejam opcionais e o Redis continue a funcionar caso decida não segui-los, é fortemente recomendado que os complete de forma a reforçar a segurança do seu sistema.
Passo 3 — Ligação ao localhost
Por defeito, o Redis só é acessível a partir do localhost. No entanto, se instalou e configurou o Redis seguindo um tutorial diferente deste, poderá ter atualizado o ficheiro de configuração para permitir ligações de qualquer lugar. Isto não é tão seguro como ligar apenas ao localhost.
Para corrigir isto, abra o ficheiro de configuração do Redis para edição:
sudo nano /etc/redis/redis.confLocalize esta linha e certifique-se de que não está comentada (remova o # se existir):
bind 127.0.0.1 ::1Guarde e feche o ficheiro quando terminar (prima CTRL + X, Y, e depois ENTER).
Em seguida, reinicie o serviço para garantir que o systemd leia as suas alterações:
sudo systemctl restart redisPara verificar se esta 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 defeito. Caso assim seja, pode instalá-lo (juntamente 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á ligado a localhost (127.0.0.1), refletindo a alteração que acabou de fazer no ficheiro de configuração. Se vir outro endereço IP nessa coluna (0.0.0.0, por exemplo), deve verificar novamente se desbloqueou a linha correta e reiniciar o serviço Redis novamente.
Agora que a sua instalação do Redis está a ouvir apenas em localhost, será mais difícil para atores mal-intencionados fazerem pedidos ou acederem ao seu servidor. No entanto, o Redis atualmente não está configurado para exigir que os utilizadores se autentiquem antes de fazer alterações à sua configuração ou aos dados que contém. Para corrigir isso, o Redis permite que exija que os utilizadores se autentiquem com uma palavra-passe antes de fazer alterações através do cliente Redis (redis-cli).
Passo 4 — Garantir o Redis com Listas de Controlo de Acesso (ACLs)
A partir do Redis 6, as Listas de Controlo de Acesso (ACLs) são o método preferido para gerir o acesso e as permissões dos utilizadores. As ACLs substituem a antiga diretiva requirepass por um sistema mais flexível que permite definir múltiplos utilizadores com palavras-passe distintas e permissões de comando.
Gerar uma Palavra-passe Segura
Primeiro, gere uma palavra-passe forte para o seu utilizador. Pode usar o comando openssl para criar uma string longa e aleatória.
openssl rand 60 | openssl base64 -ACopie a saída, pois irá utilizá-la como a palavra-passe para o seu novo utilizador Redis.
A Configurar um Novo Utilizador
Agora, abra novamente o ficheiro de configuração do Redis.
sudo nano /etc/redis/redis.confDesloque-se até à secção ACL. Para criar um novo utilizador, irá adicionar uma diretiva user. Também é uma boa prática de segurança desativar o utilizador default, que por defeito não tem palavra-passe e possui permissões totais.
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 utilizadores:
myuser: O nome de utilizador.on: Ativa o utilizador.>your_generated_password: Define a palavra-passe do utilizador.~* &* +@all: Uma regra que permite ao utilizador executar todos os comandos (+@all) em todos os keyspaces (~*) e em todos os canais Pub/Sub (&*).
Guarde e feche o ficheiro, depois reinicie o Redis.
sudo systemctl restart redis.serviceA verificar a configuração da ACL
Para verificar se as alterações funcionaram, tente ligar-se com redis-cli e executar um comando sem autenticação.
redis-cli pingPorque o utilizador default está agora desativado, o Redis irá devolver um erro de autenticação.
NOAUTH Authentication required.Isto confirma que o acesso não autenticado está bloqueado. Agora, teste o novo utilizador. Usar a opção --askpass é mais seguro do que digitar a senha diretamente, pois impede que a senha seja armazenada no historial do seu shell.
redis-cli --user myuser --askpassIntroduza a palavra-passe que gerou quando solicitado. Uma vez ligado, tente executar um comando.
pingO Redis deve retornar PONG. A sua configuração de ACL está a funcionar corretamente.
Passo 5 — Encriptar as Comunicações do Redis com TLS
As ACLs protegem a sua instância Redis contra acessos não autorizados, mas não protegem os dados transmitidos numa rede. O TLS (Transport Layer Security) encripta este tráfego, evitando a escuta entre o cliente e o servidor.
Gerar Certificados TLS
Primeiro, crie um diretório para armazenar os 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. Ser-lhe-á pedido para 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 utilizador redis possa aceder a estes ficheiros 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 pode distribuir de forma segura o certificado CA a todos os clientes. Para ambientes de produção a ligar através da internet pública, utilize certificados emitidos por uma Autoridade Certificadora (CA) de confiança, como o Let’s Encrypt.
Configurando o Redis para TLS
Abra o ficheiro de configuração do Redis.
sudo nano /etc/redis/redis.confAdicione ou modifique as seguintes linhas para ativar o TLS. A melhor prática é desativar a porta não encriptada definindo port 0 e usar apenas a porta com TLS ativado.
# 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.crtGuarde o ficheiro e reinicie o Redis.
sudo systemctl restart redis.serviceA testar a ligação TLS
Para se ligar ao redis-cli, agora precisa de especificar os parâmetros TLS.
redis-cli --user myuser --askpass --tls --cacert /etc/redis/tls/ca.crtApós a autenticação, a sua ligação ao Redis está totalmente encriptada.
Opcional: Configurar Mutual TLS (mTLS)
Para um nível de segurança ainda mais elevado, pode configurar 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 -sha256A seguir, ative a autenticação do cliente em /etc/redis/redis.conf.
tls-auth-clients yesReinicie o Redis. Agora, os clientes devem apresentar o seu certificado e chave para se conectarem.
redis-cli --user myuser --askpass --tls \
--cacert /etc/redis/tls/ca.crt \
--cert client.crt \
--key client.keyPasso 6 — Configuração de 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), pelo que não está exposto à internet pública. Se precisar de se ligar a partir de um servidor externo, deve configurar o Redis para escutar no seu IP público e definir regras de firewall rigorosas.
Aviso: Expor uma instância Redis diretamente à internet pública é um risco de segurança significativo. É fortemente recomendado utilizar alternativas mais seguras para acesso remoto.
Regras de Firewall para um Servidor Remoto
Se for necessário permitir ligações directas, utilize ufw para permitir o tráfego na porta TLS do Redis (6379) apenas a partir de um endereço IP específico e de confiança.
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ções.
Certifique-se sempre de que a sua porta SSH está autorizada.
sudo ufw allow OpenSSHPor fim, ative o firewall se 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 utilizando uma VPN como o WireGuard ou o OpenVPN. O seu servidor de aplicações e o servidor Redis podem então comunicar através de um canal seguro e privado, sem exposição pública.
- Túnel SSH: Crie um túnel SSH encriptado a partir do seu computador cliente para o servidor Redis. Isto encaminha uma porta local no seu cliente para a porta do Redis no servidor através da ligação segura SSH.
Exemplo de criação de um túnel SSH:
ssh -L 8000:127.0.0.1:6379 user@your_redis_server_ipPode então ligar o seu cliente Redis local a localhost:8000, e o tráfego será encaminhado de forma segura para o servidor Redis.
Passo 7 — Aplicar Técnicas Adicionais de Endurecimento
Pode reforçar ainda mais a segurança da sua instância Redis com estas medidas adicionais.
Restringir Comandos com ACLs (A Abordagem Moderna)
Em vez de renomear comandos perigosos (uma prática mais antiga), use regras ACL para os restringir com base em cada utilizador. Isto proporciona um controlo mais granular e não compromete os clientes ou ferramentas de monitorização do Redis.
Por exemplo, para impedir que myuser utilize comandos que possam causar danos significativos (como FLUSHALL, DEBUG, SHUTDOWN), pode modificar a sua regra ACL removendo a categoria @all e adicionando outras mais específicas, ao mesmo tempo que bloqueia explicitamente comandos perigosos.
# Example of a more restrictive user
user myuser on >your_generated_password ~* &* +@read +@write +@connection -@dangerous -FLUSHALLEsta regra permite ao utilizador executar comandos de leitura, escrita e de ligação, mas bloqueia explicitamente a categoria de comandos @dangerous e o comando FLUSHALL.
Renomeação de Comandos (Método Antigo - Não Recomendado)
A prática de renomear comandos é, em grande parte, obsoleta e deve ser evitada em favor das ACLs. Renomear comandos pode quebrar bibliotecas cliente, complicar a manutenção e causar problemas com persistência (AOF) e replicação.
Se encontrar um sistema a usar este método, os comandos são renomeados em /etc/redis/redis.conf da seguinte forma:
# rename-command FLUSHALL ""
# rename-command CONFIG MY_SECURE_CONFIG_COMMANDGestão de Memória e Segurança
Um atacante poderia tentar um ataque de Negação de Serviço (DoS) ao preencher a memória do seu servidor. Configure o Redis para definir um limite de memória para prevenir isto.
No /etc/redis/redis.conf, descomente e defina 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-lruelimina as chaves menos usadas recentemente, sendo uma escolha comum para caches.
Configuração de Rede e Tempos de Espera
Sockets Unix: Para aplicações a correr na mesma máquina que o Redis, usar um socket Unix é mais seguro do que uma porta TCP porque contorna a pilha de rede. Ative-o em
redis.conf:unixsocket /var/run/redis/redis.sock unixsocketperm 770Depois ligue-se com
redis-cli -s /var/run/redis/redis.sock.Tempos de Inatividade: Fechar automaticamente as ligações inativas para libertar recursos e reduzir a superfície de ataque.
timeout 300Isto irá fechar as ligações que estiverem inactivas durante 300 segundos.
/etc/redis/redis.conf
/etc/redis/redis.conf
AppArmor
O Ubuntu inclui o AppArmor, um módulo de segurança que limita os programas a um conjunto restrito de recursos. O pacote redis-server vem com um perfil AppArmor predefinido que é ativado automaticamente.
Pode verificar o seu estado com:
sudo aa-status | grep redisEste perfil fornece uma camada importante de defesa ao restringir o que o processo Redis pode fazer no sistema. Noutras distribuições Linux, como o CentOS, o SELinux serve um propósito semelhante.
Passo 8 — Monitorização da Atividade e dos Registos do Redis
Monitorizar regularmente os registos é importante para detectar erros, problemas de desempenho e atividades suspeitas.
Registos do Sistema
Pode visualizar os registos em tempo real geridos pelo systemd com o journalctl.
sudo journalctl -u redis-server.service -fFique atento a padrões como:
- Um grande número de novas ligações provenientes de IPs desconhecidos.
- Falhas de autenticação repetidas (
NOAUTH). - Erros relacionados com comandos que você restringiu.
Para sistemas de produção, encaminhe estes registos para uma plataforma de registo centralizada (como uma stack ELK) para configurar alertas automáticos para padrões suspeitos.
Registo Lento do Redis
O registo lento do Redis regista consultas que excedem um tempo de execução especificado. É ú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: Regista comandos que demorem mais do que este valor em microssegundos (10000=10ms).slowlog-max-len: O número máximo de entradas no registo lento.
Veja o registo lento com redis-cli:
redis-cli SLOWLOG GETPasso 9 — Configurar a Persistência e os Backups do Redis
Por defeito, o Redis mantém todos os dados na memória. Os mecanismos de persistência guardam estes dados no disco, protegendo-os de serem perdidos caso o servidor reinicie.
Opções de Persistência
O Redis oferece dois principais modos de persistência:
- RDB (Base de Dados Redis): Realiza instantâneos do seu conjunto de dados em pontos específicos no tempo, em intervalos definidos. Geralmente é mais rápido.
- AOF (Ficheiro Apenas de Acrescentar): Regista todas as operações de escrita recebidas pelo servidor. Oferece maior durabilidade, mas pode resultar em ficheiros maiores.
Pode ativar um ou ambos em /etc/redis/redis.conf. A configuração por defeito ativa o RDB. Para ativar o AOF:
appendonly yesProteção de Ficheiros de Dados e Cópias de Segurança
Os ficheiros de dados do Redis (dump.rdb, appendonly.aof) são armazenados, por defeito, em /var/lib/redis/. Certifique-se de que esta diretoria e os seus ficheiros são propriedade do utilizador redis e não são legíveis por outros utilizadores.
sudo ls -l /var/lib/redisPara a recuperação de desastres, deve fazer cópia de segurança destes ficheiros.
- Armazenamento Seguro: Guarde as cópias de segurança num local seguro e remoto (como um bucket de armazenamento de objetos).
- Criptografia: Encripte os seus ficheiros de backup utilizando uma ferramenta como
gpgantes de os transferir para fora do servidor. - Teste de Recuperação: Teste regularmente os seus procedimentos de recuperação, restaurando uma cópia de segurança para um servidor de teste, para garantir que as cópias de segurança são válidas e que o processo funciona como esperado.
Perguntas Frequentes
1. Por que devo usar ACLs do Redis em vez do método antigo requirepass?
As Listas de Controlo de Acesso (ACLs) do Redis, introduzidas no Redis 6, são o padrão moderno para gerir permissões de utilizador. Ao contrário da única senha fornecida pelo requirepass, as ACLs permitem criar múltiplos utilizadores com senhas únicas e permissões detalhadas. Pode controlar quais os comandos que um utilizador pode executar, a quais chaves pode aceder e quais canais Pub/Sub pode utilizar. Este “princípio do menor privilégio” é uma prática de segurança fundamental, pois limita os danos potenciais que um atacante pode causar caso as credenciais de um único utilizador sejam comprometidas.
2. É seguro expor a minha instância Redis diretamente à internet pública?
Não, é fortemente desaconselhado. Expor o Redis diretamente, mesmo com uma senha e TLS, torna-o 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. Deveria usar uma VPN (como WireGuard ou OpenVPN) ou um túnel SSH para criar um canal seguro e encriptado entre o seu servidor de aplicações e a sua instância Redis, sem nunca expor a porta do Redis à Internet pública.
3. Qual é a diferença entre a persistência RDB e AOF, e qual devo usar?
Tanto o RDB como o AOF são métodos para guardar os seus dados do Redis em memória no disco.
- RDB (Base de Dados Redis): Cria snapshots do seu conjunto de dados em pontos específicos no tempo, em intervalos definidos (por exemplo, a cada 5 minutos se houver pelo menos uma escrita). É geralmente mais rápido para criar backups e reiniciar o Redis.
- AOF (Ficheiro Apenas de Acrescentamento): Regista cada operação de escrita recebida pelo servidor. Isto fornece uma durabilidade de dados muito melhor, pois corre-se o risco de perder, no máximo, um segundo de dados em caso de falha, mas os ficheiros de log podem tornar-se maiores.
Para a maioria dos casos de utilização em produção, é recomendado ativar 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é a memória do seu servidor se esgotar. Para prevenir isto, deve definir um limite de memória no seu ficheiro redis.conf usando a diretiva maxmemory (por exemplo, maxmemory 2gb). Deve também definir uma maxmemory-policy (como allkeys-lru) para indicar ao Redis como eliminar chaves uma vez atingido esse limite.
5. Devo renomear comandos perigosos do Redis por questões de segurança?
Renomear comandos é uma prática de segurança antiga que já não é recomendada. A abordagem moderna e mais eficaz é utilizar ACLs do Redis para restringir o acesso a comandos perigosos por utilizador. Renomear comandos é difícil de manter, pode quebrar bibliotecas de clientes e ferramentas de monitorização, e provoca complicações na replicação e na persistência AOF.
6. Tenho uma palavra-passe definida com ACLs. Porque é que também preciso de TLS?
ACLs e passwords protegem o seu servidor Redis de acessos não autorizados (autenticação), mas não protegem os dados enquanto estes viajam através da rede. Sem TLS (Transport Layer Security), todos os seus dados — incluindo comandos e respostas — são enviados em texto simples. Um atacante na rede poderia interceptar este tráfego para roubar informações sensíveis. O TLS encripta toda a ligação, garantindo que toda a comunicação entre o seu cliente e o servidor Redis é privada e segura.
7. Como posso monitorizar a minha instância Redis para atividades suspeitas?
Deves monitorizar tanto os registos do sistema como o log lento do Redis.
- Registos do Sistema (
journalctl -u redis-server.service): Verifique estes para um elevado número de tentativas de autenticação falhadas, ligações inesperadas de endereços IP desconhecidos ou erros relacionados com comandos bloqueados. - Registo Lento do Redis: Ative esta funcionalidade para registar consultas que demoram muito a ser executadas. Embora seja principalmente para otimização 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, estes registos devem ser enviados para uma plataforma de registo centralizada, onde pode configurar alertas automáticos para estes padrões.
8. O que é o AppArmor e preciso configurá-lo para o Redis?
O 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 é ativado por defeito. Este perfil restringe os ficheiros e as capacidades de rede que o processo Redis pode aceder, fornecendo uma camada crítica de defesa caso um atacante descubra uma vulnerabilidade no próprio Redis. Para uma instalação padrão, não é necessária configuração adicional.
9. Como posso ligar-me de forma segura ao Redis a partir de uma aplicação no mesmo servidor?
Quando a sua aplicação e o Redis estão a correr na mesma máquina, o método de ligação mais seguro é um socket Unix, e não uma porta TCP. Um socket Unix é um ficheiro no sistema de ficheiros usado para comunicação entre processos, e evita completamente a pilha de rede. Isto é mais rápido e seguro porque está sujeito às permissões do sistema de ficheiros e não pode ser acedido a partir do exterior do servidor.
10. Configurei o TLS com certificados autoassinados. Isto está bem para produção?
Certificados autoassinados são aceitáveis para desenvolvimento, testes ou serviços internos onde é possível distribuir de forma segura a sua Autoridade Certificadora (CA) gerada por si a todos os clientes. No entanto, para aplicações que se ligam através da internet pública ou em ambientes de produção maiores e mais complexos, é fortemente recomendado utilizar certificados TLS emitidos por uma Autoridade Certificadora pública e de confiança, como a Let’s Encrypt. Isto simplifica a gestão de certificados e evita problemas de confiança com os clientes.
Conclusão
Neste tutorial, instalou e configurou o Redis, validou que a sua instalação do Redis está a funcionar corretamente e utilizou as suas funcionalidades de segurança integradas para torná-lo menos vulnerável a ataques de agentes maliciosos.
Tenha em mente que, uma vez que alguém esteja autenticado no seu servidor, é muito fácil contornar as funcionalidades de segurança específicas do Redis que implementámos. Portanto, a funcionalidade de segurança mais importante no seu servidor Redis é o seu firewall (que configurou se seguiu o tutorial inicial Pré-requisitos de Configuração do Servidor), pois isso torna extremamente difícil que atores maliciosos ultrapassem essa barreira.
Embora este guia o ajude a começar a instalar e proteger o Redis, recomendamos vivamente consultar a documentação oficial para uma maior segurança:
- Administração do Redis
- Segurança do Redis
- Configuração do Redis
Obrigado por aprender com a comunidade Linux-Console.net.