当前位置: 首页 > news >正文

linux 使用docker时开放的端口不受防火墙控制的解决方案

在 Linux 系统中使用 Docker 时,容器暴露的端口可能绕过主机防火墙(如 iptablesfirewalld),这是由 Docker 的网络管理机制导致的。以下是详细分析和解决方案:

问题原因

  1. Docker 的 iptables 直通机制
    Docker 默认自动管理 iptables 规则,在 DOCKER-USER 链中插入规则,优先级高于系统防火墙规则(如 INPUT 链)。
    例如运行容器:

    docker run -p 8080:80 nginx
    

    Docker 会自动添加规则:

    -A DOCKER -d 0.0.0.0/0 ! -i docker0 -p tcp -m tcp --dport 8080 -j ACCEPT
    
  2. 规则优先级问题
    系统防火墙规则通常作用于 INPUT 链,但 Docker 规则位于 PREROUTINGDOCKER-USER 链,数据包会优先匹配 Docker 规则,导致防火墙失效。


解决方案

方法 1:通过 Docker 配置限制

编辑 Docker 配置文件 /etc/docker/daemon.json

{"iptables": false
}

重启 Docker:

sudo systemctl restart docker

注意:需手动管理所有 iptables 规则,适用于高级用户。

方法 2:使用 firewalld 直接管理
  1. 将 Docker 接口加入 trusted 区域:
    sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
    
  2. 添加富规则限制端口:
    sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source not ipset="whitelist" port port="8080" protocol="tcp" reject'
    
  3. 重载配置:
    sudo firewall-cmd --reload
    
方法 3:修改 iptables 优先级

/etc/ufw/after.rules(UFW 用户)或自定义链中插入规则:

# 在 DOCKER-USER 链顶部添加拒绝规则
sudo iptables -I DOCKER-USER -p tcp --dport 8080 -j DROP

此规则会全局禁止 8080 端口,谨慎使用。


验证方法

  1. 检查生效规则:
    sudo iptables -L DOCKER-USER -v -n
    
  2. 测试端口访问:
    nc -zv 服务器IP 8080
    

最佳实践

  • 优先使用 firewalld 富规则或 DOCKER-USER 链定制策略。
  • 避免同时使用 ufwfirewalld
  • 生产环境建议通过 Docker 网络策略(如 --network host + 主机防火墙)控制访问。

通过以上调整,可确保 Docker 端口遵守主机防火墙规则,提升系统安全性。

http://www.dtcms.com/a/318035.html

相关文章:

  • 医疗AI中GPU部署的“非对等全节点架构“方案分析(上)
  • AI领域的三箭齐发之夜 - genie3,gpt-oss, Opus 4.1
  • hyper-v常见问题解答(此文会持续更新)
  • DNS 服务器
  • 远程连接----ubuntu ,rocky 等Linux系统,WindTerm_2.7.0
  • 当前主流GPU全景讲解:架构、功能与应用方向
  • 一种简单的3dnr去噪算法介绍
  • 北京-4年功能测试2年空窗-报培训班学测开-第六十九天-投简历第一天-从兴奋到害怕
  • Unity工具—Inspector面板增加Rect Transform组件上下左右移动的工具
  • linux IO介绍
  • Android系统性能分析利器:深入解析Tracing框架
  • Dify+Nginx反向代理:80端口冲突的优雅解决方案
  • ICCV 2025 | 视频生成迈入“多段一致”新时代!TokensGen用“压缩Token”玩转长视频生成
  • Mysql如何迁移数据库数据
  • mysql数据库基础操作
  • 每日任务day0806:小小勇者成长记之收获日
  • 在 Visual Studio Code 中免费使用 Gemini 2.5 Pro API
  • 滴滴招java开发
  • 利用DeepSeek改写并增强测试Duckdb和sqlite的不同插入方法性能
  • 虚幻GAS底层原理解剖四 (TAG)
  • Boosting 知识点整理:调参技巧、可解释性工具与实战案例
  • [Oracle] NVL()函数
  • 【概念学习】深度学习有何不同
  • 220降5V,30mA电流,墙壁开关和调光器应用场景WD5201
  • 【秋招笔试】2025.08.02-OPPO秋招第二套-第一题
  • Win10还未停更,对标iPad的教育版Win11也宣布停更了
  • Python爬虫 urllib 模块详细教程:零基础小白的入门指南
  • Pytest项目_day05(requests加入headers)
  • 项目中MySQL遇到的索引失效的问题
  • Conditional Modeling Based Automatic Video Summarization