- 问题描述
- RabbitMQ鉴权机制
- 验证rabbitMQ服务配置
- 修改rabbitmq.config
- 服务器 部署
- docker部署
问题描述
漏洞编号 76311
风险级别 中风险
远程主机正在运行允许明文身份验证的服务。
远程高级消息队列协议(AMQP)服务支持一个或多个身份验证机制,允许以清晰的方式发送凭据。
解决办法 在AMQP配置中禁用明文认证机制。
RabbitMQ 支持多种 SASL 鉴权机制。服务器中内置了三种:PLAIN、AMQPLAIN 和 RABBIT-CR-DEMO,以及一种通过插件方式的 EXTERNAL。
更多鉴权机制可以通过插件提供。查阅插件开发指南获取更多关于通用插件开发的信息。
| 机制类型 | 描述 |
|---|---|
| PLAIN | SASL PLAIN 鉴权。在 RabbitMQ 服务器和客户端都是默认开启,大部分其他客户端也是该默认设置。 |
| AMQPPLAIN | 为像后兼容的非标准版 PLAIN,这个在 RabbitMQ 服务端默认开启。 |
| EXTERNAL | 鉴权发生在使用带外机制,如 x509 证书的对等验证,客户端 IP 地址范围,或者类似的。这样的机制通用由 RabbitMQ 插件提供。 |
| RABBIT-CR-DEMO | 展示质询-响应鉴权的非标准机制。这个机制安全性与 PLAIN 相等,在 RabbitMQ 服务端默认不开启。 |
RabbitMQ 应用中配置变量 auth_mechanisms 决定了提供哪一种已安装的机制给连接的客户端。该变量应该是相应机制名称的原子列表,如:默认的 [‘PLAIN’, ‘AMQPLAIN’]。该服务端的列表不代表特定的顺序。
验证rabbitMQ服务配置# 服务器 部署 rabbitmqctl environment # docker 部署 docker exec rabbitmq rabbitmqctl environment修改rabbitmq.config 服务器 部署
vi /etc/rabbitmq/rabbitmq.config
[
{rabbit,
[
{ tcp_listeners, [ 5672 ] },
{ ssl_listeners, [ ] },
{default_user, <<"your_user">>},
{default_pass, <<"your_pass">>},
{loopback_users, []},
{auth_mechanisms,['EXTERNAL']}
]
},
{ rabbitmq_management, [
{ listener, [
{ port, 15672 },
{ ssl, false }
]
}
]
}
].
docker部署
我们使用RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS环境变量,例如,配置channel_max看起来像 -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit auth_mechanisms ['EXTERNAL']". 在环境中翻译时,变量 auth_mechanisms 与 [‘EXTERNAL’]之间的空格会翻译成逗号。
# 删除原有的容器 docker stop rabbitmq docker rm rabbitmq # 运行新容器 docker run -dit --name rabbitmq -e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-rabbit auth_mechanisms ['EXTERNAL']" -v /mnt/service-data/rabbitmq/lib:/var/lib/rabbitmq -v /mnt/service-data/rabbitmq/log:/var/log/rabbitmq rabbitmq:3.5.7 # 验证配置 docker exec rabbitmq rabbitmqctl environment



