Jumpserver堡垒机
一、Jumpserver简介
1、跳板机概述
跳板机就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。
跳板机缺点:
没有实现对运维人员操作行为的控制和审计,使用跳板机的过程中还是会出现误操作、违规操作导致的事故,一旦出现操作事故很难快速定位到原因和责任人;
2、堡垒机概述
堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。
堡垒机跟跳板机对比
堡垒机比跳板机多了实时收集、监控网络环境、集中报警等功能。
堡垒机跟跳板机很相似,比跳板机多了几个功能:
1、给其它服务器推送sudo用户,并为其设置权限
2、多了一个用户行为监控的功能(有录像)
3、Jumpserver概述
Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 的专业运维审计系统。
Jumpserver 使用 Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。
Jumpserver 采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发限制。
为互联网企业提供了认证,授权,审计,自动化运维等功能。
4、jumpserver组件
Jumpserver 为管理后台,管理员可以通过Web页面进行资产管理、用户管理、资产授权等操作
Coco 为 SSH Server 和 Web Terminal Server(网页linux客户端)。用户可以通过使用自己的账户登录 SSH 或者 Web Terminal 直接访问被授权的资产。不需要知道服务器的账户密码,新版本的coco被koko取代。
Luna 为 Web Terminal Server 前端页面,用户使用 Web Terminal 方式登录所需要的组件
Guacamole 为 Windows 组件,用户可以通过 Web Terminal 来连接 Windows 资产 (暂时只能通过 Web Terminal 来访问)
二、部署jumpserver堡垒机
1、Jumpserver 环境要求
硬件配置: 2个CPU核心, 4G内存, 50G 硬盘(最低)
操作系统: Linux 发行版 x86_64
Python = 3.6.x
Mysql Server ≥ 5.6
Mariadb Server ≥ 5.5.56
Redis
2、实验步骤
安装python
配置本地jumpserver的yum源
Jumpserver-packs包里包含了所有实验所需的rpm包。
[root@cong13 ~]# vim /etc/yum.repos.d/jumpserver.repo
[jumpserver]
name=CentOS7
baseurl=file:///root/jumpserver-packs
enable=1
gpgcheck=0
上传安装包
[root@cong13 ~]# ls
anaconda-ks.cfg jumpserver-master.zip Python-3.6.8.tgz jumpserver-packs.tar.gz pip-packs.tar.gz
[root@cong13 ~]# tar -zxvf jumpserver-packs.tar.gz
[root@cong13 ~]# tar -zxvf pip-packs.tar.gz
[root@cong13 ~]# tar -zxvf Python-3.6.8.tgz -C /usr/local/src/
安装依赖包
[root@cong13 ~]# yum install -y gcc zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel openldap-devel sshpass
编译安装
[root@cong13 ~]# cd /usr/local/src/Python-3.6.8/
[root@cong13 Python-3.6.8]# ./configure --prefix=/usr/local/python #预编译
[root@cong13 Python-3.6.8]# make -j 2 #编译
[root@cong13 Python-3.6.8]# make install #安装
给python做软连接
[root@cong13 Python-3.6.8]# ln -s /usr/local/python/bin/* /usr/local/bin/
查看python版本
[root@cong13 Python-3.6.8]# python3 -V
Python 3.6.8
[root@cong13 Python-3.6.8]# pip3 -V
pip 18.1 from /usr/local/python/lib/python3.6/site-packages/pip (python 3.6)
配置python虚拟环境
[root@cong13 Python-3.6.8]# cd
[root@cong13 ~]# python3.6 -m venv /opt/py3 #创建 py3 虚拟环境
[root@cong13 ~]# source /opt/py3/bin/activate #载入 py3 虚拟环境
以后运行 Jumpserver 都要先运行以上 source 命令,以下所有命令均在该虚拟环境中运行
把python虚拟环境设为开机自启动
(py3) [root@cong13 ~]# echo "source /opt/py3/bin/activate" >> /root/.bashrc
安装jumpserver
解压代码
(py3) [root@cong13 ~]# yum install -y unzip
(py3) [root@cong13 ~]# unzip jumpserver-master.zip -d /opt/
(py3) [root@cong13 ~]# cd /opt/
(py3) [root@cong13 opt]# mv jumpserver-master/ jumpserver
(py3) [root@cong13 ~]# cd /opt/jumpserver/requirements/
安装rpm依赖
直接安装rpm_requirements.txt文件中所有的软件
(py3) [root@cong13 requirements]# yum -y install $(cat rpm_requirements.txt)
方法一:安装 Python 库依赖(没有网络)
(py3) [root@cong13 requirements]# pip install --no-index --find-links=/root/pip-packs/ pyasn1 six cffi pytest-runner #请先安装这几个依赖包,不然会报错
(py3) [root@cong13 requirements]# pip install --no-index --find-links=/root/pip-packs/ -r requirements.txt
安装redis
Jumpserver使用Redis做cache和分布式任务队列,如果有搭建好的redis集群,可以不用搭建。也可以使用二进制包安装redis。
(py3) [root@cong13 ~]# yum -y install redis
(py3) [root@cong13 ~]# systemctl start redis #启动redis
(py3) [root@cong13 ~]# systemctl enable redis #把redins添加开机启动
安装 MySQL
如果有mysql集群,可以不同搭建,centos7默认使用mariadb数据库,也可以源码安装mysql5.7
(py3) [root@cong13 ~]# yum -y install mariadb mariadb-devel mariadb-server
(py3) [root@cong13 ~]# systemctl start mariadb #启动mariadb
(py3) [root@cong13 ~]# systemctl enable mariadb
创建Jumpserver数据库并授权
(py3) [root@cong13 ~]# mysql
MariaDB [(none)]> create database jumpserver default charset 'utf8';
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'jumpserver'; #授权
MariaDB [(none)]> flush privileges; #刷新权限
生成密钥
生成随机密钥,等修改配置文件需要
(py3) [root@cong13 ~]# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
cUBbafUeVjpsO9txGxKbYQhagezAzYaPfVNGQnI2AGYZIaNFL
(py3) [root@cong13 ~]# cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16;echo
h8X7RRmkczrV3Dts
密钥最好找个文档记一下,后面还要用到
修改 Jumpserver 配置文件
(py3) [root@cong13 ~]# cd /opt/jumpserver/
(py3) [root@cong13 jumpserver]# cp config_example.yml config.yml
(py3) [root@cong13 jumpserver]# vim config.yml
SECRET_KEY: cUBbafUeVjpsO9txGxKbYQhagezAzYaPfVNGQnI2AGYZIaNFL
BOOTSTRAP_TOKEN: h8X7RRmkczrV3Dts
# 数据库设置
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: jumpserver #注意修改mysql账号、密码和IP地址
DB_NAME: jumpserver
# Redis配置
REDIS_HOST: 127.0.0.1 #这里可以修改redis配置,我们这里使用默认设置
REDIS_PORT: 6379
# REDIS_PASSWORD:
生成数据库表结构和初始化数据
(py3) [root@cong13 jumpserver]# ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib64/
(py3) [root@cong13 jumpserver]# cd /opt/jumpserver/utils/
(py3) [root@cong13 utils]# sh make_migrations.sh
运行Jumpserver
(py3) [root@cong13 utils]# cd /opt/jumpserver/
(py3) [root@cong13 jumpserver]# ./jms start all #可以-d参数在后台运行 ./jms start all -d, 确保已经载入 py3 虚拟环境
设置service脚本
(py3) [root@cong13 ~]# vim /usr/lib/systemd/system/jms.service
[Unit]
Description=jms
After=network.target mariadb.service redis.service docker.service
Wants=mariadb.service redis.service docker.service
[Service]
Type=forking
Environment="PATH=/opt/py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
ExecStart=/opt/jumpserver/jms start all -d
ExecRestart=/opt/jumpserver/jms restart all -d
ExecStop=/opt/jumpserver/jms stop
[Install]
WantedBy=multi-user.target
(py3) [root@cong13 ~]# systemctl daemon-reload
(py3) [root@cong13 ~]# systemctl restart jms
设置开机自启动
(py3) [root@cong13 ~]# systemctl enable jms
登陆
登陆jumpserver,默认账号:admin 密码:admin
http://192.168.100.10:8080
安装Web Terminal- koko组件
这里只是部署了Jumpserver, 没有 Web Terminal,所以访问 Web Terminal(web linux终端)会报错。
上传软包
(py3) [root@cong13 ~]# ls
anaconda-ks.cfg jumpserver-packs.tar.gz pip-packs requirements.txt
jumpserver.zip koko-master-6d4e69b-linux-amd64.tar.gz pip-packs.tar.gz wget-log
jumpserver-packs luna.tar.gz Python-3.6.8.tgz
解压软件包
(py3) [root@cong13 ~]# tar -zxvf koko-master-6d4e69b-linux-amd64.tar.gz -C /opt/
修改文件权限
(py3) [root@cong13 opt]# chown -R root:root /opt/kokodir/
修改KOKO配置文件
(py3) [root@cong13 opt]# cd /opt/kokodir/
(py3) [root@cong13 kokodir]# cp config_example.yml config.yml
(py3) [root@cong13 kokodir]# vim config.yml #密钥要跟jumpserver的密钥一致
BOOTSTRAP_TOKEN: h8X7RRmkczrV3Dts
SECRET_KEY: cUBbafUeVjpsO9txGxKbYQhagezAzYaPfVNGQnI2AGYZIaNFL
把之前用文档记录的密钥打上
启动koko
(py3) [root@cong13 kokodir]# ./koko & #&把程序调入后台运行
查看端口
(py3) [root@cong13 kokodir]# netstat -antup | grep 2222
把koko加入开机自启动
(py3) [root@cong13 kokodir]# echo " cd /opt/kokodir && ./koko & " >> /etc/rc.local
(py3) [root@cong13 kokodir]# chmod +x /etc/rc.local
使用ssh测试(建议重新打开xshell登录)
(py3) [root@cong13 ~]# ssh admin@192.168.100.10 -p 2222 #使用admin账号登陆,密码:admin
有了Web Terminal以后,我们可以远程堡垒机,然后通过堡垒机进行登录管理服务器。
部署luna 组件
解压文件
(py3) [root@cong13 ~]# tar -zxvf luna.tar.gz -C /opt/
设置权限
(py3) [root@cong13 ~]# chown -R root:root /opt/luna/
设置nginx 整合各组件
安装nginx
这里直接使用yum安装,也可以使用源码包安装
(py3) [root@cong13 ~]# yum install -y nginx
修改配置文件
Nginx主要提供反向代理功能,这里要修改主配置文件里的默认server端口
(py3) [root@cong13 ~]# vic/nginx/nginx.conf #把80端口修改为808
server {
listen 808 default_server;
listen [::]:808 default_server;
2.6.35.8、创建jumpserver.conf配置文件
所有的jumpserver的服务都使用nginx来进行反向代理,开启nginx缓存
(py3) [root@cong13 ~]# vim /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
client_max_body_size 100m; # 录像及文件上传大小限制
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/; # luna 路径, 如果修改安装目录, 此处需要修改
}
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/; # 录像位置, 如果修改安装目录, 此处需要修改
}
location /static/ {
root /opt/jumpserver/data/; # 静态资源, 如果修改安装目录, 此处需要修改
}
location /socket.io/ {
proxy_pass http://localhost:5000/socket.io/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location /coco/ {
proxy_pass http://localhost:5000/coco/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location /guacamole/ {
proxy_pass http://localhost:8081/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
测试配置文件
(py3) [root@cong13 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
启动nginx
(py3) [root@cong13 ~]# systemctl start nginx
(py3) [root@cong13 ~]# systemctl enable nginx
登陆jumpserver
使用nginx做反向代理以后,就可以直接使用80端口来访问jumpserver http://192.168.100.10
查看luna
http://192.168.100.10/luna/
我们这里没有部署windows客户端组件guacamole,因为只能通过jumpserver的web客户端来连接windows服务器,不实用。windows服务器我们一般还是使用TeamViewer、vnc或者windows远程连接。
3、jumpserver使用
修改当前站点的URL为本机IP或者jumpserver的域名,不然新建用户发送过去的邮件修改不了密码。
设置jumpserver发件邮箱,用来给用户发送通知邮件,设置完了以后测试一下邮箱联通。
创建用户
查看邮件
这是使用的是通过邮件发送用户密码,第一次登陆必须需修改密码。