Docker部署常见应用之企业级堡垒机JumpServer

在这里插入图片描述

Jumpserver介绍

Jumpserver 是中国一个开源的堡垒机系统,它是符合 4A(认证、授权、审计、资产管理)规范的专业运维安全审计系统。Jumpserver 提供了一套完整的解决方案,帮助企业安全地管理和监控对服务器的访问,确保操作的合规性和安全性。

特点

  1. 开源:Jumpserver 是完全开源的,企业可以零成本获取和安装。

  2. 符合4A规范:Jumpserver 遵循认证、授权、审计和资产管理的4A模型,帮助企业实现全面的安全控制。

  3. 支持多种资产:Jumpserver 支持多种类型的资产,包括SSH服务器(如Linux、Unix和网络设备)、Windows服务器、数据库、NoSQL数据库、云服务(如Kubernetes、VMware vSphere)以及Web站点。

  4. 分布式架构:Jumpserver 采用分布式架构设计,可以轻松支持大规模并发访问。

  5. 无插件Web终端:Jumpserver 提供了一个无插件的Web终端,用户只需要浏览器即可进行安全的远程访问。

  6. 多云支持:Jumpserver 可以管理部署在不同云平台上的资产。

  7. 审计录像云端存储:Jumpserver 的审计录像可以存储在云端,确保数据的安全性和可靠性。

  8. 多租户支持:Jumpserver 支持多租户模式,一套系统可以供多个子公司或部门使用。

  9. 多应用支持:Jumpserver 不仅支持SSH和RDP协议,还可以通过Remote App连接各类应用。

用途

  • 安全审计:Jumpserver 可以记录和审计所有的服务器访问操作,帮助企业满足合规性要求。
  • 权限控制:Jumpserver 提供细粒度的权限控制,确保只有授权用户才能访问特定的服务器和资源。
  • 自动化运维:Jumpserver 支持自动化运维任务,提高运维效率。
  • 资产管理:Jumpserver 帮助企业集中管理和监控所有服务器资产。
  • 安全隔离:Jumpserver 通过隔离技术,确保操作的安全性,防止内部和外部的安全威胁。

Jumpserver 是一个功能强大且灵活的堡垒机系统,适用于各种规模的企业,特别是需要严格管理和审计服务器访问的组织。通过使用Jumpserver,企业可以提高其IT基础设施的安全性和运维效率。

Docker部署

  1. 环境准备
    确保已经安装了Docker

  2. 创建网络

    • 创建网络
      sudo docker network create --driver bridge jumpserver
      
  3. 部署MySQL
    Jumpserver需要MySQL数据库支持,以下是安装MySQL的步骤:

    • 拉取镜像

      docker pull mysql:5.7
      
    • 创建MySQL数据挂载目录:

      sudo  mkdir -p /data/docker/jumpserver/mysql/data /data/docker/jumpserver/mysql/conf
      
    • /data/docker/jumpserver/mysql/conf 下增加配置文件my.cnf

      [client]
      default-character-set=utf8mb4
      [mysql]
      default-character-set=utf8mb4
      [mysqld]
      character-set-server=utf8mb4
      collation-server=utf8mb4_general_ci
      
    • 运行MySQL Docker容器:

      sudo docker run \
          -d \
          --name=jms_mysql \
          --hostname=jms_mysql \
          --restart=always \
          -e MYSQL_ROOT_PASSWORD=123456 \
          -e MYSQL_USER=jumpserver \
          -e MYSQL_PASSWORD=123456 \
          -e MYSQL_DATABASE=jumpserver \
          -e TZ=Asia/Shanghai \
          -e LANG=en_us.UTF-8 \
          -p 3306:3306 \
          -v /data/docker/jumpserver/mysql/data:/var/lib/mysql \
          -v /data/docker/jumpserver/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
          --network jumpserver \
          mysql:5.7
      
  4. 部署Redis
    Jumpserver同样需要Redis作为缓存和消息队列服务,以下是安装Redis的步骤:

    • 拉取镜像

      docker pull redis:6.2.6
      
    • 创建Redis数据挂载目录:

      mkdir -p /data/docker/jumpserver/redis/data  /data/docker/jumpserver/redis/conf
      
    • 在目录 /data/docker/jumpserver/redis/conf创建配置文件redis.conf, 增加配置信息:

      requirepass 123456
      
    • 运行Redis Docker容器:

      sudo docker run \
            -d \
            --restart always \
            --name jms_redis \
            --hostname jms_redis \
            -p 6379:6379 \
            -v /data/docker/jumpserver/redis/data:/data \
            -v /data/docker/jumpserver/redis/conf/redis.conf:/etc/redis/redis.conf \
            --network jumpserver \
            redis:6.2.6 redis-server /etc/redis/redis.conf
      
  5. 生成密钥

    • 生成用于Jumpserver的SECRET_KEYBOOTSTRAP_TOKEN
      if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 50); echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi
      if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16); echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi
      
  6. 安装Jumpserver

    • 创建Jumpserver数据挂载目录:

      mkdir -p /data/docker/jumpserver
      
    • 运行Jumpserver Docker容器:

      sudo docker run --name jms_all -d \
        -p 80:80 \
        -p 2222:2222 \
        -p 30000-30100:30000-30100 \
        -e SECRET_KEY=$SECRET_KEY \
        -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN \
        -e LOG_LEVEL=ERROR \
        -e DB_HOST=jms_mysql \
        -e DB_PORT=3306 \
        -e DB_USER=jumpserver \
        -e DB_PASSWORD=123456\
        -e DB_NAME=jumpserver \
        -e REDIS_HOST=jms_redis \
        -e REDIS_PORT=6379 \
        -e REDIS_PASSWORD=123456 \
        --privileged=true \
        -v /data/docker/jumpserver/core/data:/opt/jumpserver/data \
        -v /data/docker/jumpserver/koko/data:/opt/koko/data \
        -v /data/docker/jumpserver/lion/data:/opt/lion/data \
        -v /data/docker/jumpserver/kael/data:/opt/kael/data \
        -v /data/docker/jumpserver/chen/data:/opt/chen/data \
        -v /data/docker/jumpserver/web/log:/var/log/nginx \
        --network jumpserver \
        jumpserver/jms_all:v3.10.10
      
  7. 登录Jumpserver

    • 访问Jumpserver Web界面:http://<your-ip>,使用默认的用户名和密码(通常是adminadmin)登录。首次登录时会提示修改密码。
      在这里插入图片描述

Docker-Compose 部署

为了方便管理,我们可以创建一个docker-compose.yml文件来实现相同的部署。

  1. 创建目录

    sudo mkdir -p /data/docker/jumpserver/
    sudo mkdir -p /data/docker/jumpserver/redis/conf
    sudo chmod -R 777 /data/docker/jumpserver/
    
  2. 增加配置信息

    • 在目录 /data/docker/jumpserver/redis/conf创建配置文件redis.conf
      requirepass 123456
      
    • 在目录 /data/docker/jumpserver/mysql/conf创建配置文件my.conf
      [client]
      default-character-set=utf8mb4
      [mysql]
      default-character-set=utf8mb4
      [mysqld]
      character-set-server=utf8mb4
      collation-server=utf8mb4_general_ci
      
  3. 生成Jumpserver的SECRET_KEY和BOOTSTRAP_TOKEN

    if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 50); echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi
    if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16); echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi
    
  4. 创建docker-compose.yml文件

    version: '3'
    services:
      mysql:
        image: mysql:5.7
        container_name: jms_mysql
        hostname: jms_mysql
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: '123456'
          MYSQL_USER: 'jumpserver'
          MYSQL_PASSWORD: '123456'
          MYSQL_DATABASE: 'jumpserver'
          MYSQL_CHARSET: 'utf8mb4'
          MYSQL_COLLATION: 'utf8mb4_unicode_ci'
          TZ: 'Asia/Shanghai'
          LANG: 'en_us.UTF-8'
        command: ["mysqld", "--character-set-server=utf8mb4", "--collation-server=utf8mb4_unicode_ci"]
        volumes:
          - /data/docker/jumpserver/mysql/data:/var/lib/mysql
          - /data/docker/jumpserver/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf
        ports:
          - "3306:3306"
        networks:
          - jumpserver
    
      redis:
        image: redis:6.2.6
        container_name: jms_redis
        hostname: jms_redis
        ports:
          - "6379:6379"
        volumes:
          - /data/docker/jumpserver/redis/data:/data
          - /data/docker/jumpserver/redis/conf/redis.conf:/etc/redis/redis.conf
        command: redis-server /etc/redis/redis.conf
        networks:
          - jumpserver
    
      jms_all:
        image: jumpserver/jms_all:v3.10.10
        container_name: jms_all
        ports:
          - "80:80"
          - "2222:2222"
        environment:
          SECRET_KEY: ${SECRET_KEY}
          BOOTSTRAP_TOKEN: ${BOOTSTRAP_TOKEN}
          LOG_LEVEL: ERROR
          DB_HOST: jms_mysql
          DB_PORT: 3306
          DB_USER: jumpserver
          DB_PASSWORD: 123456
          DB_NAME: jumpserver
          REDIS_HOST: jms_redis
          REDIS_PORT: 6379
          REDIS_PASSWORD: 123456
        privileged: true
        depends_on:
          - mysql
          - redis
        volumes:
          - /data/docker/jumpserver/core/data:/opt/jumpserver/data
          - /data/docker/jumpserver/koko/data:/opt/koko/data
          - /data/docker/jumpserver/lion/data:/opt/lion/data
          - /data/docker/jumpserver/kael/data:/opt/kael/data
          - /data/docker/jumpserver/chen/data:/opt/chen/data
          - /data/docker/jumpserver/web/log:/var/log/nginx
        networks:
          - jumpserver
    
    networks:
      jumpserver:
        driver: bridge
    
    • 请注意以下几点:

      • 我们定义了三个服务:mysqlredisjms_all,每个服务都有自己的配置。
      • environment 下的变量SECRET_KEYBOOTSTRAP_TOKEN需要你提供具体的值,或者在.env文件中设置。
      • 所有服务都连接到名为jumpserver的网络。如果你已经有一个名为jumpserver的网络,Docker Compose将使用现有的网络;否则,它将创建一个新的网络。
      • 使用volumes将宿主机的目录挂载到容器中,以便持久化数据。
      • commandredis服务中用于指定启动Redis时使用的配置文件。
      • privileged: true给予jms_all服务特权模式,根据你的实际需求决定是否需要此设置。

      在使用docker-compose.yml文件之前,请确保所有路径和环境变量都替换成了你的实际配置,并且创建了相应的目录和文件。然后,你可以使用以下命令启动服务:

      docker-compose up -d
      

      或者,如果你想要在启动之前查看将要执行的操作,可以使用:

      docker-compose config
      

      这将打印出配置的最终结果,而不会实际启动容器。

参考文章

Jumpserver安装
Docker部署JumpServer3.9.0
Docker部署常见应用之企业级堡垒机JumpServer-问题记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值