云安全组与本地防火墙对比
High Contrast
Dark Mode
Light Mode
Sepia
Forest
1 min read268 words

云安全组与本地防火墙对比

云上的安全组(Security Group)是最常用的访问控制工具——每天都在配。理解它和 iptables 的对应关系,云上云下防火墙思路打通,不再每次都要搜索怎么配。


核心对应关系

概念对比:
云安全组                       iptables/nftables
─────────────────────────────────────────────────────────────
入站规则(Inbound Rules)    = iptables -A INPUT
出站规则(Outbound Rules)   = iptables -A OUTPUT
安全组绑定到实例             = 配置在该主机的 iptables
状态防火墙(有状态)          = -m state --state ESTABLISHED
默认入站拒绝                 = iptables -P INPUT DROP
默认出站允许                 = iptables -P OUTPUT ACCEPT
安全组ID作为源              ≈ ipset(IP集合作为源地址)

AWS 安全组配置

场景:Web 服务器 + 数据库服务器的安全组设计
=== Web 服务器安全组(sg-web)===
入站规则(Inbound):
类型        协议   端口    来源
HTTP        TCP    80      0.0.0.0/0(所有人)
HTTPS       TCP    443     0.0.0.0/0
SSH         TCP    22      10.0.0.0/8(仅内网跳板机)
出站规则(Outbound):
所有流量    All    All     0.0.0.0/0(允许所有出站)
=== 数据库安全组(sg-db)===
入站规则:
MySQL/Aurora  TCP  3306    来源:sg-web(引用安全组ID!)
SSH           TCP  22      来源:10.0.0.0/8
出站规则:
所有流量    All    All     0.0.0.0/0
关键:来源可以引用其他安全组ID(sg-web),不需要写IP!
→ Web 服务器不论 IP 如何变化,数据库始终只允许来自 sg-web 的连接
→ 弹性伸缩、重启换 IP 后规则自动生效

阿里云安全组配置(CLI 示例)

# 使用阿里云 CLI 配置安全组
aliyun ecs CreateSecurityGroup \
--RegionId cn-hangzhou \
--SecurityGroupName "sg-web-servers" \
--Description "Web servers security group"
# 添加入站规则(允许 HTTPS)
aliyun ecs AuthorizeSecurityGroup \
--RegionId cn-hangzhou \
--SecurityGroupId sg-xxxxxxxx \
--IpProtocol tcp \
--PortRange 443/443 \
--SourceCidrIp 0.0.0.0/0 \
--Policy accept
# 添加入站规则(MySQL 只允许应用服务器安全组)
aliyun ecs AuthorizeSecurityGroup \
--RegionId cn-hangzhou \
--SecurityGroupId sg-db-xxxxxxxx \
--IpProtocol tcp \
--PortRange 3306/3306 \
--SourceGroupId sg-app-xxxxxxxx \
--Policy accept

常见安全组配置陷阱

❌ 陷阱 1:开放 0.0.0.0/0 给 SSH/RDP
风险:全球扫描,暴力破解
✅ 正确:
- 只允许公司/个人出口 IP
- 或通过 VPN 跳板访问
- 至少改默认端口(22→52222,虽不是根本解决方案)
❌ 陷阱 2:数据库安全组开放到 0.0.0.0/0
风险:数据库暴露在公网,一旦弱密码即被入侵
✅ 正确:数据库只允许来自应用服务器(安全组 ID)
❌ 陷阱 3:出站规则全部删掉
某些云厂商出站默认全允许,手动限制后出站被拒绝
症状:服务器无法 yum/apt 更新,无法访问外部 API
✅ 检查:出站规则是否有 0.0.0.0/0 的全允许规则
❌ 陷阱 4:安全组规则太宽泛(端口范围 1-65535)
虽然暂时解决了问题,但后期难以收紧
✅ 正确:按最小权限原则,只开放需要的端口
❌ 陷阱 5:忘记 IPv6
只配了 IPv4 (0.0.0.0/0) 而忘了 IPv6 (::/0)
症状:IPv6 地址的客户无法访问

网络 ACL(子网级)vs 安全组(实例级)

AWS/阿里云有两层防火墙:
网络 ACL(Network ACL / NACL)    安全组(Security Group)
──────────────────────────────────────────────────────────────
作用于子网边界                   作用于单个实例
无状态(需要显式配入站和出站)   有状态(自动放行回程)
按序号匹配(越小越优先)         所有规则都检查(取 OR)
支持 DENY 规则                   只有 ALLOW 规则
通常用于大范围封堵               通常用于精细控制
最佳实践:
NACL:封堵恶意 IP 段(如被攻击时快速封禁来源网段)
安全组:日常服务访问控制(按服务和角色配置)

防火墙规则审计

# Linux:定期审计 iptables 规则
iptables -L -n -v --line-numbers | tee /tmp/fw-audit-$(date +%Y%m%d).txt
# 找出所有 ACCEPT 全部 0.0.0.0/0 的规则(潜在风险)
iptables -L INPUT -n | grep "0.0.0.0/0" | grep -v "state"
# 云上:用 AWS Trusted Advisor / 阿里云安全中心
# 自动扫描过于宽松的安全组规则:
aws ec2 describe-security-groups \
--query 'SecurityGroups[?IpPermissions[?IpRanges[?CidrIp==`0.0.0.0/0`]]].[GroupId,GroupName]' \
--output table
# 临时封锁 IP(被攻击时快速响应)
iptables -I INPUT -s 1.2.3.4 -j DROP
# 或者使用 ipset 批量封锁:
ipset create blocklist hash:net
ipset add blocklist 1.2.3.0/24
ipset add blocklist 5.6.7.0/24
iptables -I INPUT -m set --match-set blocklist src -j DROP

CCNA 对应考点

考纲位置:Domain 5.7 — Configure and verify Layer 2 security features Domain 5.3 — Configure and verify device access control using local passwords

实战价值:云安全组是现代 DevOps 最高频的安全操作,CCNA 认证虽然不直接考云,但核心思路完全相通:最小权限、分区隔离、有状态防火墙。


下一章VPN 与远程访问——防火墙保护了边界,VPN 让授权用户能从外部安全接入内网。