在内网服务器搭建MQTT

在内网中搭建MQTT

假设你在内网有一台服务器,这台服务器没有公网IP。

https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-the-mosquitto-mqtt-messaging-broker-on-centos-7#step-6-%E2%80%94-configuring-mqtt-over-websockets-(optional)

这篇博客有详细的MQTT搭建,但是不适合家用,里面使用了SSL证书还有域名并且MQTT搭建在有公网IP的服务器上。

本次实验搭建的MQTT适用于实验中使用MQTT。

需要的材料,一台服务器,或者笔记本,系统推荐centos,window据说也可以。

https://www.cnblogs.com/yangfengwu/p/7764667.html这篇博客是在window下搭建的。

第1步-安装Mosquitto

  • sudo yum -y install epel-release
  • sudo yum -y install mosquitto

该软件包带有一个简单的默认配置,因此让我们运行它以测试我们的安装。

  • sudo systemctl start mosquitto

我们还需要启用该服务以确保在重新引导系统时启动该服务:

  • sudo systemctl enable mosquitto

现在让我们测试默认配置。该mosquitto软件包带有一些命令行MQTT客户端。我们将使用其中一个订阅经纪人上的主题。

主题是您将消息发布到并订阅的标签。它们按层次结构排列,因此例如可以有sensors/outside/tempsensors/outside/humidity。您如何安排主题取决于您和您的需求。在本教程中,我们将使用一个简单的测试主题来测试我们的配置更改。

第二次登录到服务器,因此并排有两个终端。在新终端中,用于mosquitto_sub订阅测试主题:

  • mosquitto_sub -h localhost -t test

-h用于指定MQTT服务器的主机名,并且-t是主题名称。点击后您将看不到任何输出,ENTER因为它mosquitto_sub正在等待消息到达。切换回另一个终端并发布一条消息:

  • mosquitto_pub -h localhost -t test -m "hello world"

的选项mosquitto_pub与相同mosquitto_sub,尽管这次我们使用附加-m选项来指定消息。点击ENTER,您应该会在另一个终端中看到hello world。您已经发送了第一条MQTT消息!

输入CTRL+C第二个终端以退出mosquitto_sub,但保持与服务器的连接打开。我们将在步骤5中再次使用它进行另一项测试。

接下来,我们将使用新的Let's Encrypt客户端Certbot通过SSL保护安装的安全。

第2步-安装和运行Certbot以让我们对证书进行加密

让我们加密是一项新服务,可通过自动API提供免费的SSL证书。官方的Let's Encrypt客户端称为Certbot,它包含在上一步中安装的EPEL存储库中。

使用安装Certbot yum

  • sudo yum -y install certbot

Certbot需要回答Let's Encrypt API发出的加密挑战,以证明我们控制了我们的域。它使用端口80(HTTP)和/或443(HTTPS)来完成此操作。我们将仅使用port 80,因此现在允许该端口上的传入流量。

使用firewall-cmd添加的HTTP服务。

  • sudo firewall-cmd --permanent --add-service=http

重新加载防火墙,以使更改生效。

  • sudo firewall-cmd --reload

现在,我们可以运行Certbot来获取我们的证书。我们将使用该--standalone选项来告诉Certbot自行处理HTTP质询请求,并将--standalone-supported-challenges http-01通信限制为port 80-d用于指定您想要证书的域,并certonly告诉Certbot仅检索证书而无需执行任何其他配置步骤。

  • sudo certbot certonly --standalone --standalone-supported-challenges http-01 -d mqtt.example.com

运行该命令时,系统将提示您输入电子邮件地址并同意服务条款。这样做之后,您应该看到一条消息,告诉您该过程已成功完成,并且证书的存储位置。

我们有我们的证书。现在,我们需要确保Certbot在它们即将到期时自动更新它们。

步骤3 —设置Certbot自动续订

让我们加密的证书仅有效九十天。这是为了鼓励用户自动执行证书更新过程。我们需要设置一个定期运行的命令来检查证书是否过期并自动更新它们。

为了每天运行续签检查,我们将使用cron标准的系统服务来运行定期作业。我们cron通过打开和编辑一个名为的文件来告诉该怎么做crontab

  • sudo EDITOR=nano crontab -e

EDITOR=nano将在nano编辑器中打开crontab文件。如果您希望使用默认vi编辑器,请将其关闭。

现在,您将看到默认crontab的空白文件。粘贴在以下行中,然后保存并关闭文件。

15 3 * * * certbot renew --noninteractive --post-hook "systemctl restart mosquitto"

15 3 * * *行的部分意思是“每天凌晨3:15运行以下命令”。renewCertbot的命令将检查系统上安装的所有证书,并更新所有设置为在三十天内过期的证书。--noninteractive告诉Certbot不要等待用户输入。

--post-hook "systemctl restart mosquitto" 将重新启动Mosquitto以获取新证书,但前提是证书已更新。

现在已经完成了自动证书更新,我们将重新配置Mosquitto使其更加安全。

步骤4 —配置MQTT密码

让我们将Mosquitto配置为使用密码。Mosquitto包含一个实用程序,用于生成名为的特殊密码文件mosquitto_passwd。该命令将提示您输入指定用户名的密码,并将结果放在中/etc/mosquitto/passwd

  • sudo mosquitto_passwd -c /etc/mosquitto/passwd sammy

现在,我们将替换默认配置文件,并告诉Mosquitto使用此密码文件要求所有连接都需要登录。首先,删除现有的mosquitto.conf

  • sudo rm /etc/mosquitto/mosquitto.conf

现在打开一个新的空白配置。

  • sudo nano /etc/mosquitto/mosquitto.conf

粘贴在下面。

/etc/mosquitto/mosquitto.conf
allow_anonymous false
password_file /etc/mosquitto/passwd

allow_anonymous false将禁用所有未经身份验证的连接,并且该password_file行告诉Mosquitto在哪里查找用户和密码信息。保存并退出文件。

现在我们需要重新启动Mosquitto并测试我们的更改。

  • sudo systemctl restart mosquitto

尝试发布没有密码的消息。

  • mosquitto_pub -h localhost -t "test" -m "hello world"

该消息应被拒绝:

Output

Connection Refused: not authorised. Error: The connection was refused.

在再次尝试使用密码之前,请再次切换到第二个终端窗口,并使用用户名和密码来订阅“ test”主题:

  • mosquitto_sub -h localhost -t test -u "sammy" -P "password"

它应该连接并坐着,等待消息。在本教程的其余部分中,您可以保持此终端的打开和连接状态,因为我们会定期向其发送测试消息。

现在,再次使用用户名和密码在另一个终端上发布一条消息:

  • mosquitto_pub -h localhost -t "test" -m "hello world" -u "sammy" -P "password"

到此就可以结束了

以下的都需要域名和公网IP绑定,

mosquitto_sub -h localhost -t test -u "sammy" -P "password"

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

这两条命令就可以在内网中使用了。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

波雅_汉库克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值