JumpServer-开源堡垒机的部署
JumpServer-开源堡垒机的部署
1 JumpServer简介
Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 机制的运维安全审计系统。
Jumpserver 使用 Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 方案,交互界面美观、用户体验好。
Jumpserver 采纳分布式架构,支持多机房跨区域部署,支持横向扩展,无资产数量及并发限制。
2 目标
使用Jumpserver统一管理公司内网资源,可以实现不通过内网来访问公司Windows/Linux资源。
3 环境准备
一台server,操作系统CentOS 7.4.1708 镜像CentOS-7-x86_64-DVD-1810.iso,IP 192.168.5.135,服务器具体配置如下:
- 硬件配置:2个CPU核心, 4G 内存, 50G 硬盘(最低)
- Python = 3.6.x
4 组件说明
- 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 来访问)
5 端口说明
- JumpServer 默认 Web 端口为 8080/tcp, 默认 WS 端口为 8070/tcp
- Koko 默认 SSH 端口为 2222/tcp
- Guacamole 默认端口为 8081/tcp,
- Nginx 默认端口为 80/tcp
- Redis 默认端口为 6379/tcp
- Mysql 默认端口为 3306/tcp
6 部署过程
6.1 关闭SELinux
SELinux不关闭的情况下会发生无法访问的问题。
[root@localhost ~]# setenforce 0
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
6.2 关闭防火墙
防止安装时出现各个组件的端口不能访问的问题。
[root@localhost ~]#systemctl stop firewalld && systemctl dible firewalld
6.3 安装依赖包
[root@localhost ~]# yum -y install wget gcc epel-release git
6.4 安装Redis
JumpServer使用Redis做cache和celery broke。
[root@localhost ~]# yum -y install redis
[root@localhost ~]# systemctl enable redis
[root@localhost ~]# systemctl start redis
6.5 安装Mysql并授权
JumpServer使用Mysql做数据库,也支持Sqlite3,Postgres等。
[root@localhost ~]# yum -y mariadb mairadb-devel mariadb-server
[root@localhost ~]# systemctl enable mairadb
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'tera123'; flush privileges;"
6.6 Mysql修改存储路径
Mysql yum安装后默认存储路径为根目录,所以需要修改存储路径防止根目录磁盘被占满。
[root@localhost ~]# vi /etc/my.cnf.d/mariadb-server.cnf
[mysqld]
datadir=/home/mysql
socket=/home/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[root@localhost ~]# vi /etc/my.cnf.d/client.cnf
[client-mariadb]
socket=/home/mysql/mysql.sock
[root@localhost ~]# systemctl restart mariadb
6.7 安装Nginx
安装Nginx,反向代理JumpServer各个组件。
[root@localhost ~]#vi /etc/yum.repos.d/nginx.rep
[nginx]
name=nginx
repobaseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@localhost ~]# yum -y install nginx
[root@localhost ~]# systemctl enable nginx
6.8 安装Pyhon3.6
[root@localhost ~]# yum -y install python36 python36-devel
[root@localhost ~]# cd /home
[root@localhost ~]# python3.6 -m venv py3
[root@localhost ~]# source /home/py3/bin/activate
6.9 安装JumpServer
[root@localhost ~]# cd /home
[root@localhost ~]# git clone --depth=1 https://github.com/jumpserver/jumpserver.git
[root@localhost ~]# yum -y install $(cat /home/jumpserver/requirements/rpm_requirements.txt)
6.10 安装Python依赖库
[root@localhost ~]# pip install wheel
[root@localhost ~]# pip install --upgrade pip setuptools
[root@localhost ~]# pip install -r /home/jumpserver/requirements/requirements.txt
6.11 修改JumpServer配置文件
[root@localhost ~]# cd /home/jumpserver
[root@localhost ~]# cp config_example.yml config.yml
[root@localhost ~]# vi config.yml
SECRET_KEY: FjAvZ0D5c6LwaUJVb7AwPPsiFl2wVVpMGQl41LBbQKi23bPEiK
BOOTSTRAP_TOKEN: e7t4EZ0BBw5GfvlH
DEBUG: false
LOG_LEVEL: ERROR
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: tera123
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
6.12 运行JumpServer
[root@localhost ~]# cd /home/jumpserver
[root@localhost ~]# ./jms start all -d
6.13 安装Docker
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@localhost~ ] # yum-config-manager\
--add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum -y install docker-ce wget
[root@localhost ~]# mkdir /etc/docker
[root@localhost ~] #yum -y install docker-ce wget
[root@localhost ~] #systemctl enable docker
[root@localhost ~] #systemctl start docker
6.14 部署Koko与Guacamole
[root@localhost ~]# docker run --name jms_koko -d -p 2222:2222\
-p 127.0.0.1:5000:5000\
-e CORE_HOST=http://192.168.5.135:8080\
-e BOOTSTRAP_TOKEN=e7t4EZ0BBw5GfvlH \
--restart=always wojiushixiaobai/jms_koko:1.5.6
[root@localhost ~]# docker run --name jms_guacamole -d -p 127.0.0.1:8081:8080\
-e JUMPSERVER_SERVER=http://192.168.5.135:8080\
-e BOOTSTRAP_TOKEN=e7t4EZ0BBw5GfvlH\
--restart=always wojiushixiaobai/jms_guacamole:1.5.6
6.15 部署Luna
Luna为JumpServer的Web前端。
[root@localhost ~]# cd /home
[root@localhost ~]# wget https://demo.jumpserver.org/download/luna/1.5.6/luna.tar.gz
[root@localhost ~]# tar -xvf luna.tar.gz
[root@localhost ~]# chown -R root:root luna
6.16 配置Nginx
[root@localhost ~]# vi /etc/nginx/conf.d/default.conf
server {
listen 80;
# server_name _;
client_max_body_size 1000m; # 录像及文件上传大小限制
client_header_timeout 360s;
large_client_header_buffers 4 16k;
client_body_buffer_size 128k;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
location /luna/ {
try_files $uri / /index.html;
alias /home/luna/; # luna 路径, 如果修改安装目录, 此处需要修改
}
location /media/ {
add_header Content-Encoding gzip;
root /home/jumpserver/data/; # 录像位置, 如果修改安装目录, 此处需要修改
}
location /static/ {
root /home/jumpserver/data/; # 静态资源, 如果修改安装目录, 此处需要修改
}
location /koko/ {
proxy_pass http://localhost:5000;
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 /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 /ws/ {
proxy_pass http://localhost:8070;
proxy_http_version 1.1;
proxy_buffering off;
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 / {
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;
access_log off;
}
}
[root@localhost ~]# systemctl start nginx
6.17 端口检查
检查端口状态,必须有6379,8080,8081,80,5555,8070,3306,2222几个端口。
[root@localhost ~]# netstat -nlp |grep tcp
6.18 验证JumpServer
默认登录密码,admin:admin,登录成功有欢迎界面,此次部署即成功。
[root@localhost ~]# ssh -p2222 admin@192.168.5.135
7 参考资料
- JumpServer官网:http://www.jumpserver.org/
- JumpServer文档:https://jumpserver.readthedocs.io/zh/master/
相关阅读。
如有其它问题,请填写右侧需求表单联系我们。