Linux防火墙高可靠配置需四点:确认工具链防冲突(firewalld与iptables不可混用);firewalld规则须--permanent加--reload才永久生效;iptables规则顺序决定匹配结果,ACCEPT必须在DROP前;还需校验云安全组、SELinux及服务绑定地址。

配置 Linux 防火墙实现高可靠的安全规则加载,关键不在“加得多”,而在“落得准、载得稳、查得清”。核心是确保规则不因重启丢失、不因顺序错乱失效、不被其他安全层绕过。以下四点直击生产环境常见断点:
确认当前防火墙工具链并锁定主控权
混用 firewalld 和 iptables 会引发规则冲突——firewalld 启动后会接管 netfilter,此时直接调用 iptables 命令可能被忽略。
- 运行
systemctl is-active firewalld:返回active表示 firewalld 正在主导;返回inactive或报错,再执行iptables -L -n确认 iptables 是否生效 - RHEL/CentOS 7+、AlmaLinux、Fedora 默认用 firewalld;Ubuntu 20.04+ 默认用 ufw(本质是 iptables 前端),但可手动启用 firewalld
- 若需切换工具,先停用一方:
sudo systemctl stop firewalld && sudo systemctl disable firewalld,再启用另一方并验证状态
firewalld 规则必须永久化 + 显式重载
只执行 firewall-cmd --add-port=8080/tcp 是临时操作,重启即丢;只加 --permanent 不 --reload,规则写入配置但未生效。
- 开放端口的正确组合:
sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload - 验证是否真正生效:
firewall-cmd --zone=public --list-ports(仅显示永久规则)或firewall-cmd --list-all(含服务、富规则等完整视图) - 误操作补救:若已加临时规则但未永久保存,可用
firewall-cmd --runtime-to-permanent将当前运行时配置同步到磁盘
iptables 规则顺序决定策略生死
iptables 匹配是线性扫描,第一条匹配即执行动作,后续规则不再检查。默认策略为 DROP 时,ACCEPT 规则必须排在 DROP 之前。
- 典型错误:
iptables -P INPUT DROP后再iptables -A INPUT -p tcp --dport 22 -j ACCEPT→ SSH 断连 - 正确做法:先插入允许规则,再设默认策略,例如:
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPTiptables -I INPUT 2 -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -P INPUT DROP - 调试必备:
iptables -L INPUT -n --line-numbers查序号,iptables -D INPUT 3删除第 3 条
跨层校验:不止看防火墙,还要看云组、SELinux 和绑定地址
即使防火墙规则全开,仍可能不通——因为流量在抵达防火墙前已被拦截,或通过后被 SELinux 拒绝,或服务根本没监听对应地址。
- 云服务器务必检查云平台安全组(如 AWS Security Group、阿里云 ECS 安全组),它位于防火墙外层,优先过滤
- 运行
sestatus查 SELinux 状态;若为 enforcing,确认服务上下文是否允许网络连接,必要时用setsebool -P httpd_can_network_connect 1开放 - 用
ss -tlnp | grep :8080确认服务是否真在监听该端口,且绑定地址不是127.0.0.1(仅限本地)而是0.0.0.0或具体网卡 IP


















