Jumpserver堡垒机搭建

跟着官网安装


介绍

堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活劢,以便集中报警、及时处理及审计定责.

功能


Jumpserver提供的堡垒机必备功能
身份验证 Authentication 登录认证 资源统一登录和认证
LDAP认证
支持OpenID,实现单点登录
多因子认证 MFA(Google Authenticator)
账号管理 Account 集中账号管理 管理用户管理
系统用户管理
统一密码管理 资产密码托管
自动生成密码
密码自动推送
密码过期设置
批量密码变更(X-PACK) 定期批量修改密码
生成随机密码
多云环境的资产纳管(X-PACK) 对私有云、公有云资产统一纳管
授权控制 Authorization 资产授权管理 资产树
资产或资产组灵活授权
节点内资产自动继承授权
组织管理(X-PACK) 实现多租户管理,权限隔离
多维度授权 可对用户、用户组或系统角色授权
指令限制 限制特权指令使用,支持黑白名单
统一文件传输 SFTP 文件上传/下载
文件管理 Web SFTP 文件管理
安全审计 Audit 会话管理 在线会话管理
历史会话管理
录像管理 Linux 录像支持
Windows 录像支持
指令审计 指令记录
文件传输审计 上传/下载记录审计

环境

关闭防火墙
[root@n2 ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
  Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
  Active: inactive (dead)
    Docs: man:firewalld(1)

关闭selinux
[root@n2 ~]# getenforce
Disabled

可以用阿里镜像源
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

修改字符集, 否则可能报 input/output error的问题, 因为日志里打印了中文
[root@n2 ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
[root@n2 ~]# export LC_ALL=zh_CN.UTF-8
[root@n2 ~]# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf

本机IP:192.168.231.61

准备 Python3 和 Python 虚拟环境

安装依赖包

[root@n2 ~]#  yum -y install wget gcc epel-release git

安装 Python3.6

[root@n2 ~]# wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz

[root@n2 Python-3.6.1]# ./configure  &&  make && make install

 (最好编译安装,yum安装后边会出错)

建立 Python 虚拟环境

因为 CentOS 7 自带的是 Python2, 而 Yum 等工具依赖原来的 Python, 为了不扰乱原来的环境我们来使用 Python 虚拟环境

[root@n2 ~]# cd /opt/
[root@n2 opt]# python3 -m venv py3
[root@n2 opt]# source /opt/py3/bin/activate
(py3) [root@n2 opt]#

# 看到下面的提示符代表成功, 以后运行 Jumpserver 都要先运行以上 source 命令, 以下所有命令均在该虚拟环境中运行

要退出python环境

(py3) [root@n2 ~]# deactivate

安装 Jumpserver

下载或 Clone 项目

(py3) [root@n2 opt]# git clone https://github.com/jumpserver/jumpserver.git

安装依赖 RPM 包

(py3) [root@n2 opt]# cd /opt/jumpserver/requirements

(py3) [root@n2 requirements]# yum -y install $(cat rpm_requirements.txt)

安装 Python 库依赖

(py3) [root@n2 requirements]# pip install --upgrade pip setuptools
(py3) [root@n2 requirements]# pip install -r requirements.txt
$ pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/
$ pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

安装 Redis Jumpserver 使用 Redis 做 cache 和 celery broke

(py3) [root@n2 ~]# yum -y install redis
(py3) [root@n2 ~]# systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /usr/lib/systemd/system/redis.service.
(py3) [root@n2 ~]# systemctl start redis

安装 MySQL

使用 Mysql 作为数据库, 如果不使用 Mysql 可以跳过相关 Mysql 安装和配置

(py3) [root@n2 ~]# yum -y install mariadb mariadb-devel mariadb-server
(py3) [root@n2 ~]# systemctl enable mariadb
(py3) [root@n2 ~]# systemctl start mariadb

创建数据库 Jumpserver 并授权

(py3) [root@n2 ~]# mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'realxw'; flush privileges;"

修改 Jumpserver 配置文件

(py3) [root@n2 ~]# cd /opt/jumpserver/
(py3) [root@n2 jumpserver]# cp config_example.yml config.yml
(py3) [root@n2 jumpserver]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50` # 生成随机SECRET_KEY
(py3) [root@n2 jumpserver]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`# 生成随机BOOTSTRAP_TOKEN
(py3) [root@n2 jumpserver]# vim config.yml
SECRET_KEY: $SECRET_KEY# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN# 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
DEBUG: false # DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志
SESSION_EXPIRE_AT_BROWSER_CLOSE: true #设置浏览器关闭,session则过期
DB_PASSWORD: realxw#数据库密码

运行 Jumpserver

(py3) [root@n2 ~]# cd /opt/jumpserver/

(py3) [root@n2 jumpserver]# ./jms start all -d

# 后台运行使用 -d 参数./jms start all -d

# 新版本更新了运行脚本, 使用方式./jms start|stop|status all  后台运行请添加 -d 参数

访问测试

页面显示不正常,等后边安装nginx后就可以正常访问了

 ​ Jumpserver堡垒机搭建_第1张图片

安装 SSH Server 和 WebSocket Server: Coco

Clone 项目

(py3) [root@n2 opt]# git clone https://github.com/jumpserver/coco.git
(py3) [root@n2 opt]# cd /opt/coco/requirements/
(py3) [root@n2 requirements]# yum -y install $(cat rpm_requirements.txt)
(py3) [root@n2 requirements]# pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

修改配置文件并运行

(py3) [root@n2 requirements]# cd /opt/coco/
(py3) [root@n2 coco]# cp config_example.yml config.yml
(py3) [root@n2 coco]# vim config.yml
BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN  # Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal
LOG_LEVEL: ERROR

按官网sed替换$BOOTSTRAP_TOKEN,会把值直接显示出来(BOOTSTRAP_TOKEN:  jfklasfjlksajfdkl),还是手动修改比较好。

后台启动cocod

(py3) [root@n2 coco]# ./cocod start -d  # 后台运行使用 -d 参数./cocod start -d
Use eventlet dispatch
Start coco process

使用方式./cocod start|stop|status  后台运行请添加 -d 参数

配置文件中已经添加BOOTSTRAP_TOKEN,jumpserver会自动接受coco注册,不用再手动注册了

安装 Web Terminal 前端: Luna

Luna 已改为纯前端, 需要 Nginx 来运行访问

访问(https://github.com/jumpserver/luna/releases)下载对应版本的 release 包, 直接解压不需要编译

解压 Luna

(py3) [root@n2 coco]# cd /opt/
(py3) [root@n2 opt]# wget https://github.com/jumpserver/luna/releases/download/1.4.9/luna.tar.gz
(py3) [root@n2 opt]# tar xf luna-1.4.9.tar.gz
(py3) [root@n2 opt]# chown -R root.root luna-1.4.9
(py3) [root@n2 opt]# mv luna-1.4.9 luna

配置 Nginx 整合各组件

(py3) [root@n2 ~]# rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
(py3) [root@n2 ~]# yum install nginx
(py3) [root@n2 ~]# rm -rf /etc/nginx/conf.d/default.conf
(py3) [root@n2 ~]# systemctl enable nginx

准备配置文件 修改 /etc/nginx/conf.d/jumpserver.conf

(py3) [root@n2 ~]# vim /etc/nginx/conf.d/jumpserver.conf

基本不用修改

server {
   listen 80;  # 代理端口, 以后将通过此端口进行访问, 不再通过8080端口
   # server_name demo.jumpserver.org;  # 修改成你的域名或者注释掉
   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/;  # 如果coco安装在别的服务器, 请填写它的ip
       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/;  # 如果coco安装在别的服务器, 请填写它的ip
       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/;  # 如果guacamole安装在别的服务器, 请填写它的ip
       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;  # 如果jumpserver安装在别的服务器, 请填写它的ip
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }
}

运行 Nginx

(py3) [root@n2 ~]# nginx -t   # 确保配置没有问题
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
(py3) [root@n2 ~]# systemctl start nginx
(py3) [root@n2 ~]# systemctl enable nginx

开始使用 Jumpserver

检查应用是否已经正常运行

(py3) [root@n2 jumpserver]# ./jms status
gunicorn is running: 13441
celery is running: 13463
beat is running: 13465
(py3) [root@n2 jumpserver]# cd /opt/coco/
(py3) [root@n2 coco]# ./cocod status
Use eventlet dispatch
Coco is running: 14670

Jumpserver堡垒机搭建_第2张图片

coco:监听的HTTP/WS端口号,默认5000,监听的SSH端口号, 默认2222

Jumpserver: 默认端口为 8080/tcp,通过nginx代理,访问80端口即可

mysql:3306

redis:6379

nginx:80

访问:

服务全部启动后, 访问 http://192.168.231.61, 访问nginx代理的端口, 不要再通过8080端口访问

默认账号: admin 密码: admin

Jumpserver堡垒机搭建_第3张图片

jumpserver会自动接受coco注册

Jumpserver堡垒机搭建_第4张图片

linux界面登录

[root@n2 ~]# ssh -p2222 [email protected]

Jumpserver堡垒机搭建_第5张图片

优化-设置开机自启

Systemd 管理启动 Jumpserver

适用于CentOS7

# Jumpserver
vim /usr/lib/systemd/system/jms.service

[Unit]
Description=jms
After=network.target mariadb.service redis.service
Wants=mariadb.service redis.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
ExecReload=
ExecStop=/opt/jumpserver/jms stop
[Install]
WantedBy=multi-user.target

# Coco

vim /usr/lib/systemd/system/coco.service

[Unit]
Description=coco
After=network.target jms.service
[Service]
Type=forking
PIDFile=/opt/coco/coco.pid
Environment="PATH=/opt/py3/bin"
ExecStart=/opt/coco/cocod start -d
ExecReload=
ExecStop=/opt/coco/cocod stop
[Install]
WantedBy=multi-user.target

启动

# 开机自启设置
systemctl enable jms
systemctl enable coco
systemctl enable guacamole
# 启动
systemctl start jms
systemctl start coco
systemctl start guacamole
# 停止
systemctl stop jms
systemctl stop coco
systemctl stop guacamole

 

参考:http://docs.jumpserver.org/zh/docs/setup_by_centos.html

你可能感兴趣的:(Linux基础篇,Jumpserver,堡垒机)