- FTP
暗号化されない一般的な FTPは以下のような構成である。
┏━━━━━┓ ┏━━━━━━┓
┃FTPサーバ ┣───インターネット────┫FTP ┃
┃ ┃ ┃クライアント┃
┗━━━━━┛ ┗━━━━━━┛
・Tiny FTP Daemon ・FFFTP
・War FTP Daemon
プロバイダのサーバやレンタルサーバ上に自分のホームページを持っていると、ファイルをアップロードするときに必ず FTPすることになるが、このような場合に FTPの安全性を心配してもプロバイダが対応しないことにはどうしようもない。ところが、自宅で FTPサーバを立て、出先からアクセスするような場合にはセキュリティには十分に気を配った方がいい。
そこで登場するのが転送データを暗号化してセキュアに FTPする二つの方法、FTPS と SFTP である。
- FTPS
FTPS は FTP over SSL/TLSを意味する。
SSL は Secure Sockets Layerの略である。Netscape 社が開発したサーバ/クライアント認証と暗号化通信を行うためのプロトコルであり、IEでも採用されている。後に SSLを元に TLS (Transport Layer Security)が IETFによって標準化された。
FTPSを実行するには、サーバ/クライアントともに以下に示したような SSL/TLSに対応したソフトが必要である。上記の Tiny FTP Daemon, War FTP Daemon や FFFTPでは FTPSはできない。逆に SSL/TLSに対応したサーバ/クライアントは通常の FTPも可能である。
FTPS の規定のポートは FTPと同じ 21番である。
転送モードは PORTモードがだめなら PASVモードを試すとよい。
┏━━━━━┓ ┏━━━━━━┓
┃SSL対応 ┣───インターネット────┫SSL対応FTP ┃
┃FTPサーバ ┃ ┃クライアント┃
┗━━━━━┛ ┗━━━━━━┛
・MoreFTPd ・FileZilla
・NekosogiFtpd ・SmartFTP
・RaidenFTPD ・NextFTP
・FileZilla Server ・FlashFXP
・CuteFTP Pro
・FTP Voyager
FTPSには Explicit と Implicitの二つのモードがある。違いは以下の通りである。全てのサーバ/クライアントが両方のモードをサポートしているとは限らないので注意すること。
Explicit:サーバの USERコマンドに対してクライアントがユーザ名の代わりにAUTH SSL/AUTH TLSを発行し、サーバからの応答受信後クライアントからSSL/TLSハンドシェイクを開始し、SSL/TLSセッション確立後にログインを開始する方式。すなわち、非暗号化状態で接続を開始し、ユーザ名とパスワードを検証する直前にセキュアなデータ接続を行う。
Implicit:いきなりクライアントからSSL/TLSハンドシェイクを開始し、SSL/TLS セッション確立後にログインを開始する方式。すなわち、クライアントはサーバへのすべての要求をセキュア状態で送信する。
MoreFTPd <-> FileZilla の組み合わせでは以下のような結果であった。
○ FTP
× FTP over SSL/TLS(implicit encryption)
○ FTP over SSL(explicit encryption)
○ FTP over TLS(explicit encryption)
explicit encryptionでは証明書を許可するかどうかの問い合わせがあるので許可をする。証明書はDeleGateを使って AN HTTPDで SSL通信するに書いた方法で certificate.pem, privatekey.pem の二つののファイルを作成するとよい。
- SFTP
SFTP は SSH File Transfer Protocol であり、パスワードやデータは SSH(Secure SHell)による暗号化されるのでセキュアなファイル転送が可能である。上記の FTPSとは暗号化方式が異なり、全く別物である。
SFTPの規定のポートは 22番である。ルータ、ファイアウォールも ポート22の開放を。
┏━━━━━┓ ┏━━━━━━┓
┃SFTPサーバ┣───インターネット────┫SFTP ┃
┃ ┃ ┃クライアント┃
┗━━━━━┛ ┗━━━━━━┛
・OpenSSH for Windows ・FileZilla
・WinSCP
・EmFTP
以下では、SFTPサーバとして OpenSSH For Windowsのインストール方法を説明する。
下記URLから Binary Installer Releasesをダウンロードする。
http://sshwindows.sourceforge.net/download/
2005/05現在の最新版は setupssh381-20040709.zip である。
解凍して、setupssh.exeを実行するとインストールが開始する。
サーバPCにはサーバシステムを、クライアントPCにはクライアントシステムをインストールする。
コマンドプロンプトから以下のコマンドを実行する。
mkgroup -l >> ..\etc\group
mkpasswd -l -u userXXX >> ..\etc\passwd
/home ディレクトリを設定する(sftp接続だけなら /homeの設定は不要かもしれないが、sshでアクセスするときは必須)。
HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2\/home
例えば F:\Users を /home にするなら、nativeキーの値のデータを F:\Users に設定する。
この結果、userXXX というユーザの /home は F:\Users\userXXX になるのでフォルダの作成が必要。
ファイアウォールが動作しているなら、ポート22番を開放する。
新しいディレクトリを登録は、例えば C:\abc を /xyz として登録するなら、
HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions\Cygwin\mounts v2
にキー /xyz を新規作成し、以下の DWORDと 文字列を設定する。
flags REG_DWORD 0x0000000a(10)
native REG_SZ C:\abc
クライアントPCでコマンドプロンプトからアクセスするときは、
sftp userXXX@サーバアドレス
のようにコマンドを実行すれば、通常の FTPと同様のコマンドを実行することができる。また、この上で説明した FileZilla を使ってアクセスすれば GUIインタフェースでファイルの閲覧などが可能である。
- 日本語ファイル名の扱い
SFTPの場合、日本語ファイル名のファイルのアップロード/ダウンロードに失敗する。クライアント側の問題ではなく、OpenSSH for Windowsに問題があるようだ。検索してみると以下がみつかった。
http://kotaro.aist-nara.ac.jp/~hirots-m/diary/?200406
cygwin.dll となっているが cygwin1.dll のことではないかと見当をつけて交換してみると解決した。配布された OpenSSH for Windows の cygwin1.dllのバージョンは 1.5.10-cr-0x5e6(更新日時 2004年05月26日 11:07:50) であるが、これを最新版の 1.5.16(更新日時 2005年04月26日 09:26:58)と取り替えると(C:\Program Files\OpenSSH\bin)アップロード/ダウンロードが可能になった。cygwin1.dllの最新版は以下からダウンロードしたファイルを解凍すれば得られる。
ftp://ftp.jaist.ac.jp/pub/cygwin/release/cygwin/
FTPSではもともと日本語ファイル名の問題は存在しない。
- 関連情報へのリンク
ftps - FTP-SSL and FTP-TLS - the state of play
OpenSSH Windowsにおける選択肢
OpenSSH for Windows
FileZilla Homepage
MoreFTPd
FTP サーバ 設定(SPENCER Network)
FTPをファイアウォール・フレンドリ・モードに変更する方法