安装之前确认服务器系统和架构,找适合自己的系统的结构。
emqx安装依赖于openssl 和erlang
先yum安装一下
yum install openssl-1.1.1
由于新机器默认是1.0.2的版本,需要升级为1.1.1
openssl version # 查看当前openssl版本
yum install erlang
一、4.3版本之前的用户名密码验证配置
第一:4.3之前的版本是修改配置文件/etc/emqx/emqx.conf中allow_anonymous为false,关闭匿名用户登录。
#禁止匿名登录,allow_anonymous默认是true vim /etc/emqx/emqx.conf ## Value: true | false allow_anonymous = false
第二:Emqx4.3版本之前存在一个emqx_auth_username扩展,可以通过启动emqx_auth_username插件模块修改其配置实现账号密码验证。进行如下操作即可使用。
#命令添加账号密码或者编辑配置文件 emqx_ctl users add admin public #编辑用户名密码配置文件 vim /etc/emqx/plugins/emqx_auth_username.conf ## username 认证数据 auth.user.2.username = admin auth.user.2.password = public ## Password hash auth.user.password_hash = sha256#导入插件模块
cd /usr/lib/emqx/bin sh emqx_ctl plugins load emqx_auth_username
或者./bin/emqx plugins load emqx_auth_username
二:4.3版本之后的用户名密码验证配置
备注:Emqx4.3版本之后不一样了,官方文档:版本发布 | EMQX 文档 里有注明4.3版本中emqx_auth_clientid 与 emqx_auth_usernmae 合并为 emqx_auth_mnesia。emqx_auth_username模块从此废弃。在Emqx4.3版中加载emq_auth_username插件会报不存在的错误,所以不要再去寻找安装emqx_auth_username模块了。直接修改emqx_auth_mnesia.conf模块配置文件,添加账号密码。
第一:关闭匿名访问登录。修改配置文件/etc/emqx/emqx.conf中allow_anonymous为false,
#禁止匿名登录,allow_anonymous默认是true
vim /etc/emqx/emqx.conf
## Value: true | false
allow_anonymous = false
第二:配置中增加用户明密码配置./etc/plugins/emqx_auth_mnesia.conf
# etc/plugins/emqx_auth_mnesia.conf
## clientid 认证数据 auth.client.1.clientid = admin auth.client.1.password = public
## username 认证数据
auth.user.2.username = admin
auth.user.2.password = public
## Value: plain | md5 | sha | sha256
auth.mnesia.password_hash = sha256 密码方式自己选
第三: 加载插件,或者直接重启emqx ./bin/emqx restart
目前启动插件有以下四种方式:
第四:最好将需要一直开启的插件,加在插件文件里,防止漏启,实际上执行启动插件后,会自动加载在此配置文件中。
接下来就用工具mqttx客户端自己去测试效果吧
三:emqx使用mysql来鉴权,控制哪些客户端可以连接到平台
第一 . 关闭匿名访问登录
第二. 修改mysql配置文件 ./emqx/etc/plugins/emqx_auth_mysql.conf
# etc/plugins/emqx_auth_mysql.conf
## 不加盐,仅做哈希处理
auth.mysql.password_hash = sha256## salt 前缀:使用 sha256 加密 salt + 密码 拼接的字符串
auth.mysql.password_hash = salt,sha256## salt 后缀:使用 sha256 加密 密码 + salt 拼接的字符串
auth.mysql.password_hash = sha256,salt## pbkdf2 with macfun iterations dklen
## macfun: md4, md5, ripemd160, sha, sha224, sha256, sha384, sha512
## auth.mysql.password_hash = pbkdf2,sha256,1000,20
3. 保存,创建数据库,创建表 。然后加载插件 ./bin/emqx_ctl plugins load emqx_auth_mysql
切记:没有数据库表存在,加在插件会报错。
超级用户可以跳过acl权限控制
生成mqtt_user表的执行语句,看这个:
MySQL 认证 | EMQX 文档https://www.emqx.io/docs/zh/v4.4/advanced/auth-mysql.html#mysql-%E8%BF%9E%E6%8E%A5%E4%BF%A1%E6%81%AF
emqx鉴权方式mysql完成之后,配置订阅acl策略。操作步骤
1. 修改配置文件./emqx/etc/emqx.conf 文件
1. 修改配置文件./emqx/etc/acl.conf 文件,可以在配置文件中修改策略,注释允许订阅所有主题的配置
3. 根据需要修改订阅规则,以及在acl表中增加用户订阅topic
# 修改配置文件连接数据库 etc/plugins/emqx_auth_mysql.conf
auth.mysql.super_query = select is_superuser from mqtt_user where username = '%u' limit 1
参考:EMQX 启用MySQL ACL 权限控制功能_猿又圆的博客-CSDN博客_启动emqx
4. 完成配置后使用 emqx restart 重启emqx broker服务才能生效
超级用户 SQL(super_query):
进行 ACL 鉴权时,EMQ X 将使用当前客户端信息填充并执行用户配置的超级用户 SQL,查询客户端是否为超级用户。客户端为超级用户时将跳过 ACL SQL
创建mqtt_ctl表
CREATE TABLE `mqtt_acl` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`allow` int(1) DEFAULT 1 COMMENT '0: deny, 1: allow',
`ipaddr` varchar(60) DEFAULT NULL COMMENT 'IpAddress',
`username` varchar(100) DEFAULT NULL COMMENT 'Username',
`clientid` varchar(100) DEFAULT NULL COMMENT 'ClientId',
`access` int(2) NOT NULL COMMENT '1: subscribe, 2: publish, 3: pubsub',
`topic` varchar(100) NOT NULL DEFAULT '' COMMENT 'Topic Filter',
PRIMARY KEY (`id`),
INDEX (ipaddr),
INDEX (username),
INDEX (clientid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
$all
表示该规则适用于所有的用户四,emqx.conf常用配置功能
第一:配置最大允许连接数和池
第二:匿名访问登录关闭
第三:系统调优---emqx百万连接测试系统、网络、erlang虚拟机参数调优
## Erlang Process Limit
node.process_limit = 2097152
## Sets the maximum number of simultaneously existing ports for this system
node.max_ports = 1048576