~部門サーバのWindows Server 2008への移行~
Windows Server 2008 β(以降、Windows Server 2008)に移行した部門のサーバ環境で、日々運用を行っています。そんな中、FTPクライアントを用いて何気ない操作を行ったところ、FTPサーバから応答がないという事がありました。この問題に対し、どのように調査し解決に至ったかを以下にまとめました。
Windows Server 2008に移行した部門サーバで、FTP.exe(FTPクライアントプログラム)を用いて、FTPサーバのデータを入手しようとFTPサーバへの接続を行いました。ところが、接続は正常に行えたものの、lsコマンドやdirコマンド(どちらもファイルやディレクトリ情報を表示するコマンド)入力後、いつまで経っても応答が返ってこない、という問題に遭遇しました。
図1 Windows Server 2008にてFTPコマンドls実行
様々なコマンドを試し、cdコマンドなど使用できるコマンドもありましたが、一部でこのような現象になることがわかりました。
FTPクライアント機能はUnixベースアプリケーション用サブシステム(「プログラムと機能」「機能の追加」選択しインストールします。以降、SUA)や、Internet Explorer(以降、IE)も有しています。ところが、これらは問題なく通信できたのです。運用OSがβ版であったため、もしや不具合なのでは?という疑念を持ち、問題の原因追究のためパケットを採取することにしました。
FTPでは制御に21番ポートを、データ転送に20番ポートを使用します。問題のケースは、FTPサーバがクライアントへ20番ポートを使用してデータ転送パケットを送信していましたが、その後のパケット出力がありませんでした。FTPサーバから応答がなかったのは、このように通信が途絶えていたためでした。そこで、Windows Server 2008の既定で有効となっているファイアウォールがブロックしているのでは、考えました。
この問題の対策として、Windowsファイアウォールの設定でFTP.exeを例外として登録し、ファイアウォールの対象からはずすことにしました。具体的には以下の操作です。
「コントロールパネル」「Windowsファイアウォールの設定」の「例外」タブ欄に、プログラムを追加登録します。ここで「プログラムの追加」を選択し、パスにC:\Windows\System32\FTP.exeを指定します。
図2 「例外」タブによるプログラムの追加
これによってFTP.exeはファイアウォールにブロックされることなく、通信できるようになりました。問題の発生するFTPコマンドは、FTPクライアントの要求に対し、FTPサーバからデータ転送されるため、ファイアウォールがパケットをブロックしていたのです。
なお、SUAとIEはパッシブモード(常にFTPクライアントから通信の接続要求を行う方法)で動作するプログラムであるため、ファイアウォールにブロックされることがありませんでした。
もし、Windows Server 2008がServerCoreならば、コマンドプロンプトからネットワーク設定や変更が出来るnetshコマンドを使用し、図2と同じ設定を行うことが可能です。
入力例
> netsh advfirewall firewall add rule name="AllowFTP.exe" dir=in program="C:\Windows\System32\FTP.exe" action=allow
ファイアウォールに関してWindows Vistaでも既定で有効であるため、Windows VistaでFTP.exeを使用したとき今回のようにブロックされることがあるはずです。なのに、なぜ問題にならないのか・・・、という疑問が残ります。
Windows Vistaの場合、このような事態に遭遇すると、ダイアログによるメッセージが通知されるのです。そのため、ユーザはファイアウォールによってブロックされていると気付くことができます。また、Windows XPの場合も同様にメッセージ通知されました。
図3 Windows XPによる通知画面
Windows XPやWindows Vistaでは図3のようなメッセージ通知がありますので、即座に対応することできますが、Windows Server 2008ではメッセージ通知がないため、すぐ原因に気付くことができませんでした。
このような悩みを解決するために、Windows Server 2008でもメッセージ通知の設定が可能です。図2の左画像「例外」タブの「Windows ファイアウォールによる新しいプログラムのブロック時に通知を受ける」にチェックを入れるだけです。
このチェックはWindows XP、Windows Vistaと同様にWindows Server 2003 R2でも既定でチェックが入っていますが、Windows Server 2008では入っていません。Windows Server 2008の変更点の一つとして認識しておくと、今後のトラブル対策に役立つでしょう。