Table of Contents
Introdução
O Redis é um armazenamento de dados de chave-valor na memória, conhecido pela sua flexibilidade, desempenho e amplo suporte de linguagens. Este tutorial quickstart demonstra como instalar, configurar e proteger o Redis em um servidor Ubuntu 20.04.
Pré-requisitos
Para completar este guia, você precisará ter acesso a um servidor Ubuntu 20.04, que tenha um usuário não root com privilégios sudo e um firewall configurado.com o ufw. Você pode configurar isto seguindo o nosso Guia de Configuração Inicial de Servidor para Ubuntu 20.04.
Passo 1 — Instalando e Configurando o Redis
Comece atualizando seu cache de pacotes local do apt:
sudo apt update
Em seguida, instale o Redis digitando:
sudo apt install redis-server
Em seguida, abra o arquivo de configuração do Redis com seu editor de texto preferido:
sudo nano /etc/redis/redis.conf
Dentro do arquivo, encontre a diretiva supervised que permite que você declare um sistema init para gerenciar o Redis como um serviço. Uma vez que você está executando o Ubuntu, que usa o sistema init systemd, altere seu valor de no para systemd:
[label /etc/redis/redis.conf]
. . .
# 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<^>
. . .
Salve e feche o arquivo quando você terminar. Se você usou o nano para editar o arquivo, faça isso pressionando CTRL + X, Y, depois ENTER.
Então, reinicie o serviço Redis para refletir as alterações feitas no arquivo de configuração:
sudo systemctl restart redis.service
Para testar se o Redis está funcionando corretamente, conecte-se ao servidor usando o redis-cli, o cliente de linha de comando do Redis:
redis-cli
No prompt que segue, teste a conectividade com o comando ping:
ping
[secondary_label Output]
PONG
Esta saída confirma que a conexão com o servidor está ativa. A seguir, verifique se você é capaz de definir chaves executando:
set test "It's working!"
[secondary_label Output]
OK
Recupere o valor digitando:
get test
Supondo que tudo esteja funcionando, você será capaz de recuperar o valor que você armazenou:
[secondary_label Output]
"It's working!"
Após confirmar que você pode obter o valor, saia do prompt do Redis para voltar ao shell:
exit
Passo 2 — Configurando uma Senha para o Redis
Você pode configurar uma senha do Redis diretamente no arquivo de configuração do Redis, /etc/redis/redis.conf. Abra esse arquivo novamente com seu editor preferido:
sudo nano /etc/redis/redis.conf
Role até a seção SECURITY e procure uma diretiva comentada que mostre:
[label /etc/redis/redis.conf]
. . .
# requirepass foobared
. . .
Descomente-a removendo o #, e modificando foobared para uma senha segura.
[label /etc/redis/redis.conf]
. . .
requirepass <^>your_redis_password<^>
. . .
Após configurar a senha, salve e feche o arquivo, então reinicie o Redis:
sudo systemctl restart redis.service
Para testar se a senha funciona, abra o cliente Redis:
redis-cli
A seguir encontra-se uma sequência de comandos usada para testar se a senha do Redis funciona. O primeiro comando tenta definir uma chave para um valor antes da autenticação:
set key1 10
Isso não funcionará porque você não se autenticou, então o Redis retorna um erro:
[secondary_label Output]
(error) NOAUTH Authentication required.
O próximo comando autentica-se com a senha especificada no arquivo de configuração do Redis:
auth <^>your_redis_password<^>
O Redis reconhece:
[secondary_label Output]
OK
Após isso, executando o comando anterior novamente terá sucesso:
set key1 10
[secondary_label Output]
OK
get key1 consulta o Redis para o valor da nova chave.
get key1
[secondary_label Output]
"10"
Após confirmar que você é capaz de executar comandos no cliente Redis depois da autenticação, você poderá sair do redis-cli:
quit
Passo 3 — Renomeando Comandos Perigosos
A outra característica de segurança embutida no Redis envolve renomear ou desativar completamente determinados comandos que são considerados perigosos. Alguns comandos que são considerados perigosos incluem: FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF, BGSAVE, SAVE, SPOP, SREM, RENAME, e DEBUG. Ao desativar ou renomear esses e outros comandos, você torna mais difícil para os usuários não autorizados reconfigurar, destruir ou, de outro modo, limpar seus dados.
Para renomear ou desativar comandos do Redis, abra novamente o arquivo de configuração:
sudo nano /etc/redis/redis.conf
[warning]
Aviso: os passos a seguir mostrando como desativar e renomear comandos são exemplos. Você deve apenas escolher desativar ou renomear os comandos que fizerem sentido para você. Você pode rever a lista completa de comandos por conta própria e determinar como eles poderiam ser usados de forma errada com o redis.io/commands.
Para desativar um comando, simplesmente renomeie-o para uma string vazia (representado por um par de aspas sem caracteres entre elas), como mostrado abaixo:
[label /etc/redis/redis.conf]
. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
<^>rename-command FLUSHDB ""<^>
<^>rename-command FLUSHALL ""<^>
<^>rename-command DEBUG ""<^>
. . .
Para renomear um comando, dê a ele outro nome como mostrado nos exemplos abaixo. Os comandos renomeados devem ser difíceis para que outros possam adivinhar, mas fácil para você lembrar:
[label /etc/redis/redis.conf]
. . .
# rename-command CONFIG ""
<^>rename-command SHUTDOWN SHUTDOWN_MENOT<^>
<^>rename-command CONFIG ASC12_CONFIG<^>
. . .
Salve suas alterações e feche o arquivo.
Após renomear um comando, aplique a alteração reiniciando o Redis:
sudo systemctl restart redis.service
Para testar o novo comando, acesse a linha de comando do Redis:
redis-cli
Em seguida, autentique-se:
auth <^>your_redis_password<^>
[secondary_label Output]
OK
Supondo que você tenha renomeado o comando CONFIG para ASC12_CONFIG como no exemplo anterior, tente usar o comando CONFIG original. Ele deve falhar, porque você o renomeou:
config get requirepass
[secondary_label Output]
(error) ERR unknown command `config`, with args beginning with:
Chamar o comando renomeado, no entanto, será bem-sucedido. Não é sensível a maiúsculas e minúsculas:
asc12_config get requirepass
[secondary_label Output]
1) "requirepass"
2) "<^>your_redis_password<^>"
Conclusão
Neste tutorial quickstart, 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 aos ataques de indivíduos mal-intencionados.