JumpServer开源堡垒机的部署与数据迁移

更多详情内容可以查看官方文档

环境准备

基础环境需求

安装依赖包

1
2
apt-get update
apt-get install -y wget curl tar gettext iptables

安装MySQL数据库

首先下载官方的最新的 APT 源

1
2
wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
dpkg -i mysql-apt-config_0.8.33-1_all.deb

安装后会让你配置MySQL的版本, 按需选择最新的 LTS 版本或者集群版本即可

然后更新 APT 源, 查看 MySQL 版本

1
2
3
4
5
apt update
root@blj:/home/jumpserver/mysql# apt list mysql-server
Listing... Done
mysql-server/unknown 8.4.3-1ubuntu22.04 amd64
N: There are 2 additional versions. Please use the '-a' switch to see them.

安装最新的 MySQL8.4

1
2
3
4
5
6
apt install mysql-server
# 如果遇到依赖问题, 更新源然后重试
apt update && apt install mysql-server
# 安装过程中会需要你输入密码
# liber-te@
why not try a cup of liber-te@?

新建 Jumpserver 数据库

1
2
mysql -u root -p
create database jumpserver default charset 'utf8';

安装Redis缓存

添加 APT 源, 更新源, 然后安装

1
2
3
4
5
6
7
8
apt-get install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/redis.list
apt-get update
apt-get install redis

systemctl enable redis-server && systemctl start redis-server

安装部署Jumpserver

在官网下载最新版的安装包

1
2
3
4
5
6
7
8
9
10
cd /opt
wget or scp, whatever you like...
tar -xf jumpserver-ce-v4.5.0-x86_64.tar.gz
cd jumpserver-ce-v4.5.0-x86_64

# 根据需要修改配置文件模板, 如果不清楚用途可以跳过修改
vim config-example.txt

# 开始安装
./jmsctl.sh install

!!! 注意
安装的过程中有个非常迷惑的点, 不管是 MySQL 还是 Redis 均不能使用127.0.0.1loclhost地址, 如果使用本地地址会出现无法连接的异常
所以在配置地址的时候需要使用内网地址, 例如10.20.7.21

解决 Jumpserver 无法登录本地数据库的方案

  1. MySQL 的解决方案

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # 首先修改my.cnf, 让数据库允许所有IP连接
    vim my.cnf
    [mysqld]
    bind-address=0.0.0.0

    # 修改完成后重启
    systemctl restart mysql

    # 然后登入数据库, 刷新用户的登录权限
    mysql -u root -p
    USE mysql;
    UPDATE user SET host = '%' WHERE user = 'root' AND host = 'localhost';
    FLUSH PRIVILEGES;
  2. Redis 的解决方案

    1
    2
    3
    4
    5
    6
    7
    # 修改Redis的安全配置, 允许所有IP访问和关闭保护模式
    vim /etc/redis/redis.conf
    bind 0.0.0.0
    protected-mode no

    # 修改完成后重启
    systemctl restart redis

然后在安装的过程中使用内网地址即可解决连接问题

jumpserver 部署完成后, 默认登陆端口是 80, 默认账号密码是 admin / ChangeMe

Jumpserver常用命令和配置

安装完成后 JumpServer 配置文件路径为 /opt/jumpserver/config/config.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
cd jumpserver-ce-v4.4.1-x86_64

# 启动
./jmsctl.sh start

# 停止
./jmsctl.sh down

# 卸载
./jmsctl.sh uninstall

# 帮助
./jmsctl.sh -h

数据迁移

根据官方文档和网上的迁移教程来看, 迁移过程中需要保证数据库版本、SECRET_KEY 等配置一致

本次新部署使用了最新版本的 Jumpserver, 数据库等也升级到了最新的 MySQL 8.4 / Redis 7, 相关的密钥为了安全也全部更换了, 可以说是寄的彻底, 靠备份和还原数据库的方式来迁移数据可以预估会有一大堆难以解决的奇怪Bug

就在查阅文档的时候, 我看到了官方的通过表格批量创建更新 JumpServer 资产授权和用户信息这篇文档

文档注明, 在资产列表页面可以通过上传/下载 CSV 或者 XLSX 表格的方式实现批量备份、创建、更新资产信息

页面还提供了空表格模板, 可以先创建一些测试的资产条目, 结合导出的模板内容和旧的跳板机上导出的内容, 对表格格式稍作修改, 最后顺利导入到新的 Jumpserver 中

导入数据表格

资产安全配置

资产管理

在资产列表 -> 资产树中, 通过不同的子节点对资产进行分类管理

资产节点

然后就可以在授权管理 -> 资产授权中将子节点授权给特定用户或用户组

资产授权

用户管理

堡垒机的账号分为3类角色, 系统管理员、审计员、用户/其他自定义角色, 通常情况下, 管理员为运维工程师/安全工程师, 审计员为安全工程师, 用户为需要访问堡垒机纳管的资源的员工

系统角色

不同角色登入堡垒机后的权限不同, 显示的工作空间面板也因此有差异

用户与用户组

在用户管理的用户列表/用户组中可以分别创建用户/用户组

用户和用户组

便于在资产管理中根据具体的用户/用户组进行授权

账号管理

这个账号管实际上管理的是服务器资产上面的用户, 例如 Linux 服务器的 root 用户, Windows Server 服务器上的 Administrator 用户

jumpserver 会用这个用户去创建连接实例、查看服务器信息等操作, 所以用户的权限需要比较大

jumpserver 还会用这个用户去帮你在服务器上面创建其他系统用户, 所以这个用户必须要预先在服务器上面创建好

添加限制IP

在安全设置 -> 登录限制中, 配置限制用户和IP登录失败次数以及登录间隔, 防止爆破攻击

同时开启IP白名单和黑名单, 为12F的局域网设置白名单, 其他IP全拒绝

IP白名单配置

添加限制命令

配置命令组和命令过滤, 阻止用户修改 sshd_config 配置、使用 passwd 等敏感命令

收尾

同样, 为部署了堡垒机的 Linux 服务器开启 SSHD 登录 IP 白名单模式, 开启防火墙等安全措施

1
2
3
4
vim /etc/ssh/sshd_config

#SSH whitelist
AllowUsers *@172.28.12.104 *@172.28.12.250