在 docker 环境下部署运行 JumpServer 堡垒机(v4)
为了安全合规,也为了规范运维,在服务器的运维过程中是很有必要引入堡垒机工具的。
不过目前大部分堡垒机都是商用付费的,出于学习的目的,免费的堡垒机目前只看到有 麒麟堡垒机 和 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/jumpserver/mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name jumpserver_mysql mysql:lts \
--default-time_zone='+8:00' \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci \
--mysql_native_password=ON
第二行通过映射 Volume 来持久化存储数据库文件,可根据情况自行建立 mysql 文件夹在自己想放置的位置,这里是放置在了宿主机的 /home 目录下。如果不需要持久化存储,直接删除即可。
第三行为配置 MySQL 默认的 root 用户密码,请注意修改为强度较高的密码。
第八行是因为 JumpServer 不支持最新版本默认的 caching_sha2_password 密码加密方式,所以要开启 mysql_native_password 插件才可正常连接使用。
3、需要在准备好的 MySQL 中创建一个空数据库
这里将新数据库命名为:jumpserver
4、准备 Redis 数据库(整合包内置,选配)
Redis:https://hub.docker.com/_/redis
docker run -d -p 6379:6379 \
--name jumpserver_redis redis \
--requirepass 123456
第三行指定 redis 访问密码
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 2222:2222 -p 3389:3389 \
-p 30000-30100:30000-30100 \
-e SECRET_KEY=bhRH6ib1C8GIFsgR5ERSH6zHsIxARnqVT99WEopa0jtf5ik3Za \
-e BOOTSTRAP_TOKEN=HnFvMHyFhEkbYyfl \
-e LOG_LEVEL=ERROR \
-e DOMAINS=example.com \
-e DB_ENGINE=mysql \
-e DB_HOST=10.0.0.2 \
-e DB_PORT=3306 \
-e DB_USER=root \
-e DB_PASSWORD=123456 \
-e DB_NAME=jumpserver \
-e REDIS_HOST=10.0.0.3 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD=123456 \
--privileged=true \
-v /home/jumpserver/data/core/data:/opt/jumpserver/data \
-v /home/jumpserver/data/koko/data:/opt/koko/data \
-v /home/jumpserver/data/lion/data:/opt/lion/data \
-v /home/jumpserver/data/kael/data:/opt/kael/data \
-v /home/jumpserver/data/chen/data:/opt/chen/data \
-v /home/jumpserver/data/web/log:/var/log/nginx \
--name jumpserver jumpserver/jms_all
前面是必要的端口映射
后面就依次为加密密钥、MySQL配置、Redis配置
最后是用于持久化 JumpServer 的数据
配置参考: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。
如需升级,可参考:https://github.com/jumpserver/Dockerfile/tree/master/allinone
以下为直接转载:
# 查询定义的 JumpServer 配置
docker exec -it jumpserver env
# 停止 JumpServer
docker stop jumpserver
# 备份数据库, 下面用到的 DB-xxx 从上面的 docker exec -it jms_all env 结果获取
mysqldump -h$DB_HOST -p$DB_PORT -u$DB_USER -p$DB_PASSWORD $DB_NAME > /opt/jumpserver-<版本号>.sql
# 例: mysqldump -h192.168.100.11 -p3306 -ujumpserver -pnu4x599Wq7u0Bn8EABh3J91G jumpserver > /opt/jumpserver-v2.12.0.sql
# 拉取新版本镜像
docker pull jumpserver/jms_all:latest
# 删掉旧版本容器
docker rm jumpserver
# 重新启动新版本
总之就是拉取新的镜像,用之前的参数重建容器即可,注意使用之前加密信息,第一次启动会有些慢,等待升级完成即可。
输了你,赢了世界又如何...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2013-07-27 在Visual Studio 2012中使用XNA 4.0