Como Realizar uma Instalação Segura do Redis no Linux

Redis é benéfico para muitas coisas, uma das quais é o caching. 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ê executa uma instalação segura do Redis? Instalar o Redis pode ser complicado e, se você não tiver cuidado, pode acabar com muitos erros. Sorte para você, este tutorial tem tudo o que você precisa.

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

Continue lendo e evite as dores de cabeça de resolver erros na instalação do Redis!

Pré-requisitos

Este tutorial será uma demonstração prática. Se você deseja 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ê utilizará o gerenciador de pacotes APT para instalar o Redis.

O Redis é escrito em C, então você precisaria compilar o Redis a partir do seu código-fonte manualmente. Várias dependências precisariam ser instaladas, e o processo de compilação não é totalmente à 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 o 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 utiliza o gerenciador de pacotes apt para baixar e instalar o pacote redis-server dos repositórios do Ubuntu em sua máquina. A flag -y indica ao apt para aceitar automaticamente prompts durante o processo de instalação.

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 ainda não está pronto para uso. Antes de começar a usar o Redis, primeiro 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 de arquivo .conf é lógica, pois segue um padrão convencional. Muitos outros programas usam esse mesmo estilo. O servidor web Apache, por exemplo, usa a extensão de arquivo .conf para seu arquivo de configuração principal.

1. Execute o seguinte comando systemctl para parar o serviço redis-server. Parar o serviço 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, então defina-a como systemd, como mostrado abaixo, e salve as alterações. Fazendo isso, você está dizendo 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) já 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 é acessível.

ping

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

Pinging the Redis server

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

set test "This is a test"

Como 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 você normalmente gostaria de proteger seu servidor Redis de estranhos.

Vincular o servidor Redis ao localhost define um comportamento em 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. Por fim, 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 contenham “redis.”

-lnp significa 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 localhost (127.0.0.1:6379). Refletindo a mudança no arquivo de configuração, você pode ver que apenas a interface localhost está listada nas suas conexões ativas de internet (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 poderia se conectar a ele e modificar seus dados.

Como proteger o seu servidor Redis? Defina uma senha para exigir autenticação ao se conectar ao seu servidor Redis.

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

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

  • Procure por requirepass foobared na seção SECURITY
  • Remova 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 obterá 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, como 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

Desativando 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 intrusos leiam, modifiquem, destruam e até apaguem os dados do seu banco de dados Redis.

Abaixo não é uma lista abrangente, já que 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 no seu editor de texto e procure pela seção Renomeação de Comandos.

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

rename-command the-command ""

Por exemplo, desative o comando CONFIG renomeando CONFIG para uma string vazia, conforme mostrado abaixo, e então salve as alterações. 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 se conectar ao seu servidor Redis.

redis-cli
auth Qae9p_fY:YjdtJ7k

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

config get requirepass

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

Checking the CONFIG command

Se o comando config get requirepass for executado, ele solicita a senha do seu servidor Redis para autenticar a conexão com ele.

Você 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 estiver a executar o Redis no seu servidor na porta 6379, então é apenas essa porta que precisa de estar aberta. Se precisar de permitir acesso a partir de um endereço IP específico ou de um intervalo de endereços, pode adicionar esses endereços às regras do firewall.

Para configurar um firewall, primeiro irá instalar uma ferramenta de configuração de firewall. Este exemplo utiliza o UFW, uma ferramenta comumente usada para configurar firewalls no Linux. No entanto, também pode usar outra ferramenta, como o 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 ativar o UFW.

sudo ufw enable

Insira ‘Y’ quando receber o prompt mostrado abaixo para continuar a executar 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 seus utilizadores 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 fim, execute o comando abaixo para verificar se adicionou com sucesso a regra do firewall. O comando verifica o status do seu firewall.

sudo ufw status

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 de 11.22.33.44 pode conectar-se ao Redis via porta 6379 e precisará autenticar-se 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 segurança de um servidor Redis no Kubernetes?

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