1.はじめに
先ほど、open ***を介してインターネットから会社のイントラネットサーバーに接続し、リモート管理できるopen ***の展開と使用について説明しましたが、open ***には、どのユーザーであるかを記録できないという欠点があります。含まれています。Webサーバーで何が操作されますか?クライアントの証明書と秘密鍵、およびCAの証明書とクライアント構成を使用すると、会社のイントラネットに直接接続できます。これは、いくつかの観点から安全なソリューションではありません。
今日は、open ***と同様の機能を持つソフトウェアjumpserverについて説明します。jumpserverとopen ***はどちらも、ユーザーがインターネットから会社のイントラネットサーバーに接続できるようにします。ただし、通常、jumpserverはインターネット上に配置されていません。主に運用・保守・開発・試験担当者が使用し、会社のイントラネットサーバーに接続して会社のイントラネットサーバーを一元管理すると同時に、権限管理、ユーザー管理、再生の監視;
2、ジャンプサーバーのアーキテクチャ図
3、ジャンプサーバーサーバーのインストール
環境の説明
<table style = "height:133px; width:366px" border = "0" align = "left"> <tbody> <tr> <td>主机飾り</ td> <td>角色</ td> <td> ip地址</ td> </ tr> <tr> <td> node01 </ td> <td> jumpserver web </ td> <td> 192.168.0.41 </ td> </ tr> <tr> <td> node02 </ td> <td> mysql / redis </ td> <td> 192.168.0.42 </ td> </ tr> </ tbody> </ table>
1. node02にmariadbをデプロイします(mysqlバージョンが最小5.6の場合は最小バージョン5.5.6)
mariadbyumウェアハウスを構成する
[root@node02 ~]# cat /etc/yum.repos.d/mariadb.repo
[mariadb]
name=mariadb repo
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mariadb//mariadb-10.1.46/yum/centos/7/x86_64/
gpgcheck=0
[root@node02 ~]#
MariaDBサーバーをインストールします
[root@node02 ~]# yum install -y MariaDB-server
名前解決を無視するようにmariadbを構成する
mariadbを開始する
mariadbに接続して、データベースとユーザーを作成します
[root@node02 ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.1.46-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database jumpserver default charset 'utf8' collate 'utf8_bin';
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserver'@'%' identified by 'admin123.com';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]>
検証:jumpserverを使用してデータベースにログインします
[root@node02 ~]# mysql -ujumpserver -padmin123.com -h192.168.0.42
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.1.46-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| jumpserver |
| test |
+--------------------+
3 rows in set (0.01 sec)
MariaDB [(none)]> exit
Bye
[root@node02 ~]#
これで、データサービスの準備が整いました。
2.node02にredisをデプロイします
redisをインストールする
[root@node02 ~]# yum -y install redis
このマシンのすべてのアドレスを監視し、パスワードを設定するようにredisを構成します
[root@node02 ~]# grep -Ei "^(bind|requirepass)" /etc/redis.conf
bind 0.0.0.0
requirepass admin123.com
[root@node02 ~]#
redisを開始します
検証:redisにログインします
[root@node02 ~]# redis-cli -h 192.168.0.42
192.168.0.42:6379> KEYS *
(error) NOAUTH Authentication required.
192.168.0.42:6379> AUTH admin123.com
OK
192.168.0.42:6379> KEYS *
(empty list or set)
192.168.0.42:6379> exit
[root@node02 ~]#
この時点で、redisの準備ができています
3.ジャンプサーバーWebコンテナーをnode01にデプロイします
docker-ceのyumソースを構成します
[root@node01 ~]# cat /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-edge]
name=Docker CE Edge - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-edge-debuginfo]
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-edge-source]
name=Docker CE Edge - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[root@node01 ~]#
docker-ceをインストールします
[root@node01 ~]# yum install -y docker-ce
Dockerを起動します
[root@node01 ~]# systemctl start docker
[root@node01 ~]# docker info
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 19.03.13
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-693.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.781GiB
Name: node01.test.org
ID: JQY2:LCCM:EU6J:ARI7:UCEL:5HUV:FGE4:6RTY:PWR3:NKJI:EA3K:BKSA
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
[root@node01 ~]#
Dockerアクセラレータを構成する
[root@node01 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com","https://cyr1uljt.mirror.aliyuncs.com"]
}
[root@node01 ~]#
Dockerを再起動します
[root@node01 ~]# systemctl restart docker
doker infoコマンドを使用して、アクセラレータアドレスが適用されているかどうかを確認します
ジャンプサーバーのWebミラーをダウンロードする
[root@node01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@node01 ~]# docker pull jumpserver/jms_all:v2.4.0
v2.4.0: Pulling from jumpserver/jms_all
75f829a71a1c: Pull complete
f9c494d6df5d: Pull complete
5135b4193f02: Pull complete
918e815b1dc8: Pull complete
0334369c4479: Pull complete
64a0f2a7663a: Pull complete
Digest: sha256:2081c88eca6dffb41bc42d8fe06d18c4379eacdbb354fa56dffd2a918738274d
Status: Downloaded newer image for jumpserver/jms_all:v2.4.0
docker.io/jumpserver/jms_all:v2.4.0
[root@node01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jumpserver/jms_all v2.4.0 3418bbaaded1 9 days ago 1.54GB
[root@node01 ~]#
ビルドを書くSECRET_KEY和``BOOTSTRAP_TOKEN的脚本
[root@node01 ~]# cat key_gen.sh
#!/bin/bash
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
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
[root@node01 ~]#
ヒント:上記のスクリプトは主に、SECRET_KEYとBOOTSTRAPの2つのキーがあるかどうかを判断し、ない場合はそれらを生成し、SECRET_KEYをSECRET_KEYに保存して、現在のホームディレクトリの.bashrcに配置し、印刷して印刷します。ある場合は直接出力します。
スクリプト生成を実行するSECRET_KEY和``BOOTSTRAP_TOKEN
[root@node01 ~]# bash key_gen.sh
wIUaeZtCbtTNUDL9igEIImALjjaMo9ygPwfMWmPZcyWD0c3K9Q
Lx15DW9xDxqOkiCq
[root@node01 ~]#
ヒント:これらの2つのランダムキーは非常に重要です。これらはデータベースフィールドの暗号化に使用されるため、これら2つのキーは環境の移行とアップグレードに使用されます。
ジャンプサーバーコンテナにデータディレクトリを保存するユーザーを作成します
[root@node01 ~]# mkdir /data/jumpserver/ -pv
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/jumpserver/’
[root@node01 ~]#
コンテナとしてjumpserver / jms_all:v2.4.0イメージを起動します
[root@node01 ~]# docker run --name jms_all -d \
> -v /data/jumpserver/:/opt/jumpserver/data \
> -p 80:80 \
> -p 2222:2222 \
> -e SECRET_KEY=wIUaeZtCbtTNUDL9igEIImALjjaMo9ygPwfMWmPZcyWD0c3K9Q \
> -e BOOTSTRAP_TOKEN=Lx15DW9xDxqOkiCq \
> -e DB_HOST=192.168.0.42 \
> -e DB_PORT=3306 \
> -e DB_USER=jumpserver \
> -e DB_PASSWORD=admin123.com \
> -e DB_NAME=jumpserver \
> -e REDIS_HOST=192.168.0.42 \
> -e REDIS_PORT=6379 \
> -e REDIS_PASSWORD=admin123.com \
> --privileged=true \
> jumpserver/jms_all:v2.4.0
8974115a714c5000bac47a8a457190408861ad1967429435ad4f6a0b838c2fe3
[root@node01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8974115a714c jumpserver/jms_all:v2.4.0 "./entrypoint.sh" 14 seconds ago Up 12 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:2222->2222/tcp jms_all
[root@node01 ~]# ss -tnl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::2222 :::*
LISTEN 0 128 :::80 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
[root@node01 ~]#
ヒント:上記の起動コンテナーは、主に、mariadbサーバーとredisサーバーの関連するアドレスとパスワードのポート情報を指定します。その中で、ポート80と2222はホスト上で公開されています。
ビュー・ログ
ヒント:docker logs -f container idを使用して、ジャンプサーバーコンテナーが実行中であることを示す、上の図の情報を確認してください。
ジャンプサーバーにアクセス
ヒント:ジャンプサーバーコンテナが配置されているホストのIPアドレスにアクセスすると、ジャンプサーバーにアクセスできます。デフォルトのユーザー名とパスワードはどちらもadminです。
ヒント:初めてログインするときに、パスワードをリセットできます。
ヒント:パスワードをリセットした後、再度ログインすると、ジャンプサーバーのホームページは上の図のようになります。後でこのインターフェイスでイントラネットサーバーを管理できます。これでジャンプサーバーサーバーがセットアップされました。
4、ジャンプサーバーの使用
1.ジャンプサーバーの基本設定
ヒント:基本設定では、現在のジャンプサーバーのURLと電子メールの件名プレフィックスを設定する必要があります。このようにして、ユーザーが受信する電子メール内のリンクは、このジャンプサーバーのURLを指します。
2.メールを送信するようにメールサーバーとjumpserverのユーザー名とパスワードを設定します
ヒント:[システム設定] ---> [メール設定]で、対応するアカウント情報とメールサーバー情報を入力し、接続をテストします。メールを正常に受信できる場合は、メールサーバー情報に問題がないことを意味します。ユーザー名とパスワードをメールで送信し、最後に[送信]をクリックします。
3.ユーザーを作成します
ヒント:[ユーザー管理] ---> [ユーザーリスト] ---> [作成]で、ユーザー関連情報を入力したら、下部にある[送信]をクリックします。
ヒント:新しいユーザーが正常に作成されると、対応するユーザーメールボックスに、ジャンプサーバーからユーザーが正常に作成されたことを示すメールが送信されます。ユーザーはこのメール内のリンクをクリックしてパスワードを設定できます。
プロンプト:パスワードを設定したら、[設定]をクリックします。ユーザーには、パスワードが正常に更新されたという電子メールが届きます。
4.ユーザーグループを作成し、対応するグループにテストユーザーを追加します。
ヒント:ユーザー管理--->ユーザーグループ---->作成し、グループ情報を入力してユーザーを選択し、[送信]をクリックします。
5.Jumpserverアセット管理--->ユーザー作成の管理
プロンプト:資産管理---->ユーザーの管理---->作成し、管理対象側に対応する管理者とパスワードを入力して、[送信]をクリックします。管理ユーザーは資産(管理対象サーバー)のrootであるか、NOPASSWDを持っています。権限を持つすべてのsudoユーザー、JumpServerはこのユーザーを使用して、「システムユーザーのプッシュ」、「アセットハードウェア情報の取得」などを行います。
6.システムユーザーを作成します。ここでのシステムユーザーとは、jumpserverを使用して対応する制御対象ホストにログインするために使用するユーザーを指します。
ヒント:資産管理--->システムユーザー--->新規、ユーザー名を入力し、自動プッシュと自動キー生成を確認し、下部にある[送信]をクリックします。ここに入力したユーザーが対応するログインとして使用されますジャンプサーバーへホストにこのユーザーがいない場合、ジャンプサーバーは追加した管理ユーザーを使用して、ここでシステムユーザーを作成します。
7.アセットを作成します
ヒント:資産管理--->資産リスト--->新規、制御対象ホストに対応するホスト情報とIPアドレス情報を入力し、ユーザーを管理し、下部にある[送信]をクリックします。
ヒント:送信が完了すると、ホストに追加したばかりのアセットリストが表示されます。
8.資産の承認
ヒント:権限管理--->アセット認証--->作成。名前を入力した後、ユーザーとグループ、アセットとシステムユーザーを選択し、下部にある[送信]をクリックします。この時点で、リソースはテストを許可されます。ユーザーとテストユーザー。これはグループのメンバーです。ここでは注意が必要です。ノードには多数のサーバーがあります。特定のユーザーに対して単一のサーバーのみを承認する場合は、下のノードを空白のままにします。必要に応じてノードをユーザーに承認するには、ノードを選択できます。上記のアセットは空白のままにすることができます。単一のアセットと特定のノードをユーザーに承認する場合は、対応するアセットとノードを選択するだけです。デフォルトノードの場合ここで選択されている場合、デフォルトノードの下のすべてのホストがユーザーに許可されていることを意味します。デフォルトノードにはデフォルトですべてのホストが含まれています。
検証:テストユーザーを使用してjumpserverにログインし、テストユーザーが作成したリソースを表示できるかどうかを確認しますか?
ヒント:初めてログインすると、ユーザーの情報が更新されます。その後、いくつかの条件で、実際の情報に従ってこれを変更できます。現在のユーザーが私のアセットにいくつかのアセットを持っていることがわかります。
検証:テストユーザーを使用してnode01に接続し、node01に接続できるかどうかを確認しますか?
ヒント:テストユーザーは、node01に正常に接続するように構成したjumpserverユーザーを使用できることがわかります。
9.ユーザー操作の再生を表示する
ヒント:[セッション管理] ----> [セッション管理] ----> [履歴セッション] ----> [対応するセッションの背後にある再生を検索]をクリックして、過去のセッションで対応するユーザーが実行した操作を表示します。
さて、ジャンプサーバーの基本的な操作はここで終了します。Web上の対応するメニューをクリックして、将来的に他のログを表示できます。ここでは詳しく説明しません。