Redis: Segurança do Redis

A configuração padrão do Redis é insegura. Esta lição aborda como proteger sua instância Redis.

1. Riscos de Segurança do Redis

Riscos da configuração padrão:

⚠️ Atenção: Expor o Redis à internet pública é muito perigoso! Houve ataques em larga escala ao Redis.


2. Autenticação por Senha

(1) 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.

(2) Definindo Senha no Arquivo de Configuração

CONF
# redis.conf
requirepass "P@ssw0rd!2026#Redis"

(3) Definindo Senha Dinamicamente

REDIS
CONFIG SET requirepass "nova_senha"
OK

# Reautenticação necessária
AUTH nova_senha
OK

3. Controle de Acesso ACL (Redis 6.0+)

Redis 6.0 introduziu ACL (Access Control List) para controle de permissão mais granular.

(1) Visualizando Lista de Usuários

REDIS
ACL LIST
1) "user default on nopass ~* &* +@all"

(2) 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

(3) Sintaxe do Comando ACL

BASH
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

(4) 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.

(5) 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

(6) 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"

(7) Deletando um Usuário

REDIS
ACL DELUSER alice
(integer) 1

(8) 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

4. Renomeação de Comandos

Renomeie ou desabilite comandos perigosos.

(1) Desabilitando Comandos

CONF
# redis.conf
rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command CONFIG ""
rename-command DEBUG ""
rename-command SHUTDOWN ""
rename-command KEYS ""

(2) 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.


5. Segurança de Rede

(1) 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!

(2) Modo Protegido

CONF
# redis.conf

# Habilitar modo protegido (padrão)
protected-mode yes

Comportamento do modo protegido:

(3) 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.

(4) 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

6. Criptografia TLS/SSL (Redis 6.0+)

Redis 6.0 suporta conexões criptografadas TLS.

(1) 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"

(2) Conectando com TLS

BASH
redis-cli --tls --cert /caminho/para/client.crt --key /caminho/para/client.key --cacert /caminho/para/ca.crt

7. 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

8. Lista de Verificação de Segurança

BASH
□ 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+)

▶ Exemplo

Exemplo de configuração de segurança:

BASH
# Definir senha
127.0.0.1:6379> CONFIG SET requirepass "minhasenhadeforte"
OK

# Autenticar
127.0.0.1:6379> AUTH minhasenhadeforte
OK

# Ver lista ACL (Redis 6.0+)
127.0.0.1:6379> ACL LIST
1) "user default on nopass ~* &* +@all"

❓ 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


9. 📝 Atividades

  1. Autenticação por senha: Defina uma senha Redis e teste conexões autenticadas
  2. Configuração ACL: Crie usuários com diferentes permissões (admin, somente leitura, usuário de aplicação)
  3. Desabilitação de comando: Desabilite os comandos FLUSHALL e CONFIG e verifique que não funcionam mais
  4. Verificação de segurança: Percorra a lista de verificação de segurança para sua configuração Redis

10. Próxima Lição

Na próxima lição, nós aprenderemos sobre Teste de Desempenho do Redis, abordando a ferramenta redis-benchmark.

📝 Exercícios

  1. Prática: Execute os comandos apresentados nesta lição
  2. Experimentação: Teste variações dos comandos aprendidos
  3. Aplicação: Aplique os conceitos em um projeto prático
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%