今回はIBM i のSFTPとFTPSサポートについてご紹介します。
現代ではあらゆるシステムがインターネットに何らかの形で(直接・間接の違いはあっても)接続されていると言っても過言ではないでしょう。
このためシステム間のファイル転送技術として最も一般的なFTPがセキュリティ的に使用すべきでないとされるシチュエーションも増えてきているように思います。
FTPは接続ユーザーIDやパスワード、送受信されるデータが平文で送信されますのでネットワーク的にセキュアな環境が必須となりますが、近年のセキュリティ要件においてはそれだけではセキュリティが十分でないケースも様々発生していると思われます。
一例をあげればパスワードをユーザー側で入力する必要がある(ユーザー側に何らかの形でパスワードを渡す必要がある)ことが重大なセキュリティリスクとされる場合もあるでしょう。
そのような場合でも今回ご紹介するSFTPとFTPSではパスワードではなく鍵認証によるユーザーアクセスが可能でセキュリティを高めることが可能となります。
IBM i に限らずシステム間のファイル転送においてFTPをよりセキュア化する方法として広く認知されているのが今回ご紹介するSFTPとFTPSで、IBM i もこの二つをサポートしています。
SFTPとFTPSの違い
最初に簡単にSFTPとFTPSの違いをご紹介します。
SFTP: SSH File Transfer Protocol
ssh(セキュアシェル Secure Shell)は元来はUNIXで利用されていた、ネットワーク上のシステムにリモートアクセスするためのものです。
sshは通信経路が暗号化されます。
SFTPでは最初にsshでファイル転送の相手に接続し暗号化した通信経路を確保します。
その暗号化した通信経路を利用してFTPと似たファイル転送を実行するものです。
コマンドは通常のFTPコマンドと類似のsftpコマンドを使用します。(図1上段)
FTPS: File Transfer Protocol over SSL/TLS
FTPSはファイル転送を開始する際にセキュアな通信を開始し、自身の接続した通信経路を使って通常のFTPに似たコマンドを使用してファイル転送を実行します。
セキュアなネットワークを確立するためにTLSまたはSSL通信を使用します。(図1 下段)
ご参考にSFTPとFTPSの比較表を図2、図3に示します。
SFTP | FTPS | FTP | |
---|---|---|---|
SSH File Transfer Protocol | File Transfer Protocol over SSL/TLS | File Transfer Protocol | |
暗号化されたssh(secure Shell)上でファイル転送を行うプロトコル | SSL/TLSで暗号化された経路上でファイル転送を行うプロトコル | 暗号化をせずファイル転送するプロトコル | |
暗号化の方式 | sshで確立された暗号化された通信経路の上でファイル転送を行う。 | ファイル転送実行前にSSLかTLSで通信経路を暗号化する。ユーザー名、パスワード含め暗号化される。 Explicitモード:認証コマンド実行後に暗号化通信を開始(クライアントが暗号化・非暗号化をコントロールできる) Implicitモード:サーバ接続開始時点から暗号化通信を開始(全通信が暗号化) |
ユーザー名、パスワード、データなど暗号化せずにネットワーク上を伝送される |
暗号化するレイヤー | ssh上 アプリケーション層 |
トランスポート層 | なし |
コマンド | sftp | 利用するFTPS対応FTPツールに依存 | ftp |
デフォルト使用ポート(ウェルノウンポート) | 22 / tcp ssh用ポート |
21 / tcp Explicit(明示的)モード 990 / tcp Implicit(暗黙的)モード |
20 / tcp データ転送用 21 / tcp 制御用 |
メリット | 通信経路上のデータはすべて暗号化される | 通信経路上のデータはすべて暗号化される (Explicitモードでは指定により非暗号化も可能) ASCII/BINARYモードでの転送 フォルダー単位の転送 |
SFTP, FTPSと比較して高速な転送が可能 |
デメリット | FTP(暗号化なし)より処理速度は遅い | SSL証明書の費用が発生するケースあり FTP(暗号化なし)より処理速度は遅い |
暗号化なし |
SFTPとFTPSでは暗号化するレイヤーが異なります。
第7層 | アプリケーション層 | アプリケーション(SSH, FTP, HTTP, DNS, 等)を定義 |
---|---|---|
第6層 | プレゼンテーション層 | アプリケーション層が要求する形式でデータを送受信する。SMTP, Telnet等 |
第5層 | セッション層 | RPCなどが該当。ネットワークを介するアプリケーション間のセッション開始、終了、ステータス管理等を受け持つ。 |
第4層 | トランスポート層 | TCP, UDP, DCCP, TLS, SSLなど。上位層のリクエストに応じて下位層のサービスを呼び出す。エラー検知やフロー制御なども行う。 |
第3層 | ネットワーク層 | 通信元と通信先とのエンド-エンドの通信を受け持つ。ルーティング機能など。 |
第2層 | データリンク層 | 大雑把に言えばネットワークドライバーの役割。物理H/Wの操作など。イーサネット、トークンリング、フレームリレー等 |
第1層 | 物理層 | 通信ケーブルやアダプターなどの物理的な形状、電気的な性質等を定義。RS-232C, UTP, 光ケーブル等 |
IBM i におけるSFTPとFTPSの前提条件等について
IBM i でSFTPとFTPSを利用する際の前提条件を図4にまとめました。
SFTP | FTPS | FTP | |
---|---|---|---|
SSH File Transfer Protocol | File Transfer Protocol over SSL/TLS | File Transfer Protocol | |
ライセンスプログラム等の前提条件 | 5733-SC1 *BASE IBM Portable Utilities for i 5733-SC1 オプション1 OpenSSH, OpenSSL, zlib |
57xx-TC1 TCP/IP Connectivity Utilities for i 57xx-SS1 オプション44 IBM ディジタル証明書マネージャー (DCM) 57xx-DG1 IBM HTTP Server for i 57xx-JV1 IBM Developer Kit for Java *JAVAバージョンはIBM HTTP Server グループ PTF のカバー・レターに記述 ローカル認証局CAの作成 または SSL公開証明書 |
57xx-TC1 TCP/IP Connectivity Utilities for i |
オプション | SSL/TLS暗号化H/Wアクセラレーター(SSL/TLS処理を高速化できる) *IBM CCA Service Provider (57xx-SS1 オプション 35) および IBM Cryptographic Device Manager (5733-CY3) も必要 |
||
サーバー実行コマンド | STRTCPSVR *SSHD | STRTCPSVR *FTP | STRTCPSVR *FTP |
出口点 | 出口点なし | 出口点あり | 出口点あり |
IBM i でのSFTPセットアップ
以下ではIBM i でSFTPを使用するためのセットアップ手順をご紹介します。
設定・実行にはWindowsクライアント側にsshを実行するクライアントS/Wが必要です。
Windows10は途中からsshクライアント(OpenSSH)が標準で使用可能になっていますが、今回はPuTTYというLinuxなどで一般的なツールを使用してみます。
以下の手順開始前に図4にあるIBM i 前提ライセンスプログラムを導入してください。
*ssh関連の設定手順については必要に応じて以下リンクもご参照ください。
Configuring the IBM i SSHD Server to Use Public-Key Authentication
https://www.ibm.com/support/pages/configuring-ibm-i-sshd-server-use-public-key-authentication
図5
以下の手順を実施します。
(1) IBM i でssh用ユーザープロファイルの環境設定
まず、IBM i 上でsshに使用するユーザープロファイルの環境設定を行います。
以下の例では GOMA というユーザープロファイルを使用しています。
任意のユーザープロファイルに読み替えて実行してください。
(a) : 5250でQSHELL を起動し、ユーザーのホームディレクトリを作成
利用する端末セッションはホストコードページ939であることを確認してください。
*SECOFRクラスのユーザーで5250端末にサインオンします。ジョブのCCSIDは5035にしてください。
CHGJOB CCSID(5035)などを実行します。
以下のコマンドを実行しPASEシェルを起動
CALL QP2TERM
ユーザーのホームディレクトリを作成
mkdir /home/GOMA
(b) : ホームディレクトリの所有者をユーザー自身に変更
chown GOMA /home/GOMA
(c) : ホームディレクトリのパーミッション(アクセス権限)を設定
実行結果は図6の5250画面のようになります。
chmod 755 /home/GOMA
図6
(d) : ホームディレクトリ下に .ssh ディレクトリを作成
mkdir /home/GOMA/.ssh
(e) : sshディレクトリの所有者をユーザー自身に変更
chown GOMA /home/GOMA/.ssh
(f) : .sshディレクトリのパーミッションを設定
実行結果は図7
chmod 700 /home/GOMA/.ssh
F3キーを押して QSHELLを終了します。
(g) : ユーザープロファイルのホームディレクトリを変更
ユーザーのホームディレクトリを上の手順a)で作成したディレクトリに変更します
CHGUSRPRF USRPRF(GOMA) HOMEDIR(‘/home/GOMA’)
(2) PuTTYをWindowsに導入する
Windows端末にPuTTYを導入してください。
PuTTYは様々なサイトで配布されていますので検索して任意のサイトからダウンロード・インストールしてください。
*PuTTY以外にWindows 10等に標準提供されるOpenSSHや他のsshツールを使用してssh鍵作成、ssh実行することも可能です。
(3) PuTTY付属のssh鍵作成ツールPuTTY Gen で鍵を作成する
PuTTYを導入したフォルダー(c:\Program Files(x86)\Puttyなど)の下にあるputtygen.exeを実行します。(図8)
その際、生成するキータイプはRSA を選択します。
キー長は2048ビット、4096ビットなど必要に応じて長さを指定します。
鍵の生成が完了したら(グリーンの進捗バーが100%になったら)、公開鍵(パブリックキー)と秘密鍵(プライベートキー)を保管します。(図9)
図9では、公開鍵をPutty_sshkey_pub、秘密鍵をPutty_sshkey.ppk として保管しています。
例ではパスフレーズ(Key passphrase)をブランクに設定していますが任意のパスフレーズを指定してもかまいません。
パスフレーズを指定すると、これ以降で鍵を操作する操作でパスフレーズの入力を要求されるようになりセキュリティを高めることができます。
図9
(4) PuTTY付属のファイル転送コマンド pscp.exeで公開鍵をIBM i へ転送する
PuTTYをインストールしたディレクトリにあるpscp.exeで公開鍵(Putty_sshkey_pub)をIBM i へ転送します。
Windowsのコマンドプロンプトを開き、ssh鍵を作成したディレクトリにcdした後、以下のコマンドを実行します。(図10)
まず、図10 ①のコマンドを実行します。
pscp Putty_sshkey_pub GOMA@IBM iのホスト名or IPアドレス:.ユーザープロファイルのパスワード
※上記でPutty_sshkey_pub は(3)で作成した公開鍵のファイル名です。
まだ鍵によるアクセスを設定できていない為、鍵認証できずパスワード入力を要求されます。
図10 ②のプロンプトにユーザープロファイル(例ではGOMA)のパスワードを入力します。
認証がとおり、公開鍵がIBM i に転送されます。転送先のIBM i フォルダーはユーザープロファイルのホームディレクトリ(/home/GOMA)になります。
注)
(ア) は IBM i のホスト名かIBMアドレスを入力します。
(イ) は IBM i に接続するユーザープロファイル(例ではGOMA)のパスワードを入力します。
例としては以下のようになります。
pscp Putty_sshkey_pub GOMA@IBMI74:.GOMA123
IBMI74 が接続するIBM i のホスト名、GOMA123がユーザープロファイルGOMAのパスワードです。
(5) SSHサーバーを開始
以下のコマンドを実行してIBM i でSSHサーバーを開始します。
STRTCPSVR SERVER(*SSHD)
QUSRWRK サブシステムに QP0ZSPWP ジョブが開始されます。機能に PGM-sshd と表示され sshサーバーであることが識別できます。(図11)
(6) (4)でIBM i に転送した公開鍵(Putty_sshkey_pub)をsshで使用可能なように変換し、ユーザーのホームディレクトリ下 /home/GOMA/.ssh/authorized_keys に配置します。
以下の手順を実行します。
PuTTYを起動して、接続先のIBM i ホスト名かIPアドレスを入力します。接続タイプは SSH を指定し、オープン(Open)ボタンを押します。(図12)
パスワード認証でサーバーへSSH接続します。IBM i のユーザー、パスワードを入力すると図12右のようなプロンプト $ が表示されます。
続けて以下のコマンドを入力します。
$ pwd
/home/GOMA -> 現行ディレクトリがユーザーのホームディレクトリであることを確認
$ ls
Putty_sshkey_pub -> 転送済みの公開鍵があることを確認
$ ssh-keygen -i -f Putty_sshkey_pub >> .ssh/authorized_keys このコマンドでsshで使える公開鍵を作成。
*注意:このコマンド入力は間違えない様、特に注意してください。入力を間違えてDeleteキーやBack spaceキー、矢印キーなどを操作するとIBM i 上に生成されるssh鍵のファイル名が文字化けして使用不可になる場合があります。入力を間違えた場合はエンターキーを押す前に X でSSHセッションを終了して再度PuTTYアイコンの起動からやり直してください。
$ exit -> すべて終了したらexitでsshを終了します。
以上を実行後、 /home/GOMA/.ssh/authorized_keys というフィアルが生成されたことを確認してください。(図13)
以上でIBM i 上のssh用公開鍵の作成は完了です。
(7) PuTTY sshの認証を鍵認証に変更する
WindowsクライアントとIBM i にssh用の鍵がセットできましたが、PuTTY sshはデフォルトでは鍵認証を使わない設定になっている((6)の実行例)ため、鍵認証に設定変更します。
PuTTYを起動し、Connection -> SSH -> Auth と展開し、秘密鍵ファイル名(Private key file for authentication)にWindows上の秘密鍵のファイル名を入力します。
例では手順③で作成した秘密鍵 Putty_sshkey.ppk を指定します。(図14)
以上の設定でPuTTY sshセッション開始時にIBM i のパスワードを入力することなく、通信が開始できるようになります。
(8) PuTTY sshセッションを開始する
sftpを実行する前提としてsshで暗号化された通信経路をIBM i に接続します。
PuTTYでsshセッションを起動します。
図15のようにパスワードを入力することなくIBM i への通信が確立します。
IBM i でNETSTATコマンドで確認するとSSH用のウェルノウンポート22 で接続していることが確認できます。
*注 図15では、図14以前の図表を作成する以前に生成済みの認証鍵を使用しています。このため厳密に見ると図15で表示されている認証鍵の作成日が図14以前と整合性が取れていません。ただし説明してきた設定手順には影響ありません。
(9) 最後にSFTPでwindowsからファイル転送を行います
SFTPの実行の仕方は色々考えられますが、ここではPuTTY付属のPSFTP コマンドで定義ファイルに従ったバッチ転送の例をご紹介します。
まず、PSFTPコマンドで処理するバッチファイルを用意します。今回はメモ帳などで、以下の内容を記述しPSFTP.scr というテキストファイルで保管します。(任意のフォルダー下でOK)
cd /home/GOMA/photo IBM i サーバーのディレクトリを変更 del PHOTO1.JPG すでにIBM i 上にあるファイルを削除 ren PHOTO2.JPG PHOTO2REN.JPG すでにIBM i 上にあるファイル名を変更 put PHOTO3.JPG 新しいファイルをIBM iに転送 chmod a+r PHOTO3.JPG
次にWindowsのコマンドプロンプトを開いてPSFTP.scr とPHOTO3.JPGがあるフォルダーにCDして以下のコマンドを実行します。
psftp GOMA@IBMI74 -b PSFTP.scr GOMAはIBM i のユーザープロファイル、IBMI74はSFTPするIBM iシステム名。
図16のような実行画面が表示され処理が完了します。この時、WindowsとIBM i はsshポート22だけを使用しています。
図16
PSFTPコマンドで処理実行する前後のターゲットのIBM i フォルダー内容は図17のようになります。
図17 sftp実行 BEFORE / AFTER
以上のようにセットアップは若干手間があり、接続するユーザー毎に設定を行う必要があると思われますが、一度設定してしまえばパスワード入力も不要でセキュアなネットワーク通信でファイル転送が可能となります。
ぜひ皆様のシステムにおいても活用してください。
今回具体的設定手順をご紹介しなかったFTPSについては以下の参考情報をご参照ください。
参考情報:IBM i でのFTPS参考情報
トランスポート層セキュリティーまたは Secure Sockets Layer を使用した FTP クライアントの保護
https://www.ibm.com/docs/ja/i/7.4?topic=i-securing-ftp-clients-tls-ssl
シナリオ: Secure Sockets Layer を使用したファイル転送プロトコルの保護
https://www.ibm.com/docs/ja/i/7.4?topic=ftp-scenario-securing-ssl
*特記事項について
当記事の内容は執筆者個人の見解によるものであり、IBM公式のものではありません。
このため当記事内容につきましてIBM SWMAなどの公式なサポート窓口へのお問い合わせは一切ご遠慮くださいますようお願い致します。
ご質問等ございましたら当サイトへお問い合わせいただけますと幸いです。
筆者
日本アイ・ビー・エム株式会社 多数の執筆記事を、iWorldに寄稿中。 |