2. 通信の暗号化を確認する#
DBサーバー側で通信を待ち受ける#
まず、DBサーバー側でポート1521を開放し、通信を受け付ける準備をします。
次のコマンドで、ファイアウォールを設定してポート1521を解放します。
# ポート1521を解放
sudo firewall-cmd --permanent --add-port=1521/tcp
sudo firewall-cmd --reload
# インターフェース名と1521番ポートが解放されていることを確認
$ sudo firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s5
sources:
services: dhcpv6-client ssh
ports: 1521/tcp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
次に、tsharkコマンドを使ってネットワークインターフェースを確認し、パケットキャプチャを開始します。
先ほど確認したインターフェース名、enp0s5 を使用してTCPポート1521で通信をキャプチャします。
# インターフェースの番号を確認
$ sudo tshark -D
Running as user "root" and group "root". This could be dangerous.
1. enp0s5
2. lo (Loopback)
3. any
4. bluetooth-monitor
5. nflog
6. nfqueue
7. usbmon0
8. usbmon1
9. usbmon2
10. usbmon3
...
# TCP/1521で受け取る通信をキャプチャ
$ sudo tshark -i 1 -Y 'tcp.port==1521' -x
これで、DBサーバー側での通信がキャプチャされるようになります。次に、クライアント側でDBに接続します。
クライアント側でDBに接続する#
簡易接続子を使って、SQL*PlusでOracleデータベースに接続します。
sqlplus hr/<パスポート>@<接続先ホスト名>:<ポート番号>/<サービス名>
以下のコマンドで、HRユーザーとして接続します。実行例ではパスワードを省略することで証跡にパスワードが残らないように接続しています。
$ sqlplus hr@192.168.130.169:1521/freepdb1
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Nov 26 22:09:52 2024
Version 21.11.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Enter password: <パスワードを入力>
Last Successful login time: Tue Nov 26 2024 22:08:58 +09:00
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.6.0.24.10
-- 適当なSQLを発行
SQL> select * from jobs;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES President 20080 40000
AD_VP Administration Vice President 15000 30000
AD_ASST Administration Assistant 3000 6000
FI_MGR Finance Manager 8200 16000
FI_ACCOUNT Accountant 4200 9000
AC_MGR Accounting Manager 8200 16000
...
この時点で、DBサーバーでパケットキャプチャを実行している端末を見ると、jobs テーブルの内容が平文で送信されていることが確認できます。
(一部抜粋)
...
0080 2c 01 04 05 41 44 5f 56 50 1d 41 64 6d 69 6e 69 ,...AD_VP.Admini
0090 73 74 72 61 74 69 6f 6e 20 56 69 63 65 20 50 72 stration Vice Pr
00a0 65 73 69 64 65 6e 74 03 c3 02 33 02 c3 04 07 2a esident...3....*
00b0 2c 01 04 07 41 44 5f 41 53 53 54 18 41 64 6d 69 ,...AD_ASST.Admi
00c0 6e 69 73 74 72 61 74 69 6f 6e 20 41 73 73 69 73 nistration Assis
00d0 74 61 6e 74 02 c2 1f 02 c2 3d 07 21 2c 01 04 06 tant.....=.!,...
00e0 46 49 5f 4d 47 52 0f 46 69 6e 61 6e 63 65 20 4d FI_MGR.Finance M
00f0 61 6e 61 67 65 72 02 c2 53 03 c3 02 3d 07 1f 2c anager..S...=..,
0100 01 04 0a 46 49 5f 41 43 43 4f 55 4e 54 0a 41 63 ...FI_ACCOUNT.Ac
0110 63 6f 75 6e 74 61 6e 74 02 c2 2b 02 c2 5b 07 24 countant..+..[.$
0120 2c 01 04 06 41 43 5f 4d 47 52 12 41 63 63 6f 75 ,...AC_MGR.Accou
0130 6e 74 69 6e 67 20 4d 61 6e 61 67 65 72 02 c2 53 nting Manager..S
0140 03 c3 02 3d 07 26 2c 01 04 0a 41 43 5f 41 43 43 ...=.&,...AC_ACC
0150 4f 55 4e 54 11 50 75 62 6c 69 63 20 41 63 63 6f OUNT.Public Acco
0160 75 6e 74 61 6e 74 02 c2 2b 02 c2 5b 07 20 2c 01 untant..+..[. ,.
0170 04 06 53 41 5f 4d 41 4e 0d 53 61 6c 65 73 20 4d ..SA_MAN.Sales M
0180 61 6e 61 67 65 72 02 c3 02 04 c3 03 01 51 07 27 anager.......Q.'
0190 2c 01 04 06 53 41 5f 52 45 50 14 53 61 6c 65 73 ,...SA_REP.Sales
01a0 20 52 65 70 72 65 73 65 6e 74 61 74 69 76 65 02 Representative.
01b0 c2 3d 04 c3 02 15 09 07 24 2c 01 04 06 50 55 5f .=......$,...PU_
01c0 4d 41 4e 12 50 75 72 63 68 61 73 69 6e 67 20 4d MAN.Purchasing M
01d0 61 6e 61 67 65 72 02 c2 51 03 c3 02 33 07 23 2c anager..Q...3.#,
01e0 01 04 08 50 55 5f 43 4c 45 52 4b 10 50 75 72 63 ...PU_CLERK.Purc
01f0 68 61 73 69 6e 67 20 43 6c 65 72 6b 02 c2 1a 02 hasing Clerk....
0200 c2 38 07 1e 2c 01 04 06 53 54 5f 4d 41 4e 0d 53 .8..,...ST_MAN.S
...
この状態では、データが平文でネットワーク上に送信されており、暗号化が行われていないことが確認できます。
それでは、次の手順で通信の暗号化を設定します。
通信の暗号化設定を行う#
DBサーバーの $ORACLE_HOME/network/admin にある sqlnet.ora ファイルを編集し、通信の暗号化を有効化します。
まず、 sqlnet.ora ファイルの場所を確認します。
$ ls $ORACLE_HOME/network/admin
listener.ora samples shrept.lst sqlnet.ora tnsnames.ora
次に、 sqlnet.ora を編集して、暗号化を有効にします。
$ vi $ORACLE_HOME/network/admin/sqlnet.ora
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
# 以下の2行を追加
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128)
この設定により、データベースとの通信が暗号化されるようになります。
暗号化設定後、再びDBに接続する#
クライアント側で再びDBに接続し、先ほどと同様に問い合わせを行います。
$ sqlplus hr@192.168.130.169:1521/freepdb1
SQL*Plus: Release 21.0.0.0.0 - Production on Tue Nov 26 22:09:52 2024
Version 21.11.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Enter password: <パスワードを入力>
Last Successful login time: Tue Nov 26 2024 22:08:58 +09:00
Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.6.0.24.10
-- 適当なSQLを発行
SQL> select * from jobs;
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES President 20080 40000
AD_VP Administration Vice President 15000 30000
AD_ASST Administration Assistant 3000 6000
FI_MGR Finance Manager 8200 16000
FI_ACCOUNT Accountant 4200 9000
AC_MGR Accounting Manager 8200 16000
...
Wiresharkでのキャプチャを確認すると、データが平文ではなく、暗号化されていることが確認できます。
(一部抜粋)
...
0140 41 d7 65 ec 53 50 c4 46 10 a4 08 e4 30 9b 68 7f A.e.SP.F....0.h.
0150 2c 19 28 2c 5d 58 09 f4 7a c6 16 5f 8e 6a 42 1d ,.(,]X..z.._.jB.
0160 e0 7a 69 f9 eb 86 96 44 36 5e c6 81 e8 cb 48 61 .zi....D6^....Ha
0170 44 e1 02 61 ca 47 ce d0 58 df 2c be 3b cb 02 36 D..a.G..X.,.;..6
0180 05 a8 1f 4f e8 d9 be 71 da ac 67 36 e0 65 9d 4b ...O...q..g6.e.K
0190 e3 8f ef d3 5f 30 fa 74 24 fa 6c b8 5e 87 71 c1 ...._0.t$.l.^.q.
01a0 67 af 2e e5 b3 e4 4a e8 c7 c6 dc 61 11 22 b4 69 g.....J....a.".i
01b0 68 42 f3 e9 da 80 ad 5e d6 7b 75 f3 10 53 04 77 hB.....^.{u..S.w
01c0 8c 62 68 2c e8 ab 9b 4e 6f 54 4b ec fa fb 5a ed .bh,...NoTK...Z.
01d0 61 63 97 27 74 a5 d5 1f ce 54 b8 56 d8 a3 c0 e1 ac.'t....T.V....
01e0 a4 1e ca 5f 39 0c 1e ec 3e 23 57 a1 a4 a2 c6 2b ..._9...>#W....+
01f0 c1 27 04 07 4f 0e 10 ac 13 ff b0 ae 31 48 a8 26 .'..O.......1H.&
0200 df 6e 68 dc fd 17 36 db 4d 07 ad 11 af e3 ff 80 .nh...6.M.......
0210 d1 5e cf ab 61 f9 57 36 6f 98 52 d0 49 29 13 57 .^..a.W6o.R.I).W
0220 8d 21 32 1d 40 cb d0 a2 96 70 db 13 ae 35 0d ec .!2.@....p...5..
...
このように通信が確実に暗号化されていることが確認できます。
以上で、ネイティブ・ネットワーク暗号化のデモは終了です。