基于CentOS8搭建Jumpserver2.0.1堡垒机
一、 堡垒机概述
堡垒机,即在特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每个组成部门的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责的功能的系统。
二、JumpServer堡垒机功能概述
JumpServer 是一款使用 Python, Django 开发的开源跳板机系统, 为互联网企业提供了认证,授权, 审计,自劢化运维等功能。JumpServer 现已支持管理 SSH、 Telnet、 RDP、 VNC 协议资产。
(图片截自JumpServer官网)
三、部署JumpServer
1. JumpServer2.0.1环境要求
硬件配置: 2 个 CPU 核心, 4G 内存, 50G 硬盘(最低)
软件配置:Linux 发行版 x86_64,Python = 3.6.x,Mysql Server ≥ 5.6,Redis
2. 安装JumpServer所需相关服务
初始化系统环境
关闭防火墙
[root@localhost baifan]# systemctl stop firewalld && systemctl disable firewalld
关闭 selinux(selinux是一种基于内核的安全系统,因为对系统服务,文件权限,网络端口访问有极其严格的限制,例如:如果对一个文件没有正确安全上下文配置, 甚至你是root用户,你也不能启动某服务。有一些Linux系统上应用程序运行时,可以会被拒绝,导致无法正常运行的情况)
[root@localhost baifan]# setenforce 0
永久关闭(重启后生效,先设置临时再设置永久。)
[root@localhost baifan]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
安装依赖
[root@localhost baifan]# yum -y install wget gcc epel-release git
安装Redis缓存数据库并自启动
[root@localhost baifan]# yum -y install redis
[root@localhost baifan]# systemctl enable redis && systemctl start redis
安装mysql数据库
[root@localhost baifan]# dnf install @mysql
自启动
[root@localhost baifan]# systemctl enable --now mysqld
运行mysql_secure_installation脚本,该脚本执行一些与安全性相关的操作并设置MySQL根密码
生成随机数据库密码(定义 DB_PASSWORD 变量来保存密码)
[root@localhost baifan]# DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`
[root@localhost baifan]# echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m"
创建 jumpserver 数据库并创建授权用户 jumpserver 密码为$DB_PASSWORD 变量中的值。
mysql> create database jumpserver default charset 'utf8' collate 'utf8_bin';
mysql> create user 'jumpserver'@'127.0.0.1' identified by '密码';
错误可能会迟到,但是永远不会缺席。报错内容,密码不符合当前密码要求
报错原因为生成的随机密码没有标点符号,不符合mysql健壮密码要求,混入符号就好了
mysql> create user 'jumpserver'@'127.0.0.1' identified by 'xxxxxxxxx';
mysql> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1';
mysql> flush privileges;
安装 nginx
[root@localhost baifan]# yum -y install nginx
[root@localhost baifan]# systemctl enable nginx.service
因为CentOS8预装了python3.6,直接创建python3的虚拟环境
[root@localhost baifan]# cd /opt/ [root@localhost opt]# python3 -m venv py3 [root@localhost opt]# source /opt/py3/bin/activate
不过还需要安装python36-devel,缺乏python开发包的话,后面安装python依赖时会在执行#include<Python.h>时,因找不到开发包报错。
(py3) [root@localhost baifan]# yum -y install python36-devel
3. 安装JumpServer
从git拉取JumpServer项目包
(py3) [root@localhost opt]# git clone --depth=1 https://github.com/jumpserver/jumpserver.git
安装JumpServer运行依赖包
首先安装rpm依赖包,JumpServer对rpm依赖包名写在/opt/jumpserver/requirements/rpm_requirements.txt中。
(py3) [root@localhost opt]# cat /opt/jumpserver/requirements/rpm_requirements.txt gcc krb5-devel libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel sshpass openldap-devel mariadb-devel mysql-devel mysql libffi-devel openssh-clients telnet openldap-clients
安装rpm依赖,一次性安装这些包
(py3) [root@localhost opt]# yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt)
报错找不到lcm2-devel
下载lcm2-devel的rpm包https://rpmfind.net/linux/RPM/centos/8.2.2004/powertools/x86_64/Packages/lcms2-devel-2.9-2.el8.x86_64.html
下载好后,使用rz命令上传下载好的包到CentOS,开始安装
(py3) [root@localhost opt]# rpm -ivh lcms2-devel-2.9-2.el8.x86_64.rpm
继续使用
(py3) [root@localhost baifan]# yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt)
rpm依赖包中要安装的mariab和mysql起了冲突,不过不要紧,已经安装了mysql就不需要安装mariadb了,直接跳过,使用以下命令安装
(py3) [root@localhost baifan]# yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) --skip-broken
安装完毕,被跳过的包只有mariadb和mysql,进行下一步
安装python库依赖,安装时指定阿里云源,加快安装速度。
(py3) [root@localhost baifan]# pip install wheel -i https://mirrors.aliyun.com/pypi/simple/
升级 pip 和 setuptools。
(py3) [root@localhost baifan]# pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/
安装python依赖,因为需要的包也被列出来了,而且数目很多,一句话下载
(py3) [root@localhost baifan]# pip install -r /opt/jumpserver/requirements/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
运行环境依赖包安装完毕,现在开始配置JumpServer
4. 配置JumpServer
创建配置文件
(py3) [root@localhost baifan]# cd /opt/jumpserver (py3) [root@localhost jumpserver]# cp config_example.yml config.yml
生成随机 SECRET_KEY(加密密钥)
(py3) [root@localhost jumpserver]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
将 SECRET_KEY存放到环境变量中
(py3) [root@localhost jumpserver]# echo "SECRET_KEY= $SECRET_KEY" >> ~/.bashrc
生成随机 BOOTSTRAP_TOKEN(预共享 Token coco 和 guacamole 用来注册服务账号)
(py3) [root@localhost jumpserver]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
将 TOKEN 存放到环境变量中
(py3) [root@localhost jumpserver]# echo "BOOTSTRAP_TOKEN= $BOOTSTRAP_TOKEN" >> ~/.bashrc
修改配置文件,将jumpserver用户数据库密码、KEY、TOKEN写入config.yml对应的位置
设置 SECRET_KEY (py3) [root@localhost jumpserver]# sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml 设置 BOOTSTRAP_TOKEN (py3) [root@localhostjumpserver]# sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml 关闭 DEBUG 模式,用于生产环境。 (py3) [root@localhost jumpserver]# sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml 设置日志级别 (py3) [root@localhost jumpserver]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml 设置 session 过期时间 (py3) [root@localhost jumpserver]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml 设置连接 mysql 数据库的密码 (py3) [root@localhost jumpserver]# sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml
检查配置结果
(py3) [root@localhost jumpserver]# vim config.yml
启动 jumpserver
(py3) [root@localhost jumpserver]# ./jms start -d
访问 web 界面 http://ip地址:8080/
可以看到 web 页面的静态资源文件没有加载,这是由于开启了关闭了 DEBUG 模式导致的,生产环 境中需要在 nginx 反向代理中配置相关静态资源文件。 配置 systemctl 管理 jumpserver 服务,开启自启动。
(py3) [root@localhost jumpserver]# wget -O /usr/lib/systemd/system/jms.service https://demo.jumpserver.org/download/shell/centos/jms.service (py3) [root@localhost jumpserver]# chmod 755 /usr/lib/systemd/system/jms.service (py3) [root@localhost jumpserver]# systemctl enable jms
4. 安装 jumpserver 组件
安装 docker 环境依赖
[baifan@localhost ~]$ yum install -y yum-utils device-mapper-persistent-data lvm2
配置国内 docker 的 yum 源(阿里云)
[root@localhost baifan]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 docker-ce
[root@localhost baifan]# yum install docker-ce -y
报错,centos8默认使用podman代替docker,所以需要containerd.io
安装containerd.io
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
继续安装Docker,并启动
[root@localhost baifan]# yum install docker-ce -y [root@localhost baifan]# systemctl start docker && systemctl enable docker.service
创建docker镜像源
[root@localhost baifan]# tee /etc/docker/daemon.json <<-'EOF' > { > "registry-mirrors":["https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com"] > } > EOF
部署 koko
koko 为 SSH Server 和 Web Terminal Server。用户可以使用自己的账户通过 SSH 戒者 Web Terminal 访问 SSH 协议和 Telnet 协议资产。
(py3) [root@localhost baifan]# docker run --name jms_koko -d -p 2222:2222 -p 127.0.0.1:5000:5000 -e CORE_HOST=http://你的IP地址:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN -e LOG_LEVEL=ERROR --restart=always jumpserver/jms_koko:2.0.1
部署 guacamole
Guacamole 为 RDP 协议和 VNC 协议资产组件,用户可以通过 Web Terminal 来连接 RDP 协议和 VNC 协议资产(暂时只能通过 Web Terminal 来访问)。
(py3) [root@localhost baifan]# docker run --name jms_guacamole -d -p 127.0.0.1:8081:8080 -e JUMPSERVER_SERVER=http://你的IP地址:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN -e GUACAMOLE_LOG_LEVEL=ERROR --restart=always jumpserver/jms_guacamole:2.0.1
下载 Lina 组件(前端UI)
(py3) [root@localhost jumpserver]# wgethttp://demo.jumpserver.org/download/lina/2.0.1/lina.tar.gz (py3) [root@localhost opt]# tar -xf lina.tar.gz (py3) [root@localhost opt]# chown -R nginx:nginx lina
下载 Luna 组件
Luna 为 Web Terminal Server 前端页面, 用户使用 Web Terminal 方式登录所需要的组件。 Luna 配置非常简单只需下载解压即可,注意必须放在/opt/目录下,如果放在其他目录中则需要在 nginx 代理中修改对应的路径配置
(py3) [root@localhost opt]# wget https://demo.jumpserver.org/download/luna/ 2.0.1/luna.tar.gz (py3) [root@localhost opt]# tar xf luna.tar.gz (py3) [root@localhost opt]# chown -R nginx:nginx luna
配置 nginx 代理
注释 nginx 默认配置文件中的 server 字段
检测配置文件
重启nginx
(py3) [root@localhost opt]# systemctl restart nginx
再次访问 jumpserver:http://ip地址/
初始账号密码都为admin,重置密码后进入首页,JumpServer搭建成功