首先确认Ubuntu防火墙(UFW)是否启用,使用命令:
sudo ufw status
Status: inactive,说明防火墙未启动,需启用:sudo ufw enable(启用后会提示确认,输入y即可)。Status: active,则防火墙已启用,需进一步检查规则。查看防火墙的默认访问策略,使用命令:
sudo ufw status verbose
Default: deny (incoming), allow (outgoing)(拒绝所有入站连接,允许所有出站连接)。若默认策略为allow(允许所有入站),需修改为deny以提升安全性:sudo ufw default deny incoming
sudo ufw default allow outgoing
连接问题常因目标端口未开放导致。需确认服务对应的端口(如SSH用22、HTTP用80、HTTPS用443),并开放端口:
sudo ufw allow 端口号
例如开放SSH端口22:sudo ufw allow 22。sudo ufw allow 端口号/protocol
例如开放HTTP端口80的TCP协议:sudo ufw allow 80/tcp。sudo ufw allow 7100:7200/tcp
192.168.1.100完全访问):sudo ufw allow from 192.168.1.100
192.168.1.100访问3306端口):sudo ufw allow from 192.168.1.100 to any port 3306
开放端口后,需重启防火墙使规则生效:
sudo ufw reload
确认服务是否正在监听目标端口,使用命令:
sudo netstat -tunlp | grep 端口号
例如检查SSH端口22:
sudo netstat -tunlp | grep 22
LISTEN(如tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN),说明服务正在监听。sudo systemctl start ssh
并设置开机自启:sudo systemctl enable ssh
Ubuntu的UFW底层依赖iptables,若iptables规则与UFW冲突,可能导致连接问题。检查iptables规则:
sudo iptables -L
DROP tcp -- anywhere anywhere tcp dpt:22),需修改iptables规则允许该端口,或直接清空iptables规则(谨慎操作):sudo iptables -F
清空后需保存规则(避免重启失效):sudo netfilter-persistent save
若以上步骤无法解决,可通过防火墙日志查看具体拦截信息:
sudo ufw logging on # 开启日志记录(默认日志路径为/var/log/ufw.log)
sudo tail -f /var/log/ufw.log # 实时查看日志
日志中会显示被拦截的连接信息(如源IP、目标端口、拦截原因),根据日志调整防火墙规则。
若怀疑是防火墙导致的问题,可临时禁用防火墙(仅用于测试,测试后需重新启用):
sudo ufw disable
禁用后尝试连接,若能成功,则说明问题出在防火墙配置上,需重新检查规则并启用防火墙:
sudo ufw enable
通过以上步骤,可逐步排查并解决Ubuntu防火墙导致的连接问题。需注意,修改防火墙规则前应备份现有配置(sudo cp /etc/ufw/user.rules /etc/ufw/user.rules.bak),避免误操作导致系统无法访问。