Docker 开启远程安全访问

news2024/11/16 20:35:18

说明

如果你的服务器是公网IP,并且开放了docker的远程访问,如果没有进行保护是非常危险的,任何人都可以向你的docker中推送镜像、运行实例。我曾开放过阿里云服务器中docker的远程访问权限,在没有开启保护的状态下,几小时内就被植入了挖矿程序,导致CPU的占用率一直在100%,最终只能将服务器重置。

接下来我们介绍一下如何利用CA证书,安全的开启Docker的远程,通过TLS进行加密访问。

本文适用于部署在公网的服务器(包括云服务器),安全的开启docker远程访问。本文并不适用于局域网或虚拟机的加密。

详细步骤

下面我们介绍一个如何配置CA证书

1、先创建一个目录存放ca私钥和公钥

mkdir -p /usr/local/ca

2、进入此目录 准备生成密钥

cd /usr/local/ca

3、生成RSA私钥

运行下面命令时,会提示输入密码,输入两次一致即可。

openssl genrsa -aes256 -out ca-key.pem 4096

4、以上面生成的RSA密钥创建证书

运行此命令后,会提示输入国家、省、市、组织名称、单位、邮箱等资料。

国家只能是两位,例如:CN,其他的随便填写即可。

openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem

5、生服务端的RSA私钥

openssl genrsa -out server-key.pem 4096

6、生成服务端的证书签名

/CN=服务器IP 此处配置你的服务器IP,这里只能是公网IP或域名!

openssl req -subj "/CN=服务器IP" -sha256 -new -key server-key.pem -out server.csr

7、配置白名单

DNS: 此处配置你的服务器IP,这里只能是公网IP或域名!

IP: 此处配置允许访问的IP,可以配置多个,以逗号间隔即可。此处也同样是支支持公网IP。如果允许任何携带证书的人访问,直接修改为0.0.0.0即可

echo subjectAltName = DNS:服务器域名,IP:0.0.0.0 >> extfile.cnf

注意这里如果用服务器ip,则要将DNS改为IP,既:

echo subjectAltName = IP:服务器IP,IP:0.0.0.0 >> extfile.cnf

8、为extfile.cnf追加属性

此属性用于服务器身份验证

echo extendedKeyUsage = serverAuth >> extfile.cnf

9、生成签名过的客户端证书

期间会要求输入密码,输入和上面一致即可

openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
  -CAcreateserial -out server-cert.pem -extfile extfile.cnf

10、生成客户端的RSA私钥

openssl genrsa -out key.pem 4096

11、生成client.csr

openssl req -subj '/CN=client' -new -key key.pem -out client.csr

12、为extfile.cnf添加认证参数

echo extendedKeyUsage = clientAuth >> extfile.cnf

13、为extfile-client.cnf添加认证参数

echo extendedKeyUsage = clientAuth > extfile-client.cnf

14、生成签名证书

openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
  -CAcreateserial -out cert.pem -extfile extfile-client.cnf

15、删除无用的配置文件

rm -v client.csr server.csr extfile.cnf extfile-client.cnf

16、将服务端证书放到docker的目录

cp server-*.pem /etc/docker/

17、将服务端证书放到docker的目录

cp ca.pem /etc/docker/

18、修改docker配置文件

vi /lib/systemd/system/docker.service

19、替换ExecStart属性

ExecStart=/usr/bin/dockerd \
--tlsverify --tlscacert=/usr/local/ca/ca.pem \
--tlscert=/usr/local/ca/server-cert.pem \
--tlskey=/usr/local/ca/server-key.pem \
-H tcp://0.0.0.0:2375 \
-H unix:///var/run/docker.sock

20、更新配置文件并重启docker

systemctl daemon-reload && systemctl restart docker

21、对docker端口2375放行 如果是云服务器 需要在其管理页面中对应开启端口访问

firewall-cmd --zone=public --add-port=2375/tcp

22、测试

访问https://ip:2375/version,如果提示需要证书即标识配置成功

23、使用IDEA连接

将ca-key.pem、ca.pem、cert.pem、key.pem四个文件拷贝到要访问docker的客户端。

在IDEA中,将Engine API URL中的TCP协议修改为https

在IDEA的Certificates folder中配置拷贝了四个文件的目录 点击apply,出现Connection successful即为成功!

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

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

相关文章

企业微信hook接口协议,根据手机号搜索联系人

根据手机号搜索联系人 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","phoneNumber":"1357xxxx" } 返回示例 {"data&q…

抖音 小程序 获取手机号 报错 getPhoneNumber:fail auth deny

这是因为 当前小程序没有获取 手机号的 权限 此能力仅支持小程序通过试运营期后可用,默认获取权限,无需申请; https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/guide/open-capabilities/acquire-phone-number-acqu…

用斐波那契数列感受算法的神奇(21亿耗时0.2毫秒)

目录 一、回顾斐波那契数列 二、简单递归方法 (一)解决思路 (二)代码展示 (三)性能分析 三、采用递归HashMap缓存 (一)解决思路 (二)代码展示 &…

深度学习系列65:数字人openHeygen详解

1. 主流程分析 从inference.py函数进入,主要流程包括: 1) 使用cv2获取视频中所有帧的列表,如下: 2)定义Croper。核心代码为69行:full_frames_RGB, crop, quad croper.crop(full_frames_RGB)。…

公开课学习——基于索引B+树精准建立高性能索引

文章目录 遇到慢查询怎么办?—— 创建索引联合索引的底层的数据存储结构长什么样? mysql脑图 阿里开发手册 遇到慢查询怎么办?—— 创建索引 不用索引的话一个一个找太慢了,用索引就快的多。 假如使用树这样的结构建立索引&#x…

Spring - 3 ( 12000 字 Spring 入门级教程 )

一:Spring Web MVC入门 1.1 响应 在我们前⾯的代码例子中,都已经设置了响应数据, Http 响应结果可以是数据, 也可以是静态页面,也可以针对响应设置状态码, Header 信息等. 1.2 返回静态页面 创建前端页面 index.html(注意路径) html代码 …

frp 实现 http / tcp 内网穿透(穿透 wordpress )

frp 实现 http / tcp 内网穿透(穿透 wordpress ) 1. 背景简介与软件安装2. 服务端配置2.1 配置文件2.2 wordpress 配置文件2.3 frps 自启动 3.客户端配置3.1 配置文件3.2 frpc 自启动 同步发布在个人笔记frp 实现 http / tcp 内网穿透(穿透 w…

HZNUCTF -- web

HZNUCTF第五届校赛实践赛初赛 Web方向 WriteUp-CSDN博客 ezssti 下载文件 访问 /login 可由源代码中看到 Eval 函数 ,可以任意命令执行 按照格式,可执行命令 POST :name{{.Eval "env"}} 可以得到flag (尝试ls 只能列出…

就业班 第三阶段(负载均衡) 2401--4.19 day3

二、企业 keepalived 高可用项目实战 1、Keepalived VRRP 介绍 keepalived是什么keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。 ​ keepalived工作原理keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundan…

微软发布Phi-3 Mini,性能媲美GPT-3.5、Llama-3,可在手机端运行

前言 微软发布了最新版的Phi系列小型语言模型(SLM) - Phi-3。这个系列包括3个不同参数规模的版本:Phi-3 Mini (38亿参数)、Phi-3 Small (70亿参数)和Phi-3 Medium (140亿参数)。 Phi系列模型是微软研究团队开发的小规模参数语言模型。从第一代Phi-1到第二代Phi-2&…

kubebuilder(3)实现operator

在前面的文章我们已经了解了operator项目的基本结构。现在我们来写一点简单的代码,然后把我们的crd和operator部署到k8s集群中。 需求 这是一个真实的需求,只不过做了简化。 在开发公司自己的paas平台,有一个需求是,用户在发版…

【Linux高性能服务器编程】两种高性能并发模式剖析——领导者/追随者模式

hello !大家好呀! 欢迎大家来到我的Linux高性能服务器编程系列之两种高性能并发模式介绍,在这篇文章中,你将会学习到高效的创建自己的高性能服务器,并且我会给出源码进行剖析,以及手绘UML图来帮助大家来理解…

RK3588S和ARM阵列服务器在虚拟化云平台的应用

RK3588是瑞芯微2021年底推出的首款高端8nm旗舰芯片,而RK3588S 则是针对消费端市场在RK3588基础上缩减了部分外围接口,CPU、GPU和NPU等主要参数得到了保留,主要应用范围为高端ARM平板、ARM笔电产品,会议平板类、ARM服务器、智能机器…

利用遥感影像计算大蒜种植面积

大家对大蒜应该不陌生,近几年也经常以"蒜你狠"出现在大众视野。我国是世界大蒜的主要生产国、消费国和出口国,从事大蒜生产的蒜农达500万之多,大蒜产品也远销东南亚、东亚、中东、美洲、 欧洲等地区。大蒜的种植面积是大蒜市场行情的重要影响因…

DRF: 序列化器、View、APIView、GenericAPIView、Mixin、ViewSet、ModelViewSet的源码解析

前言:还没有整理,后续有时间再整理,目前只是个人思路,文章较乱。 注意路径匹配的“/” 我们的url里面加了“/”,但是用apifox等非浏览器的工具发起请求时没有加“/”,而且还不是get请求,那么这…

el-popover放在el-table中点击无反应问题

我们想在table中给btn加弹框但是 el-popover点击按钮没有任何反应思考:通过插槽去添加这个组件el-popover的id是否绑定了一个值解决思路&#xff1a;给每个el-popover都加上单独的id 效果 &#xff1a; 代码 给每个组件都绑定ref <template slot-scope"scope"&g…

组合预测 | Matlab实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树多输入单输出回归预测

组合预测 | Matlab实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树多输入单输出回归预测 目录 组合预测 | Matlab实现LSTM-XGBoost长短期记忆网络组合极限梯度提升树多输入单输出回归预测效果一览基本描述模型描述代码实现参考资料效果一览 基本描述 组合预测 | Matlab实现L…

【性能测试】ChaosTesting(混沌测试)ChaosBlade(混沌实验工具)(四)-k8s容器混沌实验

5. 创建 kubernetes 相关的实验场景 5.0 blade create k8s 5.0.1 介绍 创建 kubernetes 相关的实验场景&#xff0c;除了使用 blade 命令创建场景外&#xff0c;还可以将实验使用 yaml 文件描述&#xff0c;使用 kubectl 命令执行。目前支持的实验场景如下&#xff1a; [bl…

【VueUse】重新定义状态管理在 Vue 中的体验

在 Vue 生态系统中&#xff0c;状态管理一直是开发者们关注的焦点之一。而随着 VueUse 的出现&#xff0c;我们迎来了一种全新的方式来处理状态管理&#xff0c;它让我们能够以更简单、更灵活的方式来管理应用程序的状态。 在本文中我们将深入探讨 VueUse 中与状态管理相关的内…

成功解决ImportError: cannot import name ‘builder‘ from ‘google.protobuf.internal

成功解决ImportError: cannot import name builder from google.protobuf.internal 目录 解决问题 解决思路 解决方法 解决问题 ImportError: cannot import name builder from google.protobuf.internal 解决思路 导入错误:无法从“google.protobuf.internal”导入名称“…