zoukankan      html  css  js  c++  java
  • Linux主机部署MQTT服务器

    Linux主机部署MQTT服务器

    MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信。Mosquitto是一种流行的MQTT服务器(或MQTT中的代理),具有出色的社区支持,易于安装和配置。

    在本篇教程中,我们将安装和配置Mosquitto,并使用Let的加密SSL证书来保护我们的MQTT流量。

    安装软件

    首先,我们将安装一个自定义软件存储库以获取最新版本的Certbot,即Let的加密客户端:

    sudo add-apt-repository ppa:certbot/certbot
    

    ENTER了接受,然后安装Mosquitto和Certbot的软件包:

    sudo apt install certbot mosquitto mosquitto-clients
    

    接下来我们将获取SSL证书。

    下载SSL证书

    打开防火墙中的端口80

    # Ubuntu
    sudo ufw allow 80
    #Centos7
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd --reload
    # iptables防火墙
    iptables -I INPUT 1 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
    service iptables save
    

    然后运行Certbot以获取证书。请务必在此处替换您服务器的域名:

    sudo certbot certonly --standalone --preferred-challenges http -d mqtt.example.com
    

    系统将提示您输入电子邮件地址并同意服务条款。执行此操作后,您应该会看到一条消息,告诉您进程是否成功以及您的证书存储在何处。

    我们接下来将Mosquitto配置为使用这些证书。

    配置Mosquitto

    首先,我们将创建一个Mosquitto将用于验证连接的密码文件。使用mosquitto_passwd来创建这个文件,请确保使用你喜欢的用户名替换它:

    sudo mosquitto_passwd -c /etc/mosquitto/passwd your-username
    

    系统将提示您输入两次密码。

    现在为Mosquitto打开一个新的配置文件:

    sudo nano /etc/mosquitto/conf.d/default.conf
    

    这将打开一个空文件。粘贴如下:

    allow_anonymous false
    password_file /etc/mosquitto/passwd
    
    listener 1883 localhost
    
    listener 8883
    certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
    cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
    keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pem
    
    listener 8083
    protocol websockets
    certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
    cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
    keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pem
    

    请务必替换您在步骤2中使用的域名为mqtt.example.com。完成后保存并关闭文件。

    该文件执行以下操作:

    • 禁用匿名登录
    • 使用我们的密码文件启用密码验证
    • 仅在端口1883上为localhost设置不安全的侦听器
    • 在端口8883上设置安全侦听器
    • 在端口8083上设置基于websocket的安全侦听器

    重启Mosquitto以获取配置更改:

    sudo systemctl restart mosquitto
    

    检查以确保服务再次运行:

    sudo systemctl status mosquitto
    ● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
       Loaded: loaded (/etc/init.d/mosquitto; generated)
       Active: active (running) since Mon 2018-07-16 15:03:42 UTC; 2min 39s ago
         Docs: man:systemd-sysv-generator(8)
      Process: 6683 ExecStop=/etc/init.d/mosquitto stop (code=exited, status=0/SUCCESS)
      Process: 6699 ExecStart=/etc/init.d/mosquitto start (code=exited, status=0/SUCCESS)
        Tasks: 1 (limit: 1152)
       CGroup: /system.slice/mosquitto.service
               └─6705 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
    

    状态应该是active (running)。如果不是,请检查配置文件并重新启动。Mosquitto的日志文件中可能会提供更多信息:

    sudo tail /var/log/mosquitto/mosquitto.log
    

    如果一切顺利,请使用ufw允许两个新端口通过防火墙:

    sudo ufw allow 8883
    sudo ufw allow 8083
    

    现在已经建立了Mosquitto,我们将在续订证书后配置Certbot以重启Mosquitto。

    配置Certbot续订

    Certbot会在它们到期之前自动续订我们的SSL证书,但需要告知它在重新启动之后重启Mosquitto服务。

    打开域名的Certbot续订配置文件:

    sudo nano /etc/letsencrypt/renewal/mqtt.example.com.conf
    

    在最后一行添加以下renew_hook选项:

    renew_hook = systemctl restart mosquitto
    

    保存并关闭该文件,然后运行Certbot dry run以确保语法正常:

    sudo certbot renew --dry-run
    

    如果您没有看到任何错误,那么您已经完成了设置。让我们接下来测试我们的MQTT服务器。

    测试Mosquitto

    我们在步骤1中安装了一些命令行MQTT客户端。我们可以在localhost监听器上订阅主题测试,如下所示:

    mosquitto_sub -h localhost -t test -u "your-user" -P "your-password"
    

    我们可以用mosquitto_pub发布:

    mosquitto_pub -h localhost -t test -m "hello world" -u "your-user" -P "your-password"
    

    要使用端口8883上的安全侦听器进行订阅,请执行以下操作:

    mosquitto_sub -h mqtt.example.com -t test -p 8883 --capath /etc/ssl/certs/ -u "your-username" -P "your-password"
    

    这就是您向安全监听器发布的方式:

    mosquitto_pub -h mqtt.example.com -t test -m "hello world" -p 8883 --capath /etc/ssl/certs/ -u "your-username" -P "your-password"
    

    请注意,我们使用的是完整的主机名而不是localhost。因为我们为mqtt.example.com发布了SSL证书,如果我们尝试安全连接到localhost,我们会收到一条错误消息,指出主机名与证书主机名不匹配。

    要测试websocket功能,我们将使用基于浏览器的公共MQTT客户端。在浏览器中打开Eclipse Paho javascript客户端实用程序并填写连接信息,如下所示:

    • 主机是您的Mosquitto服务器的域,mqtt.example.com
    • 端口8083
    • ClientId可以保留为默认的随机值
    • 路径可以保留为/ ws的默认值
    • 用户名是步骤3中的Mosquitto用户名
    • 密码是您在步骤3中选择的密码

    其余字段可以保留其默认值。

    Connect后,客户端将连接到您的服务器。您可以使用连接窗格下的订阅发布消息窗格进行发布和订阅。

  • 相关阅读:
    MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第一部分)——IDiscoveryService
    MS CRM 2011的自定义和开发(7)——视图编辑器(第二部分)
    MS CRM 2011 SDK 5.06版本已经发布
    MS CRM 2011的自定义和开发(11)——插件(plugin)开发(一)
    近来遇到的MS CRM 2011方面的几个问题
    MS CRM 2011的自定义与开发(6)——表单编辑器(第二部分)
    Microsoft Dynamics CRM 2011中,Lookup字段的赋值
    MS CRM 2011的自定义和开发(6)——表单编辑器(第三部分)
    Visual Studio 目标框架造成 命名空间“Microsoft”中不存在类型或命名空间名称“Crm”。是否缺少程序集引用中错误的处理
    一步步学习Reporting Services(二) 在报表中使用简单的参数作为查询条件
  • 原文地址:https://www.cnblogs.com/cuianbing/p/15059731.html
Copyright © 2011-2022 走看看