Docker服务开放了2375这个端口,服务器引起安全漏洞!

  • Post author:
  • Post category:其他


使用docker-maven-plugin打包SpringBoot应用的Docker镜像时,服务器需要开放2375端口。会引起安全漏洞,被人入侵、挖矿、CPU飙升发生,使用安全传输层协议(TLS)进行传输并使用CA认证即可。

制作证书及秘钥

  • 1.首先创建一个目录用于存储生成的证书和秘钥
mkdir /mydata/docker-ca && cd /mydata/docker-ca
  • 创建CA证书私钥,期间需要输入两次用户名和密码,生成文件为ca-key.pem;
openssl genrsa -aes256 -out ca-key.pem 4096
  • 根据私钥创建CA证书,期间需要输入上一步设置的私钥密码,生成文件为ca.pem;
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -subj "/CN=*" -out ca.pem
  • 创建服务端私钥,生成文件为server-key.pem;
openssl genrsa -out server-key.pem 4096
  • 创建服务端证书签名请求文件,用于CA证书给服务端证书签名,生成文件server.csr;
openssl req -subj "/CN=*" -sha256 -new -key server-key.pem -out server.csr

-创建CA证书签名好的服务端证书,期间需要输入CA证书私钥密码,生成文件为server-cert.pem;

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem

-创建客户端私钥,生成文件为key.pem;

openssl genrsa -out key.pem 4096
  • 创建客户端证书签名请求文件,用于CA证书给客户证书签名,生成文件client.csr;
openssl req -subj "/CN=client" -new -key key.pem -out client.csr
  • 为了让秘钥适合客户端认证,创建一个扩展配置文件extfile-client.cnf;
echo extendedKeyUsage = clientAuth > extfile-client.cnf
  • 创建CA证书签名好的客户端证书,期间需要输入CA证书私钥密码,生成文件为cert.pem;
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile-client.cnf

-删除创建过程中多余的文件;

rm -rf ca.srl server.csr client.csr extfile-client.cnf
  • 最终生成文件如下,有了它们我们就可以进行基于TLS的安全访问了。
ca.pem CA证书
ca-key.pem CA证书私钥
server-cert.pem 服务端证书
server-key.pem 服务端证书私钥
cert.pem 客户端证书
key.pem 客户端证书私钥

配置Docker支持TLS

  • 用vim编辑器修改docker.service文件;
vi /usr/lib/systemd/system/docker.service
  • 修改以ExecStart开头的配置,开启TLS认证,并配置好CA证书、服务端证书和服务端私钥,修改内容如下;
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375 --tlsverify --tlscacert=/mydata/docker-ca/ca.pem --tlscert=/mydata/docker-ca/server-cert.pem --tlskey=/mydata/docker-ca/server-key.pem
  • 重启Docker服务,这样我们的Docker服务就支持使用TLS进行远程访问了!
systemctl daemon-reload && systemctl restart docker

pom.xml修改

  • 将如下文件复制到指定目录,这里复制到了I:\developer\env\docker-ca;
ca.pem CA证书
cert.pem 客户端证书
key.pem 客户端证书私钥
  • 然后将该目录配置在插件的节点下,最终插件配置如下;
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.2</version>
    <executions>
        <execution>
            <id>build-image</id>
            <phase>package</phase>
            <goals>
                <goal>build</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <imageName>mall-tiny/${project.artifactId}:${project.version}</imageName>
        <dockerHost>https://192.168.3.101:2375</dockerHost>
        <baseImage>java:8</baseImage>
        <entryPoint>["java", "-jar","/${project.build.finalName}.jar"]
        </entryPoint>
        <dockerCertPath>I:\developer\env\docker-ca</dockerCertPath>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>
  • 再次打包镜像,发现已经可以成功打包镜像,从此我们的2375端口终于可以安全使用了!



版权声明:本文为weixin_45972606原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。