要让服务器只接受特定VPC网段访问,核心是分层收窄:安全组按角色精确放行端口并设兜底拒绝规则;网络ACL在交换机层双向控制、默认拒绝;操作系统防火墙(如firewalld)补充细粒度校验;最后必须闭环验证通断、定期清理冗余规则。

要让服务器只接受来自特定VPC网段的访问,核心不是“开放”,而是“收窄”——用安全组做第一道门禁,用网络ACL补第二层过滤,再配合操作系统防火墙兜底。关键在于每层只放行真正需要的通信,且明确拒绝其余所有流量。
安全组:按角色精确放行入站端口
这是最常用也最有效的入口控制方式。务必遵循最小化原则,逐条添加、逐条验证:
- Web服务:仅开 TCP:80 和 TCP:443,授权对象填目标VPC的CIDR(如 172.16.0.0/16),不写 0.0.0.0/0
- SSH管理:只开 TCP:22,授权对象必须是运维人员固定出口IP或办公网段(如 203.123.45.0/24),绝不用公网全放开
- 数据库连接:如需应用服务器连MySQL,开 TCP:3306,授权对象只写应用服务器在该VPC内的内网IP(如 172.16.10.5/32)
- 加一条兜底拒绝规则:在所有允许规则最下方,手动添加协议 ALL、端口 -1、源地址 0.0.0.0/0 的“拒绝所有”规则,防止遗漏导致策略缺口
网络ACL:对交换机粒度做双向流量控制
安全组作用于实例级别,而网络ACL作用于交换机层面,适合做更底层的网段级过滤。注意它是无状态的,需同时配置入方向和出方向规则:
- 入方向:允许源地址为指定VPC网段(如 172.16.0.0/16)、目的端口为你开放的服务端口(如 443、22)的流量
- 出方向:允许目的地址为同一VPC网段、源端口为 1024–65535(客户端临时端口范围)的响应流量返回
- 默认拒绝:ACL默认策略即为“拒绝所有”,无需额外添加,但要确认没有显式允许宽泛规则覆盖它
操作系统防火墙:最后防线,补充细粒度控制
即使云平台已设限,仍建议在系统层加固。以Linux为例,用 firewalld 或 iptables 做二次校验:
- firewalld 示例:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.16.0.0/16" port port="443" protocol="tcp" accept'firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.123.45.0/24" port port="22" protocol="tcp" accept'firewall-cmd --permanent --add-rich-rule='rule family="ipv4" reject' - 执行
firewall-cmd --reload生效,确保规则持久化 - Windows 可通过“高级安全Windows防火墙”→“入站规则”中新建规则,限制远程桌面(RDP)仅来自指定子网
验证与持续维护要点
配置不是一次性的动作,必须闭环验证并定期清理:
- 从目标VPC内一台ECS上用
telnet your-server-ip 443测试通路;再从非授权网段(如手机热点)尝试,应超时或被拒 - 修改后立即导出当前安全组规则清单,与业务系统清单比对,删除已下线服务残留的端口(如测试用的 8080)
- 若使用CDN或反向代理,把授权对象从 0.0.0.0/0 改为CDN厂商公布的回源IP段,进一步缩小暴露面
- 一台ECS只绑定一个安全组,避免多组叠加造成策略混乱、难以审计

















