阿里云服务器安全防护是安全组、主机防火墙(firewalld/iptables)、netfilter与selinux协同构成的立体结构:安全组为vpc网关层无状态首道过滤,主机防火墙在os层做精细管控,netfilter是内核底层机制,selinux则从进程资源访问维度加固权限收敛。

阿里云服务器的安全防护不是靠单一层级实现的,而是由安全组、主机防火墙(iptables/firewalld)和内核 netfilter 共同构成的立体结构。三层不是简单叠加,而是有明确分工和执行顺序:安全组最先拦截,再是主机防火墙,最后才是应用层逻辑。配错顺序或重复放行,不仅起不到加强效果,反而增加维护复杂度、掩盖真实问题,甚至导致服务不可达。
安全组:云平台层的第一道过滤网
安全组运行在 VPC 网关层面,属于虚拟化网络层的无状态 ACL,它在数据包抵达 ECS 实例操作系统之前就完成匹配与决策。这意味着:
- 所有入站流量必须先通过安全组规则,不满足条件的数据包根本不会到达你的服务器网卡;
- 你无法在实例内部用
iptables -L或firewall-cmd --list-all查到安全组规则——它不在系统里; - 若安全组未放行 SSH(22端口)或 HTTP(80/443),即使 firewalld 完全关闭,你也连不上、打不开网页。
配置建议:只开放业务必需端口,如仅允许特定 IP 段访问 22 端口,生产环境避免设置“0.0.0.0/0”;出方向默认可设为全通,或按需限制外连目标(如仅允许访问数据库服务端口)。
主机防火墙(firewalld / iptables):操作系统层的精细管控
当流量通过安全组后,才进入 Linux 内核 netfilter 框架,由 firewalld 或 iptables 规则进一步处理。注意:
- CentOS/RHEL 7+ 默认使用 firewalld,它本质是 iptables 的封装层,不建议同时启用 firewalld 和 iptables-services;
- firewalld 的 zone(如 public、internal)决定了默认行为,public 区域默认拒绝新连接,适合公网接口;
- 若已用安全组做了强隔离(例如只允某个 IP 访问 80),主机防火墙可专注做“连接状态管理”和“本地策略强化”,比如限制同一 IP 的连接速率、封禁暴力破解来源。
典型配合操作:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.5" port port="22" protocol="tcp" accept'
firewall-cmd --reload
这条命令不重复开放端口,而是在已有安全组基础上,对可信管理 IP 做更细粒度的白名单控制。
netfilter 与 SELinux:底层加固与权限收敛
netfilter 是内核机制,iptables/firewalld 都只是它的用户态配置工具;而 SELinux 则在更高维度补充防护:它不管流量是否进来,而是管“进来的流量,对应的进程能访问哪些文件、端口、资源”。
- iPtables/firewalld 放行了 80 端口 → Nginx 可以监听并响应请求;
- 但若 SELinux 策略禁止 Nginx 读取 /var/www/html 下的页面,浏览器仍会返回 403 错误;
- 同样,即使攻击者绕过防火墙拿到 shell,SELinux 也能阻止其写入 /etc/shadow 或启动 sshd 服务。
建议:生产环境开启 SELinux(enforcing 模式),配合 sealert -a /var/log/audit/audit.log 快速定位策略冲突,而不是直接禁用。
排查不通时的检查顺序
遇到服务访问失败,按以下顺序逐层验证,避免跳步:
- 第一步:确认安全组是否放行对应协议+端口+源 IP;
- 第二步:登录服务器,检查 firewalld 是否运行(
systemctl status firewalld),并查看当前区域开放的端口(firewall-cmd --list-ports); - 第三步:确认服务进程是否真正监听在对应端口(
ss -tlnp | grep :80); - 第四步:检查 SELinux 状态(
getenforce)及最近拒绝日志(ausearch -m avc -ts recent)。











