Raspberry Pi

Instalar o Mosquitto no Raspberry Pi como Broker MQTT Local Seguro

Instale o Mosquitto em um Raspberry Pi, proteja-o com senhas e uma configuração de listener sensata, teste com mosquitto_pub e mosquitto_sub e saiba quando um broker local deve fazer bridge com um broker na nuvem.

Raspberry Pi executando um broker Mosquitto local depois dos passos para instalar o Mosquitto no Raspberry Pi, com bridge para um broker MQTT na nuvem
Rode isso no seu próprio broker MQTTTenha um broker MQTT privado e gerenciado no plano Free e comece com exemplos de código prontos.
Teste grátis Exemplos de código Sem cartão de crédito

Ao instalar o Mosquitto no Raspberry Pi, você ganha um broker MQTT rápido e leve que continua funcionando na sua rede local mesmo quando a internet cai. Neste tutorial você vai instalar os pacotes do Mosquitto no Raspberry Pi a partir do repositório do sistema, configurar um listener com autenticação por senha, testá-lo pela linha de comando e decidir quando um broker local basta e quando ele deve fazer bridge com um broker na nuvem. Todo arquivo de configuração está completo e pronto para copiar.

Quando um broker Mosquitto local faz sentido

Um broker no Pi se encaixa bem em alguns trabalhos e mal em outros. Seja honesto sobre qual é o seu caso antes de investir tempo nele.

Situação Mosquitto local no Pi Broker na nuvem
Todos os dispositivos em uma única LAN, nada necessário remotamente Bom encaixe Opcional
Precisa continuar funcionando durante quedas de internet Bom encaixe Combinar com um broker local
Dispositivos em vários prédios ou em redes móveis Mau encaixe, exige redirecionamento de portas Bom encaixe
Apps de celular e dashboards de qualquer lugar Mau encaixe, exige VPN ou portas abertas Bom encaixe
Você quer que outra pessoa cuide de TLS, autenticação e atualizações Mau encaixe Bom encaixe
Latência muito baixa entre dispositivos locais Bom encaixe Acrescenta uma ida e volta pela internet

O padrão que combina os dois é comum na prática: os dispositivos falam com um Mosquitto local no Pi, e o Mosquitto faz bridge de topics selecionados para um broker na nuvem. As automações locais continuam rodando offline, e o lado da nuvem recebe os dados para dashboards e acesso remoto. É aí que este tutorial termina. Se quiser relembrar antes o papel do broker, veja o que faz um broker MQTT.

Passo 1: instale o Mosquitto no Raspberry Pi OS

O Raspberry Pi OS Bookworm traz o Mosquitto 2.0 no repositório, versão recente o bastante para a maioria dos usos:

sudo apt update
sudo apt install -y mosquitto mosquitto-clients
sudo systemctl enable --now mosquitto
mosquitto -h | head -n 1
systemctl status mosquitto --no-pager

O pacote mosquitto-clients adiciona o mosquitto_pub e o mosquitto_sub, que você usará nos testes.

Logo após a instalação, o Mosquitto 2.0 é deliberadamente fechado: sem um listener configurado, ele só aceita conexões do próprio Pi (localhost) e recusa clientes remotos anônimos. Isso surpreende quem seguiu guias antigos, em que o broker aceitava qualquer um na porta 1883. É o padrão correto, e o próximo passo o abre com segurança.

Passo 2: crie usuários e um arquivo de senhas

Crie um arquivo de senhas com um usuário por dispositivo ou serviço. A flag -c cria o arquivo, então use-a apenas para o primeiro usuário:

sudo mosquitto_passwd -c /etc/mosquitto/passwd sensors
sudo mosquitto_passwd /etc/mosquitto/passwd nodered
sudo mosquitto_passwd /etc/mosquitto/passwd dashboard

Cada comando pede uma senha e armazena um hash com salt, não o texto puro. Restrinja o arquivo para que apenas o root e o broker possam lê-lo:

sudo chown root:mosquitto /etc/mosquitto/passwd
sudo chmod 0640 /etc/mosquitto/passwd

Versões recentes do Mosquitto emitem um aviso no log quando o arquivo de senhas pode ser lido por todos, e versões futuras podem recusá-lo; por isso, ajuste as permissões agora.

Passo 3: configure o listener

Mantenha o /etc/mosquitto/mosquitto.conf principal como veio; ele inclui todos os arquivos de /etc/mosquitto/conf.d/. Adicione sua própria configuração ali:

sudo nano /etc/mosquitto/conf.d/local.conf
# Local network listener with authentication
per_listener_settings true

listener 1883 0.0.0.0
allow_anonymous false
password_file /etc/mosquitto/passwd

# Limits that protect a small Pi
max_connections 200
max_inflight_messages 20
max_queued_messages 1000
message_size_limit 262144

# Keep the SD card happy: persistence is on by default in the main file,
# save to disk every 5 minutes rather than continuously
autosave_interval 300

Algumas observações sobre essas configurações. per_listener_settings true permite que cada listener tenha sua própria autenticação, o que você vai precisar se depois adicionar um listener WebSocket com regras diferentes. message_size_limit impede que um cliente com mau comportamento envie payloads enormes para um Pi com pouca RAM. autosave_interval controla a frequência com que o banco de persistência em memória é gravado, o que importa para o desgaste do cartão SD.

Reinicie e confira o log:

sudo systemctl restart mosquitto
sudo journalctl -u mosquitto -n 30 --no-pager

O log deve mostrar Opening ipv4 listen socket on port 1883. Se o serviço falhar, a linha do log logo acima da falha indica a opção incorreta.

Passo 4: teste o broker local

Em um terminal no Pi, assine com o usuário dashboard:

mosquitto_sub -h localhost -p 1883 -u dashboard -P 'dashboard-password' \
  -i test-sub -t 'home/#' -v

Em outro terminal, ou de um notebook na mesma rede usando o endereço IP do Pi, publique como sensors:

mosquitto_pub -h 192.168.1.50 -p 1883 -u sensors -P 'sensors-password' \
  -i test-pub -t home/kitchen/temperature -m 21.6

O assinante imprime home/kitchen/temperature 21.6. Agora tente sem credenciais para confirmar que o acesso anônimo é recusado:

mosquitto_pub -h 192.168.1.50 -p 1883 -i anon-test -t home/x -m test
# Connection error: Connection Refused: not authorised.

Para mais padrões de linha de comando, veja os exemplos de mosquitto_pub e mosquitto_sub.

Passo 5: listener WebSocket opcional para dashboards locais

Se um dashboard no navegador da sua LAN precisar falar com o broker do Pi, adicione um listener WebSocket no mesmo arquivo:

listener 9001 0.0.0.0
protocol websockets
allow_anonymous false
password_file /etc/mosquitto/passwd

Como per_listener_settings está ativado, este listener precisa de suas próprias linhas allow_anonymous e password_file. O ws:// sem criptografia é aceitável em uma LAN confiável, mas não pela internet.

Checklist de proteção depois de instalar o Mosquitto no Raspberry Pi

  1. Troque a senha do usuário padrão do Pi e mantenha o sistema atualizado com sudo apt full-upgrade.
  2. Não redirecione a porta 1883 no seu roteador. Expor um broker sem criptografia à internet convida tentativas de adivinhar senhas e a interceptação do tráfego.
  3. Use um usuário MQTT separado por dispositivo ou serviço, para poder revogar um sem mexer nos demais.
  4. Adicione uma regra de firewall para que só a sua LAN alcance o broker: sudo ufw allow from 192.168.1.0/24 to any port 1883.
  5. Mova a persistência para um SSD ou reduza as gravações se o Pi for rodar a partir de um cartão SD por anos.
  6. Monitore o próprio Pi; o publicador de estatísticas do sistema do Raspberry Pi informa disco e temperatura.

Para acessar o broker de fora, resista à tentação de abrir portas. Esse é o trabalho que um broker na nuvem faz melhor.

Fazendo bridge do Mosquitto local com a ConnectMQ

É aqui que o broker local e um broker na nuvem se encontram. O Mosquitto tem um bridge embutido: ele se conecta a um broker remoto como um cliente MQTT comum e encaminha os topics que você escolher. A ConnectMQ é um broker MQTT na nuvem, então, do ponto de vista dela, o seu Pi é apenas mais um cliente que faz login com o usuário, a senha e o client ID gerados no portal. Nenhum recurso especial de bridge é necessário no lado da nuvem, e nenhuma porta de entrada é aberta na sua rede.

Um arquivo de bridge mínimo, /etc/mosquitto/conf.d/bridge-connectmq.conf, fica assim:

connection connectmq
address broker.connectmq.com:8883
bridge_capath /etc/ssl/certs
remote_clientid YOUR_CLIENT_ID
remote_username YOUR_USERNAME
remote_password YOUR_PASSWORD
bridge_protocol_version mqttv311
try_private false
cleansession false
notifications false
start_type automatic

# Local topic home/... appears in the cloud as site1/home/...
topic home/# out 1 "" site1/
# Commands from the cloud reach local devices
topic home/+/set in 1 "" site1/

Reinicie o Mosquitto e o log mostrará Connecting bridge connectmq. As mensagens publicadas localmente em home/kitchen/temperature agora também aparecem em site1/home/kitchen/temperature na ConnectMQ, onde o explorador de topics ao vivo e o dashboard do portal podem exibi-las. Se a internet cair, os dispositivos locais continuam falando com o Pi e, com cleansession false e QoS 1, as mensagens de saída ficam enfileiradas localmente até o bridge reconectar, até o limite de max_queued_messages.

O broker na nuvem usa um certificado Let's Encrypt, e é por isso que bridge_capath /etc/ssl/certs é toda a configuração de TLS necessária. try_private false é importante: impede o Mosquitto de usar uma flag de protocolo específica do Mosquitto que outros brokers não esperam. O passo a passo completo, opção por opção, incluindo prevenção de loops e testes, está no guia de configuração de bridge do Mosquitto.

Se você perceber que está mantendo o broker do Pi apenas para chegar à nuvem, considere removê-lo completamente e apontar os dispositivos direto para a nuvem. O guia de migração do Mosquitto para um broker na nuvem cobre esse caminho.

Solução de problemas

Erro ou sintoma Causa Correção
Connection refused a partir de outras máquinas Nenhum listener em 0.0.0.0 Adicione listener 1883 0.0.0.0
not authorised Usuário ou senha errados, ou arquivo sem permissão de leitura para o broker Execute mosquitto_passwd novamente e confira chown root:mosquitto
O serviço falha depois de editar a configuração Listener duplicado ou erro de digitação Leia journalctl -u mosquitto
Os clientes ficam se desconectando Dois clientes compartilham o mesmo ID Use client IDs únicos
O bridge conecta e depois cai Client ID ou credenciais não conferem Copie os três exatamente do portal

Comece com a ConnectMQ

Mantenha o Mosquitto para o tráfego local rápido e deixe um broker MQTT gerenciado cuidar de tudo o que atravessa a internet. Crie um broker Serverless gratuito em app.connectmq.com, sem cartão de crédito, copie as credenciais geradas para o seu arquivo de bridge e veja seus topics locais aparecerem no portal. Para um primeiro experimento com os clientes do Mosquitto, o servidor MQTT público em broker.connectmq.com aceita testes sem credenciais, mas não serve para dados de produção. Mais projetos com o Pi estão reunidos no tutorial de MQTT com Raspberry Pi.

Perguntas frequentes

Por que o Mosquitto recusa conexões de outros dispositivos depois da instalação?

O Mosquitto 2.0 escuta apenas no localhost e rejeita clientes anônimos, a menos que você configure um listener. Adicione listener 1883 0.0.0.0 com allow_anonymous false e um arquivo de senhas.

Devo expor o broker Mosquitto do meu Raspberry Pi à internet?

Não é recomendado. Em vez disso, faça um bridge de saída para um broker na nuvem, para que o acesso remoto passe por um serviço protegido com TLS e seu roteador mantenha todas as portas de entrada fechadas.

O Mosquitto em um Raspberry Pi aguenta muitos dispositivos?

Para uma casa ou um site pequeno, um Pi lida facilmente com o tráfego típico de sensores. Os limites que aparecem primeiro costumam ser o desgaste do cartão SD e o esforço de manutenção, não a vazão bruta.

O bridge precisa de uma conta especial na ConnectMQ?

Não. O bridge é um cliente MQTT comum, então usa o mesmo usuário, senha e client ID que o portal gera para qualquer dispositivo.

Artigos relacionados

Registro de Acessos Raspberry Pi RFID MQTT com o Leitor RC522

Ligue um leitor RFID RC522 a um Raspberry Pi, leia tags em Python, confira-as em uma lista de permissões local e publique cada tentativa de acesso como um evento MQTT que loggers, dashboards e ferramentas de alerta podem consumir.

8 min de leitura

Confiabilidade do Raspberry Pi: Rodando um Pi 24/7 como Gateway IoT

Um guia prático para manter um gateway MQTT com Raspberry Pi rodando por meses: desgaste do armazenamento, sistemas de arquivos somente leitura, alimentação, refrigeração, watchdogs de hardware e software e monitoramento remoto de saúde.

9 min de leitura

Pico W vs Pico 2 W para MQTT: Desempenho, Memória e TLS do RP2040 vs RP2350

O Pico 2 W mantém o formato e o chip Wi-Fi do Pico W, mas troca o RP2040 pelo RP2350, mais rápido. Esta comparação mostra o que isso significa para dispositivos MQTT: CPU, memória, TLS, recursos de segurança, suporte de software e qual placa comprar para cada projeto.

9 min de leitura

Todos os artigos →

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.