墨者防御联盟-提供超强DDoS高防/CC防护/大流量清洗服务!
当前位置:主页 > WEB安全 > 正文

【极思】Docker 研究和实践

07-22 WEB安全

 研究Docker的架构并实践应用,为容器安全研究打个好基础。今天发原理和怎么用,改日发容器安全咨询题和解决思路。

一、背景   二、作用   三、架构  四、实践


一、背景
一)容器技术的过去近二十年随着虚拟化和容器技术的快速进展,现代IT基础架构基本被它完全改变。虚拟机技术(VM)历史能够追溯到1960年代,在之后的几十年中,VM被广泛使用和开辟。虚拟机有多种用途,比如一台硬件机器上安装多个操作系统,使一台硬件承载多种系统的应用成为大概,并且硬件资源的利用率可以提升到更高水平。1、chroot - 程序隔离chroot 于1979年左右浮上,CC防御,它经过经过让程序在虚拟沙箱中运行,大大增强了系统的安全性。一具运行在那个环境下,经由chroot设置根名目的程序,它不可以对那个指定根名目之外的文件举行访咨询动作,不能读取,也不能更改它的内容。利用沙箱内的应用漏洞时,外部隔离的环境不大概受到阻碍。也为容器进程隔离技术打下了基础。2、Cgroups 进程隔离2006年Google的工程师公布了Cgroups,最早的名称为进程容器。其名称源自操纵组群的简写,是Linux内核的一具功能,用来限制、操纵与分离一具进程组的资源。它进一步操纵进程之间的关系,并限制了用户对特定活动和内存量的访咨询。3、Namespace 资源统一组织2008年左右浮上了namespace的概念,它提供容器网络安全性的基础-将用户或组的活动躲藏起来。经过将逻辑上相关的标识符组织成相应的名字空间,可使整个系统更加 模块化。和编程语言的命名空间同理,是一种有效和可见范围标识,例如全局变量、局部变量。在此基础上浮上了Linux容器技术(LXC)。4、Docker  集多种能力于一身

Docker于2013年咨询世,它是基于Namespace、Cgroups、chroot等技术实现的新一代容器。凭借易用使用的GUI、环境隔离、易于打包(开辟/测试),以及配置和运行容器技术的能力(运维),在首次测试公布1个月内,吸引了10,000名开辟/测试/运维人员。到2014年1.0版本发行时已被下载275万次,之后的一年之内超过了1亿次。

由于Docker能够让多个应用程序在同一系统内核上运行,相关于虚拟机技术能够节约大量的硬件资源。创建、部署、运行速度也更快,同时治理所需的开销更少。这些特性能够让企业节约大量的成本,在企业中受到大力推广。随着容器技术的大量应用,共享内核的安全性、数据存储持久性、容器治理的开销过大等咨询题成为了要紧当下矛盾。Kubernetes 应运而生。

5、Kubernetes  容器编排技术2017年左右容器技术迅猛进展,Rancher、AWS、Docker 等公司均开始支持 Kubernetes 容器调度程序和编排工具,Kubernetes 成为容器编排技术领导者。直至今日,容器和容器编排技术又有了特别大的进步,但整体没有突破性的创新。二)容器技术的如今和今后随着容器技术的大量应用,基本成为国内外企业必不可少的基础设施。人红是非多,技术也一样。容器技术的进展也引来了特别多黑灰产业攻击者,对容器技术中存在的咨询题、漏洞举行研究利用。随之浮上各种攻击案例,安全咨询题也越来越多的被关注,成为要紧矛盾。下面有请容器安全研究团队闪亮登场。

Gartner 公布 2020 年容器公有云格局报告,阿里云、AWS、Google、微软、IBM、Oracle境外已入局,竞争激烈。Gartner 预测2023年,70%的组织将在生产中运行三个或更多容器化应用程序。>>> Gartner
----  进展进程图太长了,需要能够找我要。----

二、作用(解决啥咨询题)一)快速一致地交付应用程序

场景如下:

开辟人员在本地编写代码,使用Docker容器与同事共享开辟环境。

使用Docker将其应用程序推送到测试环境中,并执行自动和手动测试。

开辟发觉和修复bug,在开辟环境中处理即可,接着推送image到测试环境。

测试完成后,生产环境的公布直截了当推映像即可,很简单。

二)响应式部署和扩展基于容器的平台有高度可移植性。Docker容器能够在开辟人员的本地笔记本上,数据中心内的物理或虚拟机上,云提供商或混合环境中运行。
Docker的可移植性和轻量级的特性,能够动态按业务需求实时扩容或清理应用程序和服务。三)在同一硬件上运行更多工作负载

计算资源的高利用率,向来是IDC建设运营的重要目标之一。容器的高灵便性,能够比虚拟机更有效的达成这一目标。更的高利用率,替代无限制的硬件扩容。等同于有更多的计算能力来实现业务目标。容器很适合于高密度环境以及中小型部署,用更少的资源做更多的情况。

三、Docker 架构一)Docker C/S架构

Docker 客户端与Docker 守护进程举行交互,由守护进程完成构建、运行、分发Docker容器。Docker客户端和守护程序支持本地(UNIX套接字)、分布式(REST API)部署。

【极思】Docker 研究和实践

二)Docker EngineDocker Engine 要紧组件

服务端是向来持续运行,DDoS防护,称为守护程序进程。

REST API,其它程序与守护程序通信的接口。

命令行界面(CLI)是操作服务端的命令行接口。

【极思】Docker 研究和实践


1、Docker daemon :Docker daemon (dockerd)侦听Docker API请求并治理Docker对象。2、Docker  clientDocker客户端(docker)是很多Docker用户与Docker交互的要紧方式。3、Docker registriesDocker registries 存储Docker映像。默认registries 为 Docker Hub ,能够修改指向国内 registries 。4、Docker 对象image 是一具docker容器指令的只读模板。CONTAINERS是image的可运行实例。三)底层技术Docker用 Go Lang 编写,并利用Linux内核的多个功能来交付其功能。使用 namespaces  提供容器的隔离工作区的技术。pid 命名空间用于进程间隔离,net 命名空间用于网络隔离,DDoS防护,ipc 命名空间用于举行间通信隔离,mnt 命名空间用于文件挂载点隔离,uts 命名空间用于内核版本隔离。使用 cgroups 技术将应用程序限制为一组特定的资源。操纵硬件资源 共享给容器。如内存大小。使用UnionFS技术操作文件系统,包括AUFS,btrfs,vfs和DeviceMapper。最终Docker Engine将namespaces、cgroups、UnionFS组合到称为Container format 的包装器中。四、Docker 实践一)Docker 基础应用1、Docker client command

常用docker 命令,一般学习够用了。

docker run -t -i <image> 用镜像创建一具容器
docker pull image 拉拽镜像
docker images 查看可用镜像
docker ps 查看运行的容器
docker ps -a 查看所有的容器
docker stop <container id> 停止该容器
docker start <container id> 开始该容器
docker attach <container id>与该容器交互
docker commit <container id> <new id>创建新的镜像
docker rm <container id>删除容器
docker rmi <image name>删除镜像
docker cp <containerId>:/file/path/within/container /host/path/target 从Docker容器内拷贝文件到主机上1)docker run

使用image 启动一具容器。
—rm 退出时删除容器,
-it 返回交互式shell接口,
-d  后台运行 必须有一具前台进程(比如运行top,tail),否则会自动退出。
-p 映射容器内部商品到8080。
—name myserver  容器名称 方便后期操作
-p 80:80  主机端口映射到容器服务端口
-it  返回命令行接口。

docker run --rm -it -d -p 8080:8118 privoxy2)docker build

dockerfile 每一条命令都在一具新容器运行。环境变量不能继承。-f  指定 dockerfile 路径。

docker build https://github.com/Mr-ycx/docker.git#:test -t nginx:v1.3
docker build :5000/docker.tar -t nginx:v1.4
docker build -< DockerInfo -t nginx:v1.6
cat DockerInfo | docker build - -t nginx:v1.7
docker build - < docker.tar -t nginx:v1.83)docker psctr + p + q # 退出保持容器运行,exit 会退出运行。docker ps -a # 返回所有容器列表
docker ps -aq # 返回所有容器ID
docker stop $(docker ps -aq) # 停止所有容器7
docker rm $(docker ps -aq) # 删除所有容器4)docker attach# 进入容器命令行
docker attach proxy5)docker commit

容器生成镜像

docker commit proxy whoamsven/proxy二)测试环境搭建1、mac 安装 docker

注册docker 账号 (略)

下载安装文件 windows install mac install  (略)

2、ubuntu 安装 docker

https://docs.docker.com/install/linux/docker-ce/ubuntu/  # install

https://blog.csdn.net/dylloveyou/article/details/78412211 # proxy

3、proxy setting要紧缘由是国内拉image 时太慢,尽可能设置。也能够设置国内仓库。sudo mkdir /etc/systemd/system/docker.service.d/
sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
...
sudo systemctl daemon-reload && sudo systemctl restart docker[Service]
Environment="HTTP_PROXY=socks5://127.0.0.1:1080"Environment="HTTPS_PROXY=socks5://127.0.0.1:1080"Environment="NO_PROXY=localhost,127.0.0.1"docker info | grep 1080
sudo usermod -a -G docker $USER # reboot三)DockerfileDocker 命令的批处理文件,例如 docker build -t name:tag . ,使用特别方便。仅仅简单尝试了一下。1、example# 基于的镜像
FROM debian:9
# 维护者
MAINTAINER whoami
# 环境变量
ENV http_proxy=http://10.8.7.110:10800
ENV https_proxy=http://10.8.7.110:10800
# 添加本地文件至容器
COPY -chown=root:root . /root/
# 容器中运行命令
RUN apt update && apt install -y privoxy sed vim net-tools apt-utils
RUN sed -i ’s/127.0.0.1/0.0.0.0/‘ /etc/privoxy/config
RUN sed -i ’s/listen-address \[::1\]:8118/# listen-address \[::1\]:8118/‘ /etc/privoxy/config
# /bin/bash 防止容器自动退出
RUN echo “/etc/init.d/privoxy start && /bin/bash”>/root/start.sh && chmod 755 /root/start.sh
# 开放的端口
EXPOSE 8118
# 启动后执行的命令 防止容器自动退出
CMD [“/bin/bash”,”/root/start.sh”]
# 添加本地文件至docker中 并更改权限
ADD --chown=root:root ./1 /root/df1
# 启动后命令 仅一条
ENTRYPOINT [“/etc/init.d/privoxy”,”restart”]
# 工作名目
WORKDIR /root
# 需要保存的数据 存储点
VOLUME [“/data”]
# 用户
USER whoami四)docker composeCompose是用于定义和运行多容器Docker应用程序的工具。经过Compose,您能够使用YAML文件来配置应用程序的服务。接着,使用一具命令,就能够从配置中创建并启动所有服务。Compose可在所有环境中工作:生产,登台,开辟,测试以及CI工作流。1、使用 Compose 三步过程

使用定义您的应用环境,Dockerfile以便能够在任何地点复制。

定义组成应用程序的服务,docker-compose.yml 以便它们能够在隔离的环境中一起运行。

Run docker-compose up and Compose 启动并运行您的整个应用程序。文件样例如下,直截了当在文件名目中docker-compose up -d即可。停用时docker-compose down,使用超级方便。

version: '2.0'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}

今天研究实践,改日发容器安全。

【极思】Docker 研究和实践

《安全攻防研究和实践》

成员300+仅能邀请加入  加群请后台留言


# 近期预告

【安全】DevSecOps 设计和实践(近期推出)

【极思】自生长思维架构:伟人与一般人、大牛与小白他们之间的差别是啥?

【企业安全建设】数据安全方案考虑与设计【2/2】

版权保护: 本文由 主页 原创,转载请保留链接: http://www.heikesz.comhttp://www.heikesz.com/web/87958.html


QQ客服

400-0797-119