Windows Server 2012 R2のEC2にFTPサーバを構築する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、虎塚です。

ストレージといえば、お馴染みS3がたいへん便利ですね。しかしながら、諸事情でFTPサーバを使うことになる場合もあるかと思います。(例: トラブルで一時的に手動でシステム間連携が必要になった。AWS APIを使用できない制約がある。など!)

今回の記事では、Windows Server 2012 R2のEC2インスタンスに、FTPサーバを構成する手順をまとめます。

  • ステップ0: 準備
  • ステップ1: ボリュームを追加する(オプション)
  • ステップ2: FTPをインストールする
  • ステップ3: FTPサイトを追加する
  • ステップ4: ファイアウォールを設定する
  • ステップ5: Security Groupを設定する
  • ステップ6: 接続確認

ステップ0: 準備

まず、次のAMIからWindows Serverを起動します。

  • Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2015.05.13 (ami-b4bc74b4)

次に、Windowsのパスワードを取得して、リモートデスクトップから接続します。キーボードのマッピングで苦労しないように、すくなくとも初回の接続にはクライアント側もWindowsを利用しましょう。

最後に、タイムゾーンを東京標準時に設定しておきます。

ステップ1: ボリュームを追加する(オプション)

作業の前に、インスタンスにEBSを追加します。

これは必須ではありません。ただ、今回は特定のボリュームを1つのドライブとして認識させて、ルートディレクトリ以下を丸ごとFTPサイトとして扱いたいため、実施しました。

今回は、10GBのEBSを追加し、Dドライブとして扱うことにしました。

ステップ2: FTPをインストールする

Windowsインスタンスにログインして、デスクトップ左下のアイコンからサーバー マネージャーを起動します。[役割と機能の追加]をクリックします。

サーバーマネージャー

もし[開始する前に]画面が表示されたら、[次へ]ボタンをクリックします。

開始する前に

[インストールの種類の選択]画面が表示されます。[役割ベースまたは機能ベースのインストール]ラジオボタンを選び、[次へ]ボタンをクリックします。

インストールの種類の選択

[対象サーバーの選択]画面が表示されます。[サーバー プールからサーバーを選択]ラジオボタンを選び、[次へ]ボタンをクリックします。

対象サーバーの選択

[サーバーの役割の選択]画面が表示されます。Windowsインスタンスの初期状態では、Webサーバの管理ツールがインストールされていません。そのため、FTP機能をインストールする前に、Webサーバの基本機能をインストールする必要があります。[Web サーバー (IIS)]を選びます。

サーバーの役割の選択

[Web サーバー (IIS) に必要な機能を追加しますか?]というダイアログが開きます。[機能の追加]ボタンをクリックします。

Webサーバー (IIS) に必要な機能を追加しますか?

ダイアログが閉じて、[サーバーの役割の選択]画面に戻ります。[Web サーバー (IIS)]チェックボックスを選び、[次へ]ボタンをクリックします。

サーバーの役割の選択(IISインストール後)

[機能の選択]画面が表示されます。この画面では特に何もせずに、[次へ]ボタンをクリックします。

機能の選択

[Web サーバーの役割 (IIS)]画面が表示されます。IISについての説明です。[次へ]ボタンをクリックします。

Webサーバーの役割 (IIS)

[役割サービスの選択]画面が表示されます。[FTP サーバー]と[FTP サービス]チェックボックスを選び、[次へ]ボタンをクリックします。

役割サービスの選択

[インストール オプションの確認]画面が表示されます。内容を確認して、[インストール]ボタンをクリックします。

インストール オプションの確認

インストールが完了したら画面を閉じます。サーバー マネージャーのダッシュボードの左側メニューに、IISが追加されていることを確認します。

サーバーマネージャーのダッシュボード(FTPインストール後)

これで、IISにFTPがインストールされました。

ステップ3: FTPサイトを追加する

インターネット インフォーメーション サービス (IIS) マネージャーを開きます。次のように「iis」で検索するとよいでしょう。

IISマネージャーの検索

左側の[接続]ウィンドウでサーバのツリーを開き、[サイト]を選びます。右側の[操作]ウィンドウで[FTP サイトの追加]をクリックします。

FTPサイトの追加

[サイト情報]画面が表示されます。次のように入力し、[次へ]ボタンをクリックします。

  • [FTP サイト名]: 任意の名前(FTPsite)
  • [物理パス]: FTPサイトを構成するディレクトリ

今回はステップ1で追加したボリュームを使うため、物理パスに「D:¥」と入力しました。

サイト情報

[バインドと SSL の設定]画面が表示されます。次のように入力し、[次へ]ボタンをクリックします。

  • [IPアドレス]: インスタンスにENIを複数つけて、複数のIPアドレスを持たせている場合を除き、初期値のままで構いません
  • [ポート]: 初期値(21)のままにします
  • [FTP サイトを自動的に開始する]: 有効
  • [SSL]: 無し

バインドと SSL の設定

[認証および承認の情報]画面が表示されます。次のように入力し、[終了]ボタンをクリックします。

  • [認証]: 匿名
  • [アクセスの許可]: 匿名ユーザー
  • [アクセス許可]: 読み取り、書き込みの両方を有効化

認証および承認の情報

FTPサイトが追加されました。

追加されたFTPサイト

ステップ4: ファイアウォールを設定する

FTP接続には、アクティブモードとパッシブモードがあります。パッシブモードを利用するには、いくつか設定が必要です。

まず、FTP接続のポート範囲を設定します。IISマネージャーの[接続]ウィンドウでサーバを選択します。その状態で、[FTP ファイアウォールのサポート]をダブルクリックします。

サーバを選択してファイアウォールの設定をおこなう

[FTP ファイアウォールのサポート]画面が表示されます。[データ チャネルのポート範囲]に、FTPのパッシブモードで利用するIPアドレスレンジを入力します。入力後、[操作]ウィンドウの[適用]をクリックします。

今回は接続元のホストがごく少ないため、「65000-65010」の11個にしました。

データ チャネルのポート範囲を設定する

次に、FTPサイトの外部IPアドレスを設定します。[接続]ウィンドウで(ステップ3で追加した)FTPサイトを選択します。その状態で、[FTP ファイアウォールのサポート]をダブルクリックします。

FTPサイトを選択してファイアウォールの設定をおこなう

[FTP ファイアウォールのサポート]画面が表示されます。[ファイアウォールの外部 IP アドレス]に、FTPサイト自身のパブリックなIPアドレスを入力します。入力後、[操作]ウィンドウの[適用]をクリックします。

ファイアウォールの外部 IP アドレスを設定する

最後に、セキュリティで保護されていないFTPトラフィックを許可するために、コマンドプロンプトで次のコマンドを実行します。

>netsh advfirewall set global StatefulFtp enable
OK

実行したら、FTPサービスを再起動します。

>net stop ftpsvc
Microsoft FTP Service サービスを停止中です.
Microsoft FTP Service サービスは正常に停止されました。

>net start ftpsvc
Microsoft FTP Service サービスを開始します.
Microsoft FTP Service サービスは正常に開始されました。

ステップ3で追加したFTPサイトのほうを再起動しても、設定は有効になりませんので注意してください。再起動するのは、FTPサービスです。

ステップ5: Security Groupを設定する

次のポート番号へのアクセスを、Windowsインスタンスに関連づけたAWSのSecurity Groupで許可します。

  • ステップ3でFTPサイト追加時に設定したポート番号(デフォルトで21
  • ステップ4で接続用のIPアドレスレンジとして設定したポート番号(65000-65010)

今回は、SSL認証なし、匿名アクセスの設定をしていますので、許可する接続元は必要最小限にします。

ステップ6: 接続確認

今回は、クライアントマシンのWindows 7から、FFFTP (Ver. 1.98g2) で接続しました。

FFFTP

ファイルをダウンロード、アップロードしたり、フォルダを作ったりできることを確認します。

おわりに

以上で、EC2のWindowsサーバでFTPサーバを構成できました。

匿名アクセスの構成にあまり馴染みがなかったもので、セキュリティ保護のない接続ではステートフルFTPを有効化することを知らず、ハマってしまいました。備忘のためにまとめておきます。

それでは、また。

参考資料