Windows Server 2012 R2のEC2にFTPサーバを構築する
こんにちは、虎塚です。
ストレージといえば、お馴染み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についての説明です。[次へ]ボタンをクリックします。
[役割サービスの選択]画面が表示されます。[FTP サーバー]と[FTP サービス]チェックボックスを選び、[次へ]ボタンをクリックします。
[インストール オプションの確認]画面が表示されます。内容を確認して、[インストール]ボタンをクリックします。
インストールが完了したら画面を閉じます。サーバー マネージャーのダッシュボードの左側メニューに、IISが追加されていることを確認します。
これで、IISにFTPがインストールされました。
ステップ3: FTPサイトを追加する
インターネット インフォーメーション サービス (IIS) マネージャーを開きます。次のように「iis」で検索するとよいでしょう。
左側の[接続]ウィンドウでサーバのツリーを開き、[サイト]を選びます。右側の[操作]ウィンドウで[FTP サイトの追加]をクリックします。
[サイト情報]画面が表示されます。次のように入力し、[次へ]ボタンをクリックします。
- [FTP サイト名]: 任意の名前(FTPsite)
- [物理パス]: FTPサイトを構成するディレクトリ
今回はステップ1で追加したボリュームを使うため、物理パスに「D:¥」と入力しました。
[バインドと SSL の設定]画面が表示されます。次のように入力し、[次へ]ボタンをクリックします。
- [IPアドレス]: インスタンスにENIを複数つけて、複数のIPアドレスを持たせている場合を除き、初期値のままで構いません
- [ポート]: 初期値(21)のままにします
- [FTP サイトを自動的に開始する]: 有効
- [SSL]: 無し
[認証および承認の情報]画面が表示されます。次のように入力し、[終了]ボタンをクリックします。
- [認証]: 匿名
- [アクセスの許可]: 匿名ユーザー
- [アクセス許可]: 読み取り、書き込みの両方を有効化
FTPサイトが追加されました。
ステップ4: ファイアウォールを設定する
FTP接続には、アクティブモードとパッシブモードがあります。パッシブモードを利用するには、いくつか設定が必要です。
まず、FTP接続のポート範囲を設定します。IISマネージャーの[接続]ウィンドウでサーバを選択します。その状態で、[FTP ファイアウォールのサポート]をダブルクリックします。
[FTP ファイアウォールのサポート]画面が表示されます。[データ チャネルのポート範囲]に、FTPのパッシブモードで利用するIPアドレスレンジを入力します。入力後、[操作]ウィンドウの[適用]をクリックします。
今回は接続元のホストがごく少ないため、「65000-65010」の11個にしました。
次に、FTPサイトの外部IPアドレスを設定します。[接続]ウィンドウで(ステップ3で追加した)FTPサイトを選択します。その状態で、[FTP ファイアウォールのサポート]をダブルクリックします。
[FTP ファイアウォールのサポート]画面が表示されます。[ファイアウォールの外部 IP アドレス]に、FTPサイト自身のパブリックな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) で接続しました。
ファイルをダウンロード、アップロードしたり、フォルダを作ったりできることを確認します。
おわりに
以上で、EC2のWindowsサーバでFTPサーバを構成できました。
匿名アクセスの構成にあまり馴染みがなかったもので、セキュリティ保護のない接続ではステートフルFTPを有効化することを知らず、ハマってしまいました。備忘のためにまとめておきます。
それでは、また。