mqtt部署安装以及账号安全设置

MQTT是基于客户端-服务器的消息发布/订阅传输协议,在IoT的应用上比较广泛,主要有几个特点:

1、使用发布/订阅的传输模式,实现1对多的发布与接收,减少应用之间耦合度

2、能够对负载内容屏蔽传输,

3、支持订阅、发布不同账号,实现读写权限分离,确保数据发布安全

4、通过TCP/IP提供网络连接,实现方便,支持安全策略控制

5、协议头部长度短,网络传输开销小,节约流量

6、支持三种消息质量模式:

最多一次,只发送一次消息,不关注消息是否接受成功

至少一次,保证消息一定到达,单会有重复

只有一次,保证消息只有一次到达

7、通过last will和testament等特性通知客户端异常中断

一、安装


yum install gcc-c++

yum install cmake

yum install openssl-devel

新建个mqtt文件夹,下载mosquitto,下个不高不低的版本,并解压:

mkdir mqtt
cd mqtt
wget http://mosquitto.org/files/source/mosquitto-1.4.10.tar.gz
tar -xzvf mosquitto-1.4.10.tar.gz
但这里还不能编译安装mosquitto

下面的三款扩展性软件,不安装也不影响mosquitto的使用:

安装c-areas(支持异步DNS查找的库):
[root@localhost build]# cd /usr/local/mqtt
wget http://c-ares.haxx.se/download/c-ares-1.10.0.tar.gz
tar xvf c-ares-1.10.0.tar.gz
cd c-ares-1.10.0
./configure
make
sudo make install


安装lib-uuid(支持为每个连接客户端生成唯一uuid):
yum install libuuid-devel


安装libwebsockets(支持需使用websocket的应用):
[root@localhost build]# cd /usr/local/mqtt

wget https://github.com/warmcat/libwebsockets/archive/v1.3-chrome37-firefox30.tar.gz
tar zxvf v1.3-chrome37-firefox30.tar.gz
cd libwebsockets-1.3-chrome37-firefox30
mkdir build
cd build
cmake .. -DLIB_SUFFIX=64
make install


修改一下mosquitto的配置:
cd /usr/local/mqtt/mosquitto-1.4.10
vim config.mk
将里面的WITH_SRV:=yes和WITH_UUID:=yes都用#号注释掉


接下来编译安装mosquitto:

make
sudo make install
注意:如果在后续使用过程中找不到libmosquitto.so.1的话,在software下输入以下指令修改一下libmosquitto.so的位置:

sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
sudo ldconfig


二、启动测试

1、创建用户:

sudo groupadd mosquitto
sudo useradd -g mosquitto mosquitto
这里要是出现什么存在不存在的问题,一定是你copy错了

2、程序配置:

mv /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf
启动程序:

mosquitto -c /etc/mosquitto/mosquitto.conf -d
默认端口为1883

3、测试,最后我们再打开一个服务器窗口,在一个(订阅)窗口输入:

mosquitto_sub -t hello
另一个(发布)窗口输入:
mosquitto_pub -t hello -h localhost -m "hello world"


三、mqtt安全设置

1、配置账户密码
Mosquitto服务器的配置文件为/etc/mosquitto/mosquitto.conf,关于用户认证的方式和读取的配置都在这个文件中进行配置。


配置文件内容
[root@localhost ~]# vi /etc/mosquitto/mosquitto.conf

不允许匿名用户
allow_anonymous false

配置用户密码文件
password_file /etc/mosquitto/pwfile

修改默认端口
port 20885

配置topic(话题)和用户
acl_file /etc/mosquitto/aclfile

保存退出,返回命令行
重建mqtt账号cpsmqtt,用于读写分离
mosquitto_passwd -c /etc/mosquitto/pwfile cpsmqtt
输入密码
Cps123.

重建mqtt账号cpsread,用于读写分离,注意第二次创建用户时不用加 -c 如果加 -c 会把第一次创建的用户覆盖。
mosquitto_passwd  /etc/mosquitto/pwfile cpsread
输入密码
Cpsread123.


重启mosquitto
[root@localhost ~]# ps -ef|grep mosquitto
[root@localhost ~]# kill -9 进程号 
启动
mosquitto -c /etc/mosquitto/mosquitto.conf  -d

提示没有1595821445: Error opening acl file "/etc/mosquitto/aclfile".
创建一个,这里复制已有的改改
cp /etc/mosquitto/aclfile.example /etc/mosquitto/aclfile
屏蔽无用的,新增
user cpsmqtt
topic write cps/#

user cpsread
topic read cps/#

继续重启mosquitto -c /etc/mosquitto/mosquitto.conf  -d

四、防火墙

firewall-cmd --zone=public --add-port=20885/tcp --permanent
firewall-cmd --reload

五、连接测试

  
(订阅端)客户端(用户名,密码)启动
mosquitto_sub -h IP地址 -t cps/1 -u cpsread -P Cpsread123.  -k keepalive -p 20885

(发布者)客户端启动:
mosquitto_pub -h IP地址 -t cps/1 -u cpsmqtt -P Cps123. -m "test"   -p 20885

猜你喜欢

转载自blog.csdn.net/myfmyfmyfmyf/article/details/107630632
今日推荐