跳板机就是一台服务器,开发或运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。
跳板机缺点:
没有实现对运维人员操作行为的控制和审计,使用跳板机的过程中还是会出现误操作、违规操作导致的事故,一旦出现操作事故很难快速定位到原因和责任人;
堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段实时收集和监控网络环境中每一个组成部分的系统状态、安全事件、网络活动,以便集中报警、及时处理及审计定责。
堡垒机比跳板机多了实时收集、监控网络环境、集中报警等功能。
Jumpserver 是全球首款完全开源的堡垒机,使用 GNU GPL v2.0 开源协议,是符合 4A 的专业运维审计系统。
Jumpserver 使用 Python / Django 进行开发,遵循 Web 2.0 规范,配备了业界领先的 Web Terminal 解决方案,交互界面美观、用户体验好。
Jumpserver 采纳分布式架构,支持多机房跨区域部署,中心节点提供 API,各机房部署登录节点,可横向扩展、无并发限制。
为互联网企业提供了认证,授权,审计,自动化运维等功能。
1、用户组/用户 :添加组方便进行授权,用户是授权和登陆的主体.
2、资产组/资产/IDC : 主机信息简洁完整,用户自定义备注登录,支持自动获取主页硬件信息.
3、Sudo/系统用户/授权规则 :支持sudo 授权,系统用户用于登陆客户端,授权是将用户、资产和系统用户关联起来.
4、在线/登录历史/命令记录/上传下载:在线实时监控用户操作,统计和录像回放用户操作内容,阻断控制,详细记录上传下载.
5、上传/下载 : 支持文件上传下载,实现 rzsz方式.
6、默认设置 : 默认管理用户,设置包括用户密码密钥,默认信息为了方便添加资产而设计.
官方网站
http://www.jumpserver.org
Jumpserver 环境要求
硬件配置: 2个CPU核心, 4G内存, 50G 硬盘(最低)
操作系统: Linux 发行版 x86_64
Python = 3.6.x
Mysql Server ≥ 5.6
Mariadb Server ≥ 5.5.56
Redis
https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
Jumpserver-packs包里包含了所有实验所需的rpm包。
[root@cong13 ~]# vim /etc/yum.repos.d/jumpserver.repo
[jumpserver]
name=CentOS7
baseurl=file:///root/jumpserver-packs
enable=1
gpgcheck=0
挂载光盘:mount /dev/cdrom /mnt
[root@cong13 ~]# ls
anaconda-ks.cfg jumpserver.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
编译安装
[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 4 #编译
[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)
因为 CentOS 6/7 自带的是 Python2,而Yum等工具依赖原来的 Python,为不扰乱原来的环境我们来使用 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 命令,以下所有命令均在该虚拟环境中运行
(py3) [root@cong13 ~]#
把python虚拟环境设为开机自启动
(py3) [root@cong13 ~]# echo “source /opt/py3/bin/activate” >> /root/.bashrc
(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_requirements.txt文件中所有的软件(是什么系统装什么文件内容)
(py3) [root@cong13 requirements]# yum -y install $(cat rpm_requirements.txt)
方法一:使用pip离线包安装pip软件包 (本实验做的是这个,没有网络)
(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
扩展知识:缓存pip安装的软件包 (这块本实验不做)
将pip已经安装的包生成文件
(py3) [root@cong13 ~]# pip list #查看安装的包
(py3) [root@cong13 ~]# pip freeze > requirements.txt #将已经通过pip安装的包的 名称记录到 requirements.txt文件中
缓存pip下载的包==(这块本实验不做)==
(py3) [root@cong13 ~]# pip download -d /root/pip-packs/ -r requirements.txt
-d 指定缓存的目录
-r 指定缓存的软件目录
方法二:安装 Python 库依赖(有网)(这块本实验不做)
修改pip安装加速
有时候我们pip下载特别慢,我们需要给pip指定国内的源来提升下载速度
(py3) [root@cong13 requirements]# mkdir /root/.pip
(py3) [root@cong13 requirements]# vim /root/.pip/pip.conf
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple #这个是清华源
[install]
trusted-host=mirrors.aliyun.com
安装之前先更新pip版本,不然会报错
(py3) [root@cong13 requirements]# pip install --upgrade pip #更新pip
(py3) [root@cong13 requirements]# pip install -r requirements.txt
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 #把redis添加开机启动
如果有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
h8X7RRmkczrV3Dts
(py3) [root@cong13 ~]# cd /opt/jumpserver/
(py3) [root@cong13 jumpserver]# cp config_example.yml config.yml
(py3) [root@cong13 jumpserver]# vim config.yml
注意: 配置文件是Python 格式,不要用TAB,而要用空格
#配置密钥
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]# cd /opt/jumpserver/utils/
(py3) [root@cong13 utils]# sh make_migrations.sh
(py3) [root@cong13 utils]# cd /opt/jumpserver/(它这个会自动读取这个文件,把写到mysql里)
(py3) [root@cong13 jumpserver]# ./jms start all -d
#可以-d参数在后台运行 ./jms start all -d, 确保已经载入 py3 虚拟环境。echo $? 查看是否有错
设置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.1.13:8080
这里只是部署了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
kokoi项目下载地址
https://github.com/jumpserver/koko/releases/download/1.5.2/koko-master-9ab4ea6-linux-amd64.tar.gz
解压软件包
(py3) [root@cong13 ~]# tar -zxvf koko-master-6d4e69b-linux-amd64.tar.gz -C /opt/
修改文件权限
(py3) [root@cong13 opt]# chown -R root:root /opt/kokodir/
(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的密钥一致
如果是分布式装的koko就要指定jumpserver的ip和端口
(py3) [root@cong13 kokodir]# ./koko & #&把程序调入后台运行
(py3) [root@cong13 kokodir]# netstat -antup | grep 2222
(py3) [root@cong13 kokodir]# echo " cd /opt/kokodir && ./koko & " >> /etc/rc.local
(py3) [root@cong13 kokodir]# chmod +x /etc/rc.local
(py3) [root@cong13 ~]# ssh [email protected] -p 2222 #使用admin账号登陆,密码:admin
有了Web Terminal以后,我们可以远程堡垒机,然后通过堡垒机进行登录管理服务器。
(py3) [root@cong13 ~]# tar -zxvf luna.tar.gz -C /opt/
软件下载地址:
https://github.com/jumpserver/luna/releases/download/1.5.2/luna.tar.gz
设置权限
(py3) [root@cong13 ~]# chown -R root:root /opt/luna/
这里直接使用yum安装,也可以使用源码包安装
(py3) [root@cong13 ~]# yum install -y nginx
Nginx主要提供反向代理功能,这里要修改主配置文件里的默认server端口
(py3) [root@cong13 ~]# vim /etc/nginx/nginx.conf #把80端口修改为808
server {
listen 808 default_server;
listen [::]:808 default_server;
include /etc/nginx/conf.d/*.conf; 注释:
这个文件自动引用/etc/nginx/conf.d/目录下所有以.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
使用nginx做反向代理以后,就可以直接使用80端口来访问jumpserver
http://192.168.1.13
发现luna页面可以打开了(web终端)
(查看文件管理)
我们这里没有部署windows客户端组件guacamole,因为只能通过jumpserver的web客户端来连接windows服务器,不实用。windows服务器我们一般还是使用TeamViewer、vnc或者windows远程连接。
修改当前站点的URL为本机IP或者jumpserver的域名,不然新建用户发送过去的邮件修改不了密码。
邮箱设置
新注册的sina邮箱需要更改SMTP服务并设定密码,需要保证虚拟机能够正常联网才能收到邮件。
设置jumpserver邮箱
设置jumpserver发件邮箱,用来给用户发送通知邮件,设置完了以后测试一下邮箱联通。
创建用户
创建用户(你当前环境有网才能正常收发邮件)
这里创建的用户是登陆jumpserver的用户,这个用户可以登陆jumpserver,然后通过jumpserver去连接被管理的服务器,最后登陆到被管理的服务器进行命令操作。当然,这里创建的用户也可以提权来管理jumpserver的后台。
查看邮件
这是使用的是通过邮件发送用户密码,第一次登陆必须需修改密码。
修改密码
设置成功后,退出admin账号,登录刚刚新建账号
开启虚拟机cong11
添加被管理端root账号
管理用户是资产(被控服务器)上的 root,或拥有 NOPASSWD: ALL sudo 权限的用户, Jumpserver 使用该用户来 推送系统用户、获取资产硬件信息等。
blog.csdnimg.cn/20200324212355419.png)
就是你要添加的资产,新开的那个主机的,用户名和密码
添加资产
系统用户可以绑定一些命令过滤器,一个过滤器可以定义一些规则 当用户使用这个系统用户登录资产,然后执行一个命令 这个命令需要被绑定过滤器的所有规则匹配,高优先级先被匹配, 当一个规则匹配到了,如果规则的动作是允许,这个命令会被放行, 如果规则的动作是禁止,命令将会被禁止执行, 否则就匹配下一个规则,如果最后没有匹配到规则,则允许执行
系统用户是 Jumpserver 跳转登录被管理服务器时使用的用户,而不是使用某个用户的用户名跳转登录服务器(ssh xiaoming@some-host
); 简单来说是用户使用自己的用户名登录 Jumpserver,Jumpserver 使用系统用户登录资产。 系统用户创建时,如果选择了自动推送,Jumpserver 会使用 Ansible 自动推送系统用户到资产中,如果资产(交换机)不支持 Ansible,请手动填写账号密码。当前环境不用管密码
使用web终端测试
打开web终端
这里使用谷歌类的浏览器,有些浏览器不支持luna
安装一个httpd
[admin@cong11 ~]$ yum -y install httpd
注意:如果连接失败,应该是管理用户连接后台资产出现问题,如网络不可达,或jumpserver 2222端口down掉 (cd /opt/kokodir && ./koko &)
可以看到,这里登陆登陆的账号是我们创建的系统账号admin登陆的,执行命令需要使用sudo提权。
登陆jumpserver 的Web Terminal
使用我们的账号lijinming登陆jumpserver
(py3) [root@cong13 ~]# ssh [email protected] -p 2222
查看自己名下的主机
登陆cong11
安装httpd
启动cong11上的httpd
[admin@cong11 ~]$ sudo systemctl start httpd
测试httpd网页
http://192.168.1.11/
首先登录的是admin用户,这个是默认登录的用户,当你自己登录的时候再重新创建一个账号。
新创建的这个账号叫lijinming,通过这个大的用户可以创建小的用户,和用户组。将用户添加到用户组当中。
然后添加资产,资产就是被监控,账号审计的服务器。将资产添加到jumpserver当中。前提得先指定好这个服务器的用户名密码是什么(root)。
然后添加命令过滤规则,就是拒绝或允许你做什么事情,比如rm -rf /*,设置为拒绝。
现在再添加一个系统用户admin,通过这个用户去登录资产,然后在这个用户当中,指定好他的命令过滤规则是什么。
添加进来的这个资产只是添加到了jumpserver当中,并没有指定这个资产给了哪个用户,现在将资产给lijinming。
通过资产授权,将资产授权给lijinming用户,然后通过admin登录用户可以登录到资产,对资产进行操作。
最终可以通过命令记录或者历史会话看到,这个用户在资产上敲了什么命令,也可以看到用户敲命令的录像