文章目录
容器安全问题的根本原因是容器和宿主机共享内核。如果容器中的某个应用程序使 Linux 内核崩溃,则整个系统可能会崩溃。与虚拟机不同,虚拟机不与主机共享内核,虚拟机崩溃一般不会导致主机崩溃。 1 容器与虚拟机的区别1.1 隔离与共享
虚拟机通过添加层,输出网卡、内存、cpu等虚拟硬件,然后在其上构建虚拟机。每个虚拟机都有自己的系统内核,容器通过隔离的方式将文件系统、进程、设备、网络等资源隔离(命名空间隔离),进而控制权限、cpu资源等,所以容器不会相互影响。容器不能影响主机。容器与宿主机共享内核、文件系统、硬件等资源。
1.2 性能和损失
与虚拟机相比,容器的资源消耗更少。同一主机下,可以创建的容器数量比虚拟机多。但是,虚拟机的安全性略好于容器。对于主机或者其他虚拟机来说,现在想要突破层层是极其困难的。容器和主机共享内核和文件系统等资源,这些资源更有可能影响其他容器和主机。
差异容器虚拟机
启动速度
很快,几秒钟
慢,几分钟
跑步表现
接近原生(直接在内核中运行)
继续运行,大约损失 50%
磁盘使用情况
小,甚至几十KB(根据图像层)
非常大,在 GB 上
并发
一个主机可以启动数百个容器
多达几十个虚拟机
隔离
进程级别
系统级(更彻底)
操作系统
主要支持Linux
几乎所有
封装
只打包项目代码和依赖,共享宿主机内核
完整的操作系统,与主机隔离
2 现有安全问题 2.1 自我漏洞
作为一个应用程序,它的实现会存在代码缺陷。 CVE官方记录历史版本有20多个漏洞。
黑客常用的攻击手段主要有代码执行、权限提升、信息泄露、权限绕过等。当前版本变化很快,用户最好升级到最新版本
2.2源码问题
提供了一个hub,可以让用户上传创建好的镜像供其他用户下载,快速搭建环境wordpress 虚拟主机 推荐,但也带来了一些安全问题,比如以下三种方式:
3 架构缺陷和安全机制
其自身的架构和机制可能会导致问题。比如这样的攻击场景,黑客已经控制了宿主机上的一些容器,或者获得了在公有云上建立容器的方法,然后攻击宿主机或者其他容器发起攻击。
4 安全基线标准
以下从内核、主机、网络、镜像、容器等六个方面总结了安全基线标准。
4.1 内核级
(1)及时更新内核。
(2)用户(容器内的root权限不是容器外的高权限)。
(3)(资源的配额和指标),设置CPU、内存、磁盘、IO等资源限制。
(4)通过启用//GRSEC(控制文件访问)适当的强化系统来增加额外的安全性。
(5)(权限划分),比如将指定的CPU划分给容器。
(6)(限制系统调用),限制不必要的系统调用。
(7)禁止与宿主进程命名空间共享容器命名空间,如宿主网络模式。
4.2 主机级别
(1)为容器创建单独的分区,例如在分布式文件系统上。
(2)只运行必要的服务,尽量避免在容器中运行ssh服务。
(3)禁止将宿主机上的敏感目录映射到容器中,创建数据卷时需要注意-v。
(4)审核守护进程、相关文件和目录,防止生成病毒或木马文件。
(5)设置适当的默认文件描述符数。
(文件描述符:简称fd,当应用程序请求内核打开/新建文件时wordpress 虚拟主机 推荐,()会返回一个打开/新建文件对应的文件描述符(file)。文件描述符本质上是是一个非负整数,要读写文件,还需要用这个文件描述符来指定要读写的文件。文件描述符是重要的系统资源。但实际情况是内核会有系统级限制和用户级限制,让某个应用进程不会消耗所有文件资源,可以使用-n查看)
(6)具有root权限的用户应具有644或更低的访问权限。
(7)定期检查每台主机的容器库存,清理不必要的容器。
4.3 网络级别
(1)通过设置规则来禁止或允许容器之间的网络流量。
(2)允许修改。
(3)禁止绑定到其他IP/Port或Unix。
(4)禁止在容器上映射特权端口。
(5)容器上只打开需要的端口。
(6)在容器上禁用主机网络模式。
(7)如果主机有多个网卡,则将容器的传入流量绑定到特定的主机网卡。
4.4 级图像
(1)创建本地镜像仓库服务器。
(2)图中软件为最新版本,建议根据实际情况使用对应版本,业务稳定性优先。
(3)使用受信任的图像文件并通过安全通道下载。
(4)重建镜像而不是修补容器和镜像,销毁异常容器并重建。
(5)合理管理图片标签,及时移除不再使用的图片。
(6)使用镜像扫描。
(7)带有图片的签名。
4.5 容器级别
(1)最小化容器,最小化操作系统镜像集。
(2)容器作为单个主进程运行。
(3)标签禁止使用特权容器。
(4)禁止在容器上运行ssh服务,尝试使用exec进入容器。
(5)以只读方式挂载容器的根目录系统wordpress做网站,-v宿主目录:容器目录:ro.
(6)明确定义属于容器的数据盘符。
(7)通过设置on-来限制容器尝试重启的次数,如果容器反复重启很容易丢失数据,-=on-:3。
(8)限制容器中可用的进程数,运行-m限制内存使用防止fork炸弹。(fork炸弹,快速增长的子进程,耗尽系统进程数)
4.6 其他设置
(1)定期对主机系统和容器进行安全审计。
(2)以最少的资源和权限运行容器是容器安全的核心思想。
(3)避免在同一主机上部署大量容器,保持数量可控。
(4)监控容器使用情况、性能和其他指标,例如。
(5)增加实时威胁检测和事件报警响应功能,如.
(6)使用中央和远程的日志收集服务,比如ELK。
5 与容器相关的常见安全配置方法5.1 - 规则设置5.1.1 容器最小化
如果容器中仅运行必要的服务,则无法轻松启动 SSH 等服务连接到容器。通常使用以下方法进入容器。
docker exec -it 容器id bash
5.1.2 远程 API 访问控制
远程调用API接口存在未授权访问漏洞
,至少应该限制外网访问。建议使用访问方式。
监控内网ip,启动方法如下。
1.在服务配置文件中指定监控内网ip
docker -d -H uninx:///var/run/docker.sock -H tcp://192.168.16.16:2375
或者
vim /usr/lib/systemd/system/docker.service
------13行-------修改
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://192.168.16.16:2375
2.重启
systemctl daemon-reload
systemctl restart docker
netstat -natp | grep 2375
systemctl start firewalld
docker -H tcp://192.168.16.16 images
3.对主机做IP访问控制,是客户端地址
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.16.18" port protocol="tcp" port="2375" accept"
firewall-cmd --reload
或
iptables -t filter -A INPUT -s 192.168.16.18 -p tcp --dport 2375 -j ACCEPT
4.客户端操作中的远程授权访问
docker -H tcp://192.168.16.16 images
docker -H tcp://192.168.16.16 images pull soscscs/myapp:v1
5.2 限制流量
使用防火墙过滤器限制容器的源IP地址范围与外界通信。
firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.16.0/24" reject"
iptables -t filter -A INPUT -s 192.168.16.0/24 -j ACCEPT
docker -H tcp://192.168.16.16 images
生产环境中的大量问题是由容器端口对外释放引起的漏洞引起的。除了操作系统账号权限控制的问题,在进程管理上也存在隐患。
目前常用的版本都支持管理主机,一旦启动进程用-p:的端口映射,
会直接添加对应的Chain和-jwordpress建站,默认的DROP规则是在INPUT链中做的,所以没有限制,
这会带来严重的安全风险。
因此建议:
1.不要在有外网ip的机器上使用该服务
2.使用k8s等编排系统管理容器
3.在宿主机上,在启动命令中加个--=false,然后把常用的文件写入文件,再用--重定向刷新规则。
5.3 图像安全
镜像安全扫描,在镜像仓库客户端使用证书认证查看下载的镜像。
通过与CVE数据库同步扫描镜像,一旦发现漏洞,会通知用户处理,或者直接阻止镜像继续构建。
如果公司使用自己的镜像源,可以跳过这一步;否则,至少还需要验证md5等特征值,并确认一致后再基于...进行进一步构建。
一般来说,确保只从受信任的仓库获取图片,不推荐使用 ---=[] 参数,推荐使用私有仓库。
客户端与客户端之间的通信安全
为了防止链接劫持、会话劫持等造成的中间人攻击,c/s两端应通过TLS加密进行通信
通过在服务器上创建TLS密钥证书并发送给客户端,客户端通过私钥访问容器,从而保证了通信的安全性。
使用证书访问的工作流程:
文章来自互联网,侵权请联系删除,文章阐述观点来自文章出处,并不代表本站观点。
www.8001717.cn