RabbitMQ 与 5672 端口
5672 是 RabbitMQ 的默认业务端口,生产者与消费者通过 AMQP 协议在它上面收发消息,实现系统之间的异步解耦与任务分发。TLS 版本使用 5671,管理界面使用 15672,集群节点之间还依赖 4369 与 25672 等端口。管理面与数据面常被一起配置,误把 15672 或默认 guest 账号放开,是这类中间件最常见的失陷方式。
基本信息
| 服务 | RabbitMQ(AMQP 0-9-1) |
|---|---|
| 协议 | TCP(TLS 使用 5671) |
| 相关端口 | 15672 管理界面、25672 集群节点通信、4369 节点发现 |
| 默认账号 | guest 默认仅允许本机登录,不应放开远程 |
| 配置文件 | /etc/rabbitmq/rabbitmq.conf 与相关定义文件 |
| 安全等级 | 仅业务网段可达 |
典型使用场景
- 异步解耦:订单、通知、日志等链路通过队列削峰填谷
- 任务分发:把耗时任务投递到多个工作进程并行处理
- 系统集成:异构系统之间通过消息格式约定交换数据
- 延迟与重试:配合死信队列实现失败重投与延迟处理
- 多云或跨环境同步:不同环境之间按需转发特定主题
连通性与运行状态检查
连通性与运行状态检查
ss -lntp | grep -E ':5671|:5672|:15672' # 确认监听范围,尤其关注管理口
rabbitmqctl status | head -30 # 节点状态、内存与告警水位
rabbitmqctl list_queues name messages | head -20 # 队列积压情况
rabbitmqctl list_connections peer_host | head -20 # 连接来源,核对是否有陌生地址用户与权限最小化
用户与权限最小化
rabbitmqctl add_user app '<强口令>' # 为业务单独建账号
rabbitmqctl set_permissions -p / app '^app\.' '^app\.' '^app\.' # 只允许访问自身命名空间
rabbitmqctl list_users # 复核账号清单
rabbitmqctl list_permissions -p / # 复核授权范围端口分工与暴露建议
| 端口 | 用途 | 暴露建议 |
|---|---|---|
| 5672 | AMQP 业务接入 | 仅业务网段 |
| 5671 | TLS 业务接入 | 跨网段优先使用 |
| 15672 | 管理界面 | 仅运维网段,禁止公网 |
| 25672 | 集群节点间通信 | 仅集群内网 |
| 4369 | 节点发现服务 | 仅集群内网 |
启用 TLS(5671)要点
启用 TLS(5671)要点
listeners.ssl.default = 5671
ssl_options.cacertfile = /etc/rabbitmq/ca.pem
ssl_options.certfile = /etc/rabbitmq/server.pem
ssl_options.keyfile = /etc/rabbitmq/server-key.pem
ssl_options.verify = verify_peer
ssl_options.fail_if_no_peer_cert = true管理界面使用默认账号口令并暴露公网,曾多次被利用:攻击者可以读取全部消息、删除队列,甚至借助插件加载代码执行。
资源告警要提前配:内存与磁盘达到告警水位时 RabbitMQ 会阻塞生产者以自保,表现为应用发送消息卡住;设置合理的水位阈值并规划死信队列,比事后扩容更有效。
排查消息积压先看消费端:队列堆积多数源于消费者处理变慢或异常退出,先核对消费者数量与错误日志,再考虑扩容;盲目增加生产者只会让积压更难消化。