当前位置: 首页 > 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.lryc.cn/news/612241.html

相关文章:

  • 无监督学习之K-means算法
  • 第一性原理科学计算服务器如何选择配置-CPU选择篇
  • ADM2587EBRWZ-REEL7_ADI亚德诺_隔离RS-485收发器_集成电路IC
  • 点赞服务完整消息流转过程详解(原方案,未使用Redis)
  • 数据仓库命名规范
  • TypeScript 数组类型精简知识点
  • 【后端】java 抽象类和接口的介绍和区别
  • Unity打造塔科夫式网格背包系统
  • Enhancing Long Video Question Answering with Scene-Localized Frame Grouping
  • 根据经纬度(从nc格式环境数据文件中)提取环境因子
  • 基于Hadoop的股票大数据分析可视化及多模型的股票预测研究与实现
  • 2025年测绘程序设计模拟赛一--地形图图幅编号及图廓点经纬度计算
  • DAY32打卡
  • golang的map
  • 哈尔滨云前沿-关于物理服务器
  • 关于 idea 里 properties 文件的中文乱码问题
  • get请求中文字符参数乱码问题
  • 软件定义汽车 --- 电子电气架构的驱动
  • Vue Vant使用
  • AI大语言模型如何重塑软件开发与测试流程
  • 初识神经网络01——认识PyTorch
  • 需求EAV模型的优化与思考
  • PCL 平面特征点提取
  • 一、Istio基础学习
  • Next.js 服务器组件与客户端组件:区别解析
  • [FOC电机控制]-高速刹车机制
  • 滑动窗口相关题目
  • C++ 运算符重载:避免隐式类型转换的艺术
  • 利用DeepSeek编写go语言按行排序程序
  • DAY 37 早停策略和模型权重的保存