FTPサーバの構築<War FTP Daemon(WarFTPD): WinNT系編>
〜 簡易インストール版 〜
War FTP Daemon(WarFTPD)では、1.81からはNAT対応がされており、WindowsでNATルータ越えのPASVサービスができるようになっています。これを受けて、動的IP対応用のスクリプト等を用意しましたが、設定ファイル(nat.conf)にホスト名が記述できることが判明したことと、標準版方式では設定が複雑なので、簡単にインストールができるようにしてみました。なお、動作としては標準版のタイプAと同じ動作になります。
WarFTPdは、ファイルアクセスまわりと、デーモンへのアクセスコントロールのデフォルト設定がおかしいので、うまく動かせない方が多いようなので、こちらに
基本的な使用方法をまとめてみました。
[ダウンロード]
WarFTPdの日本語化パッチやおやじが作成したスクリプト等を、
ダウンロードのページからダウンロードしてください。
[更新履歴]
日本語化パッチをWarFTPd 1.82.00RC1対応に変更しました。WarFTPd 1.82.00RC1は、アップデートもしくは単体でインストールできます。
(2003.03.28)
□ver 1.1〜1.4 (欠番)
□ver 1.5 (2003.03.01)
- 日本語化パッチをWarFTPd 1.81.4.0対応に変更。
□ver 2.0 (2003.03.28)
- 日本語化パッチをWarFTPd 1.82.00RC1対応に変更。
■動作環境
WarFTPdそのものは、9x系、NT系のOSに対応しています。本ページはNT系OS用ですので、注意願います。
- OS: WindowsNT、2000、XP
- CGI(Perl5)が利用可能なこと。
[お断り]
ここでは、おやじが使用しているWindows2000 Professionalベースで記述していますので、各人の環境に必ずしも合致しないと思います。適宜、ご自身の環境に合わせて適用可否をご判断ください。
■WarFTPdのインストール
WarFTPdは、
こちらから入手できますが、1.81-04-betaは1.71b02に対するパッチという形態で提供されており、両方をダウンロードしてください。英語はどうもと言われる方は、おやじの日本語化パッチ(IPアドレス変化検出用CGI、デフォルトnat.conf、crontabを含む)をダウンロードしてください。ファイルは以下のとおりです。
- 1.71b02 : Ward171b02-experimental-I386.exe
- 1.81b04 : warftpd-1.81-04-unstable-beta-i386-upgrade.zip
- 日本語化パッチ: warftpd1_81_04ja.lzh (warftpd1.81.04j.exe)
インストールは、上記の順に、ベースとなる1.71b02をインストールし、1.81b04のパッチをあて、最後に日本語化パッチをあてます。1.81b03からは、そのまま1.81b04のパッチをあて、最後に日本語化パッチをあてれば大丈夫です。
- ダウンロードしたWard171b02-experimental-I386.exeを実行し、1.71b02をインストールする。ファイルは自己解凍形式の圧縮ファイルになっており、実行すると解凍されると共にインストーラが起動するので、指示に従いインストールする。
途中で、いろいろ聞かれるが、基本的にはデフォルトのままで問題はない。設定項目は、以下のとおりであり、基本部以外はインストール後でも変更は可能である。
- インストール方法
デフォルトの「Normal install(for most users)」のままとすること。
- スタートメニューへの追加
デフォルトのまま追加する。
- ログオン時に表示するサーバ名
後でも変更可能なので、そのままでも良い。
- 管理者のEメールアドレス
管理者のEメールアドレスを指定する。
- 1.81b04へのアップグレード
引き続き、ダウンロードしたwarftpd-1.81-04-unstable-beta-i386-upgrade.zipを解凍し、1.81b04へアップグレードする。解凍してできた全てのファイル(厳密には、*.txt、nat.conf.sampleは不要。SQLとODBC関係をコピーするとアプリケーションエラーが出るので、コピーしないこと。)を1.71b02をインストールしたディレクトリ配下(ex. C:\Program Files\War-ftpd)に上書きコピーする。1.71b02を残しておきたければ、あらかじめインストールしたディレクトリ配下にある上書きされるファイルをいずれかにコピーするか、リネームしておくと良い。
- 日本語化
おやじのパッチのVer1.2以降の場合は、下記手順で日本語化パッチ(warftpd1.81.04j.exe)をあててください。
- War Daemon managerの画面が開いていたら、閉じる。
- WarFTPdをインストールしたディレクトリ配下(ex. C:\Program Files\War-ftpd。WDM.exeと同じフォルダ)にwarftpd1.81.04j.exeをコピーし実行する。
以上で、インストールは完了である。ここで、サービスを再起動すると、1.81b04の日本語版が起動し、インストール時の条件で使用可能状態になっている。
以降、各種設定を行うが、WarFTPdはデーモンを直接操作するのではなく、War
Daemon Managerを介して行う。War Daemon Managerはタスクトレイのアイコンを右クリックし、「Start
Manager」で起動する。ログインプロパティはユーザIDがSysadminになっているので、とりあえずインストール時に入力したパスワードを入力しWar
Daemon Managerに入る。
今回は、情報提供を優先しており、設定はいじっていればある程度判るので、設定に関しては省略しています。追っかけ準備したいと思っていますが、おやじ自身がLinuxユーザのため、ご利用になった方がアップしていただくとありがたいのですが。リンクさせていただきます。
■NATルータへの対応
最近は、いくつかのメーカや機種で本設定を行わなくても
ルータで同等の対応を行うものが増えてきているので、まずは、本設定を行わずにPASVを動かしてみるとよい。対応済みルータで本設定を行うと逆にLISTで止まるようになるので注意が必要です。
WarFTPdでは、WarFTPdがインストールされているディレクトリ内に、アドレス運用条件を記述した「nat.conf」を置くことにより、いろいろな制御ができます。但し、このnat.confをWarFTPdが読み込み反映するのは、自身が動作しているマシンのIPアドレスが変化したときと、サービス起動された時のみです。従って、前者はNATルータ配下に置かれた自宅サーバでは通常考えられないので、後者を利用することにより、動的IPサービスでもNATルータ配下でのPASVでのFTPサーバ公開ができるようにしてみました。
nat.confで制御できるのは、アクセスしてきたリモート端末のアドレス(Remote
IP range)に応じて、以下の項目が制御できる。
- Activeモード(PORTモード)時のデータコネクション用ポート(Port:デフォルト20番)
- PASVモード時にクライアントに通知する待ち受けアドレス(Host Address)
- そのときに利用する待ち受けポートの範囲(Port-range)
サンプルファイル(nat.conf.sample)が、ダウンロードしたwarftpd-1.81-04-unstable-beta-i386-upgrade.zipの中にありますが、これを使用せず、一部をCGIで使うように変更したおやじのnat.confが上記のwarftpd1_81_04ja.lzhの解凍操作で、WarFTPdをインストールしたディレクトリに解凍されますので、それを利用してください。(デフォルトのnat.confではCGIが動きません)おやじのnat.confの設定内容を示しますが、設定内容は、Remote
IP range毎に1行書く形式になっています。
- 1行目(変更不要)
1行目は、localhostに関するもので、Portはデフォルトの20番でなんら問題がないためデフォルトを示す「0」のままとする。Host
Addressもデフォルトのままとする。Port-rangeもデフォルトとなっており、この場合、1024〜65535の範囲で空いているポートが利用される。
- 2行目(家庭内のアドレス体系に合わせ、Remote IP rangeのみを変更)
2行目は、家庭内のLANに関するもので現在のアドレス体系に合わせRemote IP rangeでアドレスとネットマスクを変更する必要がある。デフォルトは「192.168.0.0/255.255.255.0」になっている。Portはデフォルトの20番でなんら問題がないためデフォルトを示す「0」のままとする。Host
Address、Port-rangeもデフォルトのままとする。
- 3行目(ルータの設定に合わせ、Port-rangeのみを変更)
3行目は、上記2行で指定した範囲外のアドレス(通常はWANからくるグローバルアドレスに対するもので、Remote
IP rangeは「0/0」のまま変更してはならない。Portはデフォルトの20番でなんら問題がないためデフォルトを示す「0」のままとする。Host
Addressは、固定IPサービスならWAN側アドレスが変化しないので、そのアドレスを記述すればよい。
動的IPの場合は、ここに記載されたホスト名からDNSを牽いて得られるグローバルアドレスでWarFTPdおよびおやじのCGIが動作する。従って、ここをおやじのホスト名「exampleftp.zive.net」から、自分のホスト名(*)に書き換える。Port-rangeは、ここで指定したポートに向かって、WAN側から通信が始まる、即ちWWWサーバにアクセスしてくるのと同じ動作のため、ルータでのスタティックNATとフィルタリングの設定が必要となる。このポートはパケット・バイ・パケットで使いまわしされるので、同時接続セッション数+αだけあれば十分なので、セキュリティのことも考え不必要に拡大しないこと。おやじのnat.confでは、4000-4029の30セッション分を確保してある。
*: ここで、記載するホスト名は、現在のNATルータのWAN側に付与されたグローバルアドレスをDNSから取得するのが目的なので、サーバ機でhostsファイルでドメイン名をサーバ機のローカルアドレスに変換したり、内向きDNSでローカルアドレスに変換されてしまうと役に立たない。従って、これらの設定を削除するか、おやじのようにFTP専用のホスト名(exampleftp.zive.net)を取得するなどして、グローバルアドレスが牽けるホスト名を設定すること。
- 4行目(おやじがCGI用に追加したもの。変更不可)
ここは、WarFTPdにとってはコメント行になるが、CGIで前回検出したIPアドレスを書き込むワークエリアであり、変更不可。(テスト時に強制的に、ここのアドレスを書き換えると、実際のアドレスは変化していないが変化したものとしてCGIが動作するので試験用に書き換えは可能。変更は可能だが、アドレスの形態は崩さないこと。)
■動的IPサービスでの対応
動的IPサービスを利用していると、ある日突然、WAN側のアドレスが変わってしまう。WarFTPdは、nat.confでNATルータ対応ができますが、WAN側アドレス変化に追従できないので、IPアドレスの変化を検出し、新しいグローバルアドレスを認識させるためWarFTPdを再起動するCGIを用意しました。このCGIはwarftpd1_81_04ja.lzhを解凍し、WarFTPdをインストールしたディレクトリ内にコピーしてください。
[CGI設定項目]
設定は、いずれも、先頭のパラメータのところだけですが、特に変更は不要のはずです。
ログディレクトリをシステムをインストールしたドライブ以外にする場合は、「D:/log/」のようにドライブ名を先頭につけてください。
・$log_dir = "/program files/war-ftpd/"; # ログディレクトリ(なるべく変更しないこと。ファイル名はwarftpd.log)
・$debug = 0; # デバッグ用詳細ログ(0/1=No/Yes) 1(yes):エラー発生時にログをとる。
・$logcnt = 50; # 最大ログ数
・$sleep = 300; #
IP変化の監視周期(秒)
■CGIの自動起動の設定(周期的なIPアドレス監視)
標準版では周期的(5分毎)な監視をCRONからCGIを起動するようにしていますが、簡易版では簡略化し、CGIを起動すればCGIで指定したパラメイータの間隔でIPアドレスの変化を検出するようにしました。従ってCRONのインストールは不要であり、スタートアップにこのCGI(ipcheck.cgi)を登録すれば、サーバ起動時に起動され監視が開始されます。スタートアップへの登録は、以下のとおりです。(Windows2000
Professionalベースです。)タスクスケジューラで登録したほうが、スマートかも知れません。
- 「スタート」->「設定」->「タスクバーと[スタート]メニュー」で「タスクバーと[スタート]メニューのプロパティ」を開く。
- 「詳細」タブを開き、「追加」を押すと「ショートカットの作成」ダイアログがでるので、指示に従い設定していく。
- 「参照」を押し、ip_check.cgi(ex. "C:\Program Files\War-ftpd\ip_check.cgi")を選択して「OK」を押すと、CGIへのパスが表示される。バックグラウンドで動作させるため、先頭に「wperl」を追加し、「wperl
"C:\Program Files\War-ftpd\ip_check.cgi"」とし、次に進む。
- 「次へ」で「フォルダの参照」画面になるので、「スタートアップ」を選択し「次へ」を押す。
- 「名前の指定」画面になるので、適当な名前を付けて、「完了」を押す。
- 「スタート」->「プログラム」->「スタートアップ」で登録したショートカットの上で右クリックしプロパティを開く。「ショートカット」タブの「実行時の大きさ」で「最小化」を選択s、「OK」を押す。(本操作は、ウインドウが邪魔なら閉じるので不要とも思えるので、各人の好みでどうぞ)
以上の設定が、できたらシステムを再起動すれば、ip_check.cgiが起動され、以降5分毎に監視されるが、初回時にnat.conf内の4行目のアドレスが更新され、WarFTPdが再起動されるはずである。ログも確認してください。
全ての設定が完了したら、まず、ローカルで十分試験をしてください。問題がなく動作していることが確認できたら、おやじの
FTPサーバテストでテストして、外部からも使用できるか確認してください。
[関連付け]
拡張子毎に、Explore等で開く操作をしたときどのプログラムで開くか「関連付け」で指定している。(開くだけではないが)perlをインストールしただけでは、cgiという拡張子は関連付けはされていない。cgiという拡張子をperlに関連付ける方法を、以下に示す。
- Explorerでその拡張子のファイル(何でもいいが、ここではip_check.cgi)の上で、右クリックし、「アプリケーションから開く」->「プログラムの選択」をクリックすると、「ファイルを開くアプリケーションの選択」画面が開く。
- ここで、メニューの中からperlを選択するが、通常は無いので「その他」を選択し、perlをインストールしたディレクトリ内の「perl.exe」を選択し「開く」を押す。
- 元の画面で、perlが選択されていることを確認し、「これらのファイルを開くときは、いつもこのアプリケーションを使う」にチェックマークを入れ、「OK」を押す。
デフォルトのままでは、WarFTPd起動時に以下のようなエラーがでます。
[war_error_logger] Exception from line 117 in file "C:\devel\current\war182_stable\jgaadb\src\DbConnection.cpp":
Database error in module "DbConnection::Connect()" SQLDriverConnect(SQL_HANDLE_DBC)
failed. SQL state = "IM002" Native Error = "0" : "[Microsoft][ODBC
Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。" |
これは、WarFTPdがデータベースにログ(セッションとファイル・イベント)を書くことができるようになっており、データベースが無いのにこの機能がデフォルトでonになっているので発生するエラーです。
エラーが出ないようにする対策方法は2つあり、一つはデータベースを使用しないようにする方法(方法1)であり、もう一つはデータベースを用意する方法(方法2)です。特段理由がなければ、簡単なので方法1で機能停止すればよいと思います。
◆[方法1]:データベースを使用しないようにする方法
- 「サーバ」->「アドバンスサーバプロパティ」を開く。
- 「odbc_SOURCE」にデフォルトで設定されている「<default>」を消してブランクにし、「設定」を押下して反映させる。
- WarFTPDを再起動させ、エラーが出ないことを確認する。
◆[方法2]:データベースを用意する方法
- コンソールパネルから「管理ツール」->「データソース(ODBC)」を開く。
- 「システムDSN」を選択する。
- 「追加」でデータソースドライバとして「Microsoft Access driver(*.mdb)」を選択して「完了」を押下する。
- 「データソース名」に「WARSVR」、説明に「WarFTPD(適当に)」と入力する。
- 続けて、「データベース」で「選択」を押して、WarFTPDのインストールフォルダ内にあるの「warsvr.mdb」を選択して「OK」を押して、セットアップ画面で再度「OK」を押す。
- アドミニストレータ画面で「OK」を押してデータベースを作成する。
- 最後に、 WarFTPDを再起動させ、エラーが出ないことを確認する。 以降、「warsvr.mdb」にログが収集される。
Top Pageへ