温馨提示×

CentOS防火墙故障排查有哪些方法

小樊
34
2025-12-29 04:55:22
栏目: 智能运维

CentOS 防火墙故障排查方法

一 快速状态与服务可用性检查

  • 查看 firewalld 运行状态与是否开机自启:使用命令:systemctl status firewalldfirewall-cmd --statesystemctl 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/tcpfirewall-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 firewalldjournalctl -xe 聚焦启动失败、规则加载错误、D-Bus 调用失败等线索。
  • 检查关键依赖:systemctl status dbussystemctl 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 管理或清理冲突规则。
  • 避免并行防火墙:确认仅启用一种防火墙栈(如 firewalldiptables 不要同时生效),并检查开机启用状态 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)做策略修正。

0