Como realizar uma instalação segura do Redis no Linux

Redis é benéfico para muitas coisas, uma das quais é o cache. Você também pode usar o Redis como um armazenamento de dados primário ou até mesmo como substituto de um banco de dados. Mas como você realiza uma instalação segura do Redis? Instalar o Redis pode ser complicado e, se você não tomar cuidado, pode acabar com muitos erros. Por sorte, este tutorial tem você coberto.

Neste tutorial, você aprenderá como instalar o Redis com segurança em seu sistema Linux, juntamente com algumas dicas para evitar erros comuns.

Continue lendo e poupe-se das dores de cabeça ao solucionar erros na instalação do Redis!

Pré-requisitos

Este tutorial será uma demonstração prática. Se você quiser acompanhar, certifique-se de ter o seguinte:

  • Uma máquina Ubuntu 20.04 LTS – Este tutorial utiliza o Ubuntu 20.04 LTS, mas as instruções são semelhantes para a maioria das distribuições Linux.

Instalação do Redis com o Gerenciador de Pacotes APT

Existem algumas maneiras de instalar o Redis no Ubuntu, mas para este tutorial, você vai usar o gerenciador de pacotes APT para instalar o Redis.

O Redis é escrito em C, então você precisaria compilar o Redis a partir do código-fonte manualmente. Várias dependências precisariam ser instaladas, e o processo de compilação não é exatamente à prova de falhas.

Compilar o Redis a partir do código-fonte não é recomendado, mas a vantagem é que você pode personalizar sua instalação, se desejar. Você baixa o código-fonte e o configura manualmente.

Abra seu terminal e execute o comando apt update abaixo para garantir que você tenha as listas de pacotes mais recentes.

sudo apt update -y
Updating the Linux system

Agora, execute o comando apt install abaixo para instalar o Redis em sua máquina.

O comando abaixo usa o gerenciador de pacotes apt para baixar e instalar o pacote redis-server dos repositórios do Ubuntu em sua máquina. A opção -y diz ao apt para aceitar prompts durante o processo de instalação automaticamente.

sudo apt install redis-server -y
Installing Redis on your machine

Configurando o Arquivo Redis.conf para Executar o Redis como um Serviço

Você acabou de instalar o Redis, mas ele ainda não está pronto para uso. Antes de começar a usar o Redis, você precisará configurar o arquivo redis.conf.

O arquivo de configuração redis.conf está incluído no pacote Redis que você instalou e é armazenado no diretório /etc/redis/ por padrão. Este arquivo contém todas as opções de configuração para o Redis.

A extensão do arquivo .conf é lógica, seguindo um padrão convencional. Muitos outros programas usam o mesmo estilo. Por exemplo, o servidor web Apache usa a extensão de arquivo .conf para seu arquivo de configuração principal.

1. Execute o seguinte comando systemctl para stop o serviço redis-server. Parar o serviço do Redis é uma prática recomendada quando você está começando a usar o Redis.

sudo systemctl stop redis.service

2. Em seguida, abra o arquivo /etc/redis/redis.conf no seu editor de texto preferido.

Encontre a diretiva supervised, e defina-a como systemd, como mostrado abaixo, e salve as alterações. Isso informa ao sistema operacional para executar o Redis como um serviço.

Setting up the systemd directive

3. Agora, execute o comando systemctl restart abaixo para reiniciar o serviço Redis (redis.service) uma vez que o serviço Redis ainda não tem conhecimento das alterações.

sudo systemctl restart redis.service

4. Por fim, execute o comando systemctl status abaixo para verificar se o Redis está em execução.

sudo systemctl status redis.service

Como você pode ver abaixo, a saída mostra que o serviço Redis está em execução.

Checking if Redis Service is Running

Testando se o Servidor Redis Funciona Corretamente

Você configurou e verificou que o serviço Redis está em execução, mas isso não significa que o servidor Redis está funcionando. Como testar se o servidor Redis funciona corretamente? Conecte-se ao servidor Redis e envie comandos para ver se o servidor responde.

1. Execute o comando redis-cli abaixo para se conectar ao servidor Redis. redis-cli é a interface de linha de comando para o Redis, que permite enviar comandos para o servidor e inspecionar seu estado.

redis-cli

Abaixo, você pode ver que está no prompt do servidor Redis (127.0.0.1:6379>). O comando redis-cli tenta se conectar a um servidor Redis em 127.0.0.1:6379 por padrão.

Connecting to the Redis Server

2. Em seguida, execute o comando ping abaixo para verificar se o servidor Redis está acessível.

ping

Como você pode ver, o servidor retornou PONG, o que indica que o servidor Redis está acessível e pode agora comunicar-se com o serviço com sucesso.

Pinging the Redis server

Talvez você ainda esteja cético; execute o comando set abaixo. O comando set é um comando Redis que define um par chave-valor em um banco de dados.

set test "This is a test"

Como você pode ver, o comando set retorna “OK,” o que indica que o serviço Redis está funcionando corretamente.

Testing the Redis server

3. Execute o comando exit abaixo para sair do redis-cli. Fazê-lo fecha a conexão com o servidor Redis.

exit

Vinculando o Servidor Redis ao Localhost

Você acabou de testar que o servidor Redis funciona corretamente, mas ele pode ser acessível a partir de outros dispositivos em sua rede também. Esse comportamento é indesejável, e normalmente você gostaria de proteger seu servidor Redis de estranhos.

Vincular o servidor Redis ao localhost define um comportamento que apenas a máquina na qual você instalou o Redis pode acessar o servidor Redis.

1. Abra o arquivo /etc/redis/redis.conf em seu editor de texto.

2. Localize a linha que diz bind 127.0.0.1 ::1 e descomente a linha excluindo o sinal de número (#) no início da linha.

Uncommenting the bind 127.0.0.1 ::1 line

3. Agora, execute o comando abaixo para reiniciar o serviço redis-server.

sudo systemctl restart redis-server

4. Finalmente, execute o seguinte comando para verificar se seu servidor Redis está vinculado ao localhost. O comando netstat -lnp lista todas as conexões de rede ativas, e a parte grep redis filtra a saída para linhas que contêm “redis.”

-lnp representa Protocolo de Nome Local, um protocolo de rede usado por sistemas semelhantes ao UNIX para resolver nomes de host em endereços IP.

sudo netstat -lnp | grep redis

Você pode ver abaixo que o servidor Redis agora está ouvindo apenas na interface local (127.0.0.1:6379). Refletindo a alteração no arquivo de configuração, você pode ver que apenas a interface local está listada em suas conexões de internet ativas (tcp).

Agora, nenhum outro dispositivo em sua rede pode se conectar ao seu servidor Redis.

Listing all active network connections

Protegendo a Conexão do Servidor Redis com uma Senha

Neste ponto, o Redis não está configurado para exigir que os usuários se autentiquem com uma senha. Qualquer pessoa que conheça o endereço IP ou nome do host do seu servidor Redis pode se conectar a ele e alterar seus dados.

Como proteger seu servidor Redis? Defina uma senha para exigir autenticação dos usuários ao se conectarem ao seu servidor Redis.

1. Reabra o arquivo de configuração redis.conf em seu editor de texto/código.

2. Em seguida, defina uma senha forte com o seguinte:

  • Procure por requirepass foobared na seção SECURITY
  • Exclua o sinal de número (#) no início da linha
  • Substitua foobared por uma senha forte de sua escolha e salve as alterações
Providing a secure password

3. Execute os seguintes comandos para reiniciar e se conectar ao seu servidor Redis.

sudo systemctl restart redis-server
redis-cli

4. Agora, execute o comando ping para ver se você receberá uma resposta do servidor.

ping

Abaixo, você pode ver uma mensagem de erro que diz NOAUTH Autenticação necessária. Esta mensagem indica que você precisa de uma senha de autenticação para acessar seu servidor Redis remotamente.

Testing connection with the server

5. Execute o comando auth abaixo seguido de sua senha para autenticar sua conexão com seu servidor Redis.

auth Qae9p_fY:YjdtJ7k

Você receberá uma resposta OK quando a autenticação for bem-sucedida, como a mostrada abaixo.

Authenticating Redis Server Connection

6. Por fim, execute novamente o comando ping para testar se você autenticou sua conexão com seu servidor Redis.

ping

Agora você receberá a resposta PONG, conforme mostrado abaixo, após autenticar sua conexão. Neste ponto, você agora protegeu com sucesso seu servidor Redis com uma senha.

Pinging the Redis server

Desabilitando Comandos Perigosos para Proteger seu Servidor Redis

Definir uma senha para autenticar a conexão com seu servidor Redis não significa que ele esteja 100% protegido. Por padrão, o Redis inclui vários comandos perigosos que permitem aos usuários alterar os dados em seu banco de dados.

Quando executados por usuários não autorizados, esses comandos permitem que invasores leiam, modifiquem, destruam e até mesmo apaguem os dados do seu banco de dados Redis.

Abaixo não é uma lista abrangente, pois seu servidor Redis pode ter comandos perigosos adicionais, mas na maioria dos casos, estes são os comandos perigosos:

FLUSHDB, FLUSHALL, KEYS, PEXPIRE, DEL, CONFIG, SHUTDOWN, BGREWRITEAOF
BGSAVE, SAVE, SPOP, SREM, RENAME, DEBUG, EVAL

Para garantir ainda mais a segurança do seu servidor Redis, renomeie esses comandos perigosos no arquivo redis.conf:

1. Abra o arquivo redis.conf em seu editor de texto e procure pela seção Renomeação de Comandos.

Renomeie comandos para uma string vazia para desabilitá-los seguindo a sintaxe abaixo. Substitua o-comando pelo comando real a ser desabilitado.

rename-command the-command ""

Por exemplo, desabilite o comando CONFIG renomeando CONFIG para uma string vazia, conforme mostrado abaixo, e então salve as mudanças. As aspas duplas (“”) indicam uma string vazia que significa desabilitar um comando.

Renaming the CONFIG command

2. Saia do editor de texto e execute o comando abaixo para reiniciar o servidor Redis.

sudo systemctl restart redis-server

3. Agora execute os seguintes comandos para conectar-se ao seu servidor Redis.

redis-cli
auth Qae9p_fY:YjdtJ7k

4. Finalmente, execute o comando config get para testar se o comando CONFIG está desabilitado.

config get requirepass

Você receberá uma resposta ERR unknown command config, como mostrado abaixo, o que indica que o comando CONFIG está desabilitado.

Checking the CONFIG command

Se o comando config get requirepass for bem-sucedido, ele solicita a senha do seu servidor Redis para autenticar a conexão ao seu servidor Redis.

Você agora renomeou com sucesso um comando perigoso do Redis para proteger seu servidor Redis. Agora continue desabilitando outros comandos perigosos no arquivo redis.conf.

Bloqueando Solicitação de Conexão ao Servidor Redis com um Firewall

Outra maneira de proteger seu servidor Redis é configurar um firewall. Configurar um firewall requer que você permita apenas a porta necessária para cada um dos serviços em execução no seu servidor.

Por exemplo, se você estiver executando o Redis no seu servidor na porta 6379, então essa porta é a única que você precisa abrir. Se precisar permitir acesso de um endereço IP específico ou de um intervalo de endereços, você pode adicionar esses endereços às regras do firewall.

Para configurar um firewall, primeiro você instalará uma ferramenta de configuração de firewall. Este exemplo usa UFW, uma ferramenta de configuração de firewall comumente usada no Linux. Mas você também pode usar outra ferramenta, como iptables, para configurar um firewall.

1. Execute o seguinte comando para instalar o UFW na sua máquina.

sudo apt install ufw -y

2. Em seguida, execute o comando abaixo para habilitar o UFW.

sudo ufw enable

Digite ‘Y’ quando receber o prompt mostrado abaixo para continuar executando o comando.

Enabling UFW

3. Execute o comando ufw abaixo para adicionar uma regra, que permite (allow) tráfego na porta 6379 para o seu servidor Redis. Substitua o endereço IP 11.22.33.44 pelos endereços IP dos usuários pretendidos.

sudo ufw allow from 11.22.33.44 to any port 6379
Adding a firewall rule to allow traffic on port 6379

4. Por último, execute o comando abaixo para verificar se você adicionou a regra do firewall com sucesso. O comando verifica o status do seu firewall.

sudo ufw status

Você pode ver na saída abaixo que o firewall está ativo e possui a regra para permitir tráfego na porta 6379 para o Redis a partir do endereço IP 11.22.33.44.

Checking the UFW rules

Agora, qualquer usuário com o endereço IP 11.22.33.44 pode se conectar ao Redis através da porta 6379 e precisará autenticar com uma senha. Você pode adicionar portas adicionais para outros serviços de maneira semelhante.

Conclusão

Ao longo deste tutorial, você aprendeu como instalar e proteger seu servidor Redis renomeando comandos perigosos para strings vazias e configurando um firewall.

Com este conhecimento recém-adquirido, você pode desfrutar de todos os benefícios do Redis sem se preocupar em expor seu servidor a riscos desnecessários.

Deseja aprender mais? Por que não começar com protegendo um servidor Redis no Kubernetes?

Source:
https://adamtheautomator.com/redis-install/