如何配置UFW防火墙:禁止所有出站流量但允许浏览器上网
UFW 配置:仅允许浏览器上网,拦截其他出站流量
我来帮你搞定这个问题!你之前只开放80和443端口却没法上网,核心原因是浏览器需要DNS解析域名——连目标网站的IP地址都找不到,自然没法建立连接。下面是一套完整的配置流程,确保只有浏览器能正常访问网页,其他所有出站流量都会被拦截:
1. 重置UFW到默认状态
先清空之前的自定义规则,避免旧规则干扰新配置:
sudo ufw reset
2. 允许本地回环接口流量
本地程序之间的通信依赖回环接口(lo),必须放行,否则很多基础功能会失效:
sudo ufw allow in on lo sudo ufw allow out on lo
3. 允许DNS出站流量
浏览器要把域名转换成IP地址,必须依赖DNS服务。我们需要放行UDP和TCP的53端口(UDP用于常规DNS查询,TCP用于大尺寸的DNS响应):
sudo ufw allow out 53/udp sudo ufw allow out 53/tcp
4. 允许网页访问的核心端口
开放HTTP(80)和HTTPS(443)的TCP流量,这是网页访问的基础:
sudo ufw allow out 80/tcp sudo ufw allow out 443/tcp
可选优化:如果你的浏览器支持QUIC协议(比如Chrome、Firefox),可以额外开放443端口的UDP流量,提升部分网站的加载速度:
sudo ufw allow out 443/udp
5. 设置默认拒绝所有出站流量
这一步一定要放在最后!确保前面的允许规则优先生效,之后所有未被明确允许的出站流量都会被拦截:
sudo ufw default deny outgoing
6. 启用UFW并验证规则
启动防火墙,然后查看当前规则是否正确:
sudo ufw enable sudo ufw status verbose
测试配置效果
- 打开浏览器访问任意网站(比如Google、GitHub),应该能正常加载。
- 测试其他程序(比如用
ping google.com、curl ftp://ftp.debian.org),这些非网页访问的流量应该会被拦截。
如果还是遇到问题,可以通过查看UFW日志排查被拦截的流量:
sudo tail -f /var/log/ufw.log
日志里会显示被拦截的流量详情,你可以根据需要补充对应的允许规则。
内容的提问来源于stack exchange,提问作者Lambda killed App




