firewall 整合 docker:指定 ip 请求 docker

2023-10-27

知识准备

  1. 主要演示的是 centos7 的 firewall,firewall 是 centos7 的默认自带防火墙。
  2. firewall 的底层是 iptables
  3. firewall 中的 chain 可以理解为是防火墙的策略组
  4. docker 在和宿主机进行端口映射时,会自动绕开 firewall 的 zone 组,直接向 iptables 写入策略,
    这也是为什么明明开启了firewall,而且没有打开 docker 映射的端口,但外界依然能够通过这个映射端口连接上 docker

例如,启动 mysql 容器,容器和宿主机映射 3306 这个端口,
然后查看 firewall 的 chain,输入命令
iptables -nvL

在这里插入图片描述
可以看到在 DOCKER 这个 chain自动写入了一条策略,destination 是容器的 ip , tcp:dpt:mysql 是 mysql 端口,target 是 ACCEPT,表示接受流量,特别留意 source,这个是流量来源,可以看到 docker 自动写入这个策略是对 mysql 端口任意的请求,都放行

这样子就使得 firewall 形同虚设,引出了下面的需求

需求

firewall 要对 docker 的端口请求有黑白名单,也就是要指定的 ip 才能请求 docker 映射的端口。

解决方案

  1. 修改 /etc/docker/daemon.json,将 iptables 设为 false·

在这里插入图片描述
这样子 docker 就不会向 iptables 写入策略,也就是不会自动打开宿主机的端口,任何请求都不会连接上 docker 。这个方法并不推荐,这样子 docker 无法解析 dns,也就是无法请求外界,而且容器之间也无法请求对方的端口。

  1. 覆盖 DOCKER-USER (推荐)

在这里插入图片描述
通过命令 iptables -L 可以看到 docker 自动写入的 chain ,其中有一个是 DOCKER-USER,通过 docker 的文档可以知道,可以在 DOCKER-USER 这个 chain 里添加自定义的策略

那么下面就演示 覆盖 DOCKER-USER 自定义策略

步骤

  1. 停止 docker : systemctl stop docker
  2. 删除 DOCKER-USER 这个 chain,并重建
firewall-cmd --permanent --direct --remove-chain ipv4 filter DOCKER-USER
firewall-cmd --permanent --direct --remove-rules ipv4 filter DOCKER-USER
firewall-cmd --permanent --direct --add-chain ipv4 filter DOCKER-USER

过程中会有一些 warn 提示,可以不用管

  1. 建拒绝所有请求的策略,级别是最低,也就是放在策略组的最后一行
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 10 -j REJECT 
  1. 建允许来自 docker0 网卡的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -i docker0 -j ACCEPT
  1. 建允许 docker0 网卡 到宿主机网卡的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -i docker0 -o ens33 -j ACCEPT

这里我宿主机网卡名称是 ens33

  1. 建允许 docker 请求外界
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  1. 建允许来自 docker 自定义网段的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -j RETURN -s 172.23.0.0/24

172.23.0.0 是我自定义的 docker 网段

  1. 建允许来自指定 ip 的请求流量
firewall-cmd --permanent --direct --add-rule ipv4 filter DOCKER-USER 1 -s 192.168.26.5/32 -j ACCEPT
  1. 重载 firewall
firewall-cmd --reload
  1. 启动 docker

这样子就实现了 firewall 的白名单功能,提高了 docker 的安全性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

firewall 整合 docker:指定 ip 请求 docker 的相关文章

随机推荐

  • 02.01 服务器开机报错

    Dell PowerEdge T320服务器 开机显示 Fatal Errort all channells have been disabled due to DIMMS falled the memory 原因 内存自检失败 可能是太久
  • yolo算法的优缺点分析_【精选推荐】基于深度学习的单阶段目标检测算法研究综述...

    DOI 10 12132 ISSN 1673 5048 2019 0100 引用格式 刘俊明 孟卫华 基于深度学习的单阶段目标检测算法研究综述 J 航空兵器 2020 27 3 44 53 Liu Junming Meng Weihua R
  • 【Python深度学习】RNN循环神经网络结构讲解及序列回归问题实战(图文解释 附源码)

    需要全部代码请点赞关注收藏后评论区留言私信 循环神经网络 循环神经网络 Recurrent Neural Network RNN 是用于对序列的非线性特征进行学习的深度神经网络 循环神经网络的输入是有前后关联关系的序列 循环神经网络可以用来
  • Spring Cache常用注解

    EnableCaching 开启缓存注解功能 Cacheable 在方法执行前spring先查看缓存中是否有数据 如果有数据 则直接返回缓存数据 若没有数据 调用方法并将方法返回值放到缓存中 CachePut 将方法的返回值放到缓存中 Ca
  • JS 实现 AES 加解密(十六进制)

    引入 aes min js js文件 aes min js Javascript文档类资源 CSDN下载js文件 aes min js更多下载资源 学习资料请访问CSDN下载频道 https download csdn net downlo
  • Python中用户管理(用户的登陆、用户的增删改查)

    一 用户登陆 题目要求 1 系统里面有多个用户 用户的信息目前保存在列表里面 users root westos passwd 123 456 2 用户登陆 判断用户登陆是否成功 1 判断用户是否存在 2 如果存在 1 判断用户密码是否正确
  • C: GNU regex library (regex.h)正则表达式调用示例

    GNU regex是GNU提供的跨平台的POSIX 正则表达式库 C语言 我也是最近才接触这个相对于C Java实现来说非常简陋 勉强够用的正则表达式库 不算GNU提供的扩展函数 POSIX标准的regex库总共就4个函数regcomp r
  • 第一章 数据结构绪论

    一 数据结构的基本概念 数据结构的三要素 逻辑结构 定义 存储结构 数据的运算 基本运算 增删改查 二 算法和算法评价 时间复杂度 时间复杂度的关键 就是想办法求出次数
  • 在虚拟机中安装Linux系统CentOS7详细教程

    虚拟机 VMware Workstation Linux CentOS 7 x86 64 DVD 1708 iso镜像文件 下载 虚拟机所在电脑系统 windows 安装步骤 安装VMware Workstation虚拟机 略 下载Linu
  • swiper 滚回第一个数据_数据库发展史(上)

    数据库技术是信息技术领域的核心技术之一 几乎所有的信息系统都需要使用数据库系统来组织 存储 操纵和管理业务数据 数据库领域也是现代计算机学科的重要分支和研究方向 目前 在数据库领域已经产生了四位图灵奖得主 他们在数据库理论和实践领域均有突出
  • DocArray x Weaviate

    Weaviate 作为 DocArray 中的 Document Store 可以使得 Document 在云端的处理和检索更加迅速 DocArray Weaviate 大起底 DocArray Data structure for uns
  • Jetpack App Startup——SDK自动初始化,告别Init

    一个项目在开发过程中 常常都伴随着很多sdk的依赖 大部分的sdk在使用时都需要在应用启动时进行初始化才能正常工作 所以在集成sdk时通常需要做如下操作 在Application的onCreate内调用对应sdk的初始化方法 目的是 保证在
  • invokeMethod的介绍

    QMetaObject invokeMethod 的介绍 在Qt框架中 QMetaObject类提供了一些反射机制可以实现类似于Java反射机制的功能 其中一个函数就是QMetaObject invokeMethod 它可以通过字符串调用对
  • 分布式锁(zookeeper)与接口幂等性实现

    背景 随着数据量的增大 用户的增多 系统的并发访问越来越大 传统的单机已经满足不了需求 分布式系统成为一种必然的趋势 分布式系统错综复杂 今天 我们着重对分布式系统的互斥性与幂等性进行分析与解决 互斥性 互斥性问题也就是共享资源的抢占问题
  • 尤雨溪谈Vue.js :缔造自由与真我

    尤雨溪 Evan You 前端框架Vue js 作者 独立开源开发者 现居美国新泽西 曾就职于 Google Creative Labs 和 Meteor Development Group 由于工作中大量接触开源的 JavaScript
  • 文件或目录损坏无法读取

    删除文件无法删除也没有任何提示 用cmd命令删除提示该目录不为空 执行SVN update提示文件或目录损坏无法读取 解决办法 右键D盘 属性 工具 修复 立即重启并修复 解决问题
  • OpenCV(十五)边缘检测1 -- Sobel算子(一阶微分算子,X、Y方向边缘检测)

    目录 一 边缘检测基础理论 1 作用 2 分类 1 基于搜索 2 基于零穿越 3 算子比较 二 Sobel算子基础理论 1 作用 2 原理及推导 3 更详细推导 4 Sobel函数 二 实战 1 对x方向微分 2 对y方向微分 3 线性混合
  • MATLAB通信系统仿真(二)——数字调制

    数字调制 文章目录 数字调制 前言 幅度键控 相移键控 频移键控 正交幅度调制 参考资料 前言 主要内容来自参考资料 2 在学习记录的同时勘正了书中代码的部分错误 幅度键控 示例代码 OOK clear all close all t 0
  • 必读的 Android 文章

    必读的 Android 文章 掘金官方 关注 2017 06 07 13 58 字数 25218 阅读 8782评论 2喜欢 218 写给 Android 开发者的混淆使用手册 Android 掘金本文转自 点击打开链接 毫无疑问 混淆是打
  • firewall 整合 docker:指定 ip 请求 docker

    知识准备 主要演示的是 centos7 的 firewall firewall 是 centos7 的默认自带防火墙 firewall 的底层是 iptables firewall 中的 chain 可以理解为是防火墙的策略组 docker