JumpServer 广受欢迎的开源堡垒机 - Zanealancy博客

JumpServer 广受欢迎的开源堡垒机

先介绍一下JumpServer的特点:

  1. 安全性:

    • 支持多种认证方式,如 LDAP/AD 认证、RADIUS 认证、OpenID 认证(单点登录)、CAS 认证(单点登录)和 MFA 二次认证。
    • 集中管理用户账号,支持统一密码管理、资产密码托管、自动生成和推送密码、密码过期设置等。
    • 对用户、用户组、资产、资产节点、应用以及系统用户进行多维授权,支持细粒度的应用级授权和动作授权。
    • 记录用户操作行为、会话内容、命令执行情况,并支持对 Linux、Windows 等资产操作的录像进行回放。
  2. 开源:

    • 完全开源,零门槛,线上快速获取和安装。
  3. 分布式:

    • 能够支持多个机房跨区域部署,中心节点提供 API,各机房部署登录节点,支持大规模并发访问,绝对高效。
  4. web ui:

    • 仅需浏览器即可使用
  5. 云端存储:

    • 很好的支持云端存储,还可管理多样化云端资产。物理机、虚拟机管理更加高效和安全

用户经过堡垒机通常包括以下几个步骤: 1. 用户通过客户端连接到堡垒机。 2. 堡垒机对用户进行身份验证,确认其身份和权限。 3. 用户通过堡垒机访问目标服务器。 4. 堡垒机对用户的访问行为进行监控和管理,确保其符合安全策略。 5. 用户完成操作后,断开与堡垒机的连接。

它能帮我们做什么?

  1. 访问控制:堡垒机充当了访问关口,并通过认证和授权机制限制对内部系统的访问。 只有经过身份验证和授权的用户才能通过堡垒机进入内部网络。
  2. 审计和监控:堡垒机记录和审计所有用户的操作,包括登录、命令执行和文件传输等。 这些审计日志可用于追踪和监控用户活动,以便检测潜在的安全事件或违规行为。
  3. 建立安全通道:堡垒机使用安全协议(如SSH)建立与远程终端之间的加密通信通道。
  4. 网络隔离:堡垒机通过作为中转站,实现了内外网络的隔离。使得内部网络不直接暴露在公网上, 暴露出来的资产就只有堡垒机,提高了网络的安全性。

实验配置

内网多台机器访问配置起来相对较麻烦,配置起来也不够安全,通过nas上docker容器构建防火墙服务器实现内部网络统一管理。 file

编辑docker-compose.yml文件内容:


services:
  # JumpServer 核心服务
  core:
    image: jumpserver/core:v4.10.11-ce
    container_name: jms_core
    restart: always
    depends_on:
      - mysql
      - redis
    env_file: .env
    environment:
      - DB_ENGINE=mysql
      - DB_HOST=mysql
      - DB_PORT=3306
      - DB_USER=${MYSQL_USER}
      - DB_PASSWORD=${MYSQL_PASSWORD}
      - DB_NAME=${MYSQL_DATABASE}
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_PASSWORD=
      - REDIS_DB_CELERY=3
      - REDIS_DB_CACHE=4
      - REDIS_DB_WS=5
      - STATIC_ROOT=/opt/jumpserver/data/static
      - MEDIA_ROOT=/opt/jumpserver/data/media
    volumes:
      - jumpserver_data:/opt/jumpserver/data
    ports:
      - "9090:8080"
    command: ["start", "all"]

  # MySQL 8 数据库
  mysql:
    image: mysql:8.0
    container_name: jms_mysql
    restart: always
    env_file: .env
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    volumes:
      - /volume4/Cy/contaners/jump/data/mysql:/var/lib/mysql
      - /volume4/Cy/contaners/jump/config/mysql:/docker-entrypoint-initdb.d
    command:
      - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
    ports:
      - "3307:3306"

  # Redis 缓存
  redis:
    image: redis:7-alpine
    container_name: jms_redis
    restart: always
    volumes:
      - /volume4/Cy/contaners/jump/config/redis/redis.conf:/usr/redis/redis.conf:ro
      - /volume4/Cy/contaners/jump/data/redis:/usr/redis/data
    command: ["redis-server", "/usr/redis/redis.conf"]
    ports:
      - "6380:6379"

  # Koko 组件(SSH 网关)
  koko:
    image: jumpserver/jms_koko:latest
    container_name: jms_koko
    restart: always
    depends_on:
      - core
    env_file: .env
    environment:
      - CORE_HOST=http://core:8080
      - BOOTSTRAP_TOKEN=${BOOTSTRAP_TOKEN}
    ports:
      - "2222:2222"

  # Lion 组件(Web Terminal)
  lion:
    image: jumpserver/jms_lion:latest
    container_name: jms_lion
    restart: always
    depends_on:
      - core
    env_file: .env
    environment:
      - CORE_HOST=http://core:8080
      - BOOTSTRAP_TOKEN=${BOOTSTRAP_TOKEN}
    ports:
      - "9091:8081"

  # Nginx 反向代理
  nginx:
    image: nginx:alpine
    container_name: jms_nginx
    restart: always
    depends_on:
      - core
      - lion
    ports:
      - "81:80"
    volumes:
      - /volume4/Cy/contaners/jump/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - /volume4/Cy/contaners/jump/nginx/ssl:/etc/nginx/ssl:ro
      - jumpserver_data:/opt/jumpserver/data:ro

# ========================
# 🔧 定义共享卷(Shared Volumes)
# ========================
volumes:
  jumpserver_data:
    driver: local
    driver_opts:
      type: none
      device: /volume4/Cy/contaners/jump/data/jumpserver
      o: bind

.env配置文件如下:

# .env

SECRET_KEY=NAEiIUus7j8Sv8EjQmlE4anhpvTFZRHvcOcV53T5j6hjIcbt
BOOTSTRAP_TOKEN=Q1Qv2s1eLxUDe6aH1uEgxicr

# MySQL 配置
MYSQL_ROOT_PASSWORD=!JumpPwd2025
MYSQL_DATABASE=jumpserver
MYSQL_USER=jumpserver
MYSQL_PASSWORD=!JumpPwd123

# 域名(可选,用于 HTTPS)
#SERVER_NAME=

浏览器输入192.168.xxx.xxx:81/, 链接换下,回车即可。