Ubuntu 上 RabbitMQ 的网络配置从监听地址、端口、协议到防火墙与云安全组,按下面步骤即可完成并验证
一 基础准备与端口规划
- 安装与启停
- 安装:sudo apt-get update && sudo apt-get install rabbitmq-server -y
- 启动与开机自启:sudo systemctl start rabbitmq-server && sudo systemctl enable rabbitmq-server
- 查看状态:sudo systemctl status rabbitmq-server
- 常用端口
- 5672/TCP:AMQP 0-9-1 客户端通信
- 5671/TCP:AMQP 0-9-1 over TLS
- 15672/TCP:Management 管理插件(HTTP API 与 Web UI)
- 防火墙放行(UFW 示例)
- 放行管理端口:sudo ufw allow 15672/tcp
- 放行 AMQP 端口:sudo ufw allow 5672/tcp
- 云服务器还需在控制台安全组放行对应端口
二 监听地址与协议配置
- 配置文件位置与格式
- 推荐在 /etc/rabbitmq/rabbitmq.conf 使用“新格式”(key = value)。若需使用旧式 Erlang 元组格式,可创建 /etc/rabbitmq/rabbitmq.config。
- 绑定到指定网卡或所有地址
- 监听所有地址(默认):listeners.tcp.default = 5672
- 仅本机:listeners.tcp.local = 127.0.0.1:5672
- 指定内网地址:listeners.tcp.prod = 192.168.1.10:5672
- 同时监听 IPv4 与 IPv6:可分别配置 local 与 local_v6
- 启用 TLS
- 启用并指定端口:listeners.ssl.default = 5671(需配置证书与密钥后生效)
- 连接接入与握手
- 并发接受器:num_acceptors.tcp = 10(可按并发量调优)
- 握手超时:handshake_timeout = 10000(毫秒)
- 示例(仅本机 + 指定内网)
- listeners.tcp.local = 127.0.0.1:5672
- listeners.tcp.prod = 192.168.10.20:5672
- listeners.ssl.default = 5671
- num_acceptors.tcp = 10
- handshake_timeout = 10000
- 应用配置
- 检查配置语法无误后重启:sudo systemctl restart rabbitmq-server
- 验证监听:ss -lntp | grep -E ‘(:5672|:5671)’ 或 netstat -lntp | grep -E ‘(:5672|:5671)’
三 访问控制与安全加固
- 管理用户与远程登录
- 默认账户 guest/guest 仅允许从 localhost 登录。远程访问请创建新用户:
- 新增用户:sudo rabbitmqctl add_user admin StrongPass!
- 设置角色:sudo rabbitmqctl set_user_tags admin administrator
- 赋权(默认 vhost “/”):sudo rabbitmqctl set_permissions -p “/” admin “." ".” “.*”
- 可选:禁用或删除 guest(生产建议)
- 允许 guest 远程(不推荐)
- 在 /etc/rabbitmq/rabbitmq.conf 中设置:loopback_users.guest = false
- 或在旧式配置 /etc/rabbitmq/rabbitmq.config 中设置:[{rabbit, [{loopback_users, []}]}].
- 启用管理插件
- 启用:sudo rabbitmq-plugins enable rabbitmq_management
- 访问:http://服务器IP:15672(使用上面创建的管理员账号)
- 安全建议
- 优先使用 5671/TLS 或配合反向代理/负载均衡做 TLS 终止
- 限制来源 IP、开启账号口令复杂度与轮换策略
四 云服务器与无公网 IP 的远程访问
- 云服务器
- 除本机防火墙外,务必在云平台安全组放行 5672/5671/15672(协议 TCP)
- 无公网 IP 的两种常见方式
- 内网穿透(示例)
- 工具如 cpolar 或 花生壳 可在本机与公网之间建立隧道,将本地 5672/15672 映射为可远程访问的 公网地址:端口
- 在管理端创建 TCP 映射(AMQP 用 5672,管理界面可用 15672 或 HTTPS 映射),远程客户端使用映射后的地址与端口连接
- 为稳定性建议选择“固定公网地址/域名”方案
- 注意事项
- 暴露到公网前务必启用 TLS、强口令与访问控制
- 不建议直接开放 guest 远程登录到公网
五 快速验证与常见问题
- 本机连通性
- AMQP 端口:nc -vz localhost 5672(成功返回 succeeded)
- 管理端口:curl -I http://127.0.0.1:15672(返回 200/302 类状态码)
- 远程连通性
- Linux/macOS:nc -vz 服务器IP 5672
- Windows PowerShell:Test-NetConnection 服务器IP -Port 5672
- 常见问题
- 管理界面能打开但登录失败:多为 guest 仅本地 或账号权限不足,按第三节创建新用户并赋权
- 端口不通:检查 UFW/安全组、监听地址是否绑定到正确 网卡/IP、服务是否运行
- 配置不生效:确认编辑的是 /etc/rabbitmq/rabbitmq.conf,修改后 重启服务 并复核监听地址