什么是跳板機
跳板機就是一臺服務器而已,運維人員在使用管理服務器的時候,必須先連接上跳板機,然后才能去操控內網中的服務器,才能登錄到目標設備上進行維護和操作
開發小張 ---> 登錄跳板機 ---> 再登錄開發服務器
測試小王 ---> 登錄跳板機 ---> 再登錄測試服務器
跳板機的優缺點
優點:集中式對服務器進行管理
缺點:沒有實現對于運維人員操作的監控和審計。使用跳板機的過程中,還有可能在服務器上進行錯誤的操作。一旦出現錯誤操作,很難定位到操作人。
堡壘機運維思想
- 審計也只是事后的行為,審計能夠發現問題和責任人,但是無法防止問題的發生
- 只有實現事先嚴格監控,才能夠在源頭上解決服務器操作的事故
- 堡壘機能夠創建系統賬號,該系統賬號功能是屬于角色區分的作用,但是也無法確認該賬號的執行人,比如 測試員工可以登錄運維員工的賬號
堡壘機的作用
堡壘機在跳板機的基礎上做了優化
- 核心系統運維和安全審計管理
- 過濾和攔截非法請求訪問、惡意攻擊,拒絕不合法的命令,進行審計口監控、報警和責任追蹤
- 報警、記錄、分析、處理
堡壘機核心功能
- 單點登錄功能
- 賬號管理
- 身份認證
- 資源授權
- 訪問控制
- 操作審計
JumpServer核心架構講解
官方文檔:JumpServer 文檔?
組件介紹
核心架構
JumpServer服務器部署?
#Linux服務器準備,硬件配置:2cpu 4G內存 50G硬盤
環境初始化
#環境準備,關閉防火墻服務
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl disable --now firewalld
reboot#配置yum源,準備好阿里云的yum源,以及epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum clean all #清空原有的yum緩存
yum makecache #生成新的yum緩存,便于加速軟件下載#安裝系統初始化所需的軟件
yum install -y bash-completion vim lrzsz wget expect nettools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel gcc#安裝jumpserver運行所需的依賴環境
yum -y install git python-pip gcc automake autoconf pythondevel vim sshpass lrzsz readline-devel zlib zlib-devel openssl openssl-devel#修改系統的字符集,改為是中文的
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#檢查系統編碼
locale
部署數據庫mysql 5.6
#獲取mysql 5.6的軟件包
mkdir /teach_jmp
cd /teach_jmp/
wget https://cdn.mysql.com//Downloads/MySQL-5.6/MySQL-5.6.49-1.el7.x86_64.rpm-bundle.tar#解壓縮
mkdir mysql_rpm
tar -xf MySQL-5.6.49-1.el7.x86_64.rpm-bundle.tar -C ./mysql_rpm/#使用yum命令,安裝一系列的rpm包
cd mysql_rpm
yum localinstall ./*#安裝完畢后,檢查mysql的配置文件,做如下的修改
vim /etc/my.cnf
[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mysql.pid#啟動mysql服務端
systemctl start mysql#修改密碼
[root@jumpserver mysql_rpm]# cat ~/.mysql_secret #查看隨機密碼
# The random password set for the root user at Tue Dec 12 15:23:04 2023 (local time): l9KyFuhIg7um_BDm
[root@jumpserver mysql_rpm]# mysqladmin -uroot -pl9KyFuhIg7um_BDm password 你要設置的密碼#使用新密碼登錄mysql 5.6
mysql -uroot -p#更為安全的修改密碼的方法:使用隨機密碼登錄mysql,然后再使用以下sql語句,然后再刷新,再用新密碼登錄mysql 5.6
update mysql.user set password=password('你的密碼') where user='root';
flush privileges;#創建數據庫
create database jumpserver default charset 'utf8' collate 'utf8_bin';#創建用戶且設置密碼
create user 'jumpserver'@'%' IDENTIFIED BY '密碼';#給該用戶授予訪問數據庫的權限
grant all privileges on jumpserver.* to 'jumpserver'@'%' identified by 'chaoge888';
flush privileges;
部署Python3.6
#下載python3.6源代碼
cd /teach_jmp && \
wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz#解壓縮
tar -zxf Python-3.6.10.tgz#指定安裝路徑
cd Python-3.6.10
./configure --prefix=/teach_jmp/python3.6.10/#編譯且編譯安裝
make && make install#配置環境變量
vim /etc/profile
在文件最后添加 PATH="/teach_jmp/python3.6.10/bin:$PATH"#讓剛才配置的環境變量生效
source /etc/profile#使用環境變量的方式,啟動python3
python3
創建Python3虛擬環境詳解
#python3的程序在運行的時候,必須使用pip3安裝模塊,類似以前的yum#更換pip3的下載源,換成阿里云的下載源
mkdir ~/.pip
touch ~/.pip/pip.conf
[root@jumpserver ~]# vim ~/.pip/pip.conf
[root@jumpserver ~]# cat ~/.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/#下載虛擬環境工具
pip3 install virtualenv#使用虛擬環境工具,再創建出一個python3解釋器,用于運行代碼
cd /teach_jmp
virtualenv --python=python3 jmp_venv1#此時,你的linux服務器上就有了2個python3解釋器了
#解釋器本體是:/teach_jmp/python3.6.10/bin/python3
#我們創建的虛擬解釋器的路徑是:/teach_jmp/jmp_venv1/bin/python3#那個python3的解釋器的環境變量排在前面,默認用的就是哪個python3解釋器
[root@jumpserver teach_jmp]# echo $PATH
/teach_jmp/python3.6.10/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@jumpserver teach_jmp]# which python3
/teach_jmp/python3.6.10/bin/python3#激活虛擬環境,其實是修改了環境變量,
source /teach_jmp/jmp_venv1/bin/activate
(jmp_venv1) [root@jumpserver teach_jmp]# echo $PATH
/teach_jmp/jmp_venv1/bin:/teach_jmp/python3.6.10/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
(jmp_venv1) [root@jumpserver teach_jmp]# which python3
/teach_jmp/jmp_venv1/bin/python3#可以退出虛擬環境
deactivate
[root@jumpserver teach_jmp]# which python3
/teach_jmp/python3.6.10/bin/python3
?Redis數據庫部署
mysql關系型數據庫,磁盤型數據庫,數據是以文件形式存儲在磁盤上的,可以持久化長期存儲。
redis內存型數據庫,緩存型數據庫。
#安裝redis的形式
#rpm包手動安裝,需要手動解決依賴,不推薦使用
#yum自動化安裝,適合軟件調試學習使用,安裝自動解決依賴,很好用
#源代碼編譯安裝redis#選擇yum自動化安裝即可
yum install redis -y#啟動redis
systemctl start redis
redis-cli
部署jumpserver服務
一個后臺程序,基本上都是需要依賴于數據庫才能運行,后臺程序在啟動的時候,代碼就會去連接數據庫,保證數據庫正確啟動,而且可以正確連接,否則后臺程序是起不來的。
#獲取jumpserver程序的代碼,github有公有倉庫,所有人都可以下載,私有倉庫,只有企業內部人員,用賬號密碼登錄后下載
wget https://github.com/jumpserver/jumpserver/releases/download/v2.1.0/jumpserver-v2.1.0.tar.gz#解壓縮
tar -zxvf jumpserver-v2.1.0.tar.gz#軟鏈接
ln -s /teach_jmp/jumpserver-v2.1.0 /teach_jmp/jumpserver#安裝依賴關系
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel#激活虛擬環境
source /teach_jmp/jmp_venv1/bin/activate#安裝jumpserver所需的模塊
pip3 install -r /teach_jmp/jumpserver/requirements/requirements.txt
修改JumpServer配置文件
#先備份一下配置文件
cp config_example.yml config.yml#生成密鑰
if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi
JtSaSJPkG8wea50Y1xQAULvI09dVHPeIjLGfRWnXMRhD3lPgCP#生成token密鑰
if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi
0OjU5LGYrJmMKKmt#把剛才生成的隨機密鑰,寫入配置文件
vim config.yml
對python程序進行數據庫遷移
jumpserver這個程序是由python的web框架djiango開發而來,必須得先進行數據庫遷移,生成庫表的信息,才能運行程序
#數據遷移
python3 /teach_jmp/jumpserver/apps/manage.py makemigrations
python3 /teach_jmp/jumpserver/apps/manage.py migrate#啟動jms服務
/teach_jmp/jumpserver/jms start -d
Koko程序部署
koko是golang語言開發的一款組件,和之前的coco組件(python開發的)相比,koko的性能、效率、系統資源利用率都更高了。
#下載koko源代碼
wget https://github.com/jumpserver/koko/releases/download/v2.1.0/koko-v2.1.0-linux-amd64.tar.gz#解壓縮配置koko文件
tar -zxf koko-v2.1.0-linux-amd64.tar.gz
chown -R root:root koko-v2.1.0-linux-amd64
ln -s /teach_jmp/koko-v2.1.0-linux-amd64 /teach_jmp/koko#修改koko配置文件信息
cd koko
cp config_example.yml config.yml
vim config.yml
#啟動koko
/teach_jmp/koko/koko -d#可以檢查koko的日志,明確koko是否正確啟動
tail /teach_jmp/koko/data/logs/koko.log#檢查koko的端口
netstat -tunlp
部署Guacamole組件
#在https://guacamole.apache.org/releases下載壓縮包,然后用rz命令,把壓縮包從windows傳到Linux的/teach_jmp#解壓縮、配置
tar -zxvf guacamole-server-1.2.0.tar.gz
mv guacamole-server-1.2.0 guacamole
cd guacamole#準備編譯環境
yum install cairo-devel libjpeg-turbo-devel libjpeg-devel libpng-devel libtool uuid-devel -y#可選的軟件依賴
yum install freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel libvorbis-devel libwebp-devel -y#安裝FFmPeg工具
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install ffmpeg
yum install vlc#編譯安裝guacamole
./configure --with-init-dir=/etc/init.d
make && make install#部署java開發環境
yum install -y java-1.8.0-openjdk#創建運行guacamole所需的文件夾
mkdir -p /config/guacamole /config/guacamole/extensions /config/guacamole/record /config/guacamole/drive && \
chown daemon:daemon /config/guacamole/record /config/guacamole/drive && \
cd /config#下載tomcat工具,用于運行java項目
#在https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz目錄下載壓縮包到windows,然后再用rz命令把它傳到Linux系統的/opt目錄下#部署guacamole和tomcat的結合,需要修改它們的配置文件
cd /opt
tar -xf apache-tomcat-9.0.85.tar.gz
mv apache-tomcat-9.0.85 tomcat9
rm -rf /opt/tomcat9/webapps/*
sed -i 's/Connector port="8080"/Connector port="8081"/g' /opt/tomcat9/conf/server.xml
echo "java.util.logging.ConsoleHandler.encoding = UTF-8" >> /opt/tomcat9/conf/logging.properties#設置guacamole的運行環境變量
export JUMPSERVER_SERVER=http://127.0.0.1:8080
echo "export JUMPSERVER_SERVER=http://127.0.0.1:8080" >> ~/.bashrc
export BOOTSTRAP_TOKEN=0OjU5LGYrJmMKKmt
echo "export BOOTSTRAP_TOKEN=0OjU5LGYrJmMKKmt" >> ~/.bashrc
export JUMPSERVER_KEY_DIR=/config/guacamole/keys
echo "export JUMPSERVER_KEY_DIR=/config/guacamole/keys" >> ~/.bashrc
export GUACAMOLE_HOME=/config/guacamole
echo "export GUACAMOLE_HOME=/config/guacamole" >> ~/.bashrc
export GUACAMOLE_LOG_LEVEL=ERROR
echo "export GUACAMOLE_LOG_LEVEL=ERROR" >> ~/.bashrc
export JUMPSERVER_ENABLE_DRIVE=true
echo "export JUMPSERVER_ENABLE_DRIVE=true" >> ~/.bashrc#啟動服務
/etc/init.d/guacd start
sh /opt/tomcat9/bin/startup.sh
Lina組件部署
#提前準備好nginx服務
yum install nginx -y#獲取代碼
wget https://github.com/jumpserver/lina/releases/download/v2.1.0/lina-v2.1.0.tar.gz#解壓縮lina
tar -zxvf lina-v2.1.0.tar.gz
mv lina-v2.1.0 lina
chown -R nginx:nginx lina
Luna組件部署
#下載源碼
wget https://github.com/jumpserver/luna/releases/download/v2.1.1/luna-v2.1.1.tar.gz#解壓配置
tar -zxvf luna-v2.1.1.tar.gz
mv luna-v2.1.1 luna
chown -R root.root luna
部署nginx
nginx作用于處理靜態文件,以及用于對jumpserver后臺程序的反向代理
#安裝nginx
yum install nginx -y#修改nginx配置文件,刪除原來的虛擬主機配置
sed -i '38,58d' /etc/nginx/nginx.conf#添加新的虛擬主機配置
server {listen 80;client_max_body_size 100m; #錄像及文件上傳大小限制location /ui/ {try_files $uri / /index.html;alias /teach_jmp/lina/;}location /luna/ {try_files $uri / /index.html;alias /teach_jmp/luna/; # luna路徑,如果修改安裝目錄,此處需要修改}location /media/ {add_header Content-Encoding gzip;root /teach_jmp/jumpserver/data/; #錄像位置,如果修改安裝目錄,此處需要修改}location /static/ {root /teach_jmp/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;}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 /ws/ {proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;proxy_pass http://localhost:8070;proxy_http_version 1.1;proxy_buffering off;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";}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;}
}#啟動nginx
nginx
然后在瀏覽器輸入你機器的ip地址,會出現以下界面
用戶名和密碼默認都是admin?
jumpserver啟動流程總結
#啟動數據庫mysql redis
systemctl start mysql
systemctl start redis#激活python的虛擬環境,然后啟動jms核心后臺
source /teach_jmp/jmp_venv1/bin/activate
/teach_jmp/jumpserver/jms start -d#啟動koko程序
/teach_jmp/koko/koko -d#guacamole程序啟動
/etc/init.d/guacd start#啟動tomcat程序
bash /opt/tomcat9/bin/startup.sh#web服務器啟動
nginx
給目標機器添加防火墻規則
設置防火墻規則,只允許堡壘機登錄Linux
#只允許jumpserver機器的ip可以登錄,其他機器拒絕
iptables -A INPUT -s 192.168.13.130 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT
JumpServer配置郵箱
?其中,SMTP密碼如下:
JumpServer創建用戶
?
JumpServer資產創建管理
資產:服務器、交換機、路由器等設備
資產中的用戶管理
添加資產?
管理用戶
Root 超級管理員
sudo 命令,偽管理員,默認以root身份去執行命令,因此要慎用,我們可以基于sudo命令做更多的權限控制
wangcai 系統的普通用戶,權限很低
admin jumpserver 管理員用戶
qiujie jumpserver 普通用戶,權限較低
管理用戶【客戶端 --> jumpserver -->目標服務器】
普通用戶指的就是被管理機器上的root用戶,或者是可以使用sudo權限的用戶,jumpserver利用該管理用戶在目標機器上,進行遠程的命令執行,推送系統用戶,獲取資產的硬件信息、指標等。
系統用戶?
?
/etc/passwd 是系統級的超級用戶、普通用戶等等,有些是可以允許登錄服務器的,使用ssh協議.。
jumpserver 的系統用戶,針對jumpserver操控,登錄普通機器,所使用的一些特有用戶
資產授權
?
?
web終端功能
Luna提供web終端界面
?
命令行跳板機
koko的功能來了
#在xshell中輸入命令,登錄jumpserver
ssh admin@192.168.xxx.130 -p 2222
然后就會進入以下界面?