docker remote api一键TLS加密的实现

目录
  • 1、修改docker的2375端口为另外的端口,这只是权宜之计。
  • 2、给docker进行tls加密

最近公司服务器被挖矿了,最后原因定位到docker的2375端口。

让我们来理一下,最开始发现docker中莫名其妙多了几个镜像和正在运行的容器,而且很吃CPU,且2375端口未设置ip访问规则,意思就是所有人都可以通过你的2375端口操作你的docekr,且用启动容器挂载宿主机文件夹,因为docker使用root权限启动的,所以所有人都可以通过你的2375端口以root用户控制你的宿主机。

下面讲一下我们的应对步骤:

1、修改docker的2375端口为另外的端口,这只是权宜之计。

$ vi /usr/lib/systemd/system/docker.service

重启docker:

$ systemctl daemon-reload
$ systemctl restart docker

2、给docker进行tls加密

#!/bin/bash
mkdir -p /root/tls/pem
DOMAIN_HOST=`ifconfig eth0 | grep "inet" | awk '{ print $2}' | sed -n '1p;1q'`
#DOMAIN_HOST=`hostname` #选择域名方案最好
HOST=$DOMAIN_HOST
# 自定义信息
PASSWORD="yourPassword"
COUNTRY=CN
PROVINCE=gd
CITY=gz
ORGANIZATION=dounine
GROUP=dg
NAME=lake
SUBJ="/C=$COUNTRY/ST=$PROVINCE/L=$CITY/O=$ORGANIZATION/OU=$GROUP/CN=$HOST"
# 自定义信息
#============================================================================================
#此形式是自己给自己签发证书,自己就是CA机构,也可以交给第三方机构去签发
# 生成根证书RSA私钥,password作为私钥密码(身份证)
openssl genrsa -passout pass:$PASSWORD -aes256 -out /root/tls/pem/ca-key.pem 4096
# 2.用根证书RSA私钥生成自签名的根证书(营业执照)
openssl req -new -x509 -days 365 -passin pass:$PASSWORD -key /root/tls/pem/ca-key.pem -sha256 -subj $SUBJ -out /root/tls/pem/ca.pem
#============================================================================================
#给服务器签发证书
# 1.服务端生成自己的私钥
openssl genrsa -out /root/tls/pem/server-key.pem 4096
# 2.服务端生成证书(里面包含公钥与服务端信息)
openssl req -new -sha256 -key /root/tls/pem/server-key.pem -out /root/tls/pem/server.csr -subj "/CN=$DOMAIN_HOST"
# 3.通过什么形式与我进行连接,可设置多个IP地扯用逗号分隔
echo subjectAltName=IP:$DOMAIN_HOST,IP:0.0.0.0 > /tmp/extfile.cnf
# 4.权威机构对证书进行进行盖章生效
openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in /root/tls/pem/server.csr -CA /root/tls/pem/ca.pem -CAkey /root/tls/pem/ca-key.pem -CAcreateserial -out /root/tls/pem/server-cert.pem -extfile /tmp/extfile.cnf
#============================================================================================
#给客户端签发证书
openssl genrsa -out /root/tls/pem/client-key.pem 4096
openssl req -subj '/CN=client' -new -key /root/tls/pem/client-key.pem -out /root/tls/pem/client.csr
echo extendedKeyUsage = clientAuth > /tmp/extfile.cnf
openssl x509 -passin pass:$PASSWORD -req -days 365 -sha256 -in /root/tls/pem/client.csr -CA /root/tls/pem/ca.pem -CAkey /root/tls/pem/ca-key.pem -CAcreateserial -out /root/tls/pem/client-cert.pem -extfile /tmp/extfile.cnf
#============================================================================================
# 清理文件
rm -rf /root/tls/pem/ca-key.pem
rm -rf /root/tls/pem/{server,client}.csr
rm -rf /root/tls/pem/ca.srl
# 最终文件
# ca.pem  ==  CA机构证书
# client-cert.pem  ==  客户端证书
# client-key.pem  ==  客户私钥
# server-cert.pem  == 服务端证书
# server-key.pem  ==  服务端私钥

注意:

  • 当DOMAIN_HOST设置成域名时,echo subjectAltName=IP:$DOMAIN_HOST,IP:0.0.0.0 > /tmp/extfile.cnf这段代码的$DOMAIN_HOST应该替换为你的服务器的公网ip
  • echo subjectAltName=IP:$DOMAIN_HOST,IP:0.0.0.0 > /tmp/extfile.cnf中的IP:0.0.0.0表示所有ip都可以通过携带证书访问,虽然这里是设定了所有,但是不应该省略显示的定义自己服务器的公网ip。即为IP:$yourip,IP:0.0.0.0,而不是IP:0.0.0.0

赋予该文件执行权限:

$ chmod +x tls.sh

执行该shell脚本后,会在/root/tls/pem目录下生成ca.pem、client-cert.pem、client-key.pem 、server-cert.pem、server-key.pem。

然后修改docker配置:

$ vim /usr/lib/systemd/system/docker.service

添加:

		--tlsverify \
        --tlscacert=/root/tls/pem/ca.pem \
        --tlscert=/root/tls/pem/server-cert.pem \
        --tlskey=/root/tls/pem/server-key.pem \

重启docker:

$ systemctl daemon-reload
$ systemctl restart docker

现在使用docker remote api进行连接:

无认证:

$ docker -H tcp://192.168.0.150:2376 version

会报错未认证。

携带认证方式:

docker --tlsverify --tlscacert=/root/tls/pem/ca.pem --tlscert=/root/tls/pem/client-cert.pem --tlskey=/root/tls/pem/client-key.pem -H tcp://192.168.0.150:2376 version

到此这篇关于docker remote api一键TLS加密的实现的文章就介绍到这了,更多相关docker remote api一键TLS加密内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于docker安全之Docker-TLS加密通讯问题

    一.docker存在的安全问题 docker自身漏洞 作为一款应用 Docker 本身实现上会有代码缺陷.CVE官方记录Docker历史版本共有超过20项漏洞.黑客常用的攻击手段主要有代码执行.权限提升. 信息泄露.权限绕过等.目前 Docker 版本更迭非常快,Docker 用户最好将 Docker 升级为 最新版本. docker源码问题 Docker 提供了 Docker hub,可以让用户上传创建的镜像,以便其他用户下载,快速搭 建环境.但同时也带来了一些安全问题. 例如下面三种方式:

  • 使用TLS加密通讯远程连接Docker的示例详解

    默认情况下,Docker 通过非联网 UNIX 套接字运行.它还可以使用 HTTP 套接字进行可选通信. 如果需要以安全的方式通过网络访问 Docker,可以通过指定标志将 Docker 标志指向受信任的 CA 证书来启用 TLS. 在守护程序模式下,它只允许来自由该 CA 签名的证书验证的客户端的连接.在客户端模式下,它仅连接到具有该 CA 签名的证书的服务器. # 创建CA证书目录 [root@localhost ~]# mkdir tls [root@localhost ~]# cd tl

  • docker remote api一键TLS加密的实现

    目录 1.修改docker的2375端口为另外的端口,这只是权宜之计. 2.给docker进行tls加密 最近公司服务器被挖矿了,最后原因定位到docker的2375端口. 让我们来理一下,最开始发现docker中莫名其妙多了几个镜像和正在运行的容器,而且很吃CPU,且2375端口未设置ip访问规则,意思就是所有人都可以通过你的2375端口操作你的docekr,且用启动容器挂载宿主机文件夹,因为docker使用root权限启动的,所以所有人都可以通过你的2375端口以root用户控制你的宿主机.

  • SpringBoot+Docker+IDEA 实现一键构建+推送、运行、同镜像多容器启动(推荐)

    场景: 由于公司项目需要,需要使用部署微服务项目,而之前都是使用tomcat部署,操作十分繁琐.最近正好在学习Docker,利用Docker容器做部署尝试 需求: 使用Docker部署服务 支持idea插件,一键操作构建.推送镜像.运行 单个镜像需根据不同端口部署多个容器 日志持久化 必要软件 服务器(我的版本为CentOS:7.9) Docker(需要开通远程访问,正式环境请使用证书加密,我这里测试用无加密) Harbor 镜像仓库(可选) 开发端 Docker Desktop (支持本地运行

  • SpringBoot+Docker+IDEA实现一键构建+推送、运行、同镜像多容器启动

    场景: 由于公司项目需要,需要使用部署微服务项目,而之前都是使用tomcat部署,操作十分繁琐.最近正好在学习Docker,利用Docker容器做部署尝试 需求: 使用Docker部署服务 支持idea插件,一键操作构建.推送镜像.运行 单个镜像需根据不同端口部署多个容器 日志持久化 必要软件 服务器(我的版本为CentOS:7.9) Docker(需要开通远程访问,正式环境请使用证书加密,我这里测试用无加密) Harbor 镜像仓库(可选) 开发端 Docker Desktop (支持本地运行

  • idea使用docker插件实现一键自动化部署

    目录 环境: 一. docker开启远程连接访问 安装配置idea的docker插件 创建项目,并配置 一 . 创建项目 二. 配置项目 maven打包,生成镜像 创建容器,项目部署到docker 修改项目,一键部署 参考 环境: ​ jdk1.8及以上. Maven 3.2+ ​ idea ​ docker 一. docker开启远程连接访问 首先我们要开启docker的远程连接访问.保证不是docker所在的服务器,也能够远程访问docker. Linux版的docker: 修改docker

  • Linux+Docker+SpringBoot+IDEA一键自动化部署的详细步骤

    Linux+Docker+SpringBoot+IDEA一键自动化部署的步骤 记录从打包到服务器配置上线全流程 安装docker 详细步骤请戳这里 用yum源安装用yum源安装 查看是否已安装docker列表 yum list installed | grep docke 安装docker yum -y install docker -y表示不询问安装,直到安装成功,安装完后再次查看安装列表 开放2375端口,开启远程访问 vim /usr/lib/systemd/system/docker.s

  • Mac OSX系统 Docker启用Docker远程API功能

    在Mac OSX系统的Docker机上启用Docker远程API功能 Docker守护进程提供了一套远程REST API,具体可以参考文档: https://docs.docker.com/engine/reference/api/docker_remote_api/ 这套API是提供给客户端与Docker引擎通信时使用,这套API也可以由其他工具调用,比如curl或Chrome浏览器的Postman REST客户端工具. 如果是在Mac OSX Mavericks系统上使用Docker机创建D

  • docker python api 安装配置的详解

    docker python api 安装配置的详解 1.docker宿主机配置文件修改 $vim /etc/default/docker #再已有OPTS中添加 DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock" 使得可以通过tcp的2375端口连接到docker守护进程中,第二个-H及之后的内容可以省略 2.安装docker-py $sudo pip install docker-py 3.编写api脚本

  • docker和docker-compose一键安装教程(支持在线和离线)

    shell脚本 #!/bin/sh # 当前目录 CURRENT_DIR=$( cd "$(dirname "$0")" pwd ) #Install docker if which docker >/dev/null; then echo "检测到 Docker 已安装,跳过安装步骤" docker -v echo "启动 Docker " service docker start 2>&1 | tee

  • Docker开启安全的TLS远程连接访问方式

    目录 1.1 不安全的远程访问方式 1.1.1 编辑docker.service文件: 1.1.2 重新加载Docker配置生效 1.1.3 警告! 2.1 建立基于TLS数字签名的安全连接 1.1 不安全的远程访问方式 1.1.1 编辑docker.service文件: vi /usr/lib/systemd/system/docker.service 找到 [Service] 节点,修改 ExecStart 属性,增加 -H tcp://0.0.0.0:2375 ExecStart=/usr

随机推荐