首先检查Ubuntu防火墙(默认使用UFW,底层依赖iptables)是否处于活动状态。使用以下命令查看状态:
sudo ufw status
Status: inactive,说明防火墙未启用,需通过sudo ufw enable开启(开启前需确保已开放必要端口,如SSH的22端口,避免被锁)。Status: active,则继续下一步排查。默认策略决定了未被明确允许的流量的处理方式。使用以下命令查看:
sudo ufw status verbose
Default: deny (incoming), allow (outgoing)(默认拒绝入站、允许出站)是否符合安全需求。allow incoming,可能存在安全隐患,建议修改为deny并手动开放必要端口。确认防火墙规则是否包含必要的允许项(如Web服务的80/443端口、SSH的22端口)。
numbered参数显示规则序号,便于后续修改/删除):sudo ufw status numbered
-v显示流量计数,-n以数字形式显示IP/端口):sudo iptables -L -v -n --line-numbers
DROP规则在ALLOW规则之前,导致合法流量被拦截);sudo ufw allow 80/tcp(允许HTTP)或sudo ufw insert 1 allow 22/tcp(在规则列表开头插入SSH允许规则)调整。日志是定位问题的关键,UFW的日志默认存储在/var/log/ufw.log(需提前开启日志记录)。使用以下命令实时查看日志:
sudo ufw logging on # 开启日志(若未开启)
sudo tail -f /var/log/ufw.log
REJECT(拒绝)或DENY(拒绝)记录,例如:[UFW BLOCK] IN=eth0 OUT= MAC=... SRC=192.168.1.100 DST=192.168.1.10 PROTO=TCP SPT=54321 DPT=22 WINDOW=64240 RES=0x00 SYN URGP=0
上述日志表示192.168.1.100的54321端口向本机的22端口(SSH)发起的连接被拒绝,需检查是否误拦截。使用基础网络工具验证服务是否可达:
-c 4表示发送4个包):ping -c 4 your_server_ip
-z表示扫描模式,-v显示详细信息):nc -zv your_server_ip 80 # 测试80端口(HTTP)
traceroute适用于Linux,tracert适用于Windows):traceroute your_server_ip
若ping不通,可能是网络层问题(如云服务器安全组未开放端口);若nc显示Connection refused,可能是服务未运行(而非防火墙问题)。若怀疑防火墙规则导致问题,可临时禁用防火墙(仅用于测试,完成后务必重新启用):
sudo ufw disable # 禁用UFW
curl http://localhost访问本地服务)。sudo systemctl start ufw # 启动UFW服务
sudo systemctl enable ufw # 设置开机自启
sudo ufw enable # 再次启用UFW
sudo ufw status numbered # 查看规则序号
sudo ufw delete 3 # 删除第3条规则
iptables和nftables,可能导致规则不生效。解决方法:sudo update-alternatives --set iptables /usr/sbin/iptables-legacy # 切换iptables为legacy版本
sudo ufw reload # 重新加载规则(不会丢失配置)
sudo ufw reset # 重置UFW
sudo ufw enable # 重新启用
通过以上步骤,可系统排查Ubuntu防火墙的常见故障。若问题仍未解决,建议结合系统日志(journalctl -xe)进一步分析,或参考Ubuntu官方文档获取更详细的指导。