安全组与系统防火墙是云服务器端口开放的双重关卡:安全组作用于云平台网络层,控制实例级流量进出;系统防火墙运行于操作系统内核层,负责细粒度状态化防护,二者叠加生效、缺一不可。

安全组和系统防火墙是两个不同层级的防护机制,必须配合使用才能形成真正有效的双重防护。安全组工作在云平台网络层(IaaS 层),控制进出云服务器实例的流量;系统防火墙(如 firewalld 或 iptables)运行在操作系统内核层(OS 层),控制进入主机协议栈的数据包。两者不是替代关系,而是叠加生效——流量必须先通过安全组,再经过系统防火墙,任一关卡拒绝即中断连接。
安全组应作为第一道过滤网
安全组规则应在云平台(如阿里云、腾讯云)中配置,优先限制来源 IP 和开放端口范围:
- 只放行业务必需的源 IP 段,例如:运维跳板机 IP、CDN 回源段、可信办公网 CIDR
- 禁止开放全网(0.0.0.0/0)访问 SSH(22)、数据库(3306/5432/27017)等高危端口
- 区分入站(Inbound)与出站(Outbound)策略:生产环境建议出站也白名单化,仅允许访问 DNS、NTP、软件源等必要地址
- 避免多个安全组叠加导致规则冲突,建议按角色(如 web、db、cache)单独绑定,统一管理
系统防火墙承担细粒度控制与状态防护
即使安全组已做收敛,仍需在系统内启用并严格配置 firewalld 或 iptables,理由包括:
- 防御同网段横向移动:安全组无法拦截同一 VPC 内其他 ECS 实例发起的攻击
- 处理连接状态:允许 ESTABLISHED/RELATED 流量,保障已有会话不被中断
- 补充协议级控制:例如限制 ICMP 类型、封禁高频扫描 IP、启用 connlimit 防暴力破解
- 适配 SELinux 等本地强制策略:系统防火墙可与端口标记协同,防止服务绑定到未授权端口
典型协同配置示例(以 Web 服务器为例)
假设部署一台对外提供 HTTPS 的 Nginx 服务器:
- 安全组设置:仅允许 443/TCP 入站,来源为 0.0.0.0/0(面向公网);80/TCP 可选开放;禁止 22/TCP 全网开放,仅允跳板机 IP 访问
-
firewalld 配置:
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --permanent --zone=public --remove-service=http
firewall-cmd --permanent --zone=public --remove-service=dhcp --remove-service=dns
firewall-cmd --reload -
补充加固:用 rich rule 限制 SSH 登录频率:
firewall-cmd --permanent --add-rich-rule='rule service name="ssh" limit value="3/m" accept'
验证与日常维护要点
双重防护是否生效,不能只看单侧配置,需逐层验证:
- 从外部发起 telnet 或 curl 测试,确认端口可达性符合预期
- 在服务器内部执行 firewall-cmd --list-all 或 iptables -L -n -v,检查规则已加载且计数器变化
- 模拟非法请求(如访问关闭的 21 端口),观察日志:journalctl -u firewalld | grep DROP 或 dmesg | grep "IN="
- 定期审计:每季度检查安全组规则冗余项、系统防火墙中未使用的服务白名单、长期未更新的 IP 白名单


















