对高危漏洞“Docker Engine API is accessible without authentication”的修复

news2024/10/9 5:27:53

一.背景 

      之前文章maven项目容器化运行之1-基于1Panel软件将docker镜像构建能力分享给局域网_1panel 构建镜像-CSDN博客将1Panel软件的Doocker端口给到了局域网,安全组兄弟扫描认为是高危漏洞,可能导致攻击者获取对Docker主机的完全控制权。

二.修复的建议

      安全组的兄弟给了修复建议:


高危2:Docker Engine API is accessible without authentication,可能导致攻击者获取对Docker主机的完全控制权
具体说明:
Docker守护进程配置不当,允许远程访问而没有适当的身份验证。Docker API端口(通常是2375或2376)暴露。防火墙规则不当,允许来自任何IP地址的连接到Docker API端口。可能导致未经授权访问和控制Docker容器。可能导致数据泄露、系统被入侵或被用于恶意目的(如挖矿)。攻击者可能利用此漏洞在主机上执行任意命令。
解决办法:
1.限制API访问:
默认情况下,禁用远程API访问。
如果需要远程访问,使用TLS加密和客户端证书认证。
2.配置Docker守护进程:
编辑Docker配置文件(通常在 /etc/docker/daemon.json):
{
  "tls": true,
  "tlscert": "/path/to/server-cert.pem",
  "tlskey": "/path/to/server-key.pem",
  "tlsverify": true,
  "tlscacert": "/path/to/ca.pem"
}
3.生成TLS证书:
使用OpenSSL生成CA、服务器和客户端证书。
4.配置防火墙:
限制只有特定IP地址可以访问Docker API端口。
使用 iptables 或云服务提供商的安全组设置。
5.使用Unix Socket:
如果可能,优先使用Unix socket而不是TCP端口来与Docker通信。
6.更新Docker:
确保使用最新版本的Docker,以获取最新的安全更新。
7实施网络隔离:
使用虚拟私有网络(VPN)来访问Docker API。


三.选择配置防火墙策略来修复

1.查看我的机器是否可以访问Docker端口

在cmd窗口,输入命令   curl -i http://10.1.230.94:2375/version,结果如下:

C:\Users\Dell>curl -i http://10.1.230.94:2375/version
HTTP/1.1 200 OK
Api-Version: 1.45
Content-Type: application/json
Docker-Experimental: false
Ostype: linux
Server: Docker/26.1.3 (linux)
Date: Tue, 08 Oct 2024 09:07:16 GMT
Content-Length: 848

{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"26.1.3","Details":{"ApiVersion":"1.45","Arch":"amd64","BuildTime":"2024-05-16T08:35:20.000000000+00:00","Experimental":"false","GitCommit":"8e96db1","GoVersion":"go1.21.10","KernelVersion":"3.10.0-1160.105.1.el7.x86_64","MinAPIVersion":"1.24","Os":"linux"}},{"Name":"containerd","Version":"1.6.32","Details":{"GitCommit":"8b3b7ca2e5ce38e8f31a34f35b2b68ceb8470d89"}},{"Name":"runc","Version":"1.1.12","Details":{"GitCommit":"v1.1.12-0-g51d5e94"}},{"Name":"docker-init","Version":"0.19.0","Details":{"GitCommit":"de40ad0"}}],"Version":"26.1.3","ApiVersion":"1.45","MinAPIVersion":"1.24","GitCommit":"8e96db1","GoVersion":"go1.21.10","Os":"linux","Arch":"amd64","KernelVersion":"3.10.0-1160.105.1.el7.x86_64","BuildTime":"2024-05-16T08:35:20.000000000+00:00"}

我在浏览器输入http://10.1.230.94:2375/version,也有响应如下:

{
	"Platform": {
		"Name": "Docker Engine - Community"
	},
	"Components": [{
		"Name": "Engine",
		"Version": "26.1.3",
		"Details": {
			"ApiVersion": "1.45",
			"Arch": "amd64",
			"BuildTime": "2024-05-16T08:35:20.000000000+00:00",
			"Experimental": "false",
			"GitCommit": "8e96db1",
			"GoVersion": "go1.21.10",
			"KernelVersion": "3.10.0-1160.105.1.el7.x86_64",
			"MinAPIVersion": "1.24",
			"Os": "linux"
		}
	}, {
		"Name": "containerd",
		"Version": "1.6.32",
		"Details": {
			"GitCommit": "8b3b7ca2e5ce38e8f31a34f35b2b68ceb8470d89"
		}
	}, {
		"Name": "runc",
		"Version": "1.1.12",
		"Details": {
			"GitCommit": "v1.1.12-0-g51d5e94"
		}
	}, {
		"Name": "docker-init",
		"Version": "0.19.0",
		"Details": {
			"GitCommit": "de40ad0"
		}
	}],
	"Version": "26.1.3",
	"ApiVersion": "1.45",
	"MinAPIVersion": "1.24",
	"GitCommit": "8e96db1",
	"GoVersion": "go1.21.10",
	"Os": "linux",
	"Arch": "amd64",
	"KernelVersion": "3.10.0-1160.105.1.el7.x86_64",
	"BuildTime": "2024-05-16T08:35:20.000000000+00:00"
}

说明我的机器确实可以访问的。我的构建服务器ip是10.1.230.232,我本机10.1.210.197、另一个同事机器10.2.125.55。我准备就允许设置这3个IP可以访问Docker的端口。

2.设置防火墙规则

(1)先明确linux机器用的什么防火墙?

一般是用iptables或者firewalld。先通过查看2个命令分别查看服务的状态,就知道用的是哪个防火墙了。systemctl status iptables    和  systemctl status firewalld。很明显,我机器是firewalld。

[root@localhost ~]# systemctl status iptables
Unit iptables.service could not be found.
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: active (running) since 二 2024-10-08 17:43:49 CST; 28min ago
     Docs: man:firewalld(1)
 Main PID: 14565 (firewalld)
    Tasks: 2
   Memory: 28.3M
   CGroup: /system.slice/firewalld.service
           └─14565 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

10月 08 17:43:48 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
10月 08 17:43:49 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
10月 08 17:43:49 localhost.localdomain firewalld[14565]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
10月 08 17:50:58 localhost.localdomain firewalld[14565]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
10月 08 17:54:06 localhost.localdomain firewalld[14565]: ERROR: INVALID_PROTOCOL: http
10月 08 17:58:15 localhost.localdomain firewalld[14565]: WARNING: ALREADY_ENABLED: rule family="ipv4" source address="10.1.210.197" port port="2375" protocol="tcp" accept
10月 08 17:58:47 localhost.localdomain firewalld[14565]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.
10月 08 18:10:12 localhost.localdomain firewalld[14565]: WARNING: AllowZoneDrifting is enabled. This is considered an insecure configuration option. It will be removed in a future release. Please consider disabling it now.

(2)firewalld添加允许访问并重启

#添加3个IP访问2375端口
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.1.230.232" port port="2375" protocol="tcp" accept' --permanent
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.1.210.197" port port="2375" protocol="tcp" accept' --permanent
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.2.125.55" port port="2375" protocol="tcp" accept' --permanent
#重新加载 firewalld 配置
sudo firewall-cmd --reload

如果不重启,不生效哦!

可以输入命令去验证规则:

[root@localhost zones]# sudo firewall-cmd --zone=public --list-rich-rules
rule family="ipv4" source address="10.1.230.232" port port="2375" protocol="tcp" accept
rule family="ipv4" source address="10.1.210.197" port port="2375" protocol="tcp" accept
rule family="ipv4" source address="10.2.125.55" port port="2375" protocol="tcp" accept

四.其他问题处理

       1.1panel的15021端口访问不了

       我的Docker服务器不是自己安装的,是在1Panel中带的,原来没有启用防火墙,我命令输入后,启动了防火墙,导致我1Panel平台的15021端口,里面容器映射的端口都访问不了。所以,我手动先输入命令,把1panel的15021端口允许任何ip访问。    

[root@localhost zones]# sudo firewall-cmd --zone=public --add-port=15021/tcp --permanent
success

    2.1panel中其他容器映射的端口访问不了

    在1panel中添加就行了,多个端口可以一次批量添加:

可以在1panel防火墙界面查看,当前的规则。也可以像下面这样输入命令查看:

[root@localhost zones]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dhcpv6-client ssh
  ports: 15021/tcp 22/tcp 80/tcp 443/tcp 14000/tcp 14001/tcp 14002/tcp 14003/tcp 16379/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
    rule family="ipv4" source address="10.1.230.232" port port="2375" protocol="tcp" accept
    rule family="ipv4" source address="10.1.210.197" port port="2375" protocol="tcp" accept
    rule family="ipv4" source address="10.2.125.55" port port="2375" protocol="tcp" accept

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2198112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单兵可背负履带式全地形无人车技术详解

单兵可背负履带式全地形无人车是一种专为复杂环境和多样化任务设计的智能装备,具备出色的地面适应性、越野性能以及灵活的操控性。以下是对其技术的详细解析: 一、驱动技术 履带式驱动:采用履带式驱动技术,通过履带与地面的广泛…

动手学深度学习9.3. 深度循环神经网络-笔记练习(PyTorch)

本节课程地址:58 深层循环神经网络【动手学深度学习v2】_哔哩哔哩_bilibili 本节教材地址:9.3. 深度循环神经网络 — 动手学深度学习 2.0.0 documentation (d2l.ai) 本节开源代码:...>d2l-zh>pytorch>chapter_multilayer-perceptr…

计算机毕业设计 基于Flask+vue的博客系统的设计与实现 Python毕业设计 Python毕业设计选题 Flask框架 Vue【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

数据结构-4.5.KMP算法(旧版上)-朴素模式匹配算法的优化

朴素模式匹配算法最坏的情况: 一.实例: 第一轮匹配失败,开始下一轮的匹配: 不断的操作,最终匹配成功: 如上述图片所述,朴素模式匹配算法会导致时间开销增加, 优化思路:主…

Java:数据结构-List的介绍 ArrayList和顺序表(1)

一 List的介绍 1.什么是List? List是一个接口,继承于Collection。 Collection也是一个接口 Lterable也是一个接口,表示实现该接口的类是可以逐个元素遍历的类。 2.List的使用 List是一个接口,不能被实例化,ArrayL…

falcon调研的CSIG

CSIG (Congestion Signaling) C是Congestion, SIG是 Signaling的简写,的机制: 本质是带内遥测 沿着L2一路可以实现更新,原文:This summarizedinformation is collected over L2 CSIG-tags in a compare-and-replace manner acro…

谢希仁计算机网络 (四)—— 网络层

计算机网络(四)—— 网络层(1、2):网络层概述、网络层提供的两种服务 计算机网络(四)—— 网络层(1、2):网络层概述、网络层提供的两种服务_以下属于网络层范…

基于PHP+uniapp的民宿预订系统的微信小程序设计与实现 ea9i3

目录 项目介绍技术栈和环境说明具体实现截图php技术介绍文件解析微信开发者工具HBuilderXuniapp开发技术简介解决的思路性能/安全/负载方面数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 项目介绍 总体上看,Android的民宿预订系统…

企业安全运行与维护(Enterprise Security Operation and Maintenance)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

.locked勒索病毒:数据安全的新威胁

导言 在数字时代,数据已成为企业和个人的核心资产,其价值无可估量。然而,随着网络技术的飞速发展,一种名为“.locked勒索病毒”的恶意软件悄然兴起,对全球范围内的数据安全构成了严重威胁。这种病毒以其独特的加密方式…

【RAG论文精读4】RAG论文综述1(2312.10997)-第2部分

收录于我的专栏:AI修炼之路 第1部分:【RAG论文精读3】RAG论文综述1(2312.10997)-第1部分 二、RAG概览 RAG研究范式不断演变,可以为三个阶段:原始RAG、进阶RAG和模块化RAG。 2.1 原始RAG Naive RAG&#xf…

Spring Boot快速入门:HelloWorld示例

Spring Boot是一个非常流行,受欢迎的框架,它不仅常用于构建传统的单体式MVC应用程序,同时也非常适合用于搭建微服务架构。对于 Web 应用程序,Spring Boot 提供了用于创建 REST API、处理 HTTP 请求和使用 Thymeleaf 等模板引擎呈现…

QD1-P1 HTML、CSS与JS三者之间的关系

今天开始学习前端基础,新建专题《前端学习笔记1》保存前端基础学习笔记。 专题文章命名以qd1开头。 源课程 视频教程:【Web前端-最通俗易懂HTML、CSS与JS合集 1天速成】 up:遥遥温柔乡 在B站随便搜索了一个前端课程,共91节&am…

美畅物联丨视频汇聚从“设”开始:海康威视摄像机设置详解

在运用畅联云平台进行视频汇聚与监控管理时,海康威视的安防摄像机凭借其卓越的性能与广泛的应用兼容性,成为了众多用户的首选产品。海康威视摄像机参数设置与调试对于实现高效的安防监控至关重要。今天,让我们一同深入学习海康摄像机的参数设…

【Unity实战篇】 接入百度翻译,实现文本自动翻译功能

前言【Unity实战篇】 接入百度自动翻译,实现文本自动翻译功能一、获取百度翻译开发平台的APPID和密钥二、Unity中接入自动翻译功能三、Unity中实现自动翻译文本Text功能总结前言 日常在做项目的过程中,游戏本地化几乎已经成为必不可少的一步。本篇文章将演示怎样在Unity中接入…

【万字长文】Word2Vec计算详解(三)

【万字长文】Word2Vec计算详解(三) 写在前面 第三部分介绍Word2Vec模型的两种优化方案。 【万字长文】Word2Vec计算详解(一)markdown行 9000 【万字长文】Word2Vec计算详解(二)markdown行 12000 【万字长文…

数据结构与算法篇(刷题篇 - 树)

目录 1. 二叉树的前序遍历(简单) 1.1. 题目描述 1.2. 解题思路 方法一:递归(推荐使用) 方法二:非递归(扩展思路) 2. 二叉树的中序遍历(中等) 2.1. 题目…

[简单实践]Noisy Print - 自制基于加性噪声模型的简易降噪器

NoisyPrint 最近在学习的过程中,突然想起一个在Adobe Audition中用过的功能。 为什么会想到这个功能呢,因为在我使用DeepFilter的过程中,我发现对于一些低信噪比的信号来说,DeepFilter很容易出现过拟合现象,导致音源…

大数据毕业设计选题推荐-电影票房数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

Linux云计算 |【第四阶段】RDBMS2-DAY1

主要内容: MySQL主从同步(概述、原理、构建主从同步)、主从同步结构类型(主多从、主从从、主主)、复制模式(异步、半同步)、启用半同步复制 一、MySQL主从同步 MySQL 主从同步(Mas…