Windows ファイアーウォールの設定 - FTP

FTP では、サーバのコントロール用とデータ転送用に2つのコネクションを確立して通信するため、HTTP の場合と比較してファイアウォールの設定が複雑になります。Windows 7 では、受信の規則が事前定義されているのでそれを選択するだけで設定できますが、Vista では、自分で受信の規則を作成してやる必要があります。

FTP には、データ転送用のためのコネクションの確立方法に、アクティブモー ド、パッシブモードという2種類の方式があります。アクティブモードは、クライアントがサーバへ待ち受けIPアドレスとポート番号(デフォルトではポート 番号20)を通知し、サーバがクライアントから通知 されたIPアドレスのポート番号へコネクションを確立しに行きます。このとき、クライアント側では、データコネクションは外部から内部へ張られるため、 クライアント側のファイアーウォールの環境によってはうまく接続できないこともあります。パッシブモードの場合は、サーバがクライアントへ待ち受けポート番号を通知し、待ち受けポート番号の通知を受けたクライアントがサーバへコネクションを確立しに行きます。そのため、クライアント側のファイアーウォールの設定は不要です。FTP のプロトコルについては、以下のページにわかりやすく解説されているのでそちらを参考にしてください。

最も古い歴史をもつファイル転送プロトコル「FTP」(前編)
最も古い歴史をもつファイル転送プロトコル「FTP (後編)

以上のように説明すると、FTP サーバーでアクティブモードとパッシブモードの設定をするように思うのですが、FTP サービス 7.5 は、両方のモードに対応しており、FTP クライアントの要求によってどちらのモードを利用するかを決めているだけなので、ファイアーウォールを開ければどちらのモードでも接続することができます。

アクティブモードの場合、クライアント側のファイアーウォールのポートを開放する必要があります。このことが FTP サーバーをアクティブモードで公開する場合の大きな問題点です。通常の FTP であれば、最近の家庭用のブロードバンドルータがアクティブモードに対応しているケースが多いので使用することができますが、FTPS(FTP over SSL)を使用する場合は、ルータが対応していないので 501 Server cannot accept argument というようなエラーになって接続できません。

1. Windows 7 の場合

「コントロール パネル」、「システムとセキュリティ」、「Windows ファイアウォール」、「詳細設定」の順でクリックして、「セキュリティが強化された Windows ファイアウォール」を開きます。なお、[スタート]メニューのカスタマイズでシステム管理ツールを表示するように設定している場合は、「管理ツール」、 「セキュリティが強化された Windows ファイアウォール」で開くことができます。管理用のパソコンでは、[スタート]メニューのカスタマイズでシステム管理ツールを表示するように設定しておく と便利です。

左メニューで「受信の規則」を選択すると、受信の規則の一覧が表示されますが、一覧の中に、「FTP サーバー(FTP トラフィック)」が作成されているので、それを選択して、右クリックして、「規則の有効化」を選択して、規則を有効にします。FTP をパッシブモードで利用したい場合には、同様にして、「FTP Server Passive(FTP Passive Traffic-In)」も有効化します。以上の操作で、FTP サーバーのファイアウォールは開放できたはずですが、再起動しないとうまく有効化ができない場合があります。その場合は、「管理ツール」の「サービス」で Microsoft FTP Service を再起動します。
ftp08

2. Vista 及び Server 2008 の場合

「コントロール パネル」、「システムとセキュリティ」、「Windows ファイアウォール」、「詳細設定」の順でクリックして、「セキュリティが強化された Windows ファイアウォール」を開きます。なお、[スタート]メニューのカスタマイズでシステム管理ツールを表示するように設定している場合は、「管理ツール」、 「セキュリティが強化された Windows ファイアウォール」で開くことができます。管理用のパソコンでは、[スタート]メニューのカスタマイズでシステム管理ツールを表示するように設定しておく と便利です。

Vista では、FTP 関係の受信の規則が事前定義されていないので、新しい規則を作成します。

アクティブモードの場合は、以下の設定内容の受信の規則を作成して、接続を許可してやります。

  • プログラム: %windir%\system32\svchost.exe
  • サービス: Microsoft FTP Service (短い名前 ftpsvc)
  • プロトコルの種類: TCP
  • ローカルポート: 特定のポート 21

パッシブモードの場合は、特定のポート 1024-65535 だけを開ければいいのですが、Vista では ポートの区間設定ができないので、以下の設定内容の受信の規則を作成して、ftpsvc への接続についてはすべて許可してやるようにします。

  • プログラム: %windir%\system32\svchost.exe
  • サービス: Microsoft FTP Service (短い名前 ftpsvc)
  • プロトコルの種類: TCP
  • ローカルポート: すべてのポート

パッシブモードでFTTPS を使用しない場合は、アクティブモードの受信の規則と、以下のコマンドを実行して、ステートフル FTP フィルターを有効にすることで対応できます。(詳しくはMicrosoft の FTP ファイアウォール設定の構成のページを参照)

netsh advfirewall set global StatefulFtp enable

なお、FTTPS の場合は、ステートフル FTP フィルターが正しく動作しないので、この設定をしている場合は、以下のコマンドを実行してステートフル FTP フィルターを無効にする必要があります。

netsh advfirewall set global StatefulFtp disable

以下に、「セキュリティが強化された Windows ファイアウォール」を使用した設定の手順をメモしておきます。

2-1. 管理ツールから「セキュリティが強化された Windows ファイアウォール」を起動します。左パネルで「受信の規則」を選択すると以下の画面が表示されます。右パネルの「操作」の「受信の規則」で「新規の規則...」をクリックします。
ftp41

2-2. 「規則の種類」の画面が表示されるので、「カスタム」を選択します。
ftp42

2-3. 「プログラム」の画面が表示されるので、「このプログラムのパス」を選択して、「参照...」ボタンをクリックします。
ftp43

2-4. 「ファイルを開く」ダイアログが表示されるので、svchost.exe (フォルダは%windir%\system32)を選択して開くを選択します。
ftp44

2-5. 「プログラム」の画面に戻るので、「サービス」の「カスタマイズ」ボタンをクリックします。すると、以下の画面が表示されるので、「このサービスを適用する」を選択して、「Microsoft FTP Service」を選択して OK ボタンをクリックします。また、「プログラム」の画面に戻るので、「次へ」ボタンをクリックします。「Windows サービスは、想定されている動作のみを許可する規則によって制限されました。...」というワーニングが出ますが問題はないので 「はい」ボタンをクリックします。
ftp45

2-6. 「プロトコルおよびポート」の画面が表示されるので、「プロトコルの種類」の欄には、TCP を選択し、「ローカルポート」の欄では、アクティブモードの場合には、「特定のポート」を選択し 21 を入力し、パッシブモードの場合には「すべてのポート」のままにして、「次へ」ボタンをクリックします。
ftp46

2-7 「スコープ」、「操作」、「プロフィル」の画面については、既定のままで「次へ」ボタンをクリックし、「名前」の画面で適当な名前(以下の図では、「FTP サーバー」)をつけて OK ボタンをクリックします。「受信の規則」の画面に戻ったときに、作成した規則が表示され、規則が有効(緑色のボタン)になっていれば、設定は完了です。
ftp47