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
相关产品推荐
相关产品推荐

