一、 堡壘機概述
堡壘機,即在特定的網絡環境下,為了保障網絡和數據不受來自外部和內部用戶的入侵和破壞,而運用各種技術手段實時收集和監控網絡環境中每個組成部門的系統狀態、安全事件、網絡活動,以便集中報警、及時處理及審計定責的功能的系統。
二、JumpServer堡壘機功能概述
JumpServer 是一款使用 Python, Django 開發的開源跳板機系統, 為互聯網企業提供了認證,授權, 審計,自勱化運維等功能。JumpServer 現已支持管理 SSH、 Telnet、 RDP、 VNC 協議資產。
(圖片截自JumpServer官網)
三、部署JumpServer
1. JumpServer2.0.1環境要求
硬件配置: 2 個 CPU 核心, 4G 內存, 50G 硬盤(最低)
軟件配置:Linux 發行版 x86_64,Python = 3.6.x,Mysql Server ≥ 5.6,Redis
2. 安裝JumpServer所需相關服務
初始化系統環境
關閉防火牆
[root@localhost baifan]# systemctl stop firewalld && systemctl disable firewalld
關閉 selinux(selinux是一種基於內核的安全系統,因為對系統服務,文件權限,網絡端口訪問有極其嚴格的限制,例如:如果對一個文件沒有正確安全上下文配置, 甚至你是root用戶,你也不能啟動某服務。有一些Linux系統上應用程序運行時,可以會被拒絕,導致無法正常運行的情況)
[root@localhost baifan]# setenforce 0
永久關閉(重啟后生效,先設置臨時再設置永久。)
[root@localhost baifan]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
安裝依賴
[root@localhost baifan]# yum -y install wget gcc epel-release git
安裝Redis緩存數據庫並自啟動
[root@localhost baifan]# yum -y install redis
[root@localhost baifan]# systemctl enable redis && systemctl start redis
安裝mysql數據庫
[root@localhost baifan]# dnf install @mysql
自啟動
[root@localhost baifan]# systemctl enable --now mysqld
運行mysql_secure_installation腳本,該腳本執行一些與安全性相關的操作並設置MySQL根密碼
生成隨機數據庫密碼(定義 DB_PASSWORD 變量來保存密碼)
[root@localhost baifan]# DB_PASSWORD=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24`
[root@localhost baifan]# echo -e "\033[31m 你的數據庫密碼是 $DB_PASSWORD \033[0m"
創建 jumpserver 數據庫並創建授權用戶 jumpserver 密碼為$DB_PASSWORD 變量中的值。
mysql> create database jumpserver default charset 'utf8' collate 'utf8_bin';
mysql> create user 'jumpserver'@'127.0.0.1' identified by '密碼';
錯誤可能會遲到,但是永遠不會缺席。報錯內容,密碼不符合當前密碼要求
報錯原因為生成的隨機密碼沒有標點符號,不符合mysql健壯密碼要求,混入符號就好了
mysql> create user 'jumpserver'@'127.0.0.1' identified by 'xxxxxxxxx';
mysql> grant all on jumpserver.* to 'jumpserver'@'127.0.0.1';
mysql> flush privileges;
安裝 nginx
[root@localhost baifan]# yum -y install nginx
[root@localhost baifan]# systemctl enable nginx.service
因為CentOS8預裝了python3.6,直接創建python3的虛擬環境
[root@localhost baifan]# cd /opt/ [root@localhost opt]# python3 -m venv py3 [root@localhost opt]# source /opt/py3/bin/activate
不過還需要安裝python36-devel,缺乏python開發包的話,后面安裝python依賴時會在執行#include<Python.h>時,因找不到開發包報錯。
(py3) [root@localhost baifan]# yum -y install python36-devel
3. 安裝JumpServer
從git拉取JumpServer項目包
(py3) [root@localhost opt]# git clone --depth=1 https://github.com/jumpserver/jumpserver.git
安裝JumpServer運行依賴包
首先安裝rpm依賴包,JumpServer對rpm依賴包名寫在/opt/jumpserver/requirements/rpm_requirements.txt中。
(py3) [root@localhost opt]# cat /opt/jumpserver/requirements/rpm_requirements.txt gcc krb5-devel libtiff-devel libjpeg-devel libzip-devel freetype-devel lcms2-devel libwebp-devel tcl-devel tk-devel sshpass openldap-devel mariadb-devel mysql-devel mysql libffi-devel openssh-clients telnet openldap-clients
安裝rpm依賴,一次性安裝這些包
(py3) [root@localhost opt]# yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt)
報錯找不到lcm2-devel
下載lcm2-devel的rpm包https://rpmfind.net/linux/RPM/centos/8.2.2004/powertools/x86_64/Packages/lcms2-devel-2.9-2.el8.x86_64.html
下載好后,使用rz命令上傳下載好的包到CentOS,開始安裝
(py3) [root@localhost opt]# rpm -ivh lcms2-devel-2.9-2.el8.x86_64.rpm
繼續使用
(py3) [root@localhost baifan]# yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt)
rpm依賴包中要安裝的mariab和mysql起了沖突,不過不要緊,已經安裝了mysql就不需要安裝mariadb了,直接跳過,使用以下命令安裝
(py3) [root@localhost baifan]# yum -y install $(cat /opt/jumpserver/requirements/rpm_requirements.txt) --skip-broken
安裝完畢,被跳過的包只有mariadb和mysql,進行下一步
安裝python庫依賴,安裝時指定阿里雲源,加快安裝速度。
(py3) [root@localhost baifan]# pip install wheel -i https://mirrors.aliyun.com/pypi/simple/
升級 pip 和 setuptools。
(py3) [root@localhost baifan]# pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/
安裝python依賴,因為需要的包也被列出來了,而且數目很多,一句話下載
(py3) [root@localhost baifan]# pip install -r /opt/jumpserver/requirements/requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
運行環境依賴包安裝完畢,現在開始配置JumpServer
4. 配置JumpServer
創建配置文件
(py3) [root@localhost baifan]# cd /opt/jumpserver (py3) [root@localhost jumpserver]# cp config_example.yml config.yml
生成隨機 SECRET_KEY(加密密鑰)
(py3) [root@localhost jumpserver]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
將 SECRET_KEY存放到環境變量中
(py3) [root@localhost jumpserver]# echo "SECRET_KEY= $SECRET_KEY" >> ~/.bashrc
生成隨機 BOOTSTRAP_TOKEN(預共享 Token coco 和 guacamole 用來注冊服務賬號)
(py3) [root@localhost jumpserver]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
將 TOKEN 存放到環境變量中
(py3) [root@localhost jumpserver]# echo "BOOTSTRAP_TOKEN= $BOOTSTRAP_TOKEN" >> ~/.bashrc
修改配置文件,將jumpserver用戶數據庫密碼、KEY、TOKEN寫入config.yml對應的位置
設置 SECRET_KEY (py3) [root@localhost jumpserver]# sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml 設置 BOOTSTRAP_TOKEN (py3) [root@localhostjumpserver]# sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml 關閉 DEBUG 模式,用於生產環境。 (py3) [root@localhost jumpserver]# sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml 設置日志級別 (py3) [root@localhost jumpserver]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml 設置 session 過期時間 (py3) [root@localhost jumpserver]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml 設置連接 mysql 數據庫的密碼 (py3) [root@localhost jumpserver]# sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml
檢查配置結果
(py3) [root@localhost jumpserver]# vim config.yml
啟動 jumpserver
(py3) [root@localhost jumpserver]# ./jms start -d
訪問 web 界面 http://ip地址:8080/
可以看到 web 頁面的靜態資源文件沒有加載,這是由於開啟了關閉了 DEBUG 模式導致的,生產環 境中需要在 nginx 反向代理中配置相關靜態資源文件。 配置 systemctl 管理 jumpserver 服務,開啟自啟動。
(py3) [root@localhost jumpserver]# wget -O /usr/lib/systemd/system/jms.service https://demo.jumpserver.org/download/shell/centos/jms.service (py3) [root@localhost jumpserver]# chmod 755 /usr/lib/systemd/system/jms.service (py3) [root@localhost jumpserver]# systemctl enable jms
4. 安裝 jumpserver 組件
安裝 docker 環境依賴
[baifan@localhost ~]$ yum install -y yum-utils device-mapper-persistent-data lvm2
配置國內 docker 的 yum 源(阿里雲)
[root@localhost baifan]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝 docker-ce
[root@localhost baifan]# yum install docker-ce -y
報錯,centos8默認使用podman代替docker,所以需要containerd.io
安裝containerd.io
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
繼續安裝Docker,並啟動
[root@localhost baifan]# yum install docker-ce -y [root@localhost baifan]# systemctl start docker && systemctl enable docker.service
創建docker鏡像源
[root@localhost baifan]# tee /etc/docker/daemon.json <<-'EOF' > { > "registry-mirrors":["https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com"] > } > EOF
部署 koko
koko 為 SSH Server 和 Web Terminal Server。用戶可以使用自己的賬戶通過 SSH 戒者 Web Terminal 訪問 SSH 協議和 Telnet 協議資產。
(py3) [root@localhost baifan]# docker run --name jms_koko -d -p 2222:2222 -p 127.0.0.1:5000:5000 -e CORE_HOST=http://你的IP地址:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN -e LOG_LEVEL=ERROR --restart=always jumpserver/jms_koko:2.0.1
部署 guacamole
Guacamole 為 RDP 協議和 VNC 協議資產組件,用戶可以通過 Web Terminal 來連接 RDP 協議和 VNC 協議資產(暫時只能通過 Web Terminal 來訪問)。
(py3) [root@localhost baifan]# docker run --name jms_guacamole -d -p 127.0.0.1:8081:8080 -e JUMPSERVER_SERVER=http://你的IP地址:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN -e GUACAMOLE_LOG_LEVEL=ERROR --restart=always jumpserver/jms_guacamole:2.0.1
下載 Lina 組件(前端UI)
(py3) [root@localhost jumpserver]# wgethttp://demo.jumpserver.org/download/lina/2.0.1/lina.tar.gz (py3) [root@localhost opt]# tar -xf lina.tar.gz (py3) [root@localhost opt]# chown -R nginx:nginx lina
下載 Luna 組件
Luna 為 Web Terminal Server 前端頁面, 用戶使用 Web Terminal 方式登錄所需要的組件。 Luna 配置非常簡單只需下載解壓即可,注意必須放在/opt/目錄下,如果放在其他目錄中則需要在 nginx 代理中修改對應的路徑配置
(py3) [root@localhost opt]# wget https://demo.jumpserver.org/download/luna/ 2.0.1/luna.tar.gz (py3) [root@localhost opt]# tar xf luna.tar.gz (py3) [root@localhost opt]# chown -R nginx:nginx luna
配置 nginx 代理
注釋 nginx 默認配置文件中的 server 字段
檢測配置文件
重啟nginx
(py3) [root@localhost opt]# systemctl restart nginx
再次訪問 jumpserver:http://ip地址/
初始賬號密碼都為admin,重置密碼后進入首頁,JumpServer搭建成功