Docker容器-----安全管理(内涵TLS加密通讯)

一、Docker使用场景1.1、此处列举了Docker 的8个使用场景1、简化配置虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件, 系统), Docker在降低额外开销的情况下提供了同样的功能. 它能让你将运行环境和配置放在代码汇总然后部署, 同一个Docker的配置可以在不同的环境环境中使用, 这样就降低了硬件要求和应用环境之间耦合度2、代码流水线管理代码从开发者的机器到最终在生产环境上的部署, 需要经过很多的中坚环境. 而每一个中间环境都有自己微小的差别,
摘要由CSDN通过智能技术生成

一、Docker使用场景

1.1、此处列举了Docker 的8个使用场景

1、简化配置

  • 虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台(软件, 系统), Docker在降低额外开销的情况下提供了同样的功能. 它能让你将运行环境和配置放在代码汇总然后部署, 同一个Docker的配置可以在不同的环境环境中使用, 这样就降低了硬件要求和应用环境之间耦合度

2、代码流水线管理

  • 代码从开发者的机器到最终在生产环境上的部署, 需要经过很多的中坚环境. 而每一个中间环境都有自己微小的差别, Docker给应用提供了一个从开发到上线均一致的环境, 让代码的流水线变得简单不少

3、提升开发效率

  • 不同环境中, 开发者的共同目标,想让开发环境尽量贴近生产环境,想快速搭建开发环境
  • 开发环境的机器通常内存比较小, 之前使用虚拟的时候, 我们经常需要为开发环境的机器加内存, 而现在Docker可以轻易的让几十个服务在Docker中跑起来

4、隔离应用

  • 开发时会在一个台机器上运行不同的应用,为了降低成本, 进行服务器整合,将一个整体式的应用拆分成低耦合的单个服务(微服务架构)

5、 整合服务器

  • Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本. 由于没有多个操作系统的内存占用,
    以及能在多个实例之间共享没有使用的内存, Docker可以比虚拟机提供更好的服务器整合解决方案

6、调式能力

  • Docker提供了很多的工具, 这些工具不一定只是针对容器, 但是却适用于容器. 他们提供了很多功能, 包括可以为容器设置检查点,设置版本, 查看两个容器之间的差别, 这些特性可以帮助调试Bug

7、多租户环境

  • 多租户环境的应用中, 它可以避免关键应用的重写.我们一个特别的关于这个场景的例子是为loT(物联网)的应用开发一个快速, 易用的多租户环境. 这种多租户的基本代码非常复杂, 很难处理, 重新规划以应用不但消耗时间, 也浪费金钱
  • 使用Docker, 可以为每一个租户的应用层的多个实例创建隔离的环境, 这不仅简单而且成本低廉, 因为Docker环境启动的速度快, diff命令很高效

8、 快速部署

  • Docker为进程创建一个容器, 不需要启动一个操作系统, 时间缩短为秒级别
  • 可以在数据中心创建销毁资源而无须担心重新启动带来的开销. 通常数据中心的资源利用率只有30% ,
    通过使用Docker并进行有效的资源分配可以提高资源的利用率

二、Docker 容器与虚拟机的区别

1、隔离与共享

  • 虚拟机通过添加Hypervisor(虚拟机监视器:用于虚拟化硬件)层,虚拟出网卡、内存、CPU等虚拟硬件,再在其上建立虚拟机,每个虚拟机都由自己的系统内核。
  • Docker容器则是通过隔离的方式,将文件系统、进程、设备、网络等资源进行隔离,再对权限、CPU资源等进行控制。最终让容器之间互不影响容器无法影响宿主机,容器与宿主机共享内核、文件系统、硬件等资源(此处就是隐患之一,可以使用cgroups资源控制来防范)

2、性能与损耗

  • 与虚拟机相比,容器资源损耗较小,同样的宿主机下,能够建立容器的数量要比虚拟机多(虚拟机受设定的内存空间限制),容器启动速度类似于应用,如:systemctl start firewalld,近似于毫秒级别。但是,虚拟机的安全性要比容器稍好。
  • 如果要从虚拟机共破到宿主机或者其他虚拟机,需要先攻破Hypervisor层,这是极其困难的
  • 而docker容器与宿主机共享内核、文件系统等资源,更有可能对其他容器产生影响

三、Docker 存在的安全问题

3.1、Docker 自身漏洞

  • 作为一款应用,Docker 本身实现上会有代码缺陷。CVE官方记录Docker历史版本共有超过20项漏洞
  • 黑客常用的攻击手段主要有代码执行、权限提升、信息泄露、权限绕过等。目前Docker版本更迭非常快,使用Docker 最好将其升级为最新版本

3.2、Docker 源码问题

Docker 提供了Docker hub,可以让用户上传创建的镜像,以便其他用户下载,快速搭建环境。同时也带来了一些安全问题。例如以下三种情况:

  • ① 黑客上传恶意镜像:如果有黑客再制作的镜像中植入木马、后门等恶意软件,那么环境从一开始就已经不安全了,后续更没有什么安全可言。
  • ② 镜像使用有漏洞的软件:Docker hub 上能下载的镜像里面,75%的镜像都安装了有漏洞的软件,所以在下载镜像后,需要检查其中软件的版本信息,对应的版本信息是否存在漏洞,并及时更新打上补丁
  • ③ 中间人攻击篡改镜像:镜像在传输过程中可能被篡改,目前版本的Docker已经提供了想要的校验机制来预防这个问题

3.3、Docker 架构缺陷与安全机制

Docker 本身的架构与机制就可能产生问题,例如这样一种攻击场景,黑客已经控制了宿主机上的一些容器,或者获得了通过在公有云上建立荣光其的方式,然后对宿主机或者其他容器发起攻击

1、容器之间的局域网攻击

  • 主机上的容器之间可以构成局域网,因此针对局域网的ARP欺骗、嗅探、广播风暴等攻击方式便可以用上

2、DDos 攻击耗尽资源

  • Cgroups安全机制就是要防止此类工具,不要为单一的容器分配过多的资源即可避免此类问题

3、有漏洞的系统调用

  • Docker与虚拟机的一个重要的区别就是Docker与宿主机共用一个操作系统内核。一旦宿主内核存在可以越权或者提权的漏洞,尽管Docker使用普通用户执行,在容器被侵入的时候,攻击者还可以利用内核漏洞作为跳板跳到宿主机做更多的事情。

4、共享root用户权限

  • 如果以root用户权限运行容器,容器内的root用户也就拥有了宿主机的root权限

3.4、Docker 安全基线标准

  • 此处将从内核、主机、网络、镜像、容器以及其他等6个方面总结Docker 安全基线标准

1、内核级别

  • ① 及时更新内核
  • ② User NameSpace (容器内的root权限在容器之外储于非高权限状态)
  • ③ Cgroups(对资源的配额和度量)
  • ④ Selinux/AppArmor/GRSEC(控制文件访问权限)
  • ⑤ Capability(权限划分)
  • ⑥ Seccomp(限定系统调用)
  • ⑦ 禁止将容器命名空间与宿主机进程命名空间共享

2、主机级别

  • ① 为容器创建独立分区
    • 不要和其他应用挂载在同一个分区,可以使用一块远程的存储空间(分布式文件系统)直接挂载使用
  • ② 仅允许必要的服务
  • ③ 禁止将宿主机上敏感目标映射到容器
  • ④ 对Docker 守护进程、相关文件和目录进行审计
  • ⑤ 设置适当的默认文件描述符数
    • 文件描述符:内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数
    • 打开现存文件或新建文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来指定待读写的文件
  • ⑥ 用户权限为root的Docker相关文件的访问权限应该设为644或者更低权限
  • ⑦ 周期性检查每个主机的容器清单,并清理不必要的容器

3、网络级别

  • ① 通过iptables 设定规则实现禁止或允许容器之间网络流量
  • ② 允许Docker修改iptables
  • ③ 禁止将Docker绑定到其他IP/Port 或者Unix Socket
  • ④ 禁止容器上映射特权端口
  • ⑤ 容器上之开放所需要的端口
  • ⑥ 禁止在容器上使用主机网络模式
  • ⑦ 若宿主机有多个网卡,将容器进入流量绑定到特定的主机网卡上

4、镜像级别

  • ① 创建本地镜像仓库服务器
  • ② 镜像中软件都为最新版本
  • ③ 使用可信镜像文件,并通过安全通道下载
  • ④ 重新构建镜像而非对容器和镜像打补丁
  • ⑤ 合理管理镜像标签,及时一处不再使用的镜像
  • ⑥ 使用镜像扫描
  • ⑦ 使用镜像前面

5、容器级别

  • ① 容器最小化,操作系统镜像最小集
  • ② 容器以单一主进程的方式允许
  • ③ 禁止privileged 标记使用特权容器
  • ④ 禁止在容器上运行ssh服务
  • ⑤ 以只读的方式挂载容器的根目录系统
  • ⑥ 明确定义属于容器的数据盘符
  • ⑦ 通过设置on-failure 限制容器尝试重启的次数,容器反复重启容易丢失数据
  • ⑧ 限制在容器中可用的进程数,以防止fork bomb (fork炸弹,迅速增长子进程,耗尽系统进程数量)

6、其他设置

  • ① 定期对宿主机系统及容器进行安全审计
  • ② 使用最少资源和最低权限运行容器
  • ③ 避免在统一宿主机上部署大量容器,维持在一个能够管理的数量
  • ④ 监控Docker 容器的使用,性能以及其他各项指标
  • ⑤ 增加实时威胁检测和事件响应功能
  • ⑥ 使用中心和远程日志收集服务

四、容器访问控制

  • 如果仅在容器中运行必要的服务,像SSH等服务是不能轻易开启去连接容器的,通常使用以下方式来进入容器
[root@server1 ~]# docker exec -it 容器ID bash

4.1、Docker remote api 访问控制

  • Docker 的远程调用API接口存在未授权访问漏洞,至少应限制外网访问,可以使用Socket 方式访问

1、准备两台centos 7虚拟机

主机名 操作系统 IP地址
docker-01 centos7 20.0.0.11
docker-02 centos7 20.0.0.12

2、实验目的

  • 使用 docker-02 访问 docker-01 的 docker 镜像和容器

3、实验环境

  • 防火墙关闭
systemctl stop firewalld
setenforce 0
  • docker未对外提供访问的端口,无法访问
netstat -natp | grep docker

4、实验步骤

  • ①docker-01修改配置文件,开启访问
[root@docker-01 ~]# vi /usr/lib/systemd/system/docker.service 
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://20.0.0.11:2375

在这里插入图片描述

# 以上配置项中,通讯文件使用的是unix的
# -H 指定监听地址为本地IP且对外提供的端口为2375
  • ②重新加载参数、重启docker
[root@docker-01 ~]# systemctl daemon-reload 
[root@docker-01 ~]# systemctl restart docker
[root@docker-01 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值