当前位置: 首页 > news >正文

【备忘录】Docker 2375远程端口安全漏洞解决

最近为了项目需要,把docker 的远程端口2375 给开放了。不出意外出意外了。没多久,网站报流量告警,第一反应就是开放2375这个端口问题导致,毫不迟疑直接切换服务器。关闭该台服务器的docker服务,并逐步清理掉挖矿进程,过程之艰辛就不想再提起。业务原因又不得不要开放该端口,下面备忘一下修复该漏洞的过程。

Docker本身提供了加密的远程管理端口2376,配合CA证书,就能提供TLS连接了。要想修复该漏洞,其实主要就准备几个证书的事。

第一步,准备证书

主要是5个证书和秘钥文件,分别是ca.pem、server-cert.pem、server-key.pem、client-cert.pem和client-key.pem。其中,server-cert.pem中限制了能够访问Docker主机的客户端列表。

1.生成CA私钥ca-key.pem,使用该私钥对CA证书签名。(ca-key.pem是一个临时文件,最后可以删除。)

[root@web-dev01 dockerauth]# openssl genrsa -out ~/dockerauth/ca-key.pem 4096

2.使用CA私钥生成自签名CA证书ca.pem。生成证书时,通过-days 365设置证书的有效期。单位为天,默认情况下为30天。

[root@web-dev01 dockerauth]# openssl req -x509 -sha256 -batch -subj '/C=CN/ST=chongqing/L=Chongqing/O=qinghub/OU=Laboratory/CN=www.qinghub.net' -new -days 3650 -key ~/dockerauth/ca-key.pem -out ~/dockerauth/ca.pem
[root@web-dev01 dockerauth]# ll
总用量 8
-rw------- 1 root root 3243 326 15:29 ca-key.pem
-rw-r--r-- 1 root root 2074 326 15:32 ca.pem
[root@web-dev01 dockerauth]# 

注意:

C表示国家,中国为CN。
ST表示省,比如Sichuan。
L表示城市,比如Chengdu。
O表示公司,比如Ghostcloud Co.,Ltd。
OU表示部门名字,比如Laboratory。
CN表示公司域名,比如www.ghostcloud.cn

3.生成服务器私钥server-key.pem和server-csr.pem。CN为DockerDaemon。

[root@web-dev01 dockerauth]# openssl req -x509 -sha256 -batch -subj '/C=CN/ST=Chongqing/L=Chongqing/O=qinghub/OU=Laboratory/CN=www.qinghub.net' -new -days 3650 -key ~/dockerauth/ca-key.pem -out ~/dockerauth/ca.pem
[root@web-dev01 dockerauth]# openssl genrsa -out ~/dockerauth/server-key.pem 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
..........................++++
............................................................................................++++
e is 65537 (0x010001)
[root@web-dev01 dockerauth]# openssl req -subj '/CN=DockerDaemon' -sha256 -new -key ~/dockerauth/server-key.pem -out ~/dockerauth/server-csr.pem
[root@web-dev01 dockerauth]# ll
总用量 20
-rw------- 1 root root 3243 326 15:29 ca-key.pem
-rw-r--r-- 1 root root 2074 326 15:38 ca.pem
-rw-r--r-- 1 root root 1590 326 15:45 server-csr.pem
-rw------- 1 root root 3247 326 15:38 server-key.pem

4.使用CA证书生成服务器证书server-cert.pem。TLS连接时,需要限制客户端的IP列表或者域名列表。只有在列表中的客户端才能通过客户端证书访问Docker Daemon。如果添加0.0.0.0,则所有客户端都可以通过证书访问Docker Daemon。

首先生成allow.list

[root@web-dev01 dockerauth]# echo subjectAltName = IP:127.0.0.1,IP:10.0.0.21,IP:10.0.0.22,IP:10.0.0.54 > ~/dockerauth/allow.list
[root@web-dev01 dockerauth]# ll
总用量 16
-rw-r--r-- 1 root root   69 326 15:41 allow.list

再通过allow.list生成server-cert.pem

[root@web-dev01 dockerauth]# openssl x509 -req -days 365 -sha256 -in ~/dockerauth/server-csr.pem -CA ~/dockerauth/ca.pem -CAkey ~/dockerauth/ca-key.pem -CAcreateserial -out ~/dockerauth/server-cert.pem -extfile ~/dockerauth/allow.list
Signature ok
subject=CN = DockerDaemon
Getting CA Private Key
[root@web-dev01 dockerauth]# ll

5.生成客户端私钥client-key.pem和client-csr.pem。CN为DockerClient。

client-csr.pem是一个临时文件,生成client-cert.pem以后,可以删除。

[root@web-dev01 dockerauth]# openssl genrsa -out ~/dockerauth/client-key.pem 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
.........++++
...........................................++++
e is 65537 (0x010001)
[root@web-dev01 dockerauth]# openssl req -subj '/CN=DockerClient' -new -key ~/dockerauth/client-key.pem -out ~/dockerauth/client-csr.pem
[root@web-dev01 dockerauth]# ll
总用量 36
-rw-r--r-- 1 root root   69 326 15:41 allow.list
-rw------- 1 root root 3243 326 15:29 ca-key.pem
-rw-r--r-- 1 root root 2074 326 15:38 ca.pem
-rw-r--r-- 1 root root   41 326 15:45 ca.srl
-rw-r--r-- 1 root root 1590 326 15:47 client-csr.pem
-rw------- 1 root root 3247 326 15:47 client-key.pem
-rw-r--r-- 1 root root 1883 326 15:45 server-cert.pem
-rw-r--r-- 1 root root 1590 326 15:45 server-csr.pem
-rw------- 1 root root 3247 326 15:38 server-key.pem

6.使用CA证书生成客户端证书client-cert.pem。需要加入extendedKeyUsage选项。

[root@web-dev01 dockerauth]# echo extendedKeyUsage = clientAuth > ~/dockerauth/options.list
[root@web-dev01 dockerauth]# openssl x509 -req -days 3650 -sha256 -in ~/dockerauth/client-csr.pem -CA ~/dockerauth/ca.pem -CAkey ~/dockerauth/ca-key.pem -CAcreateserial -out ~/dockerauth/client-cert.pem -extfile ~/dockerauth/options.list
Signature ok
subject=CN = DockerClient
Getting CA Private Key
[root@web-dev01 dockerauth]#

7.成功生成了需要的证书和秘钥,可以删除临时文件。并修改密钥访问权限

所有生成得文件如下:

[root@web-dev01 dockerauth]# ll
总用量 44
-rw-r--r-- 1 root root   69 326 15:41 allow.list
-rw------- 1 root root 3243 326 15:29 ca-key.pem
-rw-r--r-- 1 root root 2074 326 15:38 ca.pem
-rw-r--r-- 1 root root   41 326 16:01 ca.srl
-rw-r--r-- 1 root root 1862 326 16:01 client-cert.pem
-rw-r--r-- 1 root root 1590 326 15:47 client-csr.pem
-rw------- 1 root root 3247 326 15:47 client-key.pem
-rw-r--r-- 1 root root   30 326 16:01 options.list
-rw-r--r-- 1 root root 1883 326 15:45 server-cert.pem
-rw-r--r-- 1 root root 1590 326 15:45 server-csr.pem
-rw------- 1 root root 3247 326 15:38 server-key.pem
[root@web-dev01 dockerauth]# 
[root@web-dev01 dockerauth]# 

删除并修改权限

[root@web-dev01 dockerauth]# rm -f ~/dockerauth/server-csr.pem ~/dockerauth/client-csr.pem ~/dockerauth/allow.list ~/dockerauth/options.list
[root@web-dev01 dockerauth]# 
[root@web-dev01 dockerauth]# chmod 0444 ~/dockerauth/ca.pem ~/dockerauth/server-cert.pem ~/dockerauth/client-cert.pem
[root@web-dev01 dockerauth]# chmod 0400 ~/dockerauth/ca-key.pem ~/dockerauth/server-key.pem ~/dockerauth/client-key.pem
[root@web-dev01 dockerauth]# ll
总用量 28
-r-------- 1 root root 3243 326 15:29 ca-key.pem
-r--r--r-- 1 root root 2074 326 15:38 ca.pem
-rw-r--r-- 1 root root   41 326 16:01 ca.srl
-r--r--r-- 1 root root 1862 326 16:01 client-cert.pem
-r-------- 1 root root 3247 326 15:47 client-key.pem
-r--r--r-- 1 root root 1883 326 15:45 server-cert.pem
-r-------- 1 root root 3247 326 15:38 server-key.pem
[root@web-dev01 dockerauth]# 

第二步,修改启动配置。

启动Docker Deamon时,需要设置-H、–tls、–tlscacert=ca.pem、–tlscert=server-cert.pem和–tlskey=server-key.pem。此时,只有客户端列表中的主机能够访问Docker主机。

1、重启Docker Daemon,加入ca.pem、server-cert.pem和server-key.pem。-H=0.0.0.0:2376表示Docker Daemon监听在2376端口。

修改docker 启动服务配置
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/root/dockerauth/ca.pem --tlscert=/root/dockerauth/server-cert.pem --tlskey=/root/dockerauth/server-key.pem -H=0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service[Service]
Type=notify
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/root/dockerauth/ca.pem --tlscert=/root/dockerauth/server-cert.pem --tlskey=/root/dockerauth/server-key.pem -H=0.0.0.0:2376 -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP 
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500[Install]
WantedBy=multi-user.target

2.在客户端,运行docker命令时,加入ca.pem、client-cert.pem和client-key.pem。本例中,只有127.0.0.1和10.0.0.22,10.0.0.21的客户端可以访问Docker Daemon。

[root@web-dev01 dockerauth]# docker --tlsverify --tlscacert=/root/dockerauth/ca.pem --tlscert=/root/dockerauth/client-cert.pem --tlskey=/root/dockerauth/client-key.pem -H=tcp://10.0.0.22:2376 info
Client:Version:    24.0.5Context:    defaultDebug Mode: falseServer:Containers: 8Running: 8Paused: 0

看到如上示例中得信息,说明已经配置成功。

相关文章:

【备忘录】Docker 2375远程端口安全漏洞解决

最近为了项目需要,把docker 的远程端口2375 给开放了。不出意外出意外了。没多久,网站报流量告警,第一反应就是开放2375这个端口问题导致,毫不迟疑直接切换服务器。关闭该台服务器的docker服务,并逐步清理掉挖矿进程&a…...

343. 整数拆分(力扣LeetCode)

文章目录 343. 整数拆分题目描述动态规划 343. 整数拆分 题目描述 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释:…...

Spring面试题系列-3

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。 Spring的属性…...

【比特币】比特币的奥秘、禁令的深层逻辑与风云变幻

导语: 比特币(Bitcoin),这个充满神秘色彩的数字货币,自诞生以来便成为各界瞩目的焦点。它背后所蕴含的Mining机制、禁令背后的深层逻辑以及市场的风云变幻,都让人欲罢不能。今天,我们将深入挖掘比特币的每一个角落&…...

【情感分析概述】

文章目录 一、情感极性分析概述1. 定义2. 情感极性的类别3. 应用场景 二、情感极性分析的技术方法1. 基于规则的方法a. 关键词打分b. 情感词典的使用 2. 基于机器学习的方法a. 监督学习方法b. 深度学习方法 三、Python进行情感极性分析 一、情感极性分析概述 情感极性分析&…...

【御控物联】JavaScript JSON结构转换(12):对象To数组——键值互换属性重组

文章目录 一、JSON结构转换是什么?二、核心构件之转换映射三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…...

5.6 物联网RK3399项目开发实录-Android开发之U-Boot 编译及使用(wulianjishu666)

物联网入门到项目实干案例下载: https://pan.baidu.com/s/1fHRxXBqRKTPvXKFOQsP80Q?pwdh5ug --------------------------------------------------------------------------------------------------------------------------------- U-Boot 使用 前言 RK U-B…...

Python版【植物大战僵尸 +源码】

文章目录 写在前面:功能实现环境要求怎么玩个性化定义项目演示:源码分享Map地图:Menubar.py主菜单 主函数:项目开源地址 写在前面: 今天给大家推荐一个Gtihub开源项目:PythonPlantsVsZombies,翻译成中就是…...

【明道云】如何让用户可以新增但不能修改记录

【背景】 遇到一个需求场景,用户希望新增数据后锁住数据不让更改。 【分析】 在设计表单时直接将字段设置只读是不行的。字段设置只读将会直接让界面上此字段的前端组件不可编辑。包括新增时也无法填入。显然是不符合需求的。 需要既能新增,新增后又不…...

GPT-1原理-Improving Language Understanding by Generative Pre-Training

文章目录 前言提出动机模型猜想模型提出模型结构模型参数 模型预训练训练的目标训练方式训练参数预训练数据集预训练疑问点 模型微调模型输入范式模型训练微调建议微调疑问点 实验结果分析GPT-1缺陷 前言 首先想感慨一波 这是当下最流行的大模型的的开篇之作,由Op…...

web3.0入门及学习路径

Web3是指下一代互联网的演进形式,它涉及一系列技术和理念,旨在实现去中心化、开放、透明和用户主导的互联网体验。Web3的目标是赋予用户更多的控制权和数据所有权,并通过区块链、加密货币和分布式技术来实现。 一、特点 去中心化&#xff1…...

MATLAB 自定义中值滤波(54)

MATLAB 自定义中值滤波(54) 一、算法介绍二、算法实现1.原理2.代码一、算法介绍 中值滤波,是一种常见的点云平滑算法,改善原始点云的数据质量问题,MATLAB自带的工具似乎不太友好,这里提供自定义实现的点云中值滤波算法,具体效果如下所示: 中值滤波前: 中值滤波后:…...

harmonyOS的客户端存贮

什么是客户端存贮 在harmonyOS中,客户端存贮是指将数据存贮在本地设备以供应用程序使用; 注: 和feaureAblity搭配使用,content上下文的获取依赖该API如下: // 引入: import featureAbility from ohos.ability.featureAbility;// 使用: let content featureAbility.getConten…...

安科瑞智慧安全用电综合解决方案

概述 智慧用电管理云平台是智慧城市建设的延伸成果,将电力物联网技术与云平台的大数据分析功能相结合,实现用电信息的可视化管理,可帮助用户实现安全用电,节约用电,可靠用电。平台支持web,app,微…...

Web 前端性能优化之二:图像优化

1、图像优化 HTTP Archive上的数据显示,网站传输的数据中,60%的资源都是由各种图像文件组成的。 **图像资源优化的根本思想,可以归结为两个字:压缩。**无论是选取何种图像的文件格式,还是针对同一种格式压缩至更小的…...

android——枚举enum

在Kotlin中,枚举(Enum)是一种特殊的类,用于表示固定数量的常量。它允许你定义一组命名的常量值,这些值在程序中具有固定的意义。Kotlin的枚举功能强大,支持多种特性,如伴生对象、构造函数、属性…...

Day54:WEB攻防-XSS跨站Cookie盗取表单劫持网络钓鱼溯源分析项目平台框架

目录 XSS跨站-攻击利用-凭据盗取 XSS跨站-攻击利用-数据提交 XSS跨站-攻击利用-flash钓鱼 XSS跨站-攻击利用-溯源综合 知识点: 1、XSS跨站-攻击利用-凭据盗取 2、XSS跨站-攻击利用-数据提交 3、XSS跨站-攻击利用-网络钓鱼 4、XSS跨站-攻击利用-溯源综合 漏洞原理…...

2024年MathorCup数学建模思路C题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间:2024…...

HCIP作业

实验要求: 1、R6为ISP,接口IP地址均为公有地址,该设备只能配置IP地址,之后不能再对其进行任何配置; 2、R1-R5为局域网,私有IP地址192.168.1.0/24,请合理分配; 3、R1、R2、R4&#x…...

如何向sql中插入数据-接上一篇《MySQL数据库的下载和安装以及命令行语法学习》续

接上一篇 《MySQL数据库的下载和安装以及命令行语法学习》续https://blog.csdn.net/tiger_web0/article/details/136903805 在SQL中,要向表中添加数据,您通常使用INSERT INTO语句。 以下是如何使用INSERT INTO语句的基本格式和示例: 基本格式…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性&#xf…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) ​遍历字符串​:通过外层循环逐一检查每个字符。​遇到 ? 时处理​: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: ​与…...

window 显示驱动开发-如何查询视频处理功能(三)

​D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针,该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...

IP选择注意事项

IP选择注意事项 MTP、FTP、EFUSE、EMEMORY选择时,需要考虑以下参数,然后确定后选择IP。 容量工作电压范围温度范围擦除、烧写速度/耗时读取所有bit的时间待机功耗擦写、烧写功耗面积所需要的mask layer...

比较数据迁移后MySQL数据库和ClickHouse数据仓库中的表

设计一个MySQL数据库和Clickhouse数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

简单聊下阿里云DNS劫持事件

阿里云域名被DNS劫持事件 事件总结 根据ICANN规则,域名注册商(Verisign)认定aliyuncs.com域名下的部分网站被用于非法活动(如传播恶意软件);顶级域名DNS服务器将aliyuncs.com域名的DNS记录统一解析到shado…...