【博客576】警惕docker本身iptables规则对网络的影响

news2024/11/20 12:32:41

警惕docker本身iptables规则对网络的影响

警惕1:k8s环境下,独立拉取docker容器时,进行端口映射会有问题

场景:

在k8s节点由于某种原因,比如:需要拉起一个docker环境来制作镜像,需要拉起一些不由k8s管理的容器,这些容器需要有网络通信,但是在通信时出现网络不通,比如:将容器的80端口映射到8080去对外暴露,但是实际不通

原因:

在k8s环境下,kube-proxy会下发iptables规则来管理网络流量,此时我们启动docker daemon时,一般会禁止docker下发iptables规则,以避免互相影响,但是此时在k8s外直接拉起容器时,容器需要进行网络通信,但是docker不会单独去下发这部分规则,比如:端口的nat规则,就会导致网络不通

典型的k8s环境下的docker配置: 设置禁止下发iptables规则,但开启ip-forward

{
“data-root”: “/data/kubernetes/docker”,
“bridge”: “none”,
“experimental”: true,
“debug”: false,
“ip-forward”: true,
“ip-masq”: false,
“iptables”: false,
“ipv6”: false,
“live-restore”: true,
“log-driver”: “json-file”,
“log-level”: “warn”,
“log-opts”: {
“max-file”: “10”,
“max-size”: “100m”
}
}

警惕2:默认环境下,docker的网络隔离规则可能会影响你的其它服务

场景: 默认安装了docker之后,机器上的一些网络代理服务,比如:vpn受到了影响

原因: docker本身默认对于forward链上有drop规则,由于隔离网络设备间的流量

这个其实是官方给出的已知问题,不算缺陷,是一种安全的权衡设计,
细节参考:docker-on-a-router

官方提示:

Docker also sets the policy for the FORWARD chain to DROP. If your Docker host also acts as a router, this will result in that router not forwarding any traffic anymore. If you want your system to continue functioning as a router, you can add explicit ACCEPT rules to the DOCKER-USER chain to allow it:

官方解决方法:

iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT

docker bridge隔离分析:

docker下发的默认iptables如下:

iptables -N DOCKER
iptables -N DOCKER-ISOLATION-STAGE-1
iptables -N DOCKER-ISOLATION-STAGE-2
iptables -N DOCKER-USER
iptables -A FORWARD -j DOCKER-USER
iptables -A FORWARD -j DOCKER-ISOLATION-STAGE-1
iptables -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -o docker0 -j DOCKER
iptables -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
iptables -A FORWARD -i docker0 -o docker0 -j ACCEPT
iptables -A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
iptables -A DOCKER-ISOLATION-STAGE-1 -j RETURN
iptables -A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
iptables -A DOCKER-ISOLATION-STAGE-2 -j RETURN
iptables -A DOCKER-USER -j RETURN

其中DOCKER-ISOLATION相关的是为了实现网络设备间的流量隔离:

为了隔离在不同的bridge网络之间的容器,Docker提供了两个DOCKER-ISOLATION阶段实现。

1、DOCKER-ISOLATION-STAGE-1作用分析:

相关规则:
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN

分析:
-A FORWARD -j DOCKER-ISOLATION-STAGE-1:
表示所有经过FORWARD链转发的数据包都要经过DOCKER-ISOLATION-STAGE-1的过滤。

-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2:
表示源接口是docker0但是目标接口不是docker0的数据包进入DOCKER-ISOLATION-STAGE-2链中
进一步处理。

-A DOCKER-ISOLATION-STAGE-1 -j RETURN:
表示从DOCKER-ISOLATION-STAGE-1链中返回。

2、DOCKER-ISOLATION-STAGE-2作用分析:

相关规则:
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN

分析:
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP表示如果数据包的目标接口是docker0,直接丢弃。

3、综合分析:

数据包从docker0上的容器发出,但是目的地址不是docker0上的其它容器,此时这样的流量如果要从docker0网桥发出则会被丢弃,实现了docker0网桥上的容器和其它网桥的容器的流量隔离

注意: 这里的规则里的-i和-o匹配的是指流量进出时通过的网桥设备

Docker的DOCKER-USER链:

Docker启动时,会加载DOCKER链和DOCKER-ISOLATION(现在是DOCKER-ISOLATION-STAGE-1)链中的过滤规则,并使之生效。绝对禁止修改这里的过滤规则。
如果用户要补充Docker的过滤规则,强烈建议追加到DOCKER-USER链。DOCKER-USER链中的过滤规则,将先于Docker默认创建的规则被加载,从而能够覆盖Docker在DOCKER链和DOCKER-ISOLATION链中的默认过滤规则。例如,Docker启动后,默认任何外部source IP都被允许转发,从而能够从该source IP连接到宿主机上的任何Docker容器实例。如果只允许一个指定的IP访问容器实例,可以插入路由规则到DOCKER-USER链中,从而能够在DOCKER链之前被加载。

Docker的DOCKER-USER链使用示例如下:

只允许192.168.1.1访问容器:

iptables -A DOCKER-USER -i docker0 ! -s 192.168.1.1 -j DROP

只允许192.168.1.0/24网段中的IP访问容器:

iptables -A DOCKER-USER -i docker0 ! -s 192.168.1.0/24 -j DROP

只允许192.168.1.1-192.168.1.3网段中的IP访问容器(需要借助于iprange模块):

iptables -A DOCKER-USER -m iprange -i docker0 ! --src-range 192.168.1.1-192.168.1.3 -j DROP

3、docker流量分析流转图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147457.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

靶机测试Os-hacknos-3笔记

靶机介绍Difficulty: IntermediateFlag: 2 Flag first user And the second rootLearning: Web Application | Enumeration | Privilege EscalationWeb-site: www.hacknos.comContact-us : rahul_gehlautThis works better with VirtualBox rather than VMware靶机地址https://…

nuPlan: A closed-loop ML-based planning benchmark for autonomous vehicles

Paper name nuPlan: A closed-loop ML-based planning benchmark for autonomous vehicles Paper Reading Note URL: https://arxiv.org/pdf/2106.11810.pdf TL;DR nuPlan 比赛,提出了规控领域新数据集 Introduction 背景 当前自动驾驶规划任务中使用专家系统…

正确实践Jetpack SplashScreen API —— 在所有Android系统上使用总结,内含原理分析

1.前言 文章末尾有演示的APK链接,感兴趣的同学,可以自行下载体验一下 官方Android 12的Splash Screen文档地址 官方Splash Screen兼容库,支持所有版本系统 本篇文章主要围绕下面三个问题来介绍: 我们能从Android 12 SplashScree…

订单数据越来越多,如何优化数据库性能?

“增删改查”都是查找问题,因为你都得先找到数据才能对数据做操作。那存储系统性能问题,其实就是查找快慢问题。 存储系统一次查询所耗时间取决两个因素: 查找的时间复杂度数据总量 查找的时间复杂度取决于: 查找算法存储数据…

基于Java-SpringBoot+vue实现的前后端分离信息管理系统设计和实现

基于Java-SpringBootvue实现的前后端分离信息管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言…

后台执行限制总结

后台限制的发展历程 前台定义 针对后台Service procState < PROCESS_STATE_IMPORTANT_BACKGROUND7 针对后台启动Activity procState < PROCESS_STATE_BOUND_TOP3 针对后台启动FGS/后台启动FGS的while-in-use权限 procState < PROCESS_STATE_BOUND_FOREGROUND_SERVICE…

【Linux】文本编辑器-vim使用

目  录1 vim的基本概念2 vim的基本操作3 vim常用模式命令集3.1 vim正常模式命令集3.2 vim末行模式命令集4 vim的简单配置1 vim的基本概念 vim编辑器与vi编辑器一样都是多模式编辑器&#xff0c;不同的是vim编辑器是vi编辑器的升级版本&#xff0c;vim不仅兼容vi的所有指令&am…

Django by Example·第二章|Enhancing Your Blog with Advanced Features@笔记

Django by Example第二章|Enhancing Your Blog with Advanced Features笔记 这本书的结构确实很不错&#xff0c;如果能够坚持看下去&#xff0c;那么Django框架的各种用法也就掌握的七七八八了。之前写过一篇这本书的第一章&#xff0c;看完第一章就算是入门了&#xff0c;但…

acwing差分

题目&#xff1a;输入一个长度为 n 的整数序列。接下来输入 m 个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加上 c。请你输出进行完所有操作后的序列。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数&#xff0c;表示整…

【C++高阶数据结构】跳表(skiplist)

&#x1f3c6;个人主页&#xff1a;企鹅不叫的博客 ​ &#x1f308;专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接&#xff1a;代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

第十一章Thymeleaf学习

文章目录什么是Thymeleaf什么是模板引擎Thymeleaf的同行Thymeleaf优势一个实例来认识大概过程导入对应的jar包配置对应的xml文件对应的ViewBaseServlet编写——对应的模板引擎写对应的Servlet类并且继承ViewBaseServlet对应index.html资源——对应的模板Thymeleaf的基础语法th名…

337. 打家劫舍 III

目录题目思路代码题目 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口&#xff0c;我们称之为 root 。 除了 root 之外&#xff0c;每栋房子有且只有一个“父“房子与之相连。一番侦察之后&#xff0c;聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”…

笔试强训(11)

第一题:二进制插入二进制插入__牛客网 给定32位整数n和m&#xff0c;同时我们指定i和j&#xff0c;将m的二进制位数插入到n的二进制位数的j到i位&#xff0c;我们保证n的j到i位均是等于0的&#xff0c;况且m的二进制位数小于等于i-j1&#xff0c;其中二进制的位数从0开始从低到…

js设计模式(八)-总体感受一下设计模式

前言 首先&#xff0c;不得不说我们是站在巨人的肩膀上写代码&#xff0c;前辈们已经很合理的帮助我们总结出来了23种设计模式&#xff0c;虽然有些已经被语言直接使用Api实现了&#xff0c;感谢走在前沿的攻城狮。 但是真真正正的看一遍所有的设计模式还是很有必要的&#x…

MyBatis查询数据库

1.MyBatis 是什么&#xff1f; MyBatis 是⼀款优秀的持久层框架&#xff0c;它⽀持⾃定义 SQL、存储过程以及⾼级映射。MyBatis 去除了⼏乎所有的 JDBC 代码以及设置参数和获取结果集的⼯作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接⼝和 Java POJO&#xf…

计算机基础——计算机分类

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 前言 本章将会讲解计算机分类应用领域以及发展趋势 一.计算机分类 计算机并非只有日常所…

并行计算 Clion配置使用OpenMP

文章目录配置CMakeList.txt文件OpenMP之HelloWorld数据共享属性shared子句private子句default子句default(shared)default(none)配置CMakeList.txt文件 文件底部加入以下内容&#xff0c;即可支持OpenMP FIND_PACKAGE(OpenMP REQUIRED) if (OPENMP_FOUND)message("OPENM…

STM32MP157驱动开发——Linux DAC驱动

STM32MP157驱动开发——Linux DAC驱动0.前言一、DAC 简介二、驱动源码分析1.设备树下的 DAC 节点2.驱动源码分析1&#xff09;stm32_dac 结构体2&#xff09;stm32_adc_probe 函数3&#xff09;stm32_dac_iio_info 结构体三、驱动开发1.修改设备树2.使能DAC驱动四、 运行测试0.…

读书笔记 -公司改造 和 紧迫感

读书笔记 -公司改造 - 三枝匡 读书笔记 -公司改造 - 三枝匡 2022 年夏天的时候在微信读书上读了这本书&#xff0c;这是我们 CSDN 的创始人蒋涛推荐的&#xff0c;当时记了一些笔记如下。 总结&#xff1a; 每个有一定的历史&#xff0c;比较成功、或者尚未非常成功的公司遇…

基于Java+SpringBoot+vue+element实现毕业就业招聘系统

基于JavaSpringBootvueelement实现毕业就业招聘系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…