博客
关于我
Docker实战 | 第五篇:Docker启用TLS加密解决暴露2375端口引发的安全漏洞,被黑掉三台云主机的教训总结
阅读量:426 次
发布时间:2019-03-06

本文共 3420 字,大约阅读时间需要 11 分钟。

2375端口安全性与TLS配置实操指南

前言

之前在一篇文章中,我尝试通过开放服务器2375端口来监听 Docker API,但这导致了严重的安全问题。两台阿里云服务器的 root 账号被劫持,ucloud 服务器内存被挖矿占满。这次经历让我深刻认识到:如果不采取加密措施,暴露 Docker API 端口的风险远不止你想象的那样。

这篇文章将介绍如何通过 TLS 加密 Docker API 来解决这一问题。我们将从设置主机名、生成 TLS 证书、配置 Docker 启用 TLS、IDEA 配置以及项目部署等方面展开实操步骤。


实操指南

1. 设置主机名

每个服务器都需要一个独特的主机名。我们可以通过以下命令来设置服务器的主机名:

vim /etc/hostname

输入主机名,例如 a.youlai.store,然后保存退出。

2. 生成 TLS 证书

为了确保 Docker API 的安全性,我们需要生成 TLS 证书。以下是生成证书的脚本及其步骤:

mkdir -p /script /data/cert/dockertouch /script/cert.shvim /script/cert.sh

将以下内容添加到脚本中:

#!/bin/bashset -eif [ -z "$1" ]; then    echo "请输入 Docker 服务器主机名"    exit 0fiHOST=$1mkdir -p /data/cert/dockercd /data/cert/dockeropenssl genrsa -aes256 -out ca-key.pem 4096openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pemopenssl genrsa -out server-key.pem 4096openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr# 配置白名单,推荐配置 0.0.0.0,允许所有 IP 连接但只有证书才能成功连接echo subjectAltName = DNS:$HOST,IP:0.0.0.0 > extfile.cnfopenssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnfopenssl genrsa -out key.pem 4096openssl req -subj '/CN=client' -new -key key.pem -out client.csrecho extendedKeyUsage = clientAuth > extfile.cnfopenssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnfchmod -v 0400 ca-key.pem key.pem server-key.pemchmod -v 0444 ca.pem server-cert.pem cert.pem

运行脚本并输入服务器主机名:

sh /script/cert.sh a.youlai.store

生成的证书文件会存放在 /data/cert/docker 目录中。


3. 配置 Docker 启用 TLS

接下来,我们需要配置 Docker 启用 TLS 加密。以下是具体步骤:

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

ExecStart 属性后追加以下内容:

--tlsverify --tlscacert=/data/cert/docker/ca.pem \--tlscert=/data/cert/docker/server-cert.pem \--tlskey=/data/cert/docker/server-key.pem \-H tcp://0.0.0.0:2376 -H unix://var/run/docker.sock

保存退出后,重新加载 Docker 配置并重启服务:

systemctl daemon-reloadsystemctl restart docker

检查 2376 端口是否正常运行:

netstat -nltp | grep 2376

4. IDEA 配置

在 IDEA 中配置 Docker 的 TLS 认证,按以下步骤操作:

  • 将服务器的 ca.pemcert.pemkey.pem 文件从服务器下载到本地。

  • 在 IDEA 中打开 pom.xml 文件,找到 Docker 插件配置:

  • org.springframework.boot
    spring-boot-maven-plugin
    com.spotify
    docker-maven-plugin
    1.0.0
    build-image
    package
    build
    ${project.artifactId}
    latest
    openjdk:8-jdk-alpine
    /
    ["java","-jar","${project.build.finalName}.jar"]
    https://a.youlai.store:2376
    C:\certs\docker\a.youlai.store
    /
    ${project.build.directory}
    ${project.build.finalName}.jar

    5. 打包测试

    完成以上配置后,可以运行以下命令进行打包测试:

    mvn clean package docker:build

    结语

    通过以上步骤,我们成功配置了 Docker API 的 TLS 加密,避免了 2375 端口的安全隐患。如果您在实际操作中遇到问题,欢迎在评论区留言,我会第一时间为您解答!

    转载地址:http://noxuz.baihongyu.com/

    你可能感兴趣的文章
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>