NanoMQ 0.14: Implementação de ACL, Formato HOCON e Otimizações de Performance

A versão 0.14 do NanoMQ introduz funcionalidades críticas para a segurança e usabilidade do broker MQTT em ambientes IoT. Os destaques desta atualização incluem o suporte nativo a Listas de Controle de Acesso (ACL), a adoção do formato de configuração HOCON e melhorias significativas na distribuição de imagens Docker e bibliotecas compartilhadas.

Controle de Acesso (ACL)

Em implantações de Internet das Coisas, a segurança da informação é vital. O serviço de ACL permite restringir quais clientes podem publicar ou assinar tópicos específicos, evitando que dispositivos maliciosos enviem comandos indevidos ou acessem dados sensíveis. No NanoMQ 0.14, as regras podem ser definidas com base no ID do cliente ou no nome de usuário, seguindo uma sintaxe compatível com o EMQX 4.x.

Abaixo, um exemplo de configuração para permitir que apenas um usuário administrativo monitore tópicos de sistema, bloqueando outros acessos:

## Ação padrão quando nenhuma regra coincide (allow | deny)
acl_nomatch=allow

## Comportamento após falha na verificação (ignore | disconnect)
acl_deny_action=ignore

# Permite que o usuário 'monitor_admin' assine tópicos de sistema
acl.rule.1={"permit": "allow", "username": "monitor_admin", "action": "subscribe", "topics": ["$SYS/#"]}

# Proíbe qualquer outro usuário de acessar o caminho '$SYS/#'
acl.rule.2={"permit": "deny", "username": "#", "action": "subscribe", "topics": ["$SYS/#"]}

Para cenários onde é necessário isolar dispositivos específicos e desconectar conexões suspeitas imediatamente:

acl_nomatch=allow
acl_deny_action=disconnect

# Bloqueia publicações de IDs ou usuários suspeitos em tópicos críticos
acl.rule.1={"permit": "deny", "or" :["username": "guest_user", "clientid": "untrusted_dev"], "action": "publish","topics": ["secure/data/#", "control/+/emergency"]}

# Permite as demais operações não listadas anteriormente
acl.rule.2={"permit": "allow"}

Se o desempanho for a prioridade máxima e o controle de acesso não for necessário, o recurso pode ser desativado durente a compilação:

cmake -DENABLE_ACL=OFF ..

Configuração com HOCON

O NanoMQ addotou o HOCON (Human-Optimized Config Object Notation), um formato que combina a legibilidade das propriedades Java com a flexibilidade do JSON. Para manter a portabilidade e a leveza, a equipe desenvolveu um interpretador nativo em C, permitindo o uso do HOCON sem dependências externas pesadas.

O novo formato elimina a necessidade de índices numéricos para listas de usuários ou pontes de conexão. Exemplo de autenticação simplificada:

# Configuração de Autenticação
auth [
  {
    login = "root_user"
    password = "secure_password"
  }
  {
    login = "sensor_01"
    password = "device_password"
  }
]

A hierarquia do HOCON também torna as configurações de pontes (bridges) muito mais claras, especialmente ao lidar com múltiplos destinos:

bridges.mqtt {
    nodes = [
        {
            name = primary_broker
            enable = true
            connector {
                server = "mqtt-tcp://10.0.0.50:1883"
            }
            forwards = ["telemetry/#", "events/#"]
            subscription = [
                {
                    topic = "commands/primary"
                    qos = 1
                }
            ]
            ssl {
                enable = false
            }
        }
        {
            name = backup_quic_node
            enable = true
            connector {
                server = "mqtt-quic://192.168.1.100:14567"
            }
            forwards = ["telemetry/#"]
            subscription = [
                {
                    topic = "commands/backup"
                    qos = 1
                }
            ]
        }
    ]
}

Otimizações de Docker e Bibliotecas

As imagens Docker foram reformuladas para reduzir o consumo de armazenamento. Utilizando compilação cruzada e o Alpine Linux como base, a imagem padrão agora ocupa apenas 3MB. Além disso, o suporte a MQTT over QUIC, anteriormente disponível apenas via compilação manual, agora está incluído em pacotes binários prontos para uso e imagens Docker específicas (identificadas pelo sufixo -full ou -msquic).

Para desenvolvedores que precisam integrar o NanoMQ em aplicações móveis (Android/iOS) ou chamá-lo via API, o broker agora pode ser compilado como uma biblioteca compartilhada:

cmake -G Ninja -DBUILD_SHARED_LIBS=ON ..
ninja

Correções de Erros e Estabilidade

  • Resolução de um deadlock em pontes QUIC relacionado à funcionalidade Multi-Stream.
  • Correção de falhas na ordenação de mensagens QoS 1/2 durante a retransmissão em sessões persistentes.
  • Ajuste no sistema de timers para plataformas Android, corrigindo imprecisões de relógio POSIX.
  • Otimização da API close_all no NanoSDK para evitar bloqueio de threads ao limpar operações de E/S assíncronas (AIO).
  • Inclusão do código de erro "KeepAlive Timeout" do MQTT V5 para conexões de ponte via QUIC.

Perspectivas Futuras

As próximas versões focarão na implementação do recarregamento de configurações em tempo real (Hot Reload), exclusivo para o formato HOCON. Também está prevista a introdução de algoritmos de controle de congestionamento como CUBIC e BBR para o protocolo QUIC, visando melhorar a estabilidade em redes com largura de banda instável.

Tags: NanoMQ MQTT ACL HOCON IoT

Publicado em 6-28 22:23