在 docker 環境下部署運行 JumpServer 堡壘機


為了安全合規,也為了規范運維,在服務器的運維過程中是很有必要引入堡壘機工具的。

不過目前大部分堡壘機都是商用付費的,出於學習的目的,免費的堡壘機目前只看到有 麒麟堡壘機 和 JumpServer 兩款。

麒麟堡壘機 界面有些老了,也不太清楚維護更新的狀態如何,不過功能上還是非常全面的,但沒有官方的 Docker 鏡像用於快速部署還是比較遺憾,只能是單獨准備一台服務器系統進行部署,或者自行研究制作 Docker 鏡像。

JumpServer 是一款開源的堡壘機(也有付費企業版),在 GitHub 上也托管了項目源代碼。

目前看更新迭代還是比較活躍的,最重要的是有官方 Docker 鏡像能夠快速部署,也不需要獨占一台服務器進行學習(在正式使用環境中,出於安全考慮,應該還是要專機專用的)。

但是官方文檔對於 Docker 部署幾乎沒有描述,從網上搜索,似乎原來是有文檔的,但是目前處於無法打開的狀態,網上似乎也沒有純 Docker 環境部署的記錄,所以在此記錄一下 JumpServer 在 Docker 中的部署過程。

 

官網:https://www.jumpserver.org/

GitHub:https://github.com/jumpserver/jumpserver

Docker Hub:https://hub.docker.com/r/jumpserver/jms_all

部署步驟參考來源:https://www.cnblogs.com/yinzhengjie/p/12370104.html

 

1、准備 Docker 環境

在此就不再贅述 Docker 部分的搭建和使用了。

2、准備 MySQL 數據庫(如果您有現成的 MySQL 數據庫,也可跳過此步驟直接使用)

MySQL:https://hub.docker.com/_/mysql

docker run -d -p 3306:3306 \
-v /home/my.cnf:/etc/mysql/my.cnf \
-v /home/mysql:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:latest \
--default-authentication-plugin=mysql_native_password

第二、三行通過映射 Volume 來持久化存儲 MySQL 配置和數據庫文件,可根據情況自行建立 my.cnf 文件 和 mysql 文件夾在自己想放置的位置,這里是放置在了宿主機的 /home 目錄下。如果不需要持久化存儲,直接刪除即可。

第四行為配置 MySQL 默認的 root 用戶密碼。

第六行是因為 JumpServer 不支持最新版本默認的 caching_sha2_password 密碼加密方式,所以要通過初始化參數、配置或后期單獨修改用戶的密碼認證方式為 mysql_native_password 才可正常連接使用。這里直接通過命令行參數初始化默認密碼認證方式。

《如何修改 MySQL 的密碼認證方式》:https://www.cnblogs.com/xwgli/p/15066855.html

3、需要在准備好的 MySQL 中創建一個空數據庫

這里將新數據庫命名為:jumpserver

4、准備 Redis 數據庫

Redis:https://hub.docker.com/_/redis

docker run -d -p 6379:6379 \
-v /home/redis:/usr/local/etc/redis \
--name redis redis:6.2.3 \
redis-server /usr/local/etc/redis/redis.conf

第二行是為了持久化存儲 Redis 的配置文件

第四行是指定自定義配置文件路徑。

《如何在 Docker 部署的 Redis 中配置訪問密碼、綁定地址》:https://www.cnblogs.com/xwgli/p/15066727.html

5、生成密鑰,然后進行記錄

這部分信息在下一步驟中會用到,以及后續如果重建容器、升級容器,需要繼承之前的使用系統配置數據的話,也請使用創建時同樣的密鑰,否則原有數據將無法解密。

# 生成 SECRET_KEY
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

# 生成 BOOTSTRAP_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

6、部署 JumpServer,請注意根據實際情況更換端口映射、密鑰、數據庫相關信息

docker run -d -p 8000:80 -p 8001:443 -p 8002:2222 \
-v /home/jumpserver:/opt/jumpserver/data/media \
-e SECRET_KEY=bhRH6ib1C8GIFsgR5ERSH6zHsIxARnqVT99WEopa0jtf5ik3Za \
-e BOOTSTRAP_TOKEN=HnFvMHyFhEkbYyfl \
-e DB_HOST=172.17.0.2 \
-e DB_PORT=3306 \
-e DB_USER=root \
-e DB_PASSWORD=123456 \
-e DB_NAME=jumpserver \
-e REDIS_HOST=172.17.0.3 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD=123456 \
--name jumpserver jumpserver/jms_all:latest

第二行是用於持久化 JumpServer 的數據

后面就依次為加密密鑰、MySQL配置、Redis配置

配置參考:https://github.com/jumpserver/Dockerfile

7、如果是直接部署訪問的話,到這里就部署完成了,直接訪問對應地址端口即可。

8、如果是要通過 nginx 做反向代理,還需要注意一下對 websocket 的特殊配置,以及強制通過 https 訪問堡壘機的配置

示例如下:

stream {
    server {
        listen 2222;
        proxy_pass 192.168.1.2:8002;
    }
}

http {

    # 針對 WebSocket 配置
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }

    # 訪問 http 強制跳轉 https 配置
    server {
        listen       80;
        
        server_name  blj.domainname.com;

        return 301 https://$server_name$request_uri;
    }

    # 網站 https 配置
    server {
        listen       443 ssl;
        
        server_name  blj.domainname.com;
        
        ssl_certificate            /ssl_certs/blj.domainname.com.pem;  # 指定證書的位置,絕對路徑
        ssl_certificate_key        /ssl_certs/blj.domainname.com.key;  # 絕對路徑,同上
        ssl_session_timeout        5m;
        ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers                ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;  #使用此加密套件。
        ssl_prefer_server_ciphers  on;

        location / {
            proxy_pass http://192.168.1.2:8000;
            proxy_set_header X_Real_IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $host;
            proxy_connect_timeout       600;
            proxy_send_timeout          600;
            proxy_read_timeout          600;
            send_timeout                600;
        }
    }
}

注意:以上非完整 nginx 配置,僅列出本步驟相關部分,配置中具體的 IP 地址、端口號、域名請根據實際情況自行修改。

然后就可以根據 nginx 配置的域名訪問堡壘機了~

JumpServer 的默認帳號密碼均為 admin。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM