JumpServer介绍
- Jumpserver 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统。
- Jumpserver 使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web Terminal 解决方案, 交互界面美观、用户体验好。
- Jumpserver 采纳分布式架构, 支持多机房跨区域部署, 中心节点提供 API, 各机房部署登录节点, 可横向扩展、无并发访问限制。
- Jumpserver 现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产。
- Jumpserver 目前最新版本是:V1.5.5。
JumpServer官网文档:https://jumpserver.readthedocs.io/zh/master/index.html
JumpServer开源代码仓库:https://github.com/jumpserver/jumpserver
JumpServer核心功能列表
JumpServer安装环境要求
- 硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低)
- 操作系统: Linux 发行版 x86_64
- Python = 3.6.x
- Mysql Server ≥ 5.6
- Mariadb Server ≥ 5.5.56
- Redis
组件说明:
- Jumpserver 为管理后台, 管理员可以通过 Web 页面进行资产管理、用户管理、资产授权等操作, 用户可以通过 Web 页面进行资产登录, 文件管理等操作;
- koko 为 SSH Server 和 Web Terminal Server 。用户可以使用自己的账户通过 SSH 或者 Web Terminal 访问 SSH 协议和 Telnet 协议资产;
- Luna 为 Web Terminal Server 前端页面, 用户使用 Web Terminal 方式登录所需要的组件;
- Guacamole 为 RDP 协议和 VNC 协议资产组件, 用户可以通过 Web Terminal 来连接 RDP 协议和 VNC 协议资产 (暂时只能通过 Web Terminal 来访问)。
端口说明:
- Jumpserver 默认 Web 端口为 8080/tcp, 默认 WS 端口为 8070/tcp, 配置文件 jumpserver/config.yml
- koko 默认 SSH 端口为 2222/tcp, 默认 Web Terminal 端口为 5000/tcp 配置文件在 koko/config.yml
- Guacamole 默认端口为 8081/tcp, 配置文件 /config/tomcat9/conf/server.xml
- Nginx 默认端口为 80/tcp
- Redis 默认端口为 6379/tcp
- Mysql 默认端口为 3306/tcp
部署JumpServer
防火墙与"selinux"设置,如果已经停用了"防火墙和Selinux"忽略此处即可
$ systemctl start firewalld
$ firewall-cmd --zone=public --add-port=80/tcp --permanent
$ firewall-cmd --zone=public --add-port=2222/tcp --permanent
参数解释:
--permanent 永久生效,没有配置此参数将会在重启后失效
$ firewall-cmd --reload
$ setenforce 0
$ sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
部署Redis
- JumpServer使用Redis作为数据缓存插件,可以使用yum安装,也可以通过"tar"包编译安装,此处我使用编译安装Redis
-
编译安装Redis
[root@jump ~]
[root@jump src]
[root@jump src]
[root@jump redis-5.0.5]
[root@jump redis-5.0.5]
[root@jump src]
[root@jump src]
daemonize yes
port 6379
bind 10.0.0.9
protected-mode yes
pidfile "/usr/local/redis/run/redis.pid"
loglevel notice
logfile "/usr/local/redis/logs/redis.log"
save 900 1
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir "/usr/local/redis/data/rdb/"
timeout 0
tcp-keepalive 300
requirepass 1qaz2wsx
EOF
[root@jump src]
[root@jump src]
[root@jump src]
tcp 0 0 10.0.0.9:6379 0.0.0.0:* LISTEN 12565/redis-server
[root@jump src]
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.0.0.9:6379> select 1
OK
10.0.0.9:6379[1]> exit
部署Mariadb
- Jumpserver使用数据库,可以选择MySQL或者Mariadb;
- Mariadb版本需要大于等于5.5.56,MySQL版本需要大于等于5.6
- 这里使用yum方式部署mariadb
-
配置Yum源,如果本地Yum源可用,此处可跳过
$ curl -o /etc/yum.repos.d/CentOS-Base-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ yum clean all && yum makecache
[root@jump src]
[root@jump src]
[root@jump src]
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@jump src]
Enter password:
MariaDB [(none)]> set password for 'root'@localhost=password('1qaz2wsx');
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> create database jumpserver character set='utf8' collate='utf8_general_ci';
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '1qaz2wsx';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit;
Bye
部署JumpServer
[root@jump src]
[root@jump src]
[root@jump src]
/bin/python3.6
[root@jump src]
Python 3.6.8
将python虚拟环境建立在/opt/py3目录下
[root@jump src]
每次操作 jumpserver 都需要使用下面的命令载入 py3 虚拟环境
载入环境后默认以下所有命令均在该虚拟环境中运行;看到下面的提示符代表成功
[root@jump src]
(py3) [root@jump src]
退出 py3 虚拟环境可以使用 deactivate 命令
(py3) [root@jump src]
[root@jump src]
[root@jump src]
(py3) [root@jump src]
(py3) [root@jump opt]
(py3) [root@jump opt]
(py3) [root@jump opt]
安装依赖 RPM 包
(py3) [root@jump opt]
安装 Python 库依赖
(py3) [root@jump opt]
(py3) [root@jump opt]
(py3) [root@jump opt]
拷贝配置文件"config.yml"
(py3) [root@jump opt]
生成随机-SECRET
(py3) [root@jump opt]
ugf0JnAD2xzvg5B3Sr0ihJ5JcwDZpx1dxgWcCyYIcsWHSBKGd
生成随机-TOKEN
(py3) [root@jump opt]
KskXhqMV7GqTBluN
(py3) [root@jump opt]
> SECRET_KEY: ugf0JnAD2xzvg5B3Sr0ihJ5JcwDZpx1dxgWcCyYIcsWHSBKGd
> BOOTSTRAP_TOKEN: KskXhqMV7GqTBluN
> DEBUG: false
> LOG_LEVEL: ERROR
> DB_ENGINE: mysql
> DB_HOST: 127.0.0.1
> DB_PORT: 3306
> DB_USER: jumpserver
> DB_PASSWORD: 1qaz2wsx
> DB_NAME: jumpserver
> HTTP_BIND_HOST: 0.0.0.0
> HTTP_LISTEN_PORT: 8080
> REDIS_HOST: 10.0.0.9
> REDIS_PORT: 6379
> REDIS_PASSWORD: 1qaz2wsx
> EOF
-
启动JumpServer
- 确保进入 py3 虚拟环境之后,再启动jumpserver,-d 选项为后台启动
(py3) [root@jump opt]
(py3) [root@jump jumpserver]
配置开机自启
(py3) [root@jump jumpserver]
(py3) [root@jump jumpserver]
(py3) [root@jump jumpserver]
Created symlink from /etc/systemd/system/multi-user.target.wants/jms.service to /usr/lib/systemd/system/jms.service.
JumpServer插件部署
KoKo组件部署
(py3) [root@jump jumpserver]
(py3) [root@jump jumpserver]
(py3) [root@jump package]
(py3) [root@jump package]
(py3) [root@jump package]
(py3) [root@jump package]
修改后的配置如下
(py3) [root@jump package]
CORE_HOST: http://127.0.0.1:8080
BOOTSTRAP_TOKEN: KskXhqMV7GqTBluN
(py3) [root@jump package]
(py3) [root@jump kokodir]
(py3) [root@jump kokodir]
(py3) [root@jump kokodir]
LISTEN 0 128 :::5000 :::* users:(("koko",pid=30451,fd=7))
LISTEN 0 128 :::2222 :::* users:(("koko",pid=30451,fd=8))
(py3) [root@jump kokodir]
root 30451 8220 0 15:56 pts/0 00:00:00 ./koko start
root 30484 8220 0 15:58 pts/0 00:00:00 grep --color=auto koko
Luna 组件部署
(py3) [root@jump kokodir]
(py3) [root@jump package]
(py3) [root@jump package]
(py3) [root@jump package]
(py3) [root@jump package]
[root@jump package]
Guacamole 组件部署
查看主机是否安装Docker
[root@jump package]
卸载老版本docker;如果没有此处忽略即可
[root@jump package]
安装依赖包
[root@jump package]
设置Yum仓库
[root@jump package]
列出docker版本
[root@jump package]
安装最新 docker-ce 版本
[root@jump package]
修改 docker pull 镜像时的加速文件
[root@jump package]
[root@jump package]
> {
> "registry-mirrors": ["http://hub-mirror.c.163.com"]
> }
> EOF
启动 docker 并设置开机自启
[root@jump package]
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
由于网络问题,可能从DockerHub上pull镜像获取不到,我这里已将镜像上传到自己的aliyun镜像仓库中
下载使用即可
[root@jump package]
查看pull下来的镜像
[root@jump package]
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-shanghai.aliyuncs.com/chiron1007/jumpserver_jms_guacamole 1.5.5 247c0b3bc67a 12 days ago 685MB
启动"Guacamol"容器
[root@jump package]
参数解释:
docker run:启动一个容器
--name:指定容器名称
-d:后台启动容器
-p:将容器的127.0.0.1监听的8081端口映射到宿主机的8081端口
-e:设置环境变量
-e JUMPSERVER_SERVER=http://127.0.0.1:8080:将值http://127.0.0.1:8080设置变量为JUMPSERVER_SERVER
-e BOOTSTRAP_TOKEN=KskXhqMV7GqTBluN :将值PleasgeChangeSameWithJumpserver设置变量为-e BOOTSTRAP_TOKEN
**jumpserver/jms__guacamole:1.5.5:下载镜像的名称及版本
查看运行容器
[root@jump package]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
339e0d1a3dc2 registry.cn-shanghai.aliyuncs.com/chiron1007/jumpserver_jms_guacamole:1.5.5 "./entrypoint.sh" 55 seconds ago Up 54 seconds 0.0.0.0:8081->8081/tcp jms_guacamole_V1
运行结果如下图:
配置Nginx;整合各个组件
[root@jump package]
[root@jump package]
uid=996(nginx) gid=993(nginx) groups=993(nginx)
[root@jump package]
[root@jump src]
[root@jump src]
[root@jump nginx-1.15.10]
[root@jump nginx-1.15.10]
[root@jump nginx-1.15.10]
备份 nginx.conf
[root@jump nginx-1.15.10]
创建存放 jumpserver.conf 文件的目录
[root@jump nginx-1.15.10]
下载事先准备好的 nginx 相关配置文件
[root@jump nginx-1.15.10]
[root@jump src]
[root@jump src]
[root@jump src]
total 8
-rw-r--r-- 1 root root 2074 Dec 17 18:01 jumpserver.conf
-rw-r--r-- 1 root root 1729 Dec 17 18:01 nginx.conf
移动 JumpServer_nginx 目录下配置文件到指定位置
[root@jump src]
[root@jump src]
[root@jump nginx-1.15.10]
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动 nginx 服务
[root@jump nginx-1.15.10]
[root@jump nginx-1.15.10]
LISTEN 0 128 *:80 *:* users:(("nginx",pid=35414,fd=6),("nginx",pid=35413,fd=6))
登录Jumpserver
将上面部署的所有服务加入开机自启
cat << EOF >> /etc/rc.d/rc.local
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf
systemctl start mariadb
source /opt/py3/bin/activate
/opt/jumpserver/jms start -d
cd /opt/kokodir/ && nohup /opt/kokodir/koko &
systemctl start docker
docker start run jms_guacamole_V1
/usr/local/nginx/sbin/nginx
EOF
参考文献:
- JumpServer官方文档:https://jumpserver.readthedocs.io/zh/master/setup_by_centos7.html
- DockerHub-JumpServer代码仓库:https://github.com/jumpserver/jumpserver