Segurança do Redis
A configuração padrão do Redis é insegura. Esta lição aborda como proteger sua instância Redis.
Riscos de Segurança do Redis
Riscos da configuração padrão:
- Sem autenticação por senha: qualquer um pode conectar
- Vincula a todas as interfaces de rede: acessível externamente
- Comandos perigosos não desabilitados: FLUSHALL, CONFIG, etc.
- Transmissão em texto puro: dados não são criptografados
⚠️ Atenção: Expor o Redis à internet pública é muito perigoso! Houve ataques em larga escala ao Redis.
Autenticação por Senha
Definindo uma Senha (Antes do Redis 6.0)
CONF
# redis.conf
requirepass sua_senha_forte_aqui
Autenticando ao conectar:
REDIS
# Método 1: especificar senha na conexão
redis-cli -a sua_senha_forte_aqui
# Método 2: autenticar após conectar
redis-cli
AUTH sua_senha_forte_aqui
OK
⚠️ Observação: Usar o parâmetro
-a na linha de comando expõe a senha no histórico de comandos — não recomendado.
Definindo Senha no Arquivo de Configuração
CONF
# redis.conf
requirepass "P@ssw0rd!2026#Redis"
Definindo Senha Dinamicamente
REDIS
CONFIG SET requirepass "nova_senha"
OK
# Reautenticação necessária
AUTH nova_senha
OK
Controle de Acesso ACL (Redis 6.0+)
Redis 6.0 introduziu ACL (Access Control List) para controle de permissão mais granular.
Visualizando Lista de Usuários
REDIS
ACL LIST
1) "user default on nopass ~* &* +@all"
Criando Usuários
REDIS
# Criar usuário com senha
ACL SETUSER alice on >password123 ~* +@all
OK
# Criar usuário somente leitura
ACL SETUSER bob on >password456 ~* +@read +@connection
OK
# Criar usuário com acesso a chaves específicas apenas
ACL SETUSER app on >apppass ~app:* +@all
OK
Sintaxe do Comando ACL
ACL SETUSER nome_usuario
on|off # Habilitar ou desabilitar
>senha # Definir senha
~padrão # Chaves permitidas (~* significa todas as chaves)
&padrão # Canais Pub/Sub permitidos
+@categoria # Permitir categoria de comando
-@categoria # Negar categoria de comando
+comando # Permitir comando específico
-comando # Negar comando específico
Categorias de Comando
| Categoria | Descrição | Inclui |
|---|---|---|
| @all | Todos os comandos | Todos |
| @read | Comandos de leitura | GET, HGET, LRANGE, etc. |
| @write | Comandos de escrita | SET, HSET, LPUSH, etc. |
| @admin | Comandos administrativos | CONFIG, DEBUG, etc. |
| @dangerous | Comandos perigosos | FLUSHALL, SHUTDOWN, etc. |
| @connection | Comandos de conexão | AUTH, PING, QUIT, etc. |
| @string | Comandos de string | SET, GET, INCR, etc. |
| @hash | Comandos de hash | HSET, HGET, etc. |
| @list | Comandos de lista | LPUSH, LPOP, etc. |
| @set | Comandos de conjunto | SADD, SREM, etc. |
| @sortedset | Comandos de conjunto ordenado | ZADD, ZREM, etc. |
Criando Usuários com Diferentes Permissões
REDIS
# Administrador: todas as permissões
ACL SETUSER admin on >admin123 ~* +@all
# Usuário somente leitura
ACL SETUSER readonly on >read123 ~* +@read +@connection
# Usuário de aplicação: só pode acessar chaves app:*
ACL SETUSER app on >app123 ~app:* +@all
# Usuário de estatísticas: somente leitura em chaves stats:*
ACL SETUSER stats on >stats123 ~stats:* +@read +@connection
# Usuário seguro: todos os comandos exceto admin e perigosos
ACL SETUSER safe on >safe123 ~* +@all -@admin -@dangerous
Visualizando Permissões do Usuário
REDIS
# Visualizar todos os usuários
ACL LIST
# Visualizar usuário específico
ACL GETUSER alice
1) "flags"
2) 1) "on"
3) "passwords"
4) 1) "hash_password"
5) "keys"
6) "~*"
7) "commands"
8) "+@all"
Deletando um Usuário
REDIS
ACL DELUSER alice
(integer) 1
Salvando Configuração ACL
REDIS
# Salvar configuração ACL em arquivo
ACL SAVE
OK
Especifique o arquivo ACL em redis.conf:
CONF
aclfile /etc/redis/users.acl
Renomeação de Comandos
Renomeie ou desabilite comandos perigosos.
Desabilitando Comandos
CONF
# redis.conf
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""
rename-command SHUTDOWN ""
rename-command KEYS ""
Renomeando Comandos
CONF
# Renomear comandos perigosos para nomes complexos
rename-command FLUSHALL "FLUSHALL_abc123xyz"
rename-command CONFIG "CONFIG_secret789"
Usando o comando renomeado:
REDIS
# Comando original não funciona mais
FLUSHALL
(error) ERR unknown command 'FLUSHALL'
# Usar o novo comando
FLUSHALL_abc123xyz
OK
💡 Caso de uso: Desabilitar ou renomear comandos perigosos para evitar operações acidentais ou ataques maliciosos.
Segurança de Rede
Vinculando Endereço IP
CONF
# redis.conf
# Acesso local apenas
bind 127.0.0.1
# Permitir IPs específicos
bind 127.0.0.1 192.168.1.100
# Permitir todos os IPs (perigoso!)
bind 0.0.0.0
⚠️ Atenção:
bind 0.0.0.0 permite todos os IPs — você deve definir uma senha!
Modo Protegido
CONF
# redis.conf
# Habilitar modo protegido (padrão)
protected-mode yes
Comportamento do modo protegido:
- Aceita apenas conexões locais (127.0.0.1)
- Ou se o endereço bind estiver definido
- Ou se uma senha estiver definida
Alterando a Porta
CONF
# Usar uma porta não padrão
port 6380
💡 Caso de uso: Usar uma porta não padrão reduz ataques automatizados de varredura.
Configuração de Firewall
BASH
# Linux iptables
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 6379 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP
# CentOS firewalld
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="6379" accept'
firewall-cmd --reload
Criptografia TLS/SSL (Redis 6.0+)
Redis 6.0 suporta conexões criptografadas TLS.
Configurando TLS
CONF
# redis.conf
tls-port 6379
port 0 # Desabilitar porta não TLS
tls-cert-file /caminho/para/redis.crt
tls-key-file /caminho/para/redis.key
tls-ca-cert-file /caminho/para/ca.crt
tls-auth-clients optional
tls-protocols "TLSv1.2 TLSv1.3"
Conectando com TLS
BASH
redis-cli --tls --cert /caminho/para/client.crt --key /caminho/para/client.key --cacert /caminho/para/ca.crt
Melhores Práticas de Segurança
1. Definir uma Senha Forte
CONF
# Use uma senha forte (pelo menos 16 caracteres, mistura de maiúsculas, minúsculas, dígitos, caracteres especiais)
requirepass "Xk9#mP2$vL5@nQ8&wR4!"
2. Usar ACL para Controle de Permissão
REDIS
# Criar diferentes usuários para diferentes aplicações
ACL SETUSER webapp on >webpass ~web:* +@all
ACL SETUSER batch on >batchpass ~batch:* +@all
ACL SETUSER readonly on >readpass ~* +@read +@connection
3. Desabilitar Comandos Perigosos
CONF
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""
4. Restringir Acesso de Rede
CONF
bind 127.0.0.1
protected-mode yes
5. Usar um Firewall
BASH
# Permita apenas IPs específicos para acessar a porta Redis
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 6379 -j ACCEPT
iptables -A INPUT -p tcp --dport 6379 -j DROP
6. Auditoria Regular
REDIS
# Visualizar conexões atuais de clientes
CLIENT LIST
# Visualizar permissões de usuário
ACL LIST
# Visualizar comandos executados (use com cuidado)
MONITOR
Lista de Verificação de Segurança
□ Definir senha forte (requirepass ou ACL)
□ Vincular a IP interno (bind 127.0.0.1 ou IP interno)
□ Habilitar modo protegido (protected-mode yes)
□ Desabilitar comandos perigosos (FLUSHALL, CONFIG, etc.)
□ Usar firewall para restringir acesso
□ Usar porta não padrão
□ Atualizar versão do Redis regularmente
□ Monitorar conexões e comandos suspeitos
□ Usar ACL para permissões granulares (Redis 6.0+)
□ Considerar criptografia TLS (Redis 6.0+)
❓ Perguntas Frequentes
P Como funcionava o controle de acesso antes do Redis 6.0?
R Apenas requirepass estava disponível — todos os clientes compartilhavam a mesma senha e tinham as mesmas permissões.
P Como desabilito o comando KEYS?
R Use
rename-command KEYS "" para desabilitá-lo, ou renomeie para um nome complexo.P bind 0.0.0.0 é seguro?
R Não! Você também deve definir uma senha forte e firewall. É recomendado vincular apenas a IPs internos.
P Como evito que o Redis seja atacado?
R Defina uma senha forte, vincule a IP interno, desabilite comandos perigosos, use firewall e atualize regularmente.
P Como persisto a configuração ACL?
R Use ACL SAVE para escrever em um arquivo, ou especifique aclfile em redis.conf.
📖 Resumo
- A configuração padrão do Redis é insegura — é necessário fortalecimento de segurança
- Defina autenticação por senha forte (requirepass ou ACL)
- ACL fornece controle de permissão granular (Redis 6.0+)
- Renomeie ou desabilite comandos perigosos
- Vincule a IP interno, habilite modo protegido
- Use firewall para restringir acesso
- Considere criptografia TLS (Redis 6.0+)
- Audite e monitore regularmente
📝 Atividades
- Autenticação por senha: Defina uma senha Redis e teste conexões autenticadas
- Configuração ACL: Crie usuários com diferentes permissões (admin, somente leitura, usuário de aplicação)
- Desabilitação de comando: Desabilite os comandos FLUSHALL e CONFIG e verifique que não funcionam mais
- Verificação de segurança: Percorra a lista de verificação de segurança para sua configuração Redis
Próxima Lição
Na próxima lição, nós aprenderemos sobre Teste de Desempenho do Redis, abordando a ferramenta redis-benchmark.



