云服务器安全组规则怎么配置才能放行指定端口
安全组是云平台在实例外层做的一道虚拟防火墙,默认只放行少数端口。
要让外部访问某个服务,需要在实例绑定的安全组里添加入方向放行规则,写清协议、端口和来源地址,然后从外部实际测一次端口是否通。
只改服务器内部的防火墙(firewalld、ufw、iptables)而不改安全组,通常仍然连不上。
先确认实例绑定了哪个安全组
安全组规则跟着安全组走,不跟着单台机器走。
同一安全组下的所有实例共享规则,所以动手前先看清楚:
- 在云控制台进入实例详情页,找到“安全组”或“网络与安全”一栏,记录安全组名称和 ID。
- 如果实例绑定了多个安全组,规则是叠加生效的,任意一个组放行即可通过,排查时要把所有组都看一遍。
- 确认实例是否有公网 IP 或弹性公网 IP。只有内网 IP 的机器,外部本来就连不上,先解决公网访问再谈规则。
这一步的意义在于避免改错对象:在 A 安全组里加了规则,结果实例绑的是 B 安全组,是最常见的低级失误。
入方向规则怎么填
入方向(Ingress)控制“谁能进来”。
以放行 Web 服务的 80 端口、只允许自己办公网访问的 22 端口为例,典型配置如下:
| 协议 | 端口范围 | 来源 | 用途 |
| --- | --- | --- | --- |
| TCP | 80/80 | 0.0.0.0/0 | 网站 HTTP 访问 |
| TCP | 443/443 | 0.0.0.0/0 | 网站 HTTPS 访问 |
| TCP | 22/22 | 你的公网 IP/32 | SSH 远程管理 |
填写时注意几个字段的含义:
- 协议类型:Web、SSH 用 TCP;DNS、部分监控用 UDP;ICMP 用于 ping。选“全部”会放开所有协议,不建议。
- 端口范围:单个端口写
80/80,连续端口写8000/8010。不要为了省事写1/65535,等于把整台机器暴露出去。 - 来源:
0.0.0.0/0表示所有 IPv4 地址;限制来源写具体网段,如203.0.113.0/24;只允许单个 IP 写x.x.x.x/32。IPv6 规则要单独添加,::/0表示所有 IPv6 地址。 - 优先级:部分平台用数字表示,数字越小优先级越高;也有平台按“拒绝优先”或“最后匹配默认拒绝”处理。以控制台页面说明为准,不要凭经验套用到所有厂商。
保存后规则一般立即生效,不需要重启实例。
配完还是连不上,按这个顺序查
安全组放行只是第一关,外部访问要经过多层。
按从外到内的顺序排查效率最高:
- 确认规则真的加到了正确安全组,且方向是入方向,没有误加成出方向。
- 确认服务在监听。在服务器上执行
ss -lntp | grep 80,看端口是否处于 LISTEN 状态;没有输出说明服务没起来或没监听该端口。 - 确认监听地址不是仅本机。如果服务只监听
127.0.0.1:80,外部永远访问不到,需要改成0.0.0.0或具体网卡地址。 - 检查系统防火墙。CentOS 系执行
firewall-cmd --list-ports,Ubuntu 系执行ufw status,确认本机防火墙也放行了对应端口。 - 从外部验证。在另一台机器上执行
nc -zv 服务器公网IP 80或telnet 服务器公网IP 80,能建立连接说明链路已通;超时多为安全组或路由问题,拒绝连接多为服务未监听或被本机防火墙拦截。
如果前面都正常但仍不通,再看实例是否处于运行中、公网带宽是否正常、是否使用了负载均衡或 NAT 网关等中间层。
几个容易踩的坑
- 把数据库端口直接对公网开放。MySQL 3306、Redis 6379 这类端口暴露到
0.0.0.0/0风险很高,应限制来源 IP,或只允许内网访问。 - 只放行 IPv4 忘了 IPv6。服务器有 IPv6 地址、客户端也走 IPv6 时,只加 IPv4 规则会表现为“有的人能连、有的人不能连”。
- 用安全组替代系统防火墙。两层都保留更稳妥,安全组做粗粒度边界,系统防火墙做细粒度控制,二者不冲突。
- 修改前不记录原规则。删错一条规则可能直接把自己锁在门外,改之前截图或导出当前规则,保留一条可用的 SSH 规则再操作。
常见疑问
安全组规则改完需要重启服务器吗?
通常不需要,保存后即生效。如果几分钟后仍无变化,先检查是否改错了安全组,而不是急着重启。
为什么加了规则还是超时?
超时说明数据包没有到达服务或被丢弃,优先怀疑安全组方向、来源网段写错,其次是路由和本机防火墙。用 nc -zv 从外部测一次能快速区分“链路不通”和“服务没起”。
多个安全组叠加时以哪个为准?
规则是并集生效,任意一个安全组放行即通过。排查时逐个检查组内是否存在拒绝规则,拒绝规则往往比放行规则更容易被忽略。
安全组配置本身不复杂,关键是搞清对象、按最小权限填写协议端口来源,并且用外部连接实际验证一次。
把这三步做扎实,绝大多数“端口开了还是连不上”的问题都能自己定位。