首页 > 其他分享 >DOCKER安全及日志管理

DOCKER安全及日志管理

时间:2024-02-01 09:11:22浏览次数:26  
标签:容器 ssl 证书 宿主机 安全 DOCKER 日志 服务端 客户端

DOCKER安全及日志管理

容器的安全性问题的根源在于容器和宿主机共享内核。如果容器里的应用导致Linux内核崩溃,那么整个系统可能都会崩溃。与虚拟机是不同的,虚拟机并没有与主机共享内核,虚拟机崩溃一般不会导致宿主机崩溃。

 

Docker 架构缺陷与安全机制

1. 容器之间的局域网攻击 
主机上的容器之间可以构成局域网,因此针对局域网的ARP欺骗、端口扫描、广播风暴等攻击方式便可以用上。
所以,在一个主机上部署多个容器需要合理的配置网络安全,比如设置 iptables 规则。

2. DDoS 攻击耗尽资源 
Cgroups 安全机制就是要防止此类攻击的,不要为单一的容器分配过多的资源即可避免此类问题。

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

4. 共享root用户权限
如果以 root 用户权限运行容器(docker run --privileged),容器内的 root 用户也就拥有了宿主机的root权限。

 

Docker 安全基线标准

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

1. 内核级别 
(1)及时更新内核。 
(2)User NameSpace(容器内的 root 权限在容器之外处于非高权限状态)。 
(3)Cgroups(对资源的配额和度量),设置CPU、内存、磁盘 IO等资源限制。 
(4)通过启用 SELinux(控制文件访问权限)适当的强化系统来增加额外的安全性。 
(5)Capability(权限划分),比如划分指定的CPU给容器。 
(6)Seccomp(限定系统调用),限制不必要的系统调用。 
(7)禁止将容器的命名空间与宿主机进程命名空间共享,比如 host 网络模式。

2. 主机级别 
(1)为容器创建独立分区,比如创建在分布式文件系统上。 
(2)仅运行必要的服务,注意尽量避免在容器中运行 ssh 服务 。 
(3)禁止将宿主机上敏感目录映射到容器,-v创建数据卷时需要注意。 
(4)对 Docker 守护进程、相关文件和目录进行审计,防止有病毒或木马文件生成。 
(5)设置适当的默认文件描述符数。
(6)用户权限为 root 的 Docker 相关文件的访问权限应该为 644 或者更低权限。 
(7)周期性检查每个主机的容器清单,并清理不必要的容器。

3. 网络级别 
(1)通过 iptables 设定规则实现禁止或允许容器之间网络流量。 
(2)允许 Docker 修改 iptables。 
(3)禁止将 Docker 绑定到其他已使用的 IP/Port 或者 Unix Socket。 
(4)禁止在容器上映射特权端口。 
(5)容器上只开放所需要的端口。 
(6)禁止在容器上使用 host 网络模式。
(7)若宿主机有多个网卡,将容器进入流量绑定到特定的主机网卡上。
docker network create --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.19.26
4. 镜像级别 
(1)创建本地私有镜像仓库服务器。 
(2)镜像中软件都为最新版本,建议根据实际情况使用对应版本,业务稳定优先。
(3)使用可信镜像文件,并通过安全通道下载。
(4)重新构建镜像而非对容器和镜像打补丁,销毁异常容器重新构建。 
(5)合理管理镜像标签,及时移除不再使用的镜像。 
(6)使用镜像扫描。 
(7)使用镜像签名。

5. 容器级别 
(1)容器最小化,操作系统镜像最小集。 
(2)容器以单一主进程的方式运行。 
(3)禁止 --privileged 标记使用特权容器。 
(4)禁止在容器上运行 ssh 服务,尽量使用 docker exec 进入容器。 
(5)以只读的方式挂载容器的根目录系统,-v 宿主机目录:容器目录:ro。 
(6)明确定义属于容器的数据盘符。
(7)通过设置 on-failure 限制容器尝试重启的次数,容器反复重启容易丢失数据,--restart=on-failure:3。 
(8)限制在容器中可用的进程数,docker run -m 限制内存的使用,以防止 fork 炸弹。 (fork炸弹,迅速增长子进程,耗尽系统进程数量).(){.|.&};.

6. 其他设置 
(1)定期对宿主机系统及容器进行安全审计。 
(2)使用最少资源和最低权限运行容器,此为 Docker 容器安全的核心思想。 
(3)避免在同一宿主机上部署大量容器,维持在一个能够管理的数量。 
(4)监控 Docker 容器的使用,性能以及其他各项指标,比如 zabbix。 
(5)增加实时威胁检测和事件报警响应功能,比如 zabbix。 
(6)使用中心和远程日志收集服务,比如 ELK 。

由于安全属于非常具体的技术,这里不再赘述,可直接参阅 Docker 官方文档,https://docs.docker.com/engine/security/

 

HTTP与HTTPS

http  超文本传输协议   tcp/80  铭文传输
https  安全的超文本传输协议  tcp/443  密文传输  证书加密(ssl/tls加密)的方式



#HTTPS 单向认证流程   
0)服务端会事先通过CA签发服务端证书和私钥文件
1)客户端发送https请求到服务端的443端口
2)服务端会先返回一个包含公钥、证书有效期、CA机构等信息的证书给客户端
3)客户端收到服务端发来的证书后,会先用本地的CA证书验证服务单证书的有效性,如果证书有效,则会在客户端本地随机生成一个会话密钥(对称密钥),并通过证书中的公钥进行加密,再发送给服务端,无效则告警
4)服务端会用私钥进行解密获取客户端发来的随机会话密钥,并使用这个会话密钥加密返回的报文,再发送给客户端
5)客户端也是有这个会话密钥获取服务端返回的数据,最后双方可继续通过这个会话密钥进行加密和解密来实现密文通信


#https的双向认证流程
0)服务端和客户端会事先通过CA签发服务单证书和私钥文件
1)客户端会发送https请求到服务端的443端口
2)服务端会先返回一个包含公钥、证书有效期、CA机构等信息的证书给客户端
3)客户端收到服务端发来的证书后,会先用本地的CA证书验证服务端证书的有效性,如果证书有效,再将包含公钥的客户端证书发送给服务端
4)服务端会选择加密证书后也会校验证书的有效性,如果校验通过,客户端发送自己可支持的加密方法给服务端
5)服务单会选择加密程度高的方案,并通过客户端证书里的公钥加密后发送给客户端
6)客户端使用私钥解密获取选择的加密方案,并使用此加密方案生成随机会话密钥,再通过服务端证书中的公钥进行加密,再发送给服务端
7)服务单会用私钥进行解密获取客户端发来的随机会话密钥,并使用这个会话密钥加密要返回的报文,再发送给客户端
8)客户端也是这个会话密钥进行解密获取服务端返回的数据,之后双方会继续这个会话密钥进行加密和解密来实现密文通信






#如何获取证书?
1)在阿里云、华为云、腾讯云等云服务商哪里申请一年有效的免费证书或者购买证书
2)在本地使用 poenssl、mkcert、cfssl、cerbot(Let’s Encrypt)工具生成本地私钥证书

 

#nginx 支持https
1)编译安装时需要添加 --with-http_ssl_module 模块
2)修改配置文件,添加ssl配置

http {
server {
listen 443 ssl; #SSL 访问端口号为 443
server_name 域名; # 填写绑定证书的域名
ssl_certificate /usr/local/nginx/conf/cert/xxxxx.pem; #指定服务端证书文件路径
ssl_certificate_key /usr/local/nginx/conf/cert/xxxxx.key; #指定服务端私钥文件路径

# ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 指定SSL服务器端支持的协议版本
ssl_prefer_server_ciphers on;

location /welcome {
root html;
index index.html index.htm;
}
}
}



 

 

 

 

 

mkcert 生成私钥证书

 

 

 #

 

 

OPENSSL生成证书

 

# 生成CA根证书私钥:为保证安全,生成一个4096位的私钥,并使用aes方式加密

国家:CN
省:shanghai
市:shanghai
组织:ky33
公司名:ky33
域名:ky33.com
邮箱:[email protected]

 

 # 通过CA根私钥签发CA根证书

openssl req -new -x509 -days 3650 -sha256 -extensions v3_ca -key ca.key -out ca.pem -subj "/C=CN/ST=shanghai/L=shanghai/O=ky34/OU=ky34/CN=*.ky34.com"

 

 

 

openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=shanghai/L=shanghai/O=ky33/OU=ky33/CN=ky33.com"

 

 #根据这三个生成服务端证书

 #生成服务端证书

 

 

 

 #安装nginx

 

 

http{

     server {
     listen 443 ssl;
     server_name ky33.com;
     root /usr/share/nginx/html;
     ssl_certificate /root/openssl/server.pem;
     ssl_certificate_key /root/openssl/server.key;
     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
     ssl_prefer_server_ciphers on;

...
  }
}

 

 

 

 

#在windowC盘里配置个域名

 

 

 

 

 

 

 

总结

#docker容器使用安全注意点
 尽量别做的事
 尽量不用 --privileged运行容器(授权容器root用户拥有宿主机的root权限)
 尽量不用 --network host 运行容器 (使用host网络模式共享宿主机的网络命名空间)
 尽量不在容器运行 ssh 服务
 尽量不把宿主机系统的关键敏感目录挂载到容器中
 
尽量要做的事:
尽量使用较小体积的较小
尽量以单一应用进程运行容器
尽量在容器中使用最新稳定版本的应用
尽量安装使用最新稳定版本的docker
尽量以最低权限运行容器
尽量使用官方提供的镜像或自己构建镜像
尽量给docker目录(默认/var/lib/docker)分配独立的文件系统
尽量以资源限制的方式运行容器 -m --memory-swap  --cpu-shares --cpuset-cpus --device-write-bps
尽量以只读的凡是挂载数据卷,持久化容器数据到宿主机的除外   -v 书主机目录:容器数据卷目录:ro
尽量设置容器的重启策略和次数 --restart always |on-failure:N
尽量对镜像进行漏洞扫描

 

标签:容器,ssl,证书,宿主机,安全,DOCKER,日志,服务端,客户端
From: https://www.cnblogs.com/yanrui07/p/17999868

相关文章

  • 手写docker—构造容器(二)
    Dockerrun命令实现本文需要实现第一个命令Mydockerrun,类似于dockerrun-it[command]命令。通过创建新的Namespace来对新进程进行视图隔离。核心需要解决如下问题:命令行参数解析的问题,具体实现时通过github.com/urfave/cli库来实现对用户输入命令行的解析,需要解析......
  • centeros 8 安装docker
    yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\......
  • Docker基础架构
    本文主要会介绍笔者在学习Docker基础架构时所总结的知识点,其中会涉及到DockerClient、DockerDaemon以及DockerDriver等几个方面的相关内容。笔者也会将自己的理解在文中进行阐述,这也算是在和大家交流心得的一个过程。若文中有错误的理解和概念,请大家及时纠正;吸纳大家的建议,对于......
  • docker 修改存储目录
    解决nospaceleftondevice,docker报错问题docker容器日志一般存放在/var/lib/docker下面,可使用如下命令查看各个日志的文件大小ls-lh$(find/var/lib/docker/containers/-name*-json.log)systemctlstopdockermkdir-p/home/dockerrsync-avz/var/lib/docker/home/docker......
  • Windows 10 11 安全加固 仅供参考,请查阅资料清楚后使用
    WindowsRegistryEditorVersion5.00;设置密码策略[HKEY_LOCAL_MACHINE\SECURITY\Policies\PasswordPolicy]"MinimumPasswordLength"=dword:00000008"MaximumPasswordAge"=dword:00000030"PasswordComplexity"=dword:00000001"PasswordHi......
  • Windows server 2022 安全基线加固 安全加固 仅供参考
    WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp]"PortNumber"=dword:0000045a[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]"Dis......
  • AI智能分析+明厨亮灶智慧管理平台助力“舌尖上的安全”
    春节是中国最重要的传统节日之一,在春节期间,人们聚餐需求激增,餐饮业也迎来了高峰期。在这个时期,餐饮企业需要更加注重食品安全和卫生质量,以保证消费者的健康和权益,明厨亮灶智慧管理成为了餐饮业中备受关注的话题。俗话说,民以食为天,食以安为先,食品安全关系到每一个百姓的切身利益,明......
  • 【idea系列】控制台日志打印乱码
    0x00中文乱码idea控制台输出日志为中文乱码,如图:0x01解决方案1.idea配置支持中文字体2.tomcat运行环境配置utf-8新增内容:-Dfile.encoding=UTF-83.idea配置vmoption新增内容:-Dfile.encoding=UTF-84.重启idea一定要记得重启idea。5.结果......
  • TSINGSEE青犀智能分析网关V4如何利用AI智能算法保障安全生产、监管,掀开安全管理新篇章
    旭帆科技的智能分析网关V4内含近40种智能分析算法,包括人体、车辆、消防、环境卫生、异常检测等等,在消防安全、生产安全、行为检测等场景应用十分广泛。如常见的智慧工地、智慧校园、智慧景区、智慧城管等等,还支持抓拍、记录、告警、语音对讲、平台级联等功能。算法稳定。识别高效,......
  • 可视化技术:提升空间站管理的效率与安全性
    随着科技的飞速发展,人类在太空探索的道路上越走越远。空间站作为人类在太空中的“家”,其管理变得尤为重要。可视化技术作为现代科技的代表,正在为空间站管理带来革命性的变革。 如图是山海鲸可视化搭建的空间站管理可视化大屏↓↓↓  一、可视化技术的优势可视化技术能够......