🐇 Segurança no RabbitMQ

Michelle Mesquita
3 min read6 days ago

--

Oi pessoal, tudo bem 😊? Hoje resolvi trazer um conteúdo sobre mensageria e como devemos pensar em segurança quando abordamos esse conteúdo! Algo muito utilizado pelos desenvolvedores, principalmente em grandes aplicações , onde é necessário utilizar filas e fazer requisições de forma assíncrona

O que é RabbitMQ?

RabbitMQ é um message broker, ou seja, um software que recebe, armazena e distribui mensagens entre sistemas de forma assíncrona. Ele permite a comunicação eficiente entre diferentes partes de uma aplicação sem que elas precisem estar diretamente conectadas.

O que são Producer e Consumer?

  • Producer: Responsável por enviar mensagens para uma fila no RabbitMQ.
  • Consumer: Escuta e processa mensagens dessa fila conforme chegam.

No dia a dia, RabbitMQ é usado para processar pedidos de e-commerce, notificações em tempo real, sistemas de filas de atendimento, entre outros. Ele é muito usado na comunicação entre micro serviços

Contexto de AppSec

Do ponto de vista de segurança (AppSec), é essencial proteger o RabbitMQ contra ataques como:

  • DoS (Denial of Service): Envio massivo de mensagens para sobrecarregar o sistema.
  • SQL Injection e XSS: Se as mensagens não forem sanitizadas corretamente, podem conter código malicioso.
  • Acesso não autorizado: Sem autenticação, qualquer um poderia enviar ou consumir mensagens.

Para mitigar esses riscos, implementamos Rate Limiting, Sanitização de Mensagens e Autenticação por Token, no código a abaixo.

⚠️ Também devemos lembrar de utilizar HSTS para impedir que as informações da fila possam ser escutadas por pessoas má intencionadas

Como visualizar as filas no RabbitMQ

Após iniciar o RabbitMQ, acesse a interface de gerenciamento via navegador:

  1. Acesse: http://localhost:15672
  2. Faça login com:
  • Usuário: guest
  • Senha: guest
  1. Clique na aba Queues
  2. Encontre a fila fila_teste
  3. Você pode visualizar o número de mensagens pendentes e consumidas.

Podemos testar de enviar a mensagem pela interface, utilizando um Payload e recebendo no nosso consumer! Isso é ótimo para testar entre desenvolvedores diferentes e saber como que é esperada a informação da fila 😎

Você pode escolher do delivery ser persistente (gravado no disco - caso reinicie o RabbitMQ, a informação na será perdida) ou não persistente(será perdida a informação em seguida)

Agora, testando alguns conceitos de segurança ✨

O código está disponível aqui com todo o passo a passo:

Utilizei localmente, mas se fosse em produção, deveria ser trocado o IP aqui:

# Conectar ao RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()

Boas práticas:

  • Chamamos o código producer.py para realizar os testes com o consumer

# Limit Rate para não ocorrer DOS (negação de serviço)

# Sanitização de inputs para códigos maliciosos

# Autenticação com Token adequado

Espero que tenham gostado 👩‍💻

--

--

Michelle Mesquita
Michelle Mesquita

Written by Michelle Mesquita

DevSecOps & AppSec Engineer & Developer girl 👩‍💻

No responses yet