You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DigitalOcean Ubuntu实例中UFW防火墙无法正常工作求助

解决DigitalOcean Ubuntu Docker镜像中UFW防火墙失效问题

我之前处理过不少Docker和UFW冲突的案例,你的情况大概率是Docker默认修改iptables规则,导致UFW的配置被绕过了——这是Docker和UFW共存时的经典坑。下面是具体的排查和修复步骤:

1. 确认冲突根源

Docker默认会直接操作系统的iptables,把它自己的网络规则插入到iptables链的最前端,这样UFW设置的规则根本没机会被触发。你可以通过下面的命令查看iptables的规则顺序:

sudo iptables -L -n --line-numbers

如果看到DOCKER相关的链排在最前面,那就是这个问题无疑了。

2. 修改Docker配置,禁用iptables自动管理

我们需要让Docker不再篡改iptables,转而用UFW来管理所有防火墙规则:

  • 创建/编辑Docker守护进程配置文件:
    sudo nano /etc/docker/daemon.json
    
  • 写入以下配置内容(如果文件已有其他内容,确保添加到JSON对象里):
    {
      "iptables": false
    }
    
  • 保存文件后,重启Docker服务:
    sudo systemctl restart docker
    

3. 重置并重新配置UFW规则

为了确保规则生效,先重置UFW,再重新应用你的配置:

sudo ufw reset
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp  # 保持SSH连接,用LIMIT限制频率也可以
sudo ufw allow 2375/tcp  # 允许Docker API端口(如果需要对外访问的话)
sudo ufw enable
sudo ufw status verbose

4. 验证防火墙是否正常工作

  • 用tail实时查看UFW日志,测试外部访问对应端口,看日志是否有对应的记录:
    sudo tail -f /var/log/ufw.log
    
  • 同时可以用nc工具或者在线端口检测服务,测试被拒绝的端口是否真的无法访问,允许的端口是否正常响应。

额外注意事项

如果你的Docker容器需要对外提供服务,你需要在UFW里手动允许容器映射的宿主机端口,比如容器映射了80端口到宿主机,就需要执行sudo ufw allow 80/tcp。

内容的提问来源于stack exchange,提问作者Kamil Kiełczewski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:48:05