安全组是否必须创建?
回答:是的,安全组是必须的。
为什么安全组是必需的?
1. 网络安全基础
- 阿里云默认策略:新创建的 ECS 实例如果没有绑定安全组,默认会拒绝所有入站流量
- 防火墙功能:安全组是阿里云的虚拟防火墙,控制着实例的入站和出站流量
2. 当前状态分析
从您的系统信息可以看到 sudo ufw status 显示 Status: inactive,这意味着:
- 系统级防火墙未启用
- 但阿里云的网络级安全组仍然在工作
- 如果没有配置安全组规则,外部无法访问您的 EMQX 服务
如果不创建安全组会怎样?
连接测试结果
# 从外部测试会失败
telnet 您的服务器IP 1883
# 连接被拒绝
# 管理控制台无法访问
http://您的服务器IP:18083
# 页面无法加载
EMQX 状态检查
虽然在服务器内部 EMQX 运行正常:
sudo systemctl status emqx # 显示正常运行
sudo netstat -tlnp | grep emqx # 显示端口在监听
但外部客户端无法建立连接,因为阿里云的网络层面阻止了流量。
替代方案(不推荐)
方案一:使用默认安全组(如果存在)
检查是否已有默认安全组:
- 登录阿里云控制台
- 进入 ECS 管理页面
- 查看您的实例是否已经绑定了某个安全组
- 如果有,直接修改该安全组的规则
方案二:极简安全组配置
如果只想快速测试,可以创建最小化的安全组:
# 只开放绝对必要的端口
# 入方向规则:
# - 端口: 22 (SSH) - 授权对象: 您的IP/32
# - 端口: 1883 (MQTT) - 授权对象: 0.0.0.0/0
# - 端口: 18083 (Dashboard) - 授权对象: 您的IP/32
验证当前网络状态
您可以通过以下命令验证当前网络连通性:
# 在您的服务器上测试本地连接(应该成功)
telnet localhost 1883
# 从另一台服务器测试外部连接(应该失败)
telnet 您的服务器公网IP 1883
实际操作建议
快速创建安全组的步骤
- 登录阿里云控制台 → ECS → 安全组
- 创建安全组:
- 添加入方向规则(最少配置):
协议类型 | 端口范围 | 授权对象
TCP | 22/22 | 您的IP/32 (SSH)
TCP | 1883/1883| 0.0.0.0/0 (MQTT)
TCP | 18083/18083| 您的IP/32 (Dashboard)
- 绑定到 ECS 实例
立即测试
配置完成后立即测试:
# 从外部机器测试 MQTT 连接
mosquitto_pub -h 您的服务器IP -t "test" -m "connection test"
# 访问管理控制台
http://您的服务器IP:18083
总结
安全组是阿里云 ECS 实例访问控制的必要组件。没有正确配置安全组,即使 EMQX 服务在服务器内部正常运行,外部客户端也无法连接到您的 MQTT Broker。
建议操作:花 5-10 分钟在阿里云控制台创建并配置安全组,这是让 EMQX 正常对外服务的必要步骤。