Jumpserver简介
Jumpserver 是一款使用 Python, Django 开发的开源跳板机系统, 为亏联网企业提供了认证,授权,审计,自动化运维等功能,基于ssh协议来管理,客户端无需安装agent。
堡垒机
堡垒机的主要作用权限控制和用户行为审计,堡垒机就像一个城堡的大门,城堡里的所有建筑就是你不同的业务系统 , 每个想进入城堡的人都必须经过城堡大门并经过大门守卫的授权,每个进入城堡的人必须且只能严格按守卫的分配进入指定的建筑,且每个建筑物还有自己的权限访问控制,不同级别的人可以到建筑物里不同楼层的访问级别也是不一样的。还有就是,每个进入城堡的人的所有行为和足迹都会被严格的监控和纪录下来,一旦发生犯罪事件,城堡管理人员就可以通过这些监控纪录来追踪责任人。 目前比较优秀的开源软件是jumpserver,认证、授权、审计、自动化、资产管理,适合中小型公司或服务器不多的情况。商业的堡垒机Citrix XenApp、齐治包括一些云机构提供的堡垒机这里不做记录
跳板机
跳板机就是一台服务器,开发或运维在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。
缺点
/*
1. 没有实现对运维人员操作行为的控制和审计,使用跳板机过程还会出现误操作导致的事故,一旦出现操作很难决定定位到原因和负责人.
2. 堡垒机,在一个特定的环境下,为了保障网络和数据收到外部和内部用户的破坏,而运行各种技术手段收集和监控网络环境每一个组成部分的系统状态,安全事件,网络活动,以便集中报警,及时处理及审计定责。
3. 堡垒机比跳板机多了实时收集,监控网络环境,集中报警等功能
*/
审计管理
审计管理其实很简单,就是把用户的所有操作都纪录下来,以备日后的审计或者事故后的追责。在纪录用户操作的过程中有一个问题要注意,就是这个纪录对于操作用户来讲是不可见的,什么意思?就是指,无论用户愿不愿意,他的操作都会被纪录下来,并且,他自己如果不想操作被纪录下来,或想删除已纪录的内容,这些都是他做不到的,这就要求操作日志对用户来讲是不可见和不可访问的,那么我们就可以通过堡垒机就可以很好的实现。
堡垒机和跳板机区别
/*
跳板机: 只有跳转登录功能.
如果跳板机提供了以下几条,叫做审计系统或者堡垒机.
1. 记录用户操作
2. 实现了权限管理.
3. 监控网络环境
4. 集中报警
堡垒机要想成功起到他的作用,只靠堡垒机本身是不够的,,还需要一系列的安全对用户进行限制的配合,堡垒机从部署上,网络要达到以下条件.
1. 所有人包括运维、开发等任何需要访问业务系统的人员,只能通过堡垒机访问业务系统.
1> 挥手所有对业务系统的访问权限,做到了除堡垒机管理人员,没有人知道业务系统任何机器的登录密码.
2> 网络上限制所有人员只能通过堡垒机的跳转才能访问业务系统.
2. 确保除了堡垒机管理员之外,所有其他人对堡垒机本身无任何操作权限,只有一个登录跳转功能.
3. 确保用户的操作记录不能被用户自己以任何方式获取并篡改.
*/
堡垒机功能实现需求
业务需求
/*
1. 兼顾业务安全目标与用户体验,堡垒机部署后,不应使用户访问业务系统的访问变的复杂,否则工作将很难推进,因为没人喜欢改变现状,尤其是改变后生活变得更艰难
2. 保证堡垒机稳定安全运行, 没有100%的把握,不要上线任何新系统,即使有100%把握,也要做好最坏的打算,想好故障预案.
*/
功能需求
/*
1. 所有的用户操作日志要保留在数据库中
2. 每个用户登录堡垒机后,只需要选择具体要访问的设置,就连接上了,不需要再输入目标机器的访问密码
3. 允许用户对不同的目标设备有不同的访问权限,例:
对10.0.2.34 有mysql 用户的权限
对192.168.3.22 有root用户的权限
对172.33.24.55 没任何权限
4. 分组管理,即可以对设置进行分组,允许用户访问某组机器,但对组里的不同机器依然有不同的访问权限
5. 密码对普通用户不可见
*/
jumpserver功能特点
/*
1. 完全开源,GPL授权
2. Python编写,容易二开
3. 实现了跳板机基本功能,身份认证、访问控制、授权、审计、批量操作等。
4. 集成了Ansible,批量命令等
5. 支持WebTerminal
6. Bootstrap编写,界面美观
7. 自动收集硬件信息
8. 录像回放
9. 命令搜索
10. 实时监控
11. 批量上传下载
*/
主要组件
JumpServer 为管理后台, 管理员可以通过 Web 页面进行资产管理、用户管理、资产授权等操作, 用户可以通过 Web 页面进行资产登录, 文件管理等操作
1.koko 为 SSH Server 和 Web Terminal Server 。用户可以使用自己的账户通过 SSH 或者 Web Terminal 访问 SSH 协议和 Telnet 协议资产
2.Luna 为 Web Terminal Server 前端页面, 用户使用 Web Terminal 方式登录所需要的组件
3.Guacamole 为 RDP 协议和 VNC 协议资产组件, 用户可以通过 Web Terminal 来连接 RDP 协议和 VNC 协议资产 (暂时只能通过 Web Terminal 来访问)
部署
安装jumpserver 3.0版本,相对于jumpserver 2.0版本,在新的版本3.0中取消了LDAP授权,取而代之的是ssh进行推送;界面也有所变化,功能更完善,安装更简单。
初始化
#!/usr/bin/env bash
# Author: ZhouJian
# Mail: 18621048481@163.com
# Time: 2019-9-3
# Describe: CentOS 7 Initialization Script
clear
echo -ne "\\033[0;33m"
cat<<EOT
_oo0oo_
088888880
88" . "88
(| -_- |)
0\\ = /0
___/\'---\'\\___
.\' \\\\\\\\| |// \'.
/ \\\\\\\\||| : |||// \\\\
/_ ||||| -:- |||||- \\\\
| | \\\\\\\\\\\\ - /// | |
| \\_| \'\'\\---/\'\' |_/ |
\\ .-\\__ \'-\' __/-. /
___\'. .\' /--.--\\ \'. .\'___
."" \'< \'.___\\_<|>_/___.\' >\' "".
| | : \'- \\\'.;\'\\ _ /\';.\'/ - \' : | |
\\ \\ \'_. \\_ __\\ /__ _/ .-\' / /
=====\'-.____\'.___ \\_____/___.-\'____.-\'=====
\'=---=\'
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
建议系统 CentOS7
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
EOT
echo -ne "\\033[m"
init_hostname() {
while read -p "请输入您想设定的主机名:" name
do
if [ -z "$name" ];then
echo -e "\033[31m 您没有输入内容,请重新输入 \033[0m"
continue
fi
read -p "您确认使用该主机名吗?[y/n]: " var
if [ $var == \'y\' -o $var == \'yes\' ];then
hostnamectl set-hostname $name
break
fi
done
}
init_security() {
systemctl stop firewalld
systemctl disable firewalld &>/dev/null
setenforce 0
sed -i \'/^SELINUX=/ s/enforcing/disabled/\' /etc/selinux/config
sed -i \'/^GSSAPIAu/ s/yes/no/\' /etc/ssh/sshd_config
sed -i \'/^#UseDNS/ {s/^#//;s/yes/no/}\' /etc/ssh/sshd_config
systemctl enable sshd crond &> /dev/null
echo -e "\033[32m [安全配置] ==> OK \033[0m"
}
init_yumsource() {
if [ ! -d /etc/yum.repos.d/backup ];then
mkdir /etc/yum.repos.d/backup
fi
mv /etc/yum.repos.d/* /etc/yum.repos.d/backup 2>/dev/null
if ! ping -c 2 baidu.com &>/dev/null
then
echo "您无法上外网,不能配置yum源"
exit
fi
curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo &>/dev/null
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
timedatectl set-timezone Asia/Shanghai
echo "nameserver 114.114.114.114" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
chattr +i /etc/resolv.conf
echo -e "\033[32m [YUM Source] ==> OK \033[0m"
}
init_install_package() {
echo -e "\033[32m 安装系统需要的软件,请稍等~ ~ ~ \033[0m"
yum -y install lsof tree wget vim bash-completion lftp bind-utils &>/dev/null
yum -y install atop htop nethogs net-tools libcurl-devel libxml2-devel openssl-devel unzip psmisc ntpdate nslookup &>/dev/null
echo -e "\033[32m [安装常用工具] ==> OK \033[0m"
}
init_kernel_parameter() {
cat > /etc/sysctl.conf <<EOF
fs.file-max = 999999
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 262144
vm.swappiness = 10
EOF
sysctl -p /etc/sysctl.conf >/dev/null 2>&1
echo -e "\033[32m [内核 优化] ==> OK \033[0m"
}
# **************************************************
init_system_limit() {
cat >> /etc/security/limits.conf <<EOF
* soft nproc 65530
* hard nproc 65530
* soft nofile 65530
* hard nofile 65530
EOF
ulimit -n 65535
ulimit -u 20480
echo -e "\033[32m [ulimits 配置] ==> OK \033[0m"
cat >> /etc/profile <<EOF
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S "
EOF
source /etc/profile
}
main() {
init_hostname
init_security
init_yumsource
init_install_package
init_kernel_parameter
init_system_limit
}
main
安装基础包和依赖
yum -y install wget gcc git
yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
yum -y install python36 python36-devel
cd /opt
python3.6 -m venv py3
source /opt/py3/bin/activate
# 退出虚拟环境可以使用 deactivate 命令
安装redis
(py3) [root@kvm-47 requirements]# yum -y install redis
(py3) [root@kvm-47 requirements]# systemctl enable redis && systemctl start redis
安装Mysql
(py3) [root@kvm-47 requirements]# yum -y install mariadb mariadb-devel mariadb-server
(py3) [root@kvm-47 requirements]# systemctl enable mariadb && systemctl start mariadb
(py3) [root@kvm-47 jumpserver]# mysqladmin -u root password \'ZHOUjian.20\'
(py3) [root@kvm-47 jumpserver]# DB_PASSWORD=DB_PASSWORD=ZHOUjian.20
(py3) [root@kvm-47 jumpserver]# mysql -uroot -pZHOUjian.20 -e "create database jumpserver default charset \'utf8\' collate \'utf8_bin\'; grant all on jumpserver.* to \'jumpserver\'@localhost identified by \'ZHOUjian.20\'; ; flush privileges;"
安装配置jumpserver
cd /opt && \
wget https://github.com/jumpserver/jumpserver/releases/download/v2.4.3/jumpserver-v2.4.3.tar.gz
tar xf jumpserver-v2.4.3.tar.gz
mv jumpserver-v2.4.3 jumpserver
yum install -y $(cat rpm_requirements.txt)
pip install --upgrade pip setuptools
pip install wheel && \
pip install --upgrade pip setuptools && \
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
cd /opt/jumpserver && \
cp config_example.yml config.yml && \
vim config.yml
SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
echo -e "\033[31m 你的SECRET_KEY是 $SECRET_KEY \033[0m"
echo -e "\033[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN \033[0m"
修改config.yml
cat config.yml
# SECURITY WARNING: keep the secret key used in production secret!
# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
SECRET_KEY: FjgRr6iIqjOJG6bRvTVNRqKacZvmf7pXwyj7yCNE2SfRJ0A34w
# SECURITY WARNING: keep the bootstrap token used in production secret!
# 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
BOOTSTRAP_TOKEN: Y7e3YjYvAQY0sANy
# Development env open this, when error occur display the full process track, Production disable it
# DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志
DEBUG: false
# DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/
# 日志级别
LOG_LEVEL: ERROR
# LOG_DIR:
# Session expiration setting, Default 24 hour, Also set expired on on browser close
# 浏览器Session过期时间,默认24小时, 也可以设置浏览器关闭则过期
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
# Database setting, Support sqlite3, mysql, postgres ....
# 数据库设置
# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# SQLite setting:
# 使用单文件sqlite数据库
# DB_ENGINE: sqlite3
# DB_NAME:
# MySQL or postgres setting like:
# 使用Mysql作为数据库
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: ZHOUjian.20
DB_NAME: jumpserver
# When Django start it will bind this host and port
# ./manage.py runserver 127.0.0.1:8080
# 运行时绑定端口
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
# Use Redis as broker for celery and web socket
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
# REDIS_PASSWORD:
# REDIS_DB_CELERY: 3
# REDIS_DB_CACHE: 4
# Use OpenID Authorization
# 使用 OpenID 进行认证设置
# AUTH_OPENID: False # True or False
# BASE_SITE_URL: None
# AUTH_OPENID_CLIENT_ID: client-id
# AUTH_OPENID_CLIENT_SECRET: client-secret
# AUTH_OPENID_PROVIDER_ENDPOINT: https://op-example.com/
# AUTH_OPENID_PROVIDER_AUTHORIZATION_ENDPOINT: https://op-example.com/authorize
# AUTH_OPENID_PROVIDER_TOKEN_ENDPOINT: https://op-example.com/token
# AUTH_OPENID_PROVIDER_JWKS_ENDPOINT: https://op-example.com/jwks
# AUTH_OPENID_PROVIDER_USERINFO_ENDPOINT: https://op-example.com/userinfo
# AUTH_OPENID_PROVIDER_END_SESSION_ENDPOINT: https://op-example.com/logout
# AUTH_OPENID_PROVIDER_SIGNATURE_ALG: HS256
# AUTH_OPENID_PROVIDER_SIGNATURE_KEY: None
# AUTH_OPENID_SCOPES: "openid profile email"
# AUTH_OPENID_ID_TOKEN_MAX_AGE: 60
# AUTH_OPENID_ID_TOKEN_INCLUDE_CLAIMS: True
# AUTH_OPENID_USE_STATE: True
# AUTH_OPENID_USE_NONCE: True
# AUTH_OPENID_SHARE_SESSION: True
# AUTH_OPENID_IGNORE_SSL_VERIFICATION: True
# AUTH_OPENID_ALWAYS_UPDATE_USER: True
# Use Radius authorization
# 使用Radius来认证
# AUTH_RADIUS: false
# RADIUS_SERVER: localhost
# RADIUS_PORT: 1812
# RADIUS_SECRET:
# CAS 配置
# AUTH_CAS\': False,
# CAS_SERVER_URL\': "http://host/cas/",
# CAS_ROOT_PROXIED_AS\': \'http://jumpserver-host:port\',
# CAS_LOGOUT_COMPLETELY\': True,
# CAS_VERSION\': 3,
# LDAP/AD settings
# LDAP 搜索分页数量
# AUTH_LDAP_SEARCH_PAGED_SIZE: 1000
#
# 定时同步用户
# 启用 / 禁用
# AUTH_LDAP_SYNC_IS_PERIODIC: True
# 同步间隔 (单位: 时) (优先)
# AUTH_LDAP_SYNC_INTERVAL: 12
# Crontab 表达式
# AUTH_LDAP_SYNC_CRONTAB: * 6 * * *
#
# LDAP 用户登录时仅允许在用户列表中的用户执行 LDAP Server 认证
# AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS: False
#
# LDAP 认证时如果日志中出现以下信息将参数设置为 0 (详情参见:https://www.python-ldap.org/en/latest/faq.html)
# In order to perform this operation a successful bind must be completed on the connection
# AUTH_LDAP_OPTIONS_OPT_REFERRALS: -1
# OTP settings
# OTP/MFA 配置
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver
# Perm show single asset to ungrouped node
# 是否把未授权节点资产放入到 未分组 节点中
# PERM_SINGLE_ASSET_TO_UNGROUP_NODE: False
#
# 同一账号仅允许在一台设备登录
# USER_LOGIN_SINGLE_MACHINE_ENABLED: False
#
# 启用定时任务
# PERIOD_TASK_ENABLE: True
#
# 启用二次复合认证配置
# LOGIN_CONFIRM_ENABLE: False
#
# Windows 登录跳过手动输入密码
WINDOWS_SKIP_ALL_MANUAL_PASSWORD: True
启动关闭jumpservere
(py3) [root@kvm-47 jumpserver]# cd /opt/jumpserver/
(py3) [root@kvm-47 jumpserver]# ./jms start all -d
(py3) [root@kvm-47 jumpserver]# ./jms stop
wget -O /usr/lib/systemd/system/jms.service https://demo.jumpserver.org/download/shell/centos/jms.service
chmod 755 /usr/lib/systemd/system/jms.service
systemctl enable jms # 配置自启
部署koko
支持终端管理,默认port为2222
正常部署koko组件
cd /opt && \
wget https://github.com/jumpserver/koko/releases/download/v2.4.3/koko-v2.4.3-linux-amd64.tar.gz
tar -xf koko-v2.4.3-linux-amd64.tar.gz && \
mv koko-v2.4.3-linux-amd64 koko && \
chown -R root:root koko && \
cd koko \
mv kubectl /usr/local/bin/ && \
wget https://download.jumpserver.org/public/kubectl.tar.gz && \
tar -xf kubectl.tar.gz && \
chmod 755 kubectl && \
mv kubectl /usr/local/bin/rawkubectl && \
rm -rf kubectl.tar.gz
cp config_example.yml config.yml && \
vi config.yml
# BOOTSTRAP_TOKEN 需要从 jumpserver/config.yml 里面获取, 保证一致
./koko -d
docker部署
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
yum -y install docker-ce
mkdir /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
# 启动Docker后台服务
systemctl start docker && systemctl enable docker
systemctl daemon-reload
# 获取当前服务器 IP,如果是云服务器请将外网IP给到这个变量
Server_IP=`ip addr | grep inet | egrep -v \'(127.0.0.1|inet6|docker)\' | awk \'{print $2}\' | tr -d "addr:" | head -n 1 | cut -d / -f1`
docker run --name jms_koko -d \
-p 2222:2222 \
-p 127.0.0.1:5000:5000 \
-e CORE_HOST=http://192.168.244.144:8080 \
-e BOOTSTRAP_TOKEN=zxffNymGjP79j6BN \
-e LOG_LEVEL=ERROR \
--privileged=true \
--restart=always \
jumpserver/jms_koko:v2.4.3
dockerGuacamole
建议使用 Docker 部署 Guacamole 组件 , 部分环境可能无法正常编译安装
docker run --name jms_guacamole -d \
-p 127.0.0.1:8081:8080 \
-e JUMPSERVER_SERVER=http://<Jumpserver_url> \
-e BOOTSTRAP_TOKEN=<Jumpserver_BOOTSTRAP_TOKEN> \
-e GUACAMOLE_LOG_LEVEL=ERROR \
jumpserver/jms_guacamole:<Tag>
<Jumpserver_url> 为 JumpServer 的 url 地址, <Jumpserver_BOOTSTRAP_TOKEN> 需要从 jumpserver/config.yml 里面获取, 保证一致, <Tag> 是版本
# Example
docker run --name jms_guacamole -d \
-p 127.0.0.1:8081:8080 \
-e JUMPSERVER_SERVER=http://116.196.83.113:8080 \
-e BOOTSTRAP_TOKEN=Y7e3YjYvAQY0sANy \
-e GUACAMOLE_LOG_LEVEL=ERROR \
jumpserver/jms_guacamole:v2.4.3
部署luna
与nginx结合支持Web Terminal前端
# 安装 Web Terminal 前端: Luna 需要 Nginx 来运行访问 访问(https://github.com/jumpserver/luna/releases)下载对应版本的 release 包, 直接解压, 不需要编译
cd /opt
wget https://github.com/jumpserver/luna/releases/download/v2.4.3/luna-v2.4.3.tar.gz
tar -xf luna-v2.4.3.tar.gz
mv luna-v2.4.3 luna
chown -R nginx:nginx luna
配置nginx
vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0enabled=1
yum -y install nginx
systemctl enable nginx
rm -rf /etc/nginx/conf.d/default.conf
cd /etc/nginx/
sed -i \'/^ *#/d\' nginx.conf
sed -ri \'/^[[:space:]]*(#|$)/d\' nginx.conf
vim /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
# server_name _;
server_name bastion.qf.com;
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 /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;
(py3) [root@JD jumpserver]# cat /etc/nginx/conf.d/jumpserver.conf
server {
listen 80;
# server_name _;
client_max_body_size 1024m; # 录像及文件上传大小限制
location /ui/ {
try_files $uri / /index.html;
alias /opt/lina/;
expires 24h;
}
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/;
expires 24h;
}
location /media/ {
add_header Content-Encoding gzip;
root /opt/jumpserver/data/;
}
location /static/ {
root /opt/jumpserver/data/;
expires 24h;
}
location /koko/ {
proxy_pass http://localhost:5000;
proxy_buffering off;
proxy_http_version 1.1;
proxy_request_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 /guacamole/ {
proxy_pass http://localhost:8081/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_request_buffering off;
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_buffering off;
proxy_http_version 1.1;
proxy_request_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;
}
location /api/ {
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;
}
location /core/ {
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;
}
location / {
rewrite ^/(.*)$ /ui/$1 last;
}
}
systemctl start nginx
Jumpserver环境访问方式
白名单访问
/*
可在防火墙白名单中添加IP, 这种方法有局限性,因为家里上网的IP是不断变化的.随着开发人员增多,维护成本会增加。
*/
使用SSL VPN
/*
华为6300自带100个SSL VPN账号,可用Jumpserver发布为web资源,通过ssl vpn访问
*/
登录测试
# 检查应用是否已经正常运行
# 服务全部启动后, 访问 jumpserver 服务器 nginx 代理的 80 端口, 不要通过8080端口访问
# 默认账号: admin 密码: admin
ssh admin@192.168.0.3 -p2222
Administrator, 欢迎使用JumpServer开源堡垒机系统
1) 输入 部分IP,主机名,备注 进行搜索登录(如果唯一).
2) 输入 / + IP,主机名,备注 进行搜索,如:/192.168.
3) 输入 p 进行显示您有权限的主机.
4) 输入 g 进行显示您有权限的节点.
5) 输入 d 进行显示您有权限的数据库.
6) 输入 k 进行显示您有权限的Kubernetes.
7) 输入 r 进行刷新最新的机器和节点信息.
8) 输入 h 进行显示帮助.
9) 输入 q 进行退出.
Opt>
脚本快速部署
curl -sSL https://github.com/jumpserver/jumpserver/releases/download/v2.4.3/quick_start.sh | sh
# 网速快五分钟就好了,直到出现下面信息
JumpServer 部署完成
请到 /opt/setuptools 目录执行 ./jmsctl.sh start 启动
# 下载文件
cd /opt
yum -y install wget git
git clone --depth=1 https://github.com/jumpserver/setuptools.git
cd setuptools
cp config_example.conf config.conf
vi config.conf
./jmsctl.sh install
./jmsctl.sh start
# 升级
./jmsctl.sh upgrade
仪表盘
系统设置
设置用户访问的URL
设置邮箱及验证
/*
点击页面上边的"邮件设置", 进入邮件设置页面
默认使用 25 端口, 不勾选 SSL 和 TLS; 如果需要勾选 SSL, 端口需要修改成 465; 如果需要勾选 TLS, 端口需要改成 587
不可以同时勾选 SSL 和 TLS
发送账号一定要填
配置邮件服务后, 点击页面的"测试连接"按钮, 如果配置正确, JumpServer 会发送一条测试邮件到您的 SMTP 账号邮箱里面, 确定收到测试邮件后点击保存即可使用
*/
终端设置
密码认证”和”密钥认证”是 SSH 连接跳板机时所使用的认证方式(都不选会造成无法使用 SSH 方式连接登录跳板机, 不影响 web 登录)
“Telnet成功正则表达式” telnet设备登陆失败需要设置
“命令存储””录像存储”位置设置
“命令存储””录像存储”修改后, 需要在Jumpserver 会话管理-终端管理 修改terminal的配置 录像存储 命令记录, 然后重启 Jumpserver 服务
设置后重启 koko 才能生效
安全设置
“MAF二次认证”勾选会开启全局强制”MFA”, 所有 jumpserver 用户必须使用动态口令进行认证登录(即时生效)
“限制登录失败”和”限制登录时间”设置需要重启 jumpserver 才能生效
“SSH最大空闲时间”设置需要重启 koko 才能生效
“密码校验规则”设置立即生效
用户管理
用户组设置
添加用户组
用户名即jumpserver登陆账号,用户组是用来资产授权,当某个资产对一个用户组授权后,这个用户组下面的所有用户都可以使用这个资产了.角色用于区分一个用户是管理员还是普通用户.点击用户管理–>用户组–>添加用户组
用户设置
资产管理
管理用户
管理用户是被管理服务器的 root,或拥有 NOPASSWD: ALL sudo 权限的用户,Jumpserver 使用该用户来推送系统用户、获取资产硬件信息等。
系统用户
系统用户是 Jumpserver 跳转登录资产时使用的用户,可以理解为登录资产用户, Jumpserver使用系统用户登录资产。
系统用户的 Sudo 栏填写允许当前系统用户免sudo密码执行的程序路径,如默认的/sbin/ifconfig,意思是当前系统用户可以直接执行 ifconfig 命令或 sudo ifconfig 而不需要输入当前系统用户的密码,执行其他的命令任然需要密码,以此来达到权限控制的目的。此处的权限应该根据使用用户的需求汇总后定制,原则上给予最小权限即可。
系统用户创建时,如果选择了自动推送 Jumpserver 会使用 Ansible 自动推送系统用户到资产中,如果资产(交换机、Windows )不支持 Ansible, 请手动填写账号密码。
Linux 系统协议项务必选择 ssh 。如果用户在系统中已存在,请去掉自动生成密钥、自动推送勾选
网域列表
网域功能是为了解决部分环境无法直接连接而新增的功能,原理是通过网关服务器进行跳转登录。
这个功能,一般情况不用到。
资产列表
点击页面左侧的“资产管理”菜单下的“资产列表”按钮,查看当前所有的资产列表。
点击页面左上角的“创建资产”按钮,进入资产创建页面,填写资产信息。
IP 地址和管理用户要确保正确,确保所选的管理用户的用户名和密码能”牢靠”地登录指定的 IP 主机上。资产的系统平台也务必正确填写。公网 IP 信息只用于展示,可不填,Jumpserver 连接资产使用的是 IP 信息。
如果资产不能正常连接,请检查管理用户的用户名和密钥是否正确以及该管理用户是否能使用 SSH 从 Jumpserver 主机正确登录到资产主机上。
我在操作时也有连不上的情况,我的情况是更改配置文件 或者更改了其他东西,只重启了jumpserver进程,而没有全部重启,比如koko ,Guacamole。都要重启。
权限管理
资产授权
节点,对应的是资产,代表该节点下的所有资产。
用户组,对应的是用户,代表该用户组下所有的用户。
系统用户,及所选的用户组下的用户能通过该系统用户使用所选节点下的资产。
节点,用户组,系统用户是一对一的关系,所以当拥有 Linux、Windows 不同类型资产时,应该分别给 Linux 资产和 Windows 资产创建授权规则。
授权后,终端连接过去才可以查看到资产
会话管理
Web终端
Web 终端是资产使用界面, 管理员和用户都是从这里登录到资产上, 执行操作。点击资产名字连接资产, 点击"Server"下的"Disconnect"断开资产连接。
文件管理
文件管理允许对 SSH 协议资产进行文件上传下载创建删除操作(不支持上传文件夹), 目前也不支持系统用户是手动登录的资产。
命令记录
命令记录里面存放的是用户在资产上执行过哪些命令, 单击一行记录, 会展示命令执行的结果:
历史会话
历史会话同在线会话包含的信息一样, 都有用户、资产和 IP 地址等信息。
JumpServer 提供历史会话的录像观看。点击左侧的"回放"按钮, 即可观看录像。
终端管理
终端列表页面列出了 JumpServer 正在使用的终端有哪些, 例如:koko、Gua 等。终端第一次使用, 会首先向 JumpServer 发送请求注册, 在 JumpServer 中接受注册后就可以正常使用该终端了。
作业中心
批量命令
可以通过该功能快速下发命令到资产, 目前仅支持能被 ansible 管理的资产, 要求 系统用户 登陆方式为 自动登陆。
任务列表
作业是 JumpServer 向其所管理下的资产发送的指令, 例如, 测试资产可连接性、获取资产硬件信息、测试管理用户可连接性和测试系统用户可连接性等命令。默认展示最近7天的作业记录。