CentOS防火墙故障排查有哪些方法
小樊
34
2025-12-29 04:55:22
CentOS 防火墙故障排查方法
一 快速状态与服务可用性检查
- 查看 firewalld 运行状态与是否开机自启:使用命令:systemctl status firewalld、firewall-cmd --state、systemctl is-enabled firewalld。若未运行,使用 systemctl start firewalld 启动;需要开机自启则执行 systemctl enable firewalld。这些能快速判断防火墙是否在服务层面与策略层面生效。
二 核对当前生效的防火墙配置
- 查看当前区域完整配置:firewall-cmd --list-all(关注 active zone、services、ports、icmp-blocks 等)。
- 查看所有区域:firewall-cmd --list-all-zones;查看活动区域与绑定接口:firewall-cmd --get-active-zones。
- 聚焦端口与服务:已开放端口 firewall-cmd --list-ports;已允许服务 firewall-cmd --list-services;查询某端口或服务是否已放行:firewall-cmd --query-port=443/tcp、firewall-cmd --query-service=ssh。以上用于确认策略是否已正确下发到当前区域。
三 端口连通性与服务可达性验证
- 本机端口监听与进程:使用 ss -lnpt | grep <端口> 或 netstat -lnpt | grep <端口> 确认服务是否在对应端口监听及所属进程。
- 本机连通性自测:telnet 127.0.0.1 <端口> 或 nc -vz 127.0.0.1 <端口>。
- 跨机连通性测试:从客户端执行 telnet <服务器IP> <端口> 或 nc -vz <服务器IP> <端口>;必要时在服务器抓包 tcpdump -ni any port <端口> 判断包是否到达主机。
- 若端口未监听,需回到应用与系统服务排查;若监听正常但外部不通,优先检查防火墙与云安全组策略。
四 日志与依赖项定位
- 查看 firewalld 日志:使用 journalctl -u firewalld 或 journalctl -xe 聚焦启动失败、规则加载错误、D-Bus 调用失败等线索。
- 检查关键依赖:systemctl status dbus、systemctl status polkit,确保消息总线与策略守护进程运行正常,否则 firewalld 可能异常或无法启动。
- 配置语法自检:firewall-cmd --check-config,提前发现配置错误,避免重载失败或服务异常。
五 规则变更、冲突排查与修复
- 规则持久化与生效:添加端口或服务需加 –permanent,再执行 firewall-cmd --reload 使配置生效;例如:firewall-cmd --zone=public --add-port=443/tcp --permanent && firewall-cmd --reload。
- 排查规则冲突与顺序:查看 iptables -L -n -v(必要时指定表/链),确认是否存在与 firewalld 冲突的遗留规则或策略顺序问题;若有,统一以 firewalld 管理或清理冲突规则。
- 避免并行防火墙:确认仅启用一种防火墙栈(如 firewalld 与 iptables 不要同时生效),并检查开机启用状态 systemctl is-enabled firewalld,必要时禁用冲突服务。
- 配置回滚与重装:变更前备份规则与配置文件;若配置损坏或无法恢复,作为最后手段可执行重装:yum remove firewalld && yum install firewalld && systemctl start firewalld。
- SELinux 因素:若怀疑被 SELinux 限制,可临时 setenforce 0 验证;定位到具体端口类型后,使用 semanage port -a -t http_port_t -p tcp 80(需安装 policycoreutils-python-utils)做策略修正。