必须先用ufw明确放行对应端口,否则所有入站连接默认被拦截;执行sudo ufw status查看状态,未安装则sudo apt install ufw -y,未启用需先sudo ufw enable,并务必在启用前放行SSH端口以防失连。

要在Ubuntu系统中让外部设备能访问你本地运行的服务(比如Web服务器、数据库或自定义应用),必须先用ufw明确放行对应端口,否则所有入站连接默认被拦截。
确认ufw已安装并启用
执行 sudo ufw status 查看当前状态。若提示 Command 'ufw' not found,说明未安装,需先运行 sudo apt update && sudo apt install ufw -y。
若显示 Status: inactive,说明防火墙已装但未启用——此时任何 allow 命令都无效,必须先启用才能生效。
运行 sudo ufw enable 启用防火墙。系统会警告“命令可能使SSH断连”,【务必在启用前先放行SSH端口(如22/tcp),否则远程服务器将无法再连接】。
开放单个端口(最常用)
方法一:允许TCP端口(推荐显式指定协议)
执行 sudo ufw allow 8080/tcp,即可放行TCP协议的8080端口。
方法二:允许UDP端口
执行 sudo ufw allow 53/udp,适用于DNS等UDP服务。
方法三:不指定协议(同时放行TCP和UDP)
执行 sudo ufw allow 6379,ufw会自动添加两条规则:一条TCP、一条UDP。但多数服务只用一种协议,不加区分可能带来非预期暴露。
限制访问来源IP再放行端口
第一步:只允许某个IP访问22端口sudo ufw allow from 203.0.113.45 to any port 22 proto tcp
第二步:只允许某子网访问8000端口sudo ufw allow from 192.168.10.0/24 to any port 8000 proto tcp
第三步:验证规则是否写入成功
运行 sudo ufw status numbered,检查输出中是否出现带来源地址的ALLOW条目。注意:如果先启用了ufw,再添加这类规则,无需reload,立即生效。
验证端口是否真正开放
执行 sudo ufw status,观察输出中是否有类似 8080/tcp ALLOW Anywhere 的行。
若需查看更详细信息(含协议、来源、日志状态),改用 sudo ufw status verbose。
从另一台机器执行 telnet your-server-ip 8080 或 nc -zv your-server-ip 8080 实测连通性——这是唯一能确认“系统级放行”+“服务真在监听”的双重验证方式。











