ubuntu防火墙故障排查步骤
导读:Ubuntu 防火墙故障排查步骤 一 明确防火墙栈与最小检查 先确认系统正在使用哪类防火墙:UFW(Ubuntu 常见默认)、firewalld(常见于 RHEL 系,但部分环境也会安装)、或直接操作 iptables/nftables。...
Ubuntu 防火墙故障排查步骤
一 明确防火墙栈与最小检查
- 先确认系统正在使用哪类防火墙:UFW(Ubuntu 常见默认)、firewalld(常见于 RHEL 系,但部分环境也会安装)、或直接操作 iptables/nftables。
- 最小检查清单:
- UFW:执行
sudo ufw status verbose或sudo ufw status numbered,确认状态为 active,并检查目标端口是否有 ALLOW IN 规则。 - firewalld:执行
sudo firewall-cmd --state查看是否 running;用sudo firewall-cmd --list-ports与sudo firewall-cmd --list-all查看开放端口与区域配置。 - 直接规则链:执行
sudo iptables -L -n -v与sudo iptables -S查看当前生效规则与策略。 - 服务状态:必要时用
sudo systemctl status ufw或sudo systemctl status firewalld确认服务是否运行。 - 原则:UFW 与 firewalld 本质都是对 iptables/nftables 的前端封装,排查时要以“当前实际生效的规则”为准。
- UFW:执行
二 分层连通性定位
- 链路层/路由:先排除网络不可达。对目标 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 --state、sudo firewall-cmd --list-ports、sudo firewall-cmd --list-all; - 放行端口:临时
sudo firewall-cmd --add-port=< 端口> /tcp;永久sudo firewall-cmd --permanent --add-port=< 端口> /tcp后sudo 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 -v、sudo 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。
- UFW/iptables:日志通常写入系统日志,可用
- 主动记录被丢弃包(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 链以及被哪条规则处理。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: ubuntu防火墙故障排查步骤
本文地址: https://pptw.com/jishu/775803.html
