Docker安全管理和HTTPS协议

Docker安全管理和HTTPS协议目录
Docker 安全及日志管理
1. Docker 容器与虚拟机的区别 
1.1 隔离与共享
1.2  性能与损耗
2. Docker 存在的安全问题
2.1 Docker 自身漏洞
2

目录

Docker 安全和日志管理

1. Docker容器与虚拟机的区别

1.1 分离与共享

1.2 绩效与损失

2.Docker安全问题

2.1 Docker本身的漏洞

2.2 Docker源码问题

3. Docker架构缺陷及安全机制

3.1 容器间的LAN攻击

3.2 DDoS攻击耗尽资源

3.2 易受攻击的系统调用

3.3 共享root用户权限

4.Docker安全基线标准

4.1 内核层

4.2 主机级别

4.3 网络层

4.4 镜像级别

4.5 容器级别

4.6 其他设置

5.HTTPS协议

5.1 https 的工作原理

5.2 https的单向认证处理

5.3 https双向认证流程

6.HTTPS证书认证

6.1 使用openssl创建证书的步骤

6.2 配置nginx支持https

Docker 安全及日志管理

容器安全问题的根本原因是容器和主机共享内核。如果容器内的应用程序导致Linux 内核崩溃,则整个系统可能会崩溃。与虚拟机不同,虚拟机不与主机共享内核。通常,虚拟机崩溃不会导致主机崩溃。

1. Docker 容器与虚拟机的区别

1.1 隔离与共享

通过在虚拟机中添加Hypervisor层(虚拟化中间层),将网卡、内存、CPU等虚拟硬件虚拟化,虚拟机在其之上构建自己的系统内核。

另一方面,Docker容器使用命名空间隔离来隔离文件系统、进程、设备、网络和其他资源,以便它们可以被访问,从而容器之间不会交互或影响彼此的权限、CPU资源的控制。 和更多。主人。

容器和主机共享内核、文件系统和硬件等资源。

1.2 性能与损耗

与虚拟机相比,容器消耗的资源更少。您可以在同一主机下创建比虚拟机更多的容器。

不过,虚拟机安全性略好于容器安全性。为了从虚拟机危害主机或其他虚拟机,攻击者必须首先渗透虚拟机管理程序层,这是极其困难的。

Docker容器与主机共享内核、文件系统等资源,因此更容易影响其他容器和主机。

Docker容器虚拟机之间的区别

启动速度快,几秒慢,几分钟

执行性能接近本机(直接在内核中运行)和在虚拟机管理程序上运行,但损失约50%。

磁盘占用空间很小,几十KB(取决于镜像层),很大,可达GB

并发性:您可以在单个主机上启动数百或数千个容器以及最多数十个虚拟机。

分离过程级系统级(更彻底)

操作系统主要支持Linux 几乎所有

封装级别:仅封装项目代码和依赖项,共享主机内核和完整操作系统,与主机隔离。

2. Docker 存在的安全问题

2.1 Docker 自身漏洞

作为一个应用程序,Docker 自己的实现存在代码缺陷。 CVE 官方记录在Docker 官方网站上可以找到Docker 过去版本中的20 多个漏洞。

黑客常用的攻击技术包括代码执行、权限提升、信息泄露和权限绕过。目前,Docker版本变化非常快,因此Docker用户可以将Docker升级到最新版本。

2.2 Docker 源码问题

Docker提供了Docker Hub,您可以在其中上传您的镜像并让其他人下载以快速构建环境。但它也带来了安全问题。

例如有以下三种方法。

(1)黑客上传恶意图片

如果黑客在创建的镜像中嵌入了特洛伊木马、后门或其他恶意软件,那么环境从一开始就不安全,将来也根本不安全。

(2) 镜像使用有漏洞的软件

DockerHub 上可供下载的镜像中有75% 都安装了易受攻击的软件。因此,下载镜像后,应检查内部软件版本信息,检查对应版本是否存在漏洞,并及时更新和修补。

(3) 改变图像的中间人攻击

图像在传输过程中可能会被篡改。目前新版本的Docker提供了相应的验证机制来防止这个问题。

3. Docker 架构缺陷与安全机制

例如,Docker 的架构和机制本身就会引起问题。在攻击场景中,黑客可以控制主机上的某些容器,在公共云上建立容器,获取容器的访问权限,然后对容器发起攻击。攻击主机或其他容器。

3.1 容器之间的局域网攻击

主机上的容器可以组成一个局域网,因此可以在局域网上进行ARP欺骗、端口扫描、广播风暴等攻击。

因此,在主机上部署多个容器需要适当的网络安全配置,例如设置iptables 规则。

3.2 DDoS 攻击耗尽资源

Cgroups 安全机制旨在防止此类攻击,并通过不向单个容器分配太多资源来帮助避免此类问题。

3.2 有漏洞的系统调用

Docker 和虚拟机之间的主要区别在于Docker 和主机共享相同的操作系统内核。

如果主机内核中存在允许过多或提升权限的漏洞,即使Docker 以普通用户身份运行,如果容器遭到入侵,攻击者也可以利用该内核漏洞来获取对主机的访问权限。并执行附加操作。事物。

3.3 共享root用户权限

当您以root 用户权限运行容器时(docker run –privileged),容器内的root 用户也拥有主机上的root 权限。

4. Docker 安全基线标准

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

4.1 内核级别

(1)及时更新内核。

(2) 用户命名空间(容器内的root 权限在容器外处于非提升状态)。

(3) 设置Cgroup(资源配额和计量)、CPU、内存、磁盘IO等资源限制。

(4)启用SELinux(文件权限控制)以适当加固系统并增加安全性。

(5)给容器分配指定CPU(权限划分)等功能。

(6)Seccomp(系统调用限制),限制不必要的系统调用。

(7) 禁止与宿主进程的命名空间共享容器的命名空间,例如在宿主网络模式下。

4.2 主机级别

(1)为容器创建一个独立的分区,比如在分布式文件系统上。

(2) 仅运行您需要的服务,避免在容器内运行ssh 服务。

(3) 禁止将主机上的敏感目录映射到容器。使用-v 创建数据卷时要小心。

(4)审计Docker daemon进程、相关文件、目录,防止病毒、木马文件的产生。

(5)适当设置文件描述符的默认数量。

(6) root用户权限对Docker相关文件的访问权限必须在644以下。

(7)定期检查各主机上的容器列表,清理不需要的容器。

4.3 网络级别

(1)使用iptables设置规则来阻止或允许容器之间的网络流量。

(2)允许Docker修改iptables。

(3) 禁止将Docker 绑定到任何其他使用的IP/端口或Unix 套接字。

(4) 禁止将特权端口映射到容器。

(五)只对集装箱开放必要的口岸。

(6) 禁止在容器上使用主机网络模式。

(7) 如果主机有多个网卡,则将容器的传入流量绑定到特定的主机网卡。

docker 网络创建–subnet=172.18.0.0/16 –opt \’com.docker.network.bridge.name\’=\’docker1\’mynetwork

docker run -itd –net mynetwork –ip 172.18.0.100 centos:7 /bin/bash

iptables -t nat -A POSTROUTING -s 172.18.0.100 -o ens36 -j SNAT –to-source 192.168.80.10

4.4 镜像级别

(1) 创建本地私有镜像仓库服务器。

(2)镜像中的软件是最新版本。为了业务稳定性,建议使用对应版本。

(3) 使用可信镜像文件并通过安全渠道下载。

(4) 重建镜像而不是给容器和镜像打补丁,销毁并重建不健康的容器。

(5)请妥善管理图片标签,及时删除不再使用的图片。

(6)采用镜像扫描。

(7) 使用图像签名。

4.5 容器级别

(1)最小化容器,最小化操作系统镜像集。

(2) 容器作为单个主进程运行。

(3) 禁用–privileged 标志以使用特权容器。

(4) 禁止通过在容器上运行ssh服务进入容器。

(5)以只读方式挂载容器根目录系统(-v主机目录:容器目录:ro)。

(6) 明确定义属于容器的数据的驱动器盘符。

(7)设置on-failure来限制容器重启尝试的次数(–restart=on-failure:3)。

(8) 使用docker run -m 限制容器中可用的进程数量并限制内存使用,以防止forkbomb。 (fork炸弹,快速增长的子进程,耗尽系统进程数量).(){.|.};

4.6 其他设置

(1)定期对主机系统和容器进行安全审计。

(2)以最少的资源和权限运行容器这是Docker容器安全的核心思想。

(3)避免在同一主机上部署大量容器并保持数量可控。

(4) 监控zabbix等Docker容器的使用情况、性能和其他指标。

(5)添加zabbix等实时威胁检测和事件报警支持功能。

(6)使用ELK等中央和远程日志收集服务;

安全是一项非常专业的技术,所以我们在这里不详细讨论它。请直接参考Docker的官方文档(https://docs.docker.com/engine/security/)。

5.HTTPS协议

5.1 https工作原理

5.2 https的单向认证流程

0) 服务器预先通过CA颁发服务器证书和私钥文件。

1)客户端向服务器发送https请求

2)服务器首先将服务器证书返回给客户端,包括公钥、证书有效期、CA组织信息等。

3) 客户端收到服务器证书后,首先使用本地CA证书验证证书的有效性。如果证书无效,请继续执行下一步。

4) 客户端继续向服务器发送自己能够支持的对称加密方案。

5) 服务器选择加密程度最高的加密方案并以明文形式发送给客户端。

6) 客户端使用选择的加密方案生成随机会话密钥,使用服务器证书的公钥加密会话密钥,并将其发送到服务器。

7) 服务器使用自己的私钥解密并检索客户端发送的会话密钥,并使用该会话密钥加密返回给客户端的https响应消息。

8) 客户端还使用会话密钥解密返回的加密数据并检索https 响应消息。然后双方继续使用该会话密钥进行密文通信,直至会话结束。

5.3 https的双向认证流程

0) 服务器和客户端都事先通过CA颁发证书和私钥文件。

1)客户端向服务器发送https请求

2)服务器首先将服务器证书返回给客户端,包括公钥、证书有效期、CA组织信息等。

3) 客户端收到服务器证书后,首先使用本地CA证书验证证书的有效性。如果证书无效,请继续执行下一步。

4) 客户端继续向服务器发送包含公钥及其可以支持的任何对称加密方案的客户端证书。

5) 服务器收到客户端证书后,首先验证证书的有效性,验证通过后,选择加密强度最高的加密方案,并使用客户端证书的公钥进行加密发送。将其交给客户。

6) 客户端使用私钥解密并检索所选的加密方案,使用所选的加密方案生成随机会话密钥,并使用服务器证书的公钥解密该会话密钥并将其发送到服务器证书。服务器。

7) 服务器使用自己的私钥解密并检索客户端发送的会话密钥,并使用该会话密钥加密返回给客户端的https响应消息。

8) 客户端还使用会话密钥解密返回的加密数据并检索https 响应消息。然后双方继续使用该会话密钥进行密文通信,直至会话结束。

6. HTTPS 证书认证

1) 从Let\’s Encrypt、DigiCert 或云服务提供商等证书颁发机构(CA) 购买或申请免费证书(免费证书的有效期通常为一年或更短)。

2)本地使用openssl、mkcert、cfssl等工具生成自签名证书

6.1openssl创建证书的步骤

证书文件和私钥文件

1)创建CA私钥和证书

openssl genrsa -out ca.key 2048 #创建CA私钥文件(通常为.crt或.pem扩展名)

openssl req -new -x509 -days 3650 -key ca.key -out ca.pem #根据CA私钥创建CA证书文件(通常为.key扩展名)

2)创建服务器端证书的自签名请求文件

openssl genrsa -out server.key 2048 #创建服务器私钥文件

openssl req -new -keyserver.key -outserver.csr #根据服务器私钥创建服务器证书的自签名请求文件

3)创建服务器证书

openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem #根据CA私钥、CA证书、自签名服务器证书对服务器证书文件进行签名请求文件

6.2 配置nginx支持https

1)安装时需要添加–with-http_ssl_module模块(启用SSL功能)

2) 修改配置文件并添加SSL设置。

服务器{

Listen 443 ssl #设置SSL访问端口为443。

server_name www.xy101.com #设置绑定证书的域名。

ssl_certificate /etc/nginx/ssl/server.pem; #设置服务器证书文件的路径。

ssl_certificate_key /etc/nginx/ssl/server.key #设置服务器私钥文件的路径。

#其他SSL配置参数

ssl_session_cacheshared:SSL:1m; #设置SSL缓存

ssl_session_timeout 5m; #设置客户端连接可重用SSL缓存的过期时间。

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 #设置支持的SSL协议版本。

ssl_ciphers ECDH:AESGCM:HIGH:RC4:DH:MD5:aNULL:eNULL #设置支持的密码套件

ssl_prefer_server_ciphers on; 设置最初使用的服务器端密码套件。

.

}

以上关于#Docker安全管理和HTTPS协议的相关内容摘自互联网,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93870.html

Like (0)
CSDN的头像CSDN
Previous 2024年7月26日
Next 2024年7月26日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注