弹性云服务器ECS安全组配置:原理与六个常见坑
前言
在华为云上部署服务时,“服务明明起来了,外网就是访问不了”几乎是每个开发者都遇到过的问题。很多时候,原因不在应用本身,而在安全组。安全组规则看起来只是几行“协议、端口、源地址”,但其背后的匹配机制如果没理解清楚,很容易出现放通了却不通、拒绝了却没拦住的情况。本文基于华为云虚拟私有云 VPC 的官方文档,先梳理安全组的核心原理,再总结六个实践中常见的坑。
一、安全组的核心原理
安全组是一个逻辑分组,为具有相同安全需求并相互信任的实例(云服务器、云数据库等)提供访问策略。创建云服务器时必须关联安全组,一个实例也可以关联多个安全组。理解下面四点,就能解释大多数现象:
- 白名单原则:没有被规则明确允许的流量一律拒绝。因此入方向一般不需要专门配置“拒绝”规则。
- 有状态:如果入方向放通了某个请求,它的响应流量会自动放行,不需要再单独配置出方向;反之亦然。
- 匹配顺序:实例关联多个安全组时,先按安全组的顺序匹配;同一安全组内按规则优先级(1~100,数字越小优先级越高)匹配;优先级相同时,“拒绝”高于“允许”。
- 默认规则:默认情况下,入方向只允许同一安全组内实例互访,出方向允许所有流量流出。也就是说,外部请求默认是进不来的。
一条入方向规则通常包含以下要素,可以用这样的思路来记录:
方向: 入方向 策略: 允许 优先级: 1
协议端口: TCP 22
源地址: 203.0.113.10/32 # 示例地址,替换为你自己的公网出口IP
二、六个常见坑
坑1:只放通了安全组,系统防火墙没放通
安全组放行的是“到达云服务器网卡”之前的流量,进入操作系统后还要经过系统自带的防火墙。如果镜像里启用了 firewalld 或 ufw,端口仍然会被拦截。排查时可以先在服务器上检查:
# firewalld
sudo firewall-cmd --list-all
sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload
# ufw
sudo ufw status
sudo ufw allow 8080/tcp
坑2:服务只监听了 127.0.0.1
安全组和防火墙都放通了,外部依旧访问不了,常见原因是应用只绑定了本地回环地址。用下面的命令确认监听地址:
sudo ss -lntp | grep 8080
如果显示 127.0.0.1:8080,需要把应用的监听地址改为 0.0.0.0 或网卡的私有IP。这个问题和安全组无关,但经常被误判为安全组问题。
坑3:远程登录端口对 0.0.0.0/0 开放
为了方便,很多人把 SSH(22)或 RDP(3389)直接对所有地址开放,这会让服务器暴露在公网的扫描和暴力破解之下。官方文档建议遵循最小授权原则,只允许指定IP访问远程登录端口。如果需要授权的地址较多且经常变化,可以使用“IP地址组”统一管理,地址变化时只改地址组即可。不需要公网登录时,也可以考虑 CloudShell、VNC 或云堡垒机等方式,不为服务器分配 EIP。
坑4:拒绝规则优先级没设对
有人想“先拒绝某个网段,再允许其他地址”,结果发现拒绝规则不生效。原因通常是允许规则的优先级数字更小,流量先命中允许规则就被放行了。记住:先比较优先级数字,只有优先级相同时,拒绝才高于允许。需要精细拦截时,应给拒绝规则设置更高的优先级(更小的数字)。
坑5:删掉了默认的出方向规则
默认出方向规则允许实例访问任意外部地址。如果为了“更安全”把它删了,又没有补充必要的出方向规则,服务器将无法访问外部,比如无法下载软件包、无法调用外部接口。收紧出方向前,应先梳理业务真正需要访问的目的地址和端口。
坑6:不同安全组之间默认不互通
同一账号下的云服务器,如果属于不同的安全组,内网默认是相互隔离的。典型场景是 Web 服务器和数据库分属两个安全组,应用连不上数据库。推荐做法是在数据库所在安全组的入方向,添加源地址为 Web 服务器所在“安全组”的规则,只放通数据库端口,而不是填写一大段网段。需要注意,如果流量经过虚拟IP等中间实例转发,以安全组作为源地址可能无法匹配,此时需改用中间实例的私有IP或子网网段。
三、规则变更的生效细节
安全组通过连接跟踪识别流量。官方文档说明:入方向规则变更对原有流量立即生效;出方向规则变更不影响已建立的长连接,只对新连接生效。因此调整出方向规则后,如果发现旧连接仍在通信,不必惊讶。另外,修改正在使用的安全组存在影响线上业务的风险,建议先克隆一个测试安全组调试,确认无误后再修改生产规则。
四、推荐的排查顺序
遇到“端口不通”,可以按由外到内的顺序逐层排查:
- 确认实例关联的所有安全组,以及入方向规则的协议、端口、源地址和优先级;
- 确认实例是否有公网访问能力(EIP、ELB 等);
- 检查操作系统防火墙;
- 用
ss -lntp检查服务是否在正确的地址和端口上监听; - 查看应用自身日志。
总结
安全组是云服务器的第一道网络防线,核心记住三点:白名单、有状态、按优先级匹配。实践中,应按业务和环境划分安全组,远程登录端口只对指定IP开放,不同层级之间用“安全组授权安全组”的方式放通,修改生产规则前先在克隆的安全组上验证。遇到端口不通时由外到内逐层排查,大多数问题都能快速定位。
- 点赞
- 收藏
- 关注作者
评论(0)