• 在 docker 环境下部署运行 JumpServer 堡垒机


    为了安全合规,也为了规范运维,在服务器的运维过程中是很有必要引入堡垒机工具的。

    不过目前大部分堡垒机都是商用付费的,出于学习的目的,免费的堡垒机目前只看到有 麒麟堡垒机 和 JumpServer 两款。

    麒麟堡垒机 界面有些老了,也不太清楚维护更新的状态如何,不过功能上还是非常全面的,但没有官方的 Docker 镜像用于快速部署还是比较遗憾,只能是单独准备一台服务器系统进行部署,或者自行研究制作 Docker 镜像。

    JumpServer 是一款开源的堡垒机(也有付费企业版),在 GitHub 上也托管了项目源代码。

    目前看更新迭代还是比较活跃的,最重要的是有官方 Docker 镜像能够快速部署,也不需要独占一台服务器进行学习(在正式使用环境中,出于安全考虑,应该还是要专机专用的)。

    但是官方文档对于 Docker 部署几乎没有描述,从网上搜索,似乎原来是有文档的,但是目前处于无法打开的状态,网上似乎也没有纯 Docker 环境部署的记录,所以在此记录一下 JumpServer 在 Docker 中的部署过程。

    官网:https://www.jumpserver.org/

    GitHub:https://github.com/jumpserver/jumpserver

    Docker Hub:https://hub.docker.com/r/jumpserver/jms_all

    部署步骤参考来源:https://www.cnblogs.com/yinzhengjie/p/12370104.html

    1、准备 Docker 环境

    在此就不再赘述 Docker 部分的搭建和使用了。

    2、准备 MySQL 数据库(如果您有现成的 MySQL 数据库,也可跳过此步骤直接使用)

    MySQL:https://hub.docker.com/_/mysql

    docker run -d -p 3306:3306 
    -v /home/my.cnf:/etc/mysql/my.cnf 
    -v /home/mysql:/var/lib/mysql 
    -e MYSQL_ROOT_PASSWORD=123456 
    --name mysql mysql:latest 
    --default-authentication-plugin=mysql_native_password

    第二、三行通过映射 Volume 来持久化存储 MySQL 配置和数据库文件,可根据情况自行建立 my.cnf 文件 和 mysql 文件夹在自己想放置的位置,这里是放置在了宿主机的 /home 目录下。如果不需要持久化存储,直接删除即可。

    第四行为配置 MySQL 默认的 root 用户密码。

    第六行是因为 JumpServer 不支持最新版本默认的 caching_sha2_password 密码加密方式,所以要通过初始化参数、配置或后期单独修改用户的密码认证方式为 mysql_native_password 才可正常连接使用。这里直接通过命令行参数初始化默认密码认证方式。

    《如何修改 MySQL 的密码认证方式》:https://www.cnblogs.com/xwgli/p/15066855.html

    3、需要在准备好的 MySQL 中创建一个空数据库

    这里将新数据库命名为:jumpserver

    4、准备 Redis 数据库

    Redis:https://hub.docker.com/_/redis

    docker run -d -p 6379:6379 
    -v /home/redis:/usr/local/etc/redis 
    --name redis redis:6.2.3 
    redis-server /usr/local/etc/redis/redis.conf

    第二行是为了持久化存储 Redis 的配置文件

    第四行是指定自定义配置文件路径。

    《如何在 Docker 部署的 Redis 中配置访问密码、绑定地址》:https://www.cnblogs.com/xwgli/p/15066727.html

    5、生成密钥,然后进行记录

    这部分信息在下一步骤中会用到,以及后续如果重建容器、升级容器,需要继承之前的使用系统配置数据的话,也请使用创建时同样的密钥,否则原有数据将无法解密。

    # 生成 SECRET_KEY
    if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi
    
    # 生成 BOOTSTRAP_TOKEN
    if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi

    6、部署 JumpServer,请注意根据实际情况更换端口映射、密钥、数据库相关信息

    docker run -d -p 8000:80 -p 8001:443 -p 8002:2222 
    -v /home/jumpserver:/opt/jumpserver/data/media 
    -e SECRET_KEY=bhRH6ib1C8GIFsgR5ERSH6zHsIxARnqVT99WEopa0jtf5ik3Za 
    -e BOOTSTRAP_TOKEN=HnFvMHyFhEkbYyfl 
    -e DB_HOST=172.17.0.2 
    -e DB_PORT=3306 
    -e DB_USER=root 
    -e DB_PASSWORD=123456 
    -e DB_NAME=jumpserver 
    -e REDIS_HOST=172.17.0.3 
    -e REDIS_PORT=6379 
    -e REDIS_PASSWORD=123456 
    --name jumpserver jumpserver/jms_all:latest

    第二行是用于持久化 JumpServer 的数据

    后面就依次为加密密钥、MySQL配置、Redis配置

    配置参考:https://github.com/jumpserver/Dockerfile

    7、如果是直接部署访问的话,到这里就部署完成了,直接访问对应地址端口即可。

    8、如果是要通过 nginx 做反向代理,还需要注意一下对 websocket 的特殊配置,以及强制通过 https 访问堡垒机的配置

    示例如下:

    stream {
        server {
            listen 2222;
            proxy_pass 192.168.1.2:8002;
        }
    }
    
    http {
    
        # 针对 WebSocket 配置
        map $http_upgrade $connection_upgrade {
            default upgrade;
            '' close;
        }
    
        # 访问 http 强制跳转 https 配置
        server {
            listen       80;
            
            server_name  blj.domainname.com;
    
            return 301 https://$server_name$request_uri;
        }
    
        # 网站 https 配置
        server {
            listen       443 ssl;
            
            server_name  blj.domainname.com;
            
            ssl_certificate            /ssl_certs/blj.domainname.com.pem;  # 指定证书的位置,绝对路径
            ssl_certificate_key        /ssl_certs/blj.domainname.com.key;  # 绝对路径,同上
            ssl_session_timeout        5m;
            ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers                ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件。
            ssl_prefer_server_ciphers  on;
    
            location / {
                proxy_pass http://192.168.1.2:8000;
                proxy_set_header X_Real_IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;
                proxy_set_header Host $host;
                proxy_connect_timeout       600;
                proxy_send_timeout          600;
                proxy_read_timeout          600;
                send_timeout                600;
            }
        }
    }

    注意:以上非完整 nginx 配置,仅列出本步骤相关部分,配置中具体的 IP 地址、端口号、域名请根据实际情况自行修改。

    然后就可以根据 nginx 配置的域名访问堡垒机了~

    JumpServer 的默认帐号密码均为 admin。


    输了你,赢了世界又如何...
  • 相关阅读:
    查看python中SQLite版本和sqlite3版本
    ubuntu系统安装与卸载
    CentOS下如何使用yum查看安装过的软件包
    【linux】CentOS7 升级sqlite3
    什么是Python的metaclass
    Python
    Python对字典分别按键(key)和值(value)进行排序
    python 用正则表达式去除特殊字符的两种方法
    从思维导图中学习javascript第五章字符串函数
    从思维导图中学习javascript第三章数组
  • 原文地址:https://www.cnblogs.com/xwgli/p/15066535.html
Copyright © 2020-2023  润新知