关于docker安全之Docker-TLS加密通讯问题

关于docker安全之Docker-TLS加密通讯问题,第1张

关于docker安全之Docker-TLS加密通讯问题

本文主要介绍docker的安全docker-TLS加密通信。这篇文章给你做了非常详细的介绍,对你的学习或者工作有一定的参考价值。有需要的朋友可以参考一下。

一、docker存在的安全问题

docker自身的漏洞

作为一个应用,Docker本身在实现时会有代码缺陷。CVE官方记录Docker版本历史有20多个漏洞。黑客常见的攻击手段主要有代码执行、权限提升、信息泄露、权限绕过等。目前Docker版本变化非常快,所以Docker用户最好将Docker升级到最新版本。

docker源代码问题

Docker提供了Dockerhub,允许用户上传创建的映像,以便其他用户下载并快速构建环境。但也带来了一些安全问题。
比如以下三种方式:
(1)黑客上传恶意图片。如果黑客在制作的镜像中植入木马、后门等恶意软件,那么环境从一开始就不安全,未来也没有什么安全可言。

(2)图像使用易受攻击的软件。在DockerHub上可下载的图片中,75%的图片安装了易受攻击的软件。所以下载完镜像后,需要检查里面软件的版本信息,对应的版本是否有漏洞,及时更新补丁。

(3)中间人攻击篡改镜像在传输过程中可能被篡改。目前新版本的Docker已经提供了相应的验证机制来防止这个问题。

二、docker架构缺陷与安全机制

Docker自身的架构和机制可能会造成问题,比如这样的攻击场景,黑客已经控制了主机上的一些容器,或者获得了在公有云上建立容器的方式,然后对主机或者其他容器发起攻击。

集装箱之间的局域网攻击

主机上的容器可以组成一个局域网,因此可以使用ARP欺骗、嗅探、广播风暴等针对局域网的攻击。因此,在主机上部署多个容器需要合理的网络配置和iptable规则。

DDoS攻击耗尽资源

Cgroups安全机制就是为了防止这种攻击,而这种问题可以通过不向单个容器分配太多资源来避免。

易受攻击的系统调用

Docker和虚拟机的一个重要区别是Docker与主机共享一个 *** 作系统内核。一旦主机内核存在可以超越权限或者提升权限的漏洞,虽然Docker是由普通用户执行的,但是当容器被入侵时,攻击者就可以利用内核漏洞跳转到主机上做更多的事情。

共享根权限

如果使用root权限运行容器,容器中的root用户将拥有主机的root权限。

三、docker容器与虚拟机的区别

隔离和共享

通过在虚拟机上增加Hypervisor层,虚拟硬件如网卡、内存、CPU等。,然后在上面建立虚拟机,每个虚拟机都有自己的系统内核。Docker容器通过隔离将文件系统、进程、设备、网络等资源隔离,进而控制权限、CPU资源等。最后,容器互不影响,容器也不能影响主机。容器与主机共享内核、文件系统、硬件和其他资源。

性能和损失

与虚拟机相比,容器资源消耗更少。在同一台主机下,可以构建的容器数量比虚拟机多。不过虚拟机的安全性比容器稍好。在从虚拟机突破到主机或其他虚拟机之前,突破Hypervisor层是极其困难的。Docker容器与主机共享内核、文件系统等资源,更容易影响其他容器和主机。

四、docker安全基线标准

下面从内核、主机、网络、镜像、容器、其他六个方面总结Docker安全基线标准。

内核级

(1)及时更新内核。
(2)用户命名空间(容器内的根权限在容器外处于非高权限状态)。
(3)Cgroups(资源的定额和计量)。
(4)seliux/armor/grsec(控制文件访问权限)。
(5)能力(权限划分)。
(6)Seccomp(合格的系统调用)。
(7)禁止将容器的命名空与宿主进程的命名空共用。

主机级别

(1)为容器创建独立的分区。
(2)仅运行必要的服务。
(3)禁止将主机上的敏感目录映射到容器。
(4)审计Docker守护进程,相关文件和目录。
(5)设置适当数量的默认文件描述符。

(文件描述符:内核使用文件描述符来访问文件。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核返回一个文件描述符。读写文件也需要使用文件描述符来指定要读写的文件)

(6)具有root用户权限的Docker相关文件的访问权限应为644或更低。
(7)定期检查每台主机的容器列表,清理不需要的容器。

网络级别

(1)通过iptables设置规则,禁止或允许容器之间的网络流量。
(2)允许Dokcer修改iptables。
(3)禁止将Docker绑定到其他IP/端口或Unix套接字。
(4)禁止在容器上映射特权端口。
(5)在容器上只打开所需的端口。
(6)禁止在容器上使用主机网络模式。
(7)如果主机有多个网卡,则将容器传入流量绑定到特定的主机网卡。

镜像级别

(1)创建本地镜像仓库服务器。
(2)镜像中的所有软件都是最新版本。
(3)使用可信的镜像文件,通过安全的渠道下载。
(4)重建镜像,而不是修补容器和镜像。
(5)合理管理镜像标签,及时移除不用的镜像。
(6)使用镜像扫描。
(7)使用镜像签名。

容器级别

(1)容器最小化, *** 作系统映像的最小集合。
(2)容器作为单个主进程运行。
(3)特权标志禁止使用特权容器。
(4)禁止在容器上运行ssh服务。
(5)以只读方式挂载容器的根系统。
(6)明确定义属于容器的数据驱动器盘符。
(7)通过设置on-failure来限制容器尝试重启的次数,在容器反复重启时很容易丢失数据。
(8)限制容器中可用的流程树,以防止forkbomb。

其他设置

(1)定期对主机系统和容器进行安全审计。
(2)用最少的资源和权限运行容器。
(3)避免在同一台主机上部署大量容器,保持在可管理的数量。
(4)监控Docker容器的使用情况、性能等指标。
(5)增加实时威胁检测和事件响应功能。
(6)使用中央和远程日志收集服务

Docker-TLS加密通信

为了防止Docker通信因链接劫持和会话劫持而被中间人攻击,c/s两端都要进行加密通信。

创建一个文件夹并修改主机名(供以后使用)

[root@server1~]#mkdir/tls [root@server1~]#cd/tls [root@server1tls]#hostnamectlset-hostnamemaster [root@server1tls]#bash [root@mastertls]#

添加客户端:

[root@client~]#vim/etc/hosts

创建ca密钥并设置密钥密码。

[root@mastertls]#opensslgenrsa-aes256-outca-key.pem4096 GeneratingRSAprivatekey,4096bitlongmodulus ...........................................++ ...................................................................................................................................................................++ eis65537(0x10001) Enterpassphraseforca-key.pem: Verifying-Enterpassphraseforca-key.pem:

创建ca证书

[root@mastertls]#opensslreq-new-x509-days1000-keyca-key.pem-sha256-subj"/CN=liuwei"-outca.pem Enterpassphraseforca-key.pem:###输入密码

创建服务器私钥

[root@mastertls]#opensslgenrsa-outserver-key.pem4096 GeneratingRSAprivatekey,4096bitlongmodulus ...............................++ ................................++ eis65537(0x10001)

签名私钥

[root@mastertls]#opensslreq-subj"/CN=lw"-sha256-new-keyserver-key.pem-outserver.csr

用ca证书和私钥证书签名,输入123456

[root@mastertls]#opensslx509-req-days1000-sha256-inserver.csr-CAca.pem-CAkeyca-key.pem-CAcreateserial-outserver-cert.pem Signatureok subject=/CN=lw GettingCAPrivateKey Enterpassphraseforca-key.pem:

生成客户端密钥

[root@mastertls]#opensslgenrsa-outkey.pem4096

签名客户

[root@mastertls]#opensslreq-subj"/CN=client"-new-keykey.pem-outclient.csr

创建配置文件

echoextendedKeyUsage=clientAuth>extfile.cnf

签名证书,输入123456,必填(签名客户端、ca证书、ca密钥)

[root@mastertls]#opensslx509-req-days1000-sha256-inclient.csr-CAca.pem-CAkeyca-key.pem-CAcreateserial-outcert.pem-extfileextfile.cnf Signatureok subject=/CN=client GettingCAPrivateKey Enterpassphraseforca-key.pem:

修改docker的配置文件并重新启动服务。

ExecStart=/usr/bin/dockerd--tlsverify--tlscacert=/tls/ca.pem--tlscert=/tls/server-cert.pem--tlskey=/tls/server-key.pem-Htcp://0.0.0.0:2388-Hunix:///var/run/docker.sock

重启docker

[root@mastertls]#systemctldaemon-reload [root@mastertls]#systemctlrestartdocker

将三个文件/TLS/ca.PEM/TLS/cert.PEM/TLS/key.PEM复制到客户端。

[root@mastertls]#[email protected]:/etc/docker

[root@mastertls]#[email protected]:/etc/docker

[root@mastertls]#[email protected]:/etc/docker

验证tls时,需要使用私钥设置的id,所以上面的主机名都要改成lw。

本地验证

[root@lwtls]#docker--tlsverify--tlscacert=ca.pem--tlscert=cert.pem--tlskey=key.pem-Htcp://lw:2388version

下载NGINX图像

[root@lwtls]#dockerpullnginx

部署客户端环境并验证TLS

输入目录/etc/docker。

在客户端检查docker版本。

[root@clientdocker]#docker--tlsverify--tlscacert=ca.pem--tlscert=cert.pem--tlskey=key.pem-Htcp://lw:2388version

部署环境,验证tls

在客户端检查图像。

[root@clientdocker]#docker--tlsverify--tlscacert=ca.pem--tlscert=cert.pem--tlskey=key.pem-Htcp://lw:2388images

关于docker-TLS与Dockersecurity加密通信的这篇文章到此为止。有关dockerTLS加密通信的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/774041.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存