はじめに
最近では、z/OS 上のミドルウェアやアプリケーションも TCP/IP 接続をすることが標準になり、セキュリティーの観点から TLS(SSL) の設定が必要となっています。一般に TLS 接続は、サーバー側とクライアント側に設定が必要で、設定不備によって TLS 接続ができないことがよくあります。この場合、TLS 接続が失敗したときの IP パケット・トレースを取得し、それを分析することで、原因が判明することが多いと思います。
この記事では、z/OS 上で取得された IP パケット・トレースを Wireshark で読み込むことが可能な Sniffer 形式に変換し、PC 上の Wireshark で読み込むまでの流れを説明します。
IP パケット・トレースの取得
z/OS 上での IP パケットの取得方法はこちらの記事にまとまっています。
https://qiita.com/tomotagwork/items/418cf7bf120720aa54bf
幸いにも、私が利用している環境では、NetView が稼働していますので、NetView CLIST で手順を簡易化しています。
そのとき利用している、サンプルの NetView CLIST も載せておきます。
なお、当環境の TCP/IP スタック名はTCPIP1
になっています。
/* REXX */
/* IP PACKET TRACE */
TRACE E
TCPIPSTACK = 'TCPIP1'
SAY '*** START IP PACKET TRACE ***'
'PIPE MVS V TCPIP,'TCPIPSTACK',PKT,ON | WAIT 10 | CONS'
'PIPE MVS TRACE CT,WTRSTART=GSKWTR | WAIT 10 | CONS'
'PIPE MVS TRACE CT,ON,COMP=SYSTCPDA,SUB=('TCPIPSTACK') | WAIT 3',
'| EDIT "REPLY" 1 LASTLINE WORD 1 NW',
'",WTR=GSKWTR,END" NEXT',
'| MVS | WAIT 3 | CONS'
/***** ここでテストしたいコマンドを実行 *****/
'PIPE MVS V TCPIP,'TCPIPSTACK',PKT,OFF | WAIT 10 | CONS'
'PIPE MVS TRACE CT,ON,COMP=SYSTCPDA,SUB=('TCPIPSTACK') | WAIT 3',
'| EDIT "REPLY" 1 LASTLINE WORD 1 NW',
'",WTR=DISCONNECT,END" NEXT',
'| MVS | WAIT 3 | CONS'
'PIPE MVS TRACE CT,WTRSTOP=GSKWTR | WAIT 10 | CONS'
SAY '*** END IP PACKET TRACE ***'
EXIT 0
Sniffer 形式への変換
メインとなる Sniffer 形式への変換ですが、 IPCS が正式にサポートしています。
https://www.ibm.com/docs/en/zos/2.5.0?topic=ipcs-options-keywords
以下のような IPCS を実行する JCL を実行することで、z/OS の IP パケット・トレースを Sniffer 形式に変換することができます。今回のケースでは、 IP パケット・トレースが書き込まれたデータ・セット名はKATAYAM.SSLTRACE.D230124.T030550
になります。
Sniffer 形式の IP パケット・トレースが書かれるデータ・セットのレコード長は 8,000 あれば十分ですので、可変長のレコード形式 (RECFM=VB
) で、レコード長を 8,000 (LRECL=8000
) で定義しています。
//WSHARK1 PROC DSNAME=
// EXPORT SYMLIST=(*)
// SET DSNAME=&DSNAME.
//STEP01 EXEC PGM=IKJEFT01,DYNAMNBR=20,REGION=0M
//SYSPROC DD DSN=SYS1.SBLSCLI0,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//IPCSPRNT DD SYSOUT=*
//IPCSTOC DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SNIFFER DD DISP=(,CATLG),DSN=&DSNAME..SNIFFER,
// VOL=SER=WRKVL1,UNIT=SYSDA,SPACE=(TRK,(15,15)),
// DCB=(LRECL=8000,RECFM=VB)
//SYSTSIN DD *,SYMBOLS=JCLONLY
PROFILE MSGID
%BLSCDDIR VOLUME (WRKVL1)
IPCS NOPARM
SETDEF DA('&DSNAME.')
CTRACE COMP(SYSTCPDA) OPTIONS((SNIFFER(7000,TCPDUMP) NOREASSEMBLY) +
GMT
END
/*
// PEND
//*
// EXEC WSHARK1,DSNAME=KATAYAM.SSLTRACE.D230124.T030550
IP パケット・トレースは可読な形式ではありませんが、データ・セットの中身を見てみると、IPCS 実行前と実行後で以下のように変化していることが分かります。
変換前
BROWSE KATAYAM.SSLTRACE.D230124.T030550 Line 0000000000 Col 001 080
Command ===> Scroll ===> DATA
********************************* Top of Data **********************************
.ラ...... {~ュホ'sg..........ツヤ. .......... ...EZBPTFM4CPAC SYSTCPDA........TCPI
******************************** Bottom of Data ********************************
変換後
BROWSE KATAYAM.SSLTRACE.D230124.T030550.SNIFFER Line 0000000000 Col 001 080
Command ===> Scroll ===> DATA
********************************* Top of Data **********************************
~¥CM....................
ウ ....j ...3...3..!ンQ1..!ンQ...、..V`x.. . 7.ンQ1.ンQ..テ.テ.J#'.. ス.ンQ1.テ.ワ...、¢、「、+」
ウ ....ク....¢...¢..!ン.-..!ン.ア..、...Yf.. . ..ン.ア.ン.-jリ.~e.. ....‾...コ .....ム......
ウ ....ケ....¢...¢..!ン.-..!ン.ア..、..... ...Zト.ン.-.ン.ア.~jリコmョ e..,‾.サ..ソ.....ユ.....セ
ウ ....ケ;...。...。..!ン.-..!ン.ア..、...Yg.. . ..ン.ア.ン.-jリ.~e..,コmョ . ..-.......e.ヤ.セ
ウ ....W ...ル...ル..!ン.-..!ン.ア..、..マYh.. ..n.ン.ア.ン.-jリ.~e..,コmョ . .~ー.......e...セ
ウ ....Xb...。...。..!ン.-..!ン.ア..、....、 ...I+.ン.-.ン.ア.~jリコmョ e.. ..T]・.......セ サ.e
ウ ....X ...ィ...ィ..!ン.-..!ン.ア..、....・ ...I・.ン.-.ン.ア.~jリコmョ e.. ..T#........セ サ.e
ウ ....YB...。...。..!ン.-..!ン.ア..、....ヲ ...I<.ン.-.ン.ア.~jリコmッ.e.. ..T]........セ サ.e
ウ ....YH...。...。..!ン.-..!ン.ア..、...Yi.. . ..ン.ア.ン.-jリ.~e.. コmッ. ." .........e...セ
ウ .... {...。...。..!ン.-..!ン.ア..、...Yテ.. . ..ン.ア.ン.-jリ.~e.. コmッ. ." .........e...セ
ウ .... ヘ...。...。..!ン.-..!ン.ア..、..... ...Zl.ン.-.ン.ア.~jリコmッ.e..S ..T]........セ ス.e
******************************** Bottom of Data ********************************
Wireshark で見る
Sniffer 形式のデータ・セットを FTP のバイナリー・モードで PC にダウンロードし、Wireshark から Open でそのファイルを開くと、z/OS 上の IP パケット・トレースが Wireshark で見ることができます。
(IP アドレス部分はモザイクを施しています。)
Wireshark であれば、IP パケットの流れや、パケットの種類、その中身について簡単に確認できますし、大量の IP パケットが含まれる場合にはフィルターを簡単にかけることができます。
(モザイクだらけになりそうですので、画像はありません。。)
おわりに
z/OS 上の IP パケット・トレースを Wireshark で見る方法を説明しました。
z/OS 上の IP パケット・トレースは IPCS でレポート形式に変換することができますが、レポートが縦長になってしまいますし、大量の IP パケットが含まれる場合、必要な情報を取得することは困難と思いますので、Wireshark などの Sniffer 形式をサポートするネットワーク分析ツールを使用することで、効率的に IP パケットの分析ができます。