电商系统网站开发,南昌房产网官方,凡客东西网,网站开发工程师介绍最近为了项目需要#xff0c;把docker 的远程端口2375 给开放了。不出意外出意外了。没多久#xff0c;网站报流量告警#xff0c;第一反应就是开放2375这个端口问题导致#xff0c;毫不迟疑直接切换服务器。关闭该台服务器的docker服务#xff0c;并逐步清理掉挖矿进程把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是一个临时文件最后可以删除。
[rootweb-dev01 dockerauth]# openssl genrsa -out ~/dockerauth/ca-key.pem 40962.使用CA私钥生成自签名CA证书ca.pem。生成证书时通过-days 365设置证书的有效期。单位为天默认情况下为30天。
[rootweb-dev01 dockerauth]# openssl req -x509 -sha256 -batch -subj /CCN/STchongqing/LChongqing/Oqinghub/OULaboratory/CNwww.qinghub.net -new -days 3650 -key ~/dockerauth/ca-key.pem -out ~/dockerauth/ca.pem
[rootweb-dev01 dockerauth]# ll
总用量 8
-rw------- 1 root root 3243 3月 26 15:29 ca-key.pem
-rw-r--r-- 1 root root 2074 3月 26 15:32 ca.pem
[rootweb-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。
[rootweb-dev01 dockerauth]# openssl req -x509 -sha256 -batch -subj /CCN/STChongqing/LChongqing/Oqinghub/OULaboratory/CNwww.qinghub.net -new -days 3650 -key ~/dockerauth/ca-key.pem -out ~/dockerauth/ca.pem
[rootweb-dev01 dockerauth]# openssl genrsa -out ~/dockerauth/server-key.pem 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
..........................
............................................................................................
e is 65537 (0x010001)
[rootweb-dev01 dockerauth]# openssl req -subj /CNDockerDaemon -sha256 -new -key ~/dockerauth/server-key.pem -out ~/dockerauth/server-csr.pem
[rootweb-dev01 dockerauth]# ll
总用量 20
-rw------- 1 root root 3243 3月 26 15:29 ca-key.pem
-rw-r--r-- 1 root root 2074 3月 26 15:38 ca.pem
-rw-r--r-- 1 root root 1590 3月 26 15:45 server-csr.pem
-rw------- 1 root root 3247 3月 26 15:38 server-key.pem
4.使用CA证书生成服务器证书server-cert.pem。TLS连接时需要限制客户端的IP列表或者域名列表。只有在列表中的客户端才能通过客户端证书访问Docker Daemon。如果添加0.0.0.0则所有客户端都可以通过证书访问Docker Daemon。
首先生成allow.list
[rootweb-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
[rootweb-dev01 dockerauth]# ll
总用量 16
-rw-r--r-- 1 root root 69 3月 26 15:41 allow.list
再通过allow.list生成server-cert.pem
[rootweb-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
subjectCN DockerDaemon
Getting CA Private Key
[rootweb-dev01 dockerauth]# ll
5.生成客户端私钥client-key.pem和client-csr.pem。CN为DockerClient。
client-csr.pem是一个临时文件生成client-cert.pem以后可以删除。
[rootweb-dev01 dockerauth]# openssl genrsa -out ~/dockerauth/client-key.pem 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
.........
...........................................
e is 65537 (0x010001)
[rootweb-dev01 dockerauth]# openssl req -subj /CNDockerClient -new -key ~/dockerauth/client-key.pem -out ~/dockerauth/client-csr.pem
[rootweb-dev01 dockerauth]# ll
总用量 36
-rw-r--r-- 1 root root 69 3月 26 15:41 allow.list
-rw------- 1 root root 3243 3月 26 15:29 ca-key.pem
-rw-r--r-- 1 root root 2074 3月 26 15:38 ca.pem
-rw-r--r-- 1 root root 41 3月 26 15:45 ca.srl
-rw-r--r-- 1 root root 1590 3月 26 15:47 client-csr.pem
-rw------- 1 root root 3247 3月 26 15:47 client-key.pem
-rw-r--r-- 1 root root 1883 3月 26 15:45 server-cert.pem
-rw-r--r-- 1 root root 1590 3月 26 15:45 server-csr.pem
-rw------- 1 root root 3247 3月 26 15:38 server-key.pem
6.使用CA证书生成客户端证书client-cert.pem。需要加入extendedKeyUsage选项。
[rootweb-dev01 dockerauth]# echo extendedKeyUsage clientAuth ~/dockerauth/options.list
[rootweb-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
subjectCN DockerClient
Getting CA Private Key
[rootweb-dev01 dockerauth]#7.成功生成了需要的证书和秘钥可以删除临时文件。并修改密钥访问权限
所有生成得文件如下
[rootweb-dev01 dockerauth]# ll
总用量 44
-rw-r--r-- 1 root root 69 3月 26 15:41 allow.list
-rw------- 1 root root 3243 3月 26 15:29 ca-key.pem
-rw-r--r-- 1 root root 2074 3月 26 15:38 ca.pem
-rw-r--r-- 1 root root 41 3月 26 16:01 ca.srl
-rw-r--r-- 1 root root 1862 3月 26 16:01 client-cert.pem
-rw-r--r-- 1 root root 1590 3月 26 15:47 client-csr.pem
-rw------- 1 root root 3247 3月 26 15:47 client-key.pem
-rw-r--r-- 1 root root 30 3月 26 16:01 options.list
-rw-r--r-- 1 root root 1883 3月 26 15:45 server-cert.pem
-rw-r--r-- 1 root root 1590 3月 26 15:45 server-csr.pem
-rw------- 1 root root 3247 3月 26 15:38 server-key.pem
[rootweb-dev01 dockerauth]#
[rootweb-dev01 dockerauth]# 删除并修改权限
[rootweb-dev01 dockerauth]# rm -f ~/dockerauth/server-csr.pem ~/dockerauth/client-csr.pem ~/dockerauth/allow.list ~/dockerauth/options.list
[rootweb-dev01 dockerauth]#
[rootweb-dev01 dockerauth]# chmod 0444 ~/dockerauth/ca.pem ~/dockerauth/server-cert.pem ~/dockerauth/client-cert.pem
[rootweb-dev01 dockerauth]# chmod 0400 ~/dockerauth/ca-key.pem ~/dockerauth/server-key.pem ~/dockerauth/client-key.pem
[rootweb-dev01 dockerauth]# ll
总用量 28
-r-------- 1 root root 3243 3月 26 15:29 ca-key.pem
-r--r--r-- 1 root root 2074 3月 26 15:38 ca.pem
-rw-r--r-- 1 root root 41 3月 26 16:01 ca.srl
-r--r--r-- 1 root root 1862 3月 26 16:01 client-cert.pem
-r-------- 1 root root 3247 3月 26 15:47 client-key.pem
-r--r--r-- 1 root root 1883 3月 26 15:45 server-cert.pem
-r-------- 1 root root 3247 3月 26 15:38 server-key.pem
[rootweb-dev01 dockerauth]# 第二步修改启动配置。
启动Docker Deamon时需要设置-H、–tls、–tlscacertca.pem、–tlscertserver-cert.pem和–tlskeyserver-key.pem。此时只有客户端列表中的主机能够访问Docker主机。
1、重启Docker Daemon加入ca.pem、server-cert.pem和server-key.pem。-H0.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 -H0.0.0.0:2376 -H fd:// --containerd/run/containerd/containerd.sock
[Unit]
DescriptionDocker Application Container Engine
Documentationhttps://docs.docker.com
Afternetwork-online.target firewalld.service containerd.service
Wantsnetwork-online.target
Requiresdocker.socket containerd.service[Service]
Typenotify
ExecStart/usr/bin/dockerd --tlsverify --tlscacert/root/dockerauth/ca.pem --tlscert/root/dockerauth/server-cert.pem --tlskey/root/dockerauth/server-key.pem -H0.0.0.0:2376 -H fd:// --containerd/run/containerd/containerd.sock
ExecReload/bin/kill -s HUP
TimeoutSec0
RestartSec2
Restartalways
StartLimitBurst3
StartLimitInterval60s
LimitNOFILEinfinity
LimitNPROCinfinity
LimitCOREinfinity
TasksMaxinfinity
Delegateyes
KillModeprocess
OOMScoreAdjust-500[Install]
WantedBymulti-user.target2.在客户端运行docker命令时加入ca.pem、client-cert.pem和client-key.pem。本例中只有127.0.0.1和10.0.0.2210.0.0.21的客户端可以访问Docker Daemon。
[rootweb-dev01 dockerauth]# docker --tlsverify --tlscacert/root/dockerauth/ca.pem --tlscert/root/dockerauth/client-cert.pem --tlskey/root/dockerauth/client-key.pem -Htcp://10.0.0.22:2376 info
Client:Version: 24.0.5Context: defaultDebug Mode: falseServer:Containers: 8Running: 8Paused: 0看到如上示例中得信息说明已经配置成功。