对于大多数普通业务场景,配置好阿里云安全组后,实例内部防火墙可以不设置,由安全组统一管控即可;但如果你有高等级合规要求或需要防御内部横向移动风险,建议两者配合使用,形成纵深防御。
先说结论:安全组是首选的基础防护,内部防火墙是可选的增强层,两者规则需保持一致以避免冲突。
- 先判断:确认业务是否有等保合规或内部隔离需求。
- 优先做:在阿里云控制台配置安全组白名单,关闭不必要端口。
- 再验证:测试外部连通性,确保内部防火墙未误拦合法流量。
命令速用版
在决定是否启用内部防火墙前,先检查当前实例内的防火墙状态,避免重复配置或冲突。
# 查看 firewalld 状态 (CentOS 7+/Alibaba Cloud Linux)
systemctl status firewalld
# 查看 ufw 状态 (Ubuntu/Debian)
sudo ufw status
# 查看 iptables 规则 (通用)
sudo iptables -L -n `--line-numbers`
如果显示 active 或 status 为 active,说明内部防火墙正在运行,需核对规则。
为什么会这样
阿里云安全组是一种虚拟防火墙,位于实例所在的网络接口层面,流量在进入实例操作系统之前就会经过安全组过滤。而实例内防火墙(如 iptables、firewalld)是操作系统层面的防护。
安全组的优势在于集中管理、不消耗实例 CPU 资源且配置生效快;内部防火墙的优势在于可以控制实例内部的进程间通信或防止同一安全组内的横向攻击。公开资料中没有看到可靠的量化数据表明两者同时开启会显著影响网络性能,但规则冲突会导致连通性问题。
分步处理
如果你决定同时配置,请按以下顺序操作,防止把自己锁在门外。
1. 规划端口
列出业务必需的端口,例如 SSH(22)、HTTP(80)、HTTPS(443) 或数据库端口。
2. 配置安全组
登录阿里云控制台,进入安全组页面,设置入方向规则。建议采用白名单模式,只允许特定 IP 或全网开放必要端口。
3. 配置内部防火墙(可选)
如果需启用,确保内部规则与安全组一致或更严格。例如安全组开放了 80,内部防火墙也应允许 80。
# 示例:firewalld 开放 80 端口
sudo firewall-cmd `--permanent` `--add-port`=80/tcp
sudo firewall-cmd `--reload`
4. 保留逃生通道(重要)
在修改内部防火墙规则前,确保安全组已放行 SSH 端口(默认 22)。建议设置定时任务自动重置防火墙,以防配置错误导致失联。
# 设置 10 分钟后自动清空防火墙规则(逃生命令)
# 如果配置成功后,请及时运行 at -r 任务 ID 取消该任务
echo "iptables -F" | at now + 10 minutes
怎么验证是否生效
配置完成后,需要从外部网络进行连通性测试,而不是在实例内部测试。
1. 外部端口扫描
使用本地电脑或第三方工具测试公网 IP 的端口。
# 在本地电脑终端执行
telnet <实例公网 IP> 80
# 或使用 nc
nc -zv <实例公网 IP> 80
2. 日志检查
如果连接失败,检查内部防火墙日志。
# firewalld 日志 (Systemd 系统)
sudo journalctl -u firewalld -f
# iptables 日志 (需开启 logging)
sudo tail -f /var/log/messages
3. 安全组规则核对
在控制台确认安全组规则优先级,确保没有高优先级的拒绝规则覆盖了允许规则。
常见坑
1. SSH 端口被误封
修改内部防火墙时未放行 22 端口,且安全组限制了特定 IP,导致无法远程连接。建议先配置好安全组,再操作内部防火墙。
2. 规则不一致
安全组放行了端口,但内部防火墙默认策略为 DROP,导致服务不可用。两者需保持逻辑一致。
3. 忽略 ICMP 协议
如需 ping 通实例,需在安全组和内部防火墙同时放行 ICMP 协议,否则可能出现能通端口但 ping 不通的现象。
4. 多网卡场景
如果实例绑定多块网卡或弹性网卡,需确认防火墙规则作用在哪块网卡上,避免遗漏。
参考来源
- 阿里云帮助中心 - 安全组最佳实践,URL: https://help.aliyun.com/product/25943.html
- 阿里云帮助中心 - 安全组 FAQ,URL: https://help.aliyun.com/document_detail/25943.html