文章目录
1. 概述
- 堡垒机,在特定的网络环境下,为了保障网络和数据不收外界入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成的步伐的系统状态,安全事件,网络活动,以便于集中报警,即时处理及审计定责。
- 核心功能主要是远程登录服务器和日志审计
- jumpserver是全球首款完全开源的堡垒机,中国人自己开发的软件,使用的环境是Python/Django
2. 环境搭建
2.1 支持中文字符集
- 查看主机支持的字符集
cat /etc/locale.conf
若是LANG="en_US.UTF-8"代表支持的是英文,需要修改,方式如下:
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
cat /etc/locale.conf
#查看修改结果
2.2 安装Python和Python虚拟环境
需要支持的mysql版本大于5.56,需要支持的Python3.6
2.2.1 安装Python3.6
#安装依赖包
yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
#安装Python3.6(下载过慢可更换epel源)
yum -y install python36 python36-devel
#或者下载源码包,编译安装Python3.6
cd /usr/local/src/
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz
tar xf Python-3.6.1.tar.xz && cd Python-3.6.1
./configure && make && make install
#安装完成后查看Python3的版本
python3 -V
2.2.2 建立Python虚拟环境
#创建一个py3的虚拟环境
cd /opt/
python3.6 -m venv py3
source /opt/py3/bin/activatecat
#使其立即生效,最左边出现(py3)提示符代表成功
运行jumpserver,必须运行以上source命令,以下所有命令,也要在该虚拟环境下运行
2.2.3 自动化载入Python虚拟环境
cd /opt/
git clone https://github.com/kennethreitz/autoenv.git
echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc
source ~/.bashrc
3. 安装jumpserver
3.1 clone jumpserver项目
#若克隆过程太长,可以用--depth 1参数,只下载最新的版本
cd /opt/
git clone --depth 1 https://github.com/jumpserver/jumpserver.git
#.env的作用是只要进入/opt/jumpserver/目录,就自动进入py3的环境中,首次进入目录需要确认,y即可
echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env
cd jumpserver/
3.2 安装依赖rpm包
cd /opt/jumpserver/requirements/
yum -y install $(cat rpm_requirements.txt)
3.3 安装python库依赖
#依旧是在requirements目录下,先升级setup工具
pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/
#pip下载加速设置
cd /opt/jumpserver/
cd ~
mkdir .pip
vim ~/.pip/pip.conf
#加入以下内容:
[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
#继续下载依赖包
cd /opt/jumpserver/requirements/
pip install -r requirements.txt
#若下载卡在某个包,可以wget软件包,然后使用pip+instal+软件包名,然后将requirement.txt文件中对应的行注释,继续安装其他包,安装完成后检查步骤正确性
echo $?
3.4 安装redis,jumpserver使用redis做cache和celery broke
yum -y install redis
systemctl enable redis
systemctl start redis
#加速开机自启并启动
4. 安装mysql(使用mysql作为数据库)
4.1 安装mysql,加入开启自启并启动
yum -y install mariadb mariadb-devel mariadb-server
systemctl enable mariadb
systemctl start mariadb
4.2 创建数据库jumpserver并授权
DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`
echo $DB_PASSWORD #需要摘记作为数据库用户的密码
mysql -uroot -e "create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by '$DB_PASSWORD'; flush privileges;"
5. 运行jumpserver
5.1 修改jumpserver配置文件
cd /opt/jumpserver/
#备份并改名配置文件
cp config_example.yml config.yml
#生成两个密码,并摘记
SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
echo $SECRET_KEY
BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
echo $BOOTSTRAP_TOKEN
#加入家目录下bash配置文件
echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc
#修改配置文件
sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml
sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml
5.2 运行jumpserver
#初始化数据库,出现多项OK为正确
cd /opt/jumpserver/utils/
bash make_migrations.sh
#启动jumpserver并检查正确性,端口8080是否开启
cd /opt/jumpserver/
./jms start all -d
netstat -antup | grep 8080
运行后,可使用浏览器输入IP:8080访问jumpserver,初始默认账号密码均为admin
6. 安装SSH Server和WebSocket Server:COCO
6.1 安装COCO
cd /opt/
git clone https://github.com/jumpserver/coco.git
echo "source /opt/py3/bin/activate" > /opt/coco/.env
cd coco/
#第一进入提示,y即可
6.2 安装依赖
cd /opt/coco/requirements/
yum -y install \$(cat rpm_requirements.txt)
#安装python的依赖
pip install -r requirements.txt
6.3 修改COCO配置文件
cd /opt/coco/
#可以看看目录下的东西
mkdir keys logs
cp config_example.yml config.yml
sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN: \$BOOTSTRAP_TOKEN/g" /opt/coco/config.yml
sed -i "s/# LOG_LEVEL: INFO/LOG_LEVEL: ERROR/g" /opt/coco/config.yml
6.4 启动coco
cd /opt/coco
./cocod start -d
#检查启动情况,是否开启5000端口和2222端口
netstat -lntp
7. 安装Web Terminal前端:Luna
cd /opt/
wget https://github.com/jumpserver/luna/releases/download/1.4.9/luna.tar.gz
tar xf luna.tar.gz
chown -R root:root luna
8. 安装nginx,整合各组件,代理jumpserver
8.1 增加nginx的yum配置文件,安装nginx
yum -y install yum-utils
vim /etc/yum.repos.d/nginx.repo
#加入内容:
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
#安装nginx
yum -y install nginx
8.2 修改nginx配置文件
cd /etc/nginx/conf.d/
rm -f default.conf
vim jumpserver.conf
#加入以下内容,需要注意各模块的目录是否准确:
server {
listen 80;
client_max_body_size 100m;
location /luna/ {
try_files $uri / /index.html;
alias /opt/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;
}
}
8.3 检查配置文件并启动
nginx -t
systemctl start nginx
systemctl enable nginx
9. 初步使用jumpserver,需要注意的点
- 初始账号密码为admin,登录后可通过个人信息更新密码
- 管理员admin,可通过ssh链接跳板机,通过2222端口
- jumpserver用户管理(都可以通过私钥登录)
- 登录jumpserver的用户:
例如adminn,使用ssh协议连接端口2222,可在用户管理创建用户,密码自定义 - 管理用户:
创建在服务器(资产节点)上的用户,如root用户,或者有NOPASSWD:ALL sudo权限的用户,密码需要和服务器上的相同,此用户推送系统用户的信息到资产上 - 系统用户:
真正在服务器中执行命令的用户,jumpserver跳转资产时使用的用户,可以设置sudo权限,如果选择自动推送,当系统用户信息更新,管理用户会将新的信息推送到匹配的资产上,也可以选择手动推送,可以可视化看到ansible推送过程,选择自动创建密钥,会在推送的时候给资产上的系统用户发送一份公钥,可用于密钥登录;推送的信息有,在资产上创建用户,设置用户权限,发送公钥,设置sudo权限等
- 资产管理:
创建资产需要指定IP,管理用户,注意管理用户的权限,设置争取资产信息才能更新 - 资产授权:
将资产(节点),登录用户(用户组),系统用户链接在一起 - 通过ssh,2222端口可以登录jumpserver,登录后,输入p可以显示可以登录的资产,输入对应id可以登录,输入g查看有权限的节点
- 会话管理:在线会话可以终止用户登录,历史会话可以查看具体操作,
- 日志审计:记录了关于jumpserver所有的日志