簡體   English   中英

以編程方式設置mosquitto中的訪問控制限制

[英]Programmatically setting access control limits in mosquitto

我正在開發一個將使用mqtt的應用程序。 我將使用python庫。 我一直傾向於使用mosquitto,但卻無法以編程方式為其設置訪問控制限制。 我正在編寫的應用程序需要能夠區分用戶,並且只允許他們訂閱某些主題。 當前的解決方案看起來像是從配置文件中完成的。 在mosquitto中是否有可擴展的訪問控制限制解決方案? 如果沒有,你知道一個mqtt經紀人存在嗎?

即使這可能不再涉及到你,其他人也會發現它很有用。 我在這里關注mosquitto的手冊頁

有兩個配置文件,一般是一個,比如說是mosquitto.conf ,另一個是ACL(訪問控制列表),比如acl.conf

mosquitto.conf啟用acl.conf文件進行訪問控制:

acl_file acl.conf

acl.conf定義訪問控制行為:

# users can anonymously publish to the topic 'in'
topic write in
# users can subscribe topics named 'out/%u', where %u is the user's name
pattern read out/%u

# an admin may subscribe to 'in' 
# and publish to all subtopics of 'out/' (note the +)
user adminWithSecretName
topic read in
topic write out/+

我們用配置文件執行mosquitto -c mosquitto.conf來運行mosquitto。

在這種情況下,可以通過使用隨機生成的用戶名來建立動態認證機制。

示例: Alice想要訂閱,以便她可以在此處閱讀私人消息。 她向她的憑據,結合隨機數N1in 此外,她還使用N1作為用戶名將主題out/N1訂閱。 read out/%u的模式read out/%u允許這樣做。

第三方服務器應用程序,以adminWithSecretName連接並訂閱主題in接收Alice的消息。 它驗證其真實性,然后生成新的nonce N2並將其發布到Alice已訂閱的out/N1

從現在開始 - 至少對於此會話 - out/N2是常規主題,其中Alice分別在此處設備將接收消息。 因此,Alice取消訂閱並斷開form out/N1並訂閱out/N2 第三方服務器應用程序將屬於Alice的所有新消息發布到主題out/N2

進一步的考慮因素:人們可能還想反思安全性的其他方面,如TLS和/或按消息加密。 根據目標安全/隱私的等級,此處討論的配置可能還需要TLS。 另一方面,如果消息是單獨加密的,這可能會過時。 如果她有權訪問有線/ WiFi流,可以攔截(甚至訂閱!)消息,因為她會將秘密用戶名稱視為純文本。 但是:當一個人已經可以訪問數據流時,無論如何他/她都可以攔截這些字節。 它們使用TLS或按消息加密以任一方式加密。 此外, 流量分析可以應用於兩種方法。

我建議使用TLS或按消息加密。 兩者都應該,正確實施和應用,導致可比較的安全性。

您可以編寫一個插件來為您處理此問題。 有關示例,請參見http://mosquitto.org/2013/07/authentication-plugins/

如果你在mosquitto郵件列表上詢問,你可能會找到更多的答案。

如果您熟悉Java,則應該嘗試使用HiveMQ MQTT代理: http ://www.hivemq.com。

有一個開放的PluginSDK,它允許您為代理編寫任何類型的擴展。

您可以實現最適合您的用例的身份驗證或授權方法,例如從數據庫,文件...

基於主題的授權是一個常見的用例,HiveMQ插件指南中有一個示例。

作為HiveMQ插件開發的切入點,請參閱插件入門頁面: http ://www.hivemq.com/documentations/getting-started-plugins/

披露:我是HiveMQ的開發者之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM