Docker开启并配置远程安全访问_docker开启远程访问(1)

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网络安全面试题

绿盟护网行动

还有大家最喜欢的黑客技术

网络安全源码合集+工具包

所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!



> 
> **3,补全CA信息**
> 
> 
> 


执行命令:**openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem**根据要求依次输入访问密码、国家、省、市、组织名称、单位名称、随便一个名字、邮箱等,需要这些信息作为证书申请。



[root@VM-12-4-centos ca_key]# openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem
Enter pass phrase for ca-key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HUBei
Locality Name (eg, city) [Default City]:WuHan
Organization Name (eg, company) [Default Company Ltd]:ZC
Organizational Unit Name (eg, section) []:QA
Common Name (eg, your name or your server’s hostname) []:192.168.98.128(ip地址)
Email Address []:8888888888@qq.com


现在我们有了CA,就可以创建服务器密钥和证书签名请求(CSR)。


**Tips:确保“Common Name”与用于连接Docker的主机名匹配,否则后续远程连接会失败!**



> 
> **4,生成service-key.pem**
> 
> 
> 


执行命令:**openssl genrsa -out server-key.pem 4096**



[root@VM-12-4-centos ca_key]# openssl genrsa -out server-key.pem 4096
Generating RSA private key, 4096 bit long modulus
…++
…++
e is 65537 (0x10001)
[root@VM-12-4-centos ca_key]# ll
total 12
-rw-r–r-- 1 root root 3326 Apr 10 10:29 ca-key.pem
-rw-r–r-- 1 root root 2082 Apr 10 10:56 ca.pem
-rw-r–r-- 1 root root 3247 Apr 10 11:45 server-key.pem



> 
> **5,用CA签署公钥**
> 
> 
> 


由于TLS连接可以通过IP地址和DNS名称进行,因此在创建证书时需要指定IP地址或者域名。填写的`IP`或者域名,都是将来对外开放的地址,也就是用于连接的地址。例如,要允许使用127.0.0.1进行连接:


执行命令:**openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr**



[root@VM-12-4-centos ca_key]# openssl req -subj “/CN=127.0.0.1” -sha256 -new -key server-key.pem -out server.csr



> 
> **6,匹配白名单**
> 
> 
> 


设置允许哪些`IP`可以远程连接`docker`。


1. 允许指定`IP`可以远程连接`docker`。

 

echo subjectAltName = DNS:$HOST,IP:XX.XX.XX.XX,IP:XX.XX.XX.XX >> extfile.cnf

 `$HOST`是你的`IP`或者域名,使用时将`$HOST`替换为自己的`IP`或者域名。

 如:

 

127.0.0.1 服务器上的 docker,只允许ip地址为225.225.225.0的客户连接

echo subjectAltName = DNS:127.0.0.1,IP:225.225.225.0 >> extfile.cnf

ideaopen.cn 服务器上的 docker,只允许ip地址为225.225.225.0的客户连接

echo subjectAltName = DNS:ideaopen.cn,IP:225.225.225.0 >> extfile.cnf

2. 允许所有`IP`连接

 设置`IP`为`0.0.0.0`即可。

 如:

 

echo subjectAltName = DNS:127.0.0.1,IP:0.0.0.0 >> extfile.cnf

 **注:只允许永久证书的才可以连接成功**


然后需要将Docker守护进程密钥的扩展使用属性设置为仅用于服务器身份验证:



echo extendedKeyUsage = serverAuth >> extfile.cnf



> 
> **7,生成已签名的证书(signed certificate)**
> 
> 
> 


这里执行命令后需要输入之前设置的密码



[root@VM-12-4-centos ca_key]# openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \

-CAcreateserial -out server-cert.pem -extfile extfile.cnf
Signature ok
subject=/CN=127.0.0.1
Getting CA Private Key
Enter pass phrase for ca-key.pem:


授权插件提供了更细粒度的控制,以补充来自双向TLS的身份验证。除了上述描述的其他信息外,在Docker守护进程上运行的授权插件还接收用于连接Docker客户端的证书信息。


如果第二次申请颁发证书,可能会出现**ca.srl: No such file or directory**的问题。


此时我们**echo “01” > ca.srl** 即可,这个文件影响到ca颁发的证书的序号,而证书序号应该是唯一的,所以这点需要控制好。



> 
> **8,生成客户端key**
> 
> 
> 


对于客户端身份验证,我们还需要创建客户端密钥和证书签名请求:


注意:为了简化接下来的几个步骤,我们可以在Docker守护进程的主机上执行此步骤。



[root@VM-12-4-centos ca_key]# openssl genrsa -out key.pem 4096
Generating RSA private key, 4096 bit long modulus
…++
…++
e is 65537 (0x10001)
[root@VM-12-4-centos ca_key]# openssl req -subj ‘/CN=client’ -new -key key.pem -out client.csr


此外为了使密钥适合客户端身份验证,还需要创建一个新的扩展配置文件:



[root@VM-12-4-centos ca_key]# echo extendedKeyUsage = clientAuth >> extfile.cnf
[root@VM-12-4-centos ca_key]# echo extendedKeyUsage = clientAuth > extfile-client.cnf


然后就可以生成已签名的客户端key了。



[root@VM-12-4-centos ca_key]# openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \

-CAcreateserial -out cert.pem -extfile extfile-client.cnf
Signature ok
subject=/CN=client
Getting CA Private Key
Enter pass phrase for ca-key.pem:


此时可以看到我们当初创建的ca\_key文件里已经有很多文件了。



[root@VM-12-4-centos ca_key]# ll
total 44
-rw-r–r-- 1 root root 3326 Apr 10 10:29 ca-key.pem
-rw-r–r-- 1 root root 2082 Apr 10 10:56 ca.pem
-rw-r–r-- 1 root root   17 Apr 10 13:45 ca.srl
-rw-r–r-- 1 root root 1854 Apr 10 13:45 cert.pem
-rw-r–r-- 1 root root 1582 Apr 10 13:40 client.csr
-rw-r–r-- 1 root root   30 Apr 10 13:43 extfile-client.cnf
-rw-r–r-- 1 root root  102 Apr 10 13:42 extfile.cnf
-rw-r–r-- 1 root root 3243 Apr 10 13:40 key.pem
-rw-r–r-- 1 root root 1895 Apr 10 13:36 server-cert.pem
-rw-r–r-- 1 root root 1586 Apr 10 13:26 server.csr
-rw-r–r-- 1 root root 3247 Apr 10 11:45 server-key.pem


但是有很多多余的配置文件,生成`cert.pem`,`server-cert.pem`后,一些签名请求和扩展配置文件可以安全删除了。



#删除多余文件
[root@VM-12-4-centos ca_key]# rm -v client.csr server.csr extfile.cnf extfile-client.cnf
rm: remove regular file ‘client.csr’? y
removed ‘client.csr’
rm: remove regular file ‘server.csr’? y
removed ‘server.csr’
rm: remove regular file ‘extfile.cnf’? y
removed ‘extfile.cnf’
rm: remove regular file ‘extfile-client.cnf’? y
removed ‘extfile-client.cnf’



> 
> **9,修改权限**
> 
> 
> 


为了防止密钥文件被误删或者损坏,我们可以改变一下文件权限,让它只读就可以。



[root@VM-12-4-centos ca_key]# chmod -v 0400 ca-key.pem key.pem server-key.pem
mode of ‘ca-key.pem’ changed from 0644 (rw-r–r–) to 0400 (r--------)
mode of ‘key.pem’ changed from 0644 (rw-r–r–) to 0400 (r--------)
mode of ‘server-key.pem’ changed from 0644 (rw-r–r–) to 0400 (r--------)


为了防止证书损坏,我们也删除它的写入权限。



[root@VM-12-4-centos ca_key]# chmod -v 0444 ca.pem server-cert.pem cert.pem
mode of ‘ca.pem’ changed from 0644 (rw-r–r–) to 0444 (r–r–r–)
mode of ‘server-cert.pem’ changed from 0644 (rw-r–r–) to 0444 (r–r–r–)
mode of ‘cert.pem’ changed from 0644 (rw-r–r–) to 0444 (r–r–r–)


**归集服务器证书**


将证书存放在docker配置文件夹下



[root@VM-12-4-centos ca_key]# cp server-*.pem /etc/docker/
[root@VM-12-4-centos ca_key]# cp ca.pem /etc/docker/



> 
> **10,修改Docker配置**
> 
> 
> 


这里需要设置`Docker`的守护程序,让它仅接收来自提供了`CA`信任证书的客户端连接。



#vim
vim /lib/systemd/system/docker.service

也可以vi

vi /lib/systemd/system/docker.service


将 `ExecStart` 属性值进行修改:



[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service

[Service]
Type=notify

the default is not to use systemd for cgroups because the delegate issues still

exists and systemd currently does not support the cgroup feature set required

for containers run by docker

#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375     修改为下面的->
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/www/server/docker/ca_key/ca.pem --tlscert=/www/server/docker/ca_key/server-cert.pem --tlskey=/www/server/docker/ca_key/server-key.pem -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0


**重载配置并启动Docker**



[root@VM-12-4-centos ca_key]# systemctl daemon-reload
[root@VM-12-4-centos ca_key]# systemctl restart docker
[root@VM-12-4-centos ca_key]# systemctl status docker
● docker.service - Docker Application Container Engine
  Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
  Active: active (running) since Mon 2023-04-10 14:07:15 CST; 9s ago
    Docs: https://docs.docker.com
Main PID: 5392 (dockerd)
  Tasks: 50
  Memory: 43.2M
  CGroup: /system.slice/docker.service
          ├─5392 /usr/bin/dockerd --tlsverify --tlscacert=/www/server/docker/ca_key/ca.pem --tlscert=/www/server/docker/ca_key/server-cert.pem --tlskey=/www/server/docker/ca_key/server-key…
          ├─5585 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 3303 -container-ip 172.18.1.30 -container-port 3306
          ├─5591 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 3303 -container-ip 172.18.1.30 -container-port 3306
          ├─5603 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 9000 -container-ip 172.17.0.2 -container-port 9000
          ├─5608 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 9000 -container-ip 172.17.0.2 -container-port 9000
          ├─5713 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8848 -container-ip 172.18.1.48 -container-port 8848
          └─5718 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8848 -container-ip 172.18.1.48 -container-port 8848


## IDEA远程连接测试


将服务器中的如下四个证书文件下载到本地,并创建文件夹存放。


![](https://img-blog.csdnimg.cn/6f776c4c7c764d599079c96d808d70fe.png)


 然后在IDEA中配置docker证书地址与远程连接配置。证书文件夹就是本地存放那四个证书文件的本地目录。


![](https://img-blog.csdnimg.cn/4aa3afd7edf84a2cb467e670ad84c86c.png)


![](https://img-blog.csdnimg.cn/66d2620bf2f84713ac1b1877f3671648.png)


看到下面的**连接成功**就证明IDEA已经与远程Docker连接成功,就可以在项目中用Docker进行协同操作了。


## 后记


看了这么一大串配置流程,一步一步来操作显然非常麻烦,而且大多操作其实完全可以进行封装使用,因此将创建证书的操作用脚本封装起来用才能事半功倍。具体的脚本和使用方法已经放到笔者资源里了。有需求自取即可~







### 给大家的福利


**零基础入门**


对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。


![](https://img-blog.csdnimg.cn/img_convert/95608e9062782d28f4f04f821405d99a.png)


同时每个成长路线对应的板块都有配套的视频提供:


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a91b9e8100834e9291cfcf1695d8cd42.png#pic_center)

因篇幅有限,仅展示部分资料

**需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)**

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618540462)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
开启Docker的远程安全访问,需要进行以下步骤: 1. 首先,需要修改Docker守护进程的配置文件。根据引用\[2\]中的内容,可以通过修改ExecStart属性值来实现。在ExecStart属性值中添加`--tlsverify`参数来启用TLS验证,`--tlscacert`参数指定TLS CA证书的路径,`--tlscert`参数指定TLS证书的路径,`--tlskey`参数指定TLS私钥的路径,`-H tcp://0.0.0.0:2375`参数指定Docker守护进程监听的远程访问端口。这样就可以开启Docker的远程安全访问。 2. 接下来,需要重新加载Docker守护进程的配置文件,以使修改生效。可以使用以下命令来重新加载配置文件:`sudo systemctl daemon-reload`。 3. 最后,重新启动Docker守护进程,使修改的配置生效。可以使用以下命令来重新启动Docker守护进程:`sudo systemctl restart docker`。 这样,Docker开启了远程安全访问,可以通过指定TLS证书和私钥来进行安全的远程通信。 #### 引用[.reference_title] - *1* *3* [Docker开启配置远程安全访问](https://blog.csdn.net/qq_42263280/article/details/130116495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Docker开放远程安全访问开启2376端口和CA认证)](https://blog.csdn.net/guochengabcd/article/details/126284964)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值