温馨提示×

ubuntu防火墙故障排查步骤

小樊
34
2025-12-18 16:24:37
栏目: 智能运维

Ubuntu 防火墙故障排查步骤

一 明确防火墙栈与最小检查

  • 先确认系统正在使用哪类防火墙:UFW(Ubuntu 常见默认)、firewalld(常见于 RHEL 系,但部分环境也会安装)、或直接操作 iptables/nftables
  • 最小检查清单:
    • UFW:执行 sudo ufw status verbosesudo ufw status numbered,确认状态为 active,并检查目标端口是否有 ALLOW IN 规则。
    • firewalld:执行 sudo firewall-cmd --state 查看是否 running;用 sudo firewall-cmd --list-portssudo firewall-cmd --list-all 查看开放端口与区域配置。
    • 直接规则链:执行 sudo iptables -L -n -vsudo iptables -S 查看当前生效规则与策略。
    • 服务状态:必要时用 sudo systemctl status ufwsudo systemctl status firewalld 确认服务是否运行。
    • 原则:UFW 与 firewalld 本质都是对 iptables/nftables 的前端封装,排查时要以“当前实际生效的规则”为准。

二 分层连通性定位

  • 链路层/路由:先排除网络不可达。对目标 IP 执行 ping <IP>;若不通,优先检查路由、云安全组/本机安全策略、网线/交换与上游网络。
  • 本机监听:确认服务已在正确端口监听。执行 sudo ss -tulpen | grep <端口>,看是否存在对应 LISTEN 状态及正确的 PID/程序
  • 本机自测:在服务器本机测试访问 curl -Iv http://127.0.0.1:<端口>nc -vz 127.0.0.1 <端口>,验证应用本身是否可达。
  • 外部探测:从外部主机测试端口可达性,建议用 nmap -sT -p <端口> <服务器IP> 查看端口状态(open/filtered/closed)。
  • 结果判读:
    • 本机可连、外部不可连,多半是外部策略/防火墙问题;
    • 本机不可连,多半是服务未监听/配置错误
    • 本机与外部均不可连,优先排查网络与路由

三 防火墙规则核对与修正

  • UFW 场景:
    • 查看并核对:sudo ufw status verbose / sudo ufw status numbered
    • 放行端口:sudo ufw allow <端口>/tcp(或 /udp,或 sudo ufw allow 22,80,443/tcp 批量放行);
    • 按来源限制:sudo ufw allow from <IP/网段> to any port <端口>
    • 删除规则:sudo ufw delete allow <端口>/tcp 或用编号删除 sudo ufw delete <编号>
    • 使配置持久生效:UFW 默认即持久,修改后无需额外动作。
  • firewalld 场景:
    • 查看状态与规则:sudo firewall-cmd --statesudo firewall-cmd --list-portssudo firewall-cmd --list-all
    • 放行端口:临时 sudo firewall-cmd --add-port=<端口>/tcp;永久 sudo firewall-cmd --permanent --add-port=<端口>/tcpsudo firewall-cmd --reload
    • 按来源限制:sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="<IP/网段>" port port="<端口>" protocol="tcp" accept',再 sudo firewall-cmd --reload
    • 注意区分运行时永久配置,遗漏 --permanent 或未 reload 是常见疏漏。
  • 直接 iptables 场景:
    • 查看:sudo iptables -L -n -vsudo iptables -S
    • 放行示例:sudo iptables -A INPUT -p tcp --dport <端口> -j ACCEPT(注意规则顺序与策略默认动作);
    • 精细放行来源:sudo iptables -A INPUT -p tcp -s <IP/网段> --dport <端口> -j ACCEPT
    • 保存:若使用持久化方案(如 iptables-persistent),需执行 sudo netfilter-persistent save 或相应保存命令。

四 日志与抓包确认拦截点

  • 查看防火墙日志:
    • UFW/iptables:日志通常写入系统日志,可用 sudo tail -f /var/log/syslog | grep -i "UFW\|iptables\|DROP" 实时观察;
    • firewalld:用 sudo journalctl -u firewalld -f 查看服务日志;如需记录被拒绝的数据包,可在 /etc/firewalld/firewalld.conf 中设置 LogDenied=all 并重启 firewalld。
  • 主动记录被丢弃包(iptables):
    • 新建日志链:sudo iptables -N LOGGING
    • 记录并限速:sudo iptables -A INPUT -j LOGGING
    • 丢弃并记录:sudo iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4
    • 继续处理:sudo iptables -A LOGGING -j DROP
    • 分析:在 /var/log/syslog/var/log/kern.log 中检索 IPTables-Dropped 前缀,统计高频源 IP 与端口。
  • 抓包定位:在服务器上执行 sudo tcpdump -ni any "tcp port <端口>",从结果判断是未到达本机(可能被上游拦截)、到达但未握手(可能被本机防火墙/服务策略拒绝)、还是握手后被应用关闭

五 常见症状快速处置

  • 新改端口仍连不上:
    • 核对 UFW/firewalld/iptables 是否已放行该端口与协议;
    • 若使用 firewalld,确认已 sudo firewall-cmd --reload 使永久规则生效;
    • ss -lntp | grep <端口> 确认服务确实在该端口监听;
    • 外部用 nmap 复核端口状态。
  • 出现 “No route to host”:
    • 该提示更偏向网络层不可达(路由、云安全组/ACL、物理链路)而非端口策略;先排查网络连通性与上游策略,再回到防火墙核对。
  • 服务已放行但仍被拒:
    • 检查是否有更靠前或默认策略的 DROP/REJECT 规则;
    • 核对协议(TCP/UDP)、来源地址限制、端口范围;
    • 打开日志或抓包确认包是否到达 INPUT 链以及被哪条规则处理。

0