Docker暴露2375端口导致服务器被攻击问题及解决方法

Docker暴露2375端口导致服务器被攻击问题及解决方法

问题描述

Docker默认情况下会在服务器上的2375端口上开放API,由于这个API没有任何的认证措施,且默认情况下是允许任何IP地址连接的,所以如果不做任何调整,服务器将变得非常容易受到攻击。

示例一

以下是一种攻击方式,攻击者可以使用类似以下命令行工具的脚本程序:

docker -H tcp://your-server-ip:2375 ps

该程序会向你的服务器上的Docker API端口发送一个查询命令,返回Docker镜像及运行的容器的相关信息。但是,如果你暴露了Docker API端口,这个查询命令就会变得非常危险,该攻击者可以非常容易地了解到所有运行的容器及其配置信息,从而攻击你的服务器。

示例二

另外一个更加严重的攻击方式涉及到在你的服务器上创建一个新的容器,该容器将被用于执行有害的操作。攻击者可以使用类似以下命令行工具的脚本程序:

docker -H tcp://your-server-ip:2375 run -v /:/mnt -ti bash

该命令将会在你的服务器上运行一个新的bash shell,你的服务器上的根目录将会被挂载到这个容器的/mnt目录下,攻击者可以使用这个bash shell执行任何他想执行的命令,这场攻击会对你的服务器造成极大的危害。

解决方法

方法一:禁止Docker的API端口

首先,在你的服务器上执行以下命令行,停止并禁用Docker的服务:

systemctl stop docker
systemctl disable docker

接着,如果你的运维日志中有类似以下的记录,则说明Docker已经在使用2375端口开启了API服务:

INFO[0000] API listen on /var/run/docker.sock

因此我们需要修改Docker配置文件以禁止API端口的存在。打开Docker配置文件编辑器:

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

找到下面一行内容:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

在这行命令前面加上如下内容:

ExecStartPost=/usr/bin/iptables -A INPUT -p tcp --dport 2375 -j DROP

最后保存并退出编辑器。

重新启动Docker服务:

systemctl daemon-reload
systemctl start docker

现在Docker的API端口已经被禁用了,攻击者将无法通过这个API进行连接。

方法二:限制Docker API服务的访问

一个比较好的方法是使用TLS证书对Docker API进行保护,限制访问仅在本地或安全网络中进行。在Docker安装文件的目录下,使用以下命令行生成一个自签名的证书:

mkdir /etc/docker/certs.d/localhost:2376/
openssl req -newkey rsa:2048 -nodes -keyout /etc/docker/certs.d/localhost:2376/key.pem \
    -x509 -days 365 -out /etc/docker/certs.d/localhost:2376/cert.pem
chmod -R 644 /etc/docker/certs.d/

接着修改Docker配置文件:

vi /lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd \
          --tlsverify \
          --tlscacert=/etc/docker/certs.d/ca.pem \
          --tlscert=/etc/docker/certs.d/server-cert.pem \
          --tlskey=/etc/docker/certs.d/server-key.pem \
          -H=0.0.0.0:2376 \
          -H unix:///var/run/docker.sock

最后,重新启动Docker服务:

systemctl enable docker
systemctl daemon-reload
systemctl start docker

现在,你的Docker API端口上会使用TLS证书进行加密通信,只有在已经有一个验证好的TLS证书的情况下才能够连接到Docker API。同时,需要注意限制访问的IP地址,只允许来自安全网络的访问,这样能够增强Docker API的安全性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker暴露2375端口导致服务器被攻击问题及解决方法 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • [13]Docekr09-实战 Docker版Django项目发布

    目录 Docker第三章:Docker版Django项目发布 docker版django项目发布过程 推送镜像到阿里云 腾讯云镜像加速 阿里云镜像加速 问题 思考? Django的运行是基于python的环境,加上django包。在docker中运行django,实现方式是从docker下载python镜像,然后安装django运行所依赖的包。在docker…

    Docker 2023年4月12日
    00
  • Python项目编译Docker镜像

    docker已经安装好,docker的安装,请见另一篇博客: https://blog.csdn.net/u013282737/article/details/85246755   序言:介绍一下需要运行的Python项目的结构:   平时在PyCharm里面运行该工程,只要直接运行server.py文件即可   现在希望将该工程,部署到docker里面,使…

    Docker 2023年4月11日
    00
  • 在docker中部署k8s的方法

    首先我们需要了解什么是Docker和Kubernetes。 Docker是一个应用容器引擎,它可以轻松地打包、发布和运行应用程序,使得我们的应用程序可以在不同的环境中运行。而Kubernetes是一个容器编排平台,它可以管理多个Docker容器并协调它们运行。 在Docker中部署Kubernetes的方法如下: 安装Docker和Kubernetes 首先…

    Docker 2023年5月16日
    00
  • 为 Docker 添加阿里云的镜像地址

    修改或新建/ect/docker/daemon.json文件 vim daemon.json 文件中编辑阿里云的镜像地址: { “registry-mirrors”:[“https://6kx4zyno.mirror.aliyuncs.com”] } 中科院的镜像 { “registry-mirrors”:[“https://docker.mirrors.u…

    Docker 2023年4月13日
    00
  • docker搭建maven私服(nexus3),整合springboot上传下载依赖

    一、前言 我们在JavaWeb开发中必不可少的就是jar包管理-maven,在没有maven之前,都是自己手动下载jar包导入到项目中,非常的繁琐。 maven出现之后,又迎来新的问题,对于仓库里人家发布的都可以引用下载,但是公司自己内部写的jar包,不想让外人看到,自己公司来回粘贴复制,非常的繁琐,版本维护起来也是十分头疼! 这时Nexus Reposit…

    2023年4月10日
    00
  • 最详细的docker中安装并配置redis(图文详解)

    下面我将详细讲解 “最详细的docker中安装并配置redis(图文详解)” 这篇文章的完整攻略,包括两条示例说明。 准备工作 在进行后续步骤之前,需要先确认已经安装好以下软件: Docker Docker Compose 若还没有安装这两个软件,请先自行安装。 安装Redis 示例1 如果您的项目已经是使用Docker进行管理的,那么在Docker里很容易…

    Docker 2023年5月16日
    00
  • docker使用Dockerfile构建镜像的方法

    构建 Docker Image 是使用 Docker 的一个非常重要而且必要的步骤。Docker Image 是 Docker 的核心概念之一,它是用来运行 Docker 容器的模板,包含了创建和运行容器所需要的全部信息。如果想要构建 Docker Image,常用的方法就是 Dockerfile。Dockerfile 是一个文本文件,用来描述如何构建 Do…

    Docker 2023年5月16日
    00
  • docker 部署 gitlab 升级指南

    如果已知,跳过此步骤第一种: docker exec -it gitlab /bin/bash cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 第二种:登录到gitlab,在Admin Area可查看。 2.备份一下,以防万一 gitlab-rake gitlab:backup:create 备份文…

    Docker 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部