Ubuntu防火墙(UFW)故障排查指南
首先检查UFW是否处于运行状态,这是排查故障的基础。使用以下命令查看状态:
sudo ufw status
若显示Status: active,说明防火墙已启用;若显示Status: inactive,则表示防火墙未启动。如需更详细的信息(如默认策略、开放端口),可添加verbose参数:
sudo ufw status verbose
默认策略决定了未被明确允许的流量的处理方式。UFW的推荐默认策略为:拒绝所有传入连接,允许所有传出连接。查看默认策略的命令:
sudo ufw default
若默认策略不符合预期(如传入流量被允许),可通过以下命令修改:
sudo ufw default deny incoming(拒绝传入)
sudo ufw default allow outgoing(允许传出)
检查已添加的规则是否正确,是否有误拦截或放行不必要的流量。常用命令:
sudo ufw list:列出所有已启用的规则;sudo ufw show added:显示已添加但未激活的规则;sudo ufw status numbered:按端口排序显示规则(便于定位)。sudo ufw delete [规则编号]删除日志是排查故障的关键,它能记录所有被允许或拒绝的连接尝试。启用日志记录:
sudo ufw logging on
查看实时日志:
sudo tail -f /var/log/ufw.log
若需更详细的信息(如源IP、目的端口),可添加-v参数:
sudo ufw logs -v
通过日志可快速定位问题(如频繁被拒绝的IP、异常端口访问)
若防火墙开启后出现网络连接问题(如无法SSH、访问网页),需测试端口是否正常放行。例如,测试SSH端口(22)是否可达:
telnet [服务器IP] 22 或 nc -zv [服务器IP] 22
若连接失败,需检查是否添加了正确的允许规则:
sudo ufw allow 22/tcp
若使用非标准端口(如2222),需替换为实际端口
若防火墙规则配置正确但仍无法访问某端口,可能是端口被其他进程占用。使用以下命令查看端口占用情况:
sudo netstat -tulpn | grep [端口号] 或 sudo ss -tulpn | grep [端口号]
若端口被占用,可通过kill [进程ID]终止进程,或修改服务端口
若同时运行多个防火墙工具(如iptables-persistent、firewalld),可能导致规则冲突。需禁用其他防火墙服务:
sudo systemctl stop netfilter-persistentsudo systemctl disable netfilter-persistentsudo systemctl stop firewalldsudo systemctl disable firewalldsudo ufw enable若以上步骤均无法解决问题,可尝试重启UFW以恢复默认状态:
sudo ufw disable && sudo ufw enable
若仍无法解决,可重置UFW(清除所有规则,恢复初始状态):
sudo ufw reset
重置后需重新配置规则
UFW依赖于netfilter内核模块和iptables工具,需确保这些依赖正常。检查netfilter模块是否加载:
lsmod | grep nf_conntrack
若未加载,可通过sudo modprobe nf_conntrack加载。检查iptables是否安装:
sudo apt install iptables
若未安装,需安装后重启UFW