2008-08-13

SonicWALL を使った Site-to-Site VPN の構築

 VPN ルータ同士を接続して常時 VPN 接続を確立することを Site-to-Site VPN と言いますが、最近弊社では SonicWALL 同士の Site-to-Site VPN 接続の設定テストを行っています。

 VPN ルータが各終点に一つずつの場合は、比較的設定は容易です。
 基本的には VPN のポリシー設定で「主格 IPSec ゲートウェイ名またはアドレス」に対岸のルータアドレス(ゲートウェイアドレス)を入力し、「事前共有鍵」に任意の共有鍵コード(両方のルータに同じ共有鍵を設定)を指定し、そして「対象先のネットワーク」に対岸 LAN のネットワーク(たとえば 192.168.3.0)とサブネットマスクを指定するだけです。

 しかし、ネットワークが落ちたりすると業務に支障が出るような環境では、回線を複数用意しているところもあります。そのようなときに、現用回線と予備回線の両方に対して VPN トンネルを張っておき、現用回線がダウンしたときに予備回線の VPN トンネルを使うことがあります。これを冗長 VPN ゲートウェイと呼んでいるそうですが、この設定は、理屈では「主格 IPSec ゲートウェイ名またはアドレス」に現用回線のルータアドレス、「副格 IPSec ゲートウェイ名またはアドレス」に予備回線のルータアドレスを指定すれば動くということになっているのですが、何故か副格ゲートウェイの方だけが採用されている状態となりました。主格の方が無視されている状態なので、現在この原因について調査中です。

2008-08-04

Windows Server 2008 の TS EasyPrint について

 前回の投稿に引き続き、今回は Windows Server 2008 の TS EasyPrint の動作を検証してみました。
 TS EasyPrint とは、リモートセッションが確立されている場合に、クライアント側のローカルプリンタを使って印刷が可能となるものです。従来は、サーバ側にもクライアントのドライバをインストールしておき、プリンタポートマッピング設定をしておく必要があったのですが、TS EasyPrint ではユーザによるプリンタポートマッピングが不要となるため、ドライバをサーバ側に入れなくても良い、というシナリオになるのでしょう。TS クライアントは Windows Vista SP1 であることが最低条件のようですが。

 上記に従って、VPN 経由で TS 接続を行い、プリンタ情報を見てみると、最初のうちはクライアント側プリンタ 2 台のうち 1 台(Canon BJ 895PD)が「リダイレクトされた」という表現でサーバ側に表示されていることを確認できました。このプリンタを使ってテストページ印刷には成功しました。
 しかし、もう一台のプリンタ(Dell All-in-one Printer 810)は表示されることがなく、ポート設定をいろいろ弄ってやってみたのですが、努力空しくこちらの EasyPrint は実現しませんでした。

 そうこうしているうちに、Canon BJ 895PD も出てこなくなり、TS EasyPrint の不安定感が募ってきました。ひょっとすると VPN 経由だと不安定になる可能性が高くなるのかもしれません。

 この辺はもうすこし研究課題にしたいと思います。

参考:
Windows Server 2008 のターミナル サービス

2008-07-28

Windows Server 2008 のインストールと Terminal Service 設定

 Windows Server 2008 を弊社にもインストールしてみました。対象サーバ機は Dell PowerEdge SC440 です。
 インストール自体はものの 30 分もあればできたのですが、最初の Administrator パスワード指定でちょっと手こずりました。Windows Server 2008 では、ローカルセキュリティポリシーの「パスワードは複雑さの要件を満たす必要がある」が有効に設定されているため、以下の条件を満たすようにパスワードを決定する必要があります。そしてようやくログインに成功。

 ユーザーのアカウント名またはフルネームに含まれる 3 文字以上連続する文字列を使用しない。
 長さは 6 文字以上にする。
 以下の 4 つのうち 3 つの条件を満たす必要あり。
   英大文字(A ~ Z)
   英小文字(a ~ z)
   10進数の数字(0~9)
   アルファベット以外の文字(!、$、#、%など)


 次にリモートデスクトップ接続を有効にするための機能を設定しました。ターミナルサーバーのインストールですが、サーバマネージャの「役割」というメニュー項目から追加します。
役割
 今回はターミナルサーバー、TS ライセンス、TS Web アクセスをインストールしました。
 
 さて設定ですが、ちょっと勉強が必要になってしまいました。
 RDP --- Terminal Service もしくはリモートデスクトップ接続を従来のように使えるようにするが、セキュリティレベルは落ちる。
 ネゴシエート --- クライアント側で SSL が有効になっている場合は SSL を使って接続するが、有効になっていない場合には RDP を使う。
 SSL(TLS 1.0) --- 常に SSL を使って接続する。

 ネゴシエートにしておけば、従来の TS/リモートデスクトップ接続と Windows Server 2008/Vista 対応の TS/リモートデスクトップ共有を混在させることができる模様です。ただ、SSL に特化すればおそらくセキュリティが一番高くなるのでこれができることに越したことはないと思います。

 SSL を使えるようにするには、TS/リモートデスクトップ接続のクライアント側がリモートデスクトッププロトコル 6.1 をサポートしている必要があります。この条件を満たすクライアントは次のとおりです。

 Windows Server 2008
 Windows Vista with Service Pack 1
 Windows XP with Service Pack 3
 
 ただし、XP with Service Pack 3 の場合は、ネットワークレベル認証がサポートされていないため、ターミナルサーバ構成で「ネットワークレベル認証でリモートデスクトップを実行しているコンピュータからのみ接続を許可する」のチェックを外しておく必要があります。
RDP-Tcp

2008-07-18

カラーレーザープリンタの奇怪

かれこれ5、6年前に約2万円で購入し、八面六臂の活躍をしたBJ S600 がそろそろポシャりそうなので、価格に手頃感がでてきたカラーレーザープリンタを購入しようかなと思い、調べて見ました。 すると、なんか奇奇怪怪な世界。

というのは、Brother MFC-9420cnという機種の本体(カラー3色と黒1色の計4本のトナー付、以下、トナー4本、と言う)の価格が、トナー4本より安い。 よくよく説明を見ると、購入時付属のトナーはスターターうんたらという減量されたものらしい。 「これじゃ、客はわかんないよ」と思いつつ、他のメーカーの低価格機も価格.comで調べてみると、トナー4本(6000枚程度印刷)で本体の半分~全額ちょっと欠ける位の価格になってしまう。 さらに、トナー以外の消耗品として、ドラムとか感光体うんたらとか、メンテナンスキットとか、うんたらベルトとか、メーカー毎に異なる様々なものがあり、しかも耐久期間もまちまち。 確かに公称のページ当たりの印刷コスト項目はあるのだけれども、これにドラムやらその他の消耗品の価格が反映されているのだろうかと不安になってくる。 で、当初どれが一番お買い得なのか?と思って作ったプリンタ比較表も、なんかあまり役に立ちそうもないような気がしてくる(この表に興味のある方は→これ)。 本体に対してトナーの価格が高く、奇怪な消耗品が数々あると迷路に入り込んだ気分。 トナーだけ買い換えて、ドラムやその他の高い消耗品の購入を迫られる段になったら、(エコは差し置いて)新機種に買い換えるのが一番経済的なような気もしてくる。 そもそも「レーザープリンタはインクジェットよりランニングコストが低い」と巷に言われる大前提も疑わしく思えて…

どうしようかなぁ?と迷っているところに、目に飛び込んできたのが、HP Officejet Pro K8600dn というインクジェット機。 Web記事によると、A4カラー1枚の印刷コストが6.3円、カラー印刷時35枚/分の高速、その他のスペックを比較してみても、レーザープリンタに勝るとも劣らない。 レーザープリンタと違って、よくわからない消耗品もない、少なくとも書いてはいない。

HP Officejet Pro K8600dn



ということで、K8600dnを購入することになりました。 吉と出るか、凶と出るかお楽しみ。 


(土屋)

2008-07-11

【応用その4】FX.php を使ってアンケートフォームを MySQL 対応にしてみる

 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 *FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。

 FX.php は MySQL データベースへの接続にも対応しているため、アンケートフォーム作成の延長として、今回は既存のコードに MySQL データベースへのデータ書込機能を実装してみることにします。

 * 操作にあたっては、MySQL Server がインストールされていることが前提となりますので、予め MySQL Server のインストールと、文字化け対策のためにデフォルト文字セット(utf8)が有効になるように設定しておいてください。

 まずは、データベースを準備します。付属の create_table.php の $rootPass に MySQL の root パスワードを設定して同スクリプトを保存し、local の web サーバで実行してみてください。Comment データベース、cgi テーブル、webuser とそのパスワードが生成されます。作成するテーブル列は、create_table.php を参照してください。
 
 以下、次の順に Comment.php へコードを追加していきます。
1.使用するデータベース種別を MySQL にします。
データベース種別

2.接続先の MySQL サーバポート番号を指定します。デフォルトは 3306 です。
MySQL ポート番号

3. あとは既存の FX.php 接続とほぼ同じですが、最後のデータ書き込みのところで、FMNew() の代わりに PerformSQLQuery() 関数を使います。引数は第一パラメータに SQL クエリ文を指定し、残りはデフォルト値を指定します。

 PerformSQLQuery($query,true,false,'object');

 この部分をコードで表したものが次のとおりです。(列名)と値を使って $query SQL クエリ文をセットし、次の PerformSQLQuery で指定して実行します。
query

 FX.php & MySQL の組み合わせで実行可能になっているコードを Comment_mysql.php に用意してありますので、併せて確認してみてください。

参考リンク:
MySQL オフィシャルサイト

2008-07-09

【応用その3】アンケートフォームにセッションを追加してみる(リロード対策)

 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 *FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。

 PHP 経由で FileMaker データベースにデータ書込を行う手法として、簡易アンケートフォームの作り方をベースに説明を進めてきました。
 すでにお気付きの方もいらっしゃるとは思いますが、実はこのままでは実際の運用には不向きな部分があります。

 それは、最後のお礼ページです。
 このページが表示される直前に FileMaker データベースへのデータ書込とメール送信を同時に行うわけですが、Web ブラウザのリロードボタンを押してページをロードするたびに同処理が実行されてしまうため、ゴミデータとゴミメールが増えてしまう可能性があります。
 実際問題として、お礼のページをリロードしてしまうユーザも結構多かったりするので、リロード操作が行われてもデータ送信、メール送信は一回だけ実行するような仕組みが必要となります。

 これを効率よく処理する方法として、PHP のセッションをここで組み込んでみることにします。
 PHP のセッションはスーパーグローバル配列と呼ばれ、読み込まれたページにかかわらず値を保持しておくことができるものです。FileMaker のグローバル変数に共通している部分もあるので、そう捉えると理解しやすいと思います。

 ユーザによるページリロード対策は、データ書込とメール送信が行われたかどうかを判断し、それが No なら書込・メール送信を許可、Yes なら不可にすればよいわけです。これをフラグを使って表現するとさらに明確になります。仮にフラグ名 を done フラグとしましょう。

 未書込の状態 --- done フラグはオフ (FALSE、偽)
 書込済の状態 --- done フラグはオン (TRUE、真)

 done フラグがオフ(FALSE)のときに書き込みを実行し、その操作が終わったら done フラグをオン(TRUE) にします。

 この値をセッションに入れておくことで、ページが何度リロードされても呼び出しはセッションから行うため、一度オンになったフラグはオフになることはありません。

 この処理を PHP で記述すると次のようになります。
1. セッションの開始と有効期限を決めます。
セッション開始
 セッションの有効期限のデフォルトは 180 分ですが、簡易アンケートで特に詳細な確認が必要なわけではないため、ここでは有効期限を 5 分にしています。5 分経過するとセッションは破棄されて無効となり、その後にページをリロードすると、白紙のページが表示されるようになります。
 session_start() 関数でセッションを開始するわけですが、この関数は、セッションが存在しない場合は、新たにセッションを作成します。これに対し、セッションがすでに存在している場合はそのセッションを再度呼び出します。つまり、このアンケートフォームで言えば、最初にアンケート入力フォームのロードを行った時点でセッションの作成を行い、それ以降、ページがロードされたり次のステップに進むたびに session_start() 関数から同一のセッションを呼び出すわけです。

2. 次に、done フラグの初期化を行います。
セッション初期化
 初回ページロード時に一度だけ done フラグに FALSE (データベースへの書込とメール送信が行われていない状態)をセットします。

3. お礼のページを出すときに、done フラグが FALSE であることを確認し、それに該当すれば FileMaker データベースへのデータ書込とメール送信を行い、その後に done フラグに TRUE (データベースへの書込とメール送信が完了した状態)をセットします。
 以下、赤線を引いた部分に注目してください(コードが長いため、中略を入れてあります)。
done フラグのセット

 これでセッションの実装が終わりました。サンプルコードを使って動作を確認してみてください。

2008-07-08

SonicWall Total Securityによる回線速度低下

 SonicWall Total Security(以下、SonicWall)を導入し、セキュリティ関連の設定をした後に、回線速度のチェックをすると、導入前に比べて回線速度が低下していることに愕然とするかもしれません。しかし、外部から渡ってきたパケットの精査が SonicWall の機能であり、その精査に費やされる処理時間のことを考慮すれば、回線速度が低下するのは当然と言えば当然なのでしょう。

 以下、SonicWall のセキュリティ機能で、速度低下が著しいものとそうでないものを調べてみました。

  • 導入すると極端に速度が落ちるもの
    アンチスパイウェア
    侵入防御 (IPS)

  • 若干速度が落ちるもの
    電子メールフィルタ
    ゲートウェイ アンチウィルス

  • さほど速度が低下しないもの
    コンテンツフィルタ


 もちろん、セキュリティ対策としてできるだけ多くのサービスを有効にしておくのが望ましいと思いますが、社内で利用しているネットワークサービスが使用に耐えられなくなるほど回線速度が落ちてしまうのでは、あまり実用的ではないでしょう。
 社内のネットワーク運用に最も適したサービス設定を行い、セキュリティをどうしても向上させる必要があるのなら、回線そのものの品質をアップグレードさせるのが現実的な運用方法と言えるかもしれません。

2008-07-04

SonicWall Global VPN Client のインストールが失敗したり、クラッシュしてしまうときのちょっとした改善案

 SonicWall には仮想プライベートネットワーク機能(VPN: Virtual Private Network, 以降 VPN)が搭載されているので、SonicWall を購入して VPN ライセンスを購入することによって、VPN 公開ができるようになります。
 この SonicWall VPN にアクセスするためには、クライアントとなるコンピュータに SonicWall Global VPN Client (以降 SWGVC)をインストールと接続設定を行う必要があります。

 インストーラを実行して指示に従えば終わりというパターンが通常で、アプリケーションを使うほとんどのユーザがそのような感覚でインストーラを実行していると思います。
 しかし、最近の FileMaker Server 9 のインストールトラブルのように、物によってはスムーズにインストールできないものもあるので、すぐできて当然という安易な姿勢で臨むと泣きを見る羽目になることもあったりします。

 SWGVC もなかなか癖のあるソフトウェアと言え、マシン環境によってはすんなりインストールできたり、インストール初っ端から躓いたり、設定の段階で躓いたりと結構トラブルに見舞われため、ここでその経験談をまとめてみることにします。

  1. 最初のインストールで躓くとき
     SWGVC をインストールした直後に起動しようとすると、SWGVC のレジストリ登録に失敗したというメッセージが出て失敗することがあります。こうなると、起動は絶対にできないので、一度 SWGVC をアンインストールし、さらにレジストリ情報を消去するプログラム SWVPNClientClean.exe を実行してから完全にインストール情報を消去した上で、SWGVC を再インストールする必要があります。

  2. SonicWall にアクセスできないとき
     ピア IP アドレス(SonicWall の IP アドレス)を正しく設定し、接続ユーザ名とパスワードを正しく指定したにもかかわらず、ステータスが接続中だったり、IP アドレス取得中のままになってしまうことがあります。ログを見ると、"The peer is not responding to phase 1 ISAKMP requests." が残っていることがあります。
     この場合は、SWGVC の Peers タブより、LAN Settings にクライアントネットワーク側のルータ IP アドレスを入力したり、NAT Traversal を 「Disabled」、Interface Selection を「LAN Only」に変更することによって改善することがあります。
    SWGVC
    参考リンク:
    SonicWall VPN Client Doesn't Work Behind NAT Firewall(英文)
    Sonicwall - The peer is not responding to phase 1 ISAKMP requests(英文)
    NAT Firewall on router blocking sonicwall VPN?(英文)
    NAT Firewall on router blocking sonicwall VPN...(英文)

  3. 接続が確立された直後に SWGVC がクラッシュするとき
     これが一番厄介だと思います。今のところ Windows XP Service Pack 2 で発生する可能性が高いことは経験からわかってきたのですが、すべての同様の環境で発生するとも言い切れず、このような現象が発生するコンピュータでは、SWGVC のインストール、アンインストールを繰り返したところで症状が改善することはまずないでしょう。
     しかし先日、客先でどうしてもこのような現象が発生する SWGVC を動かす必要があり、苦し紛れですが Windows 互換モードで実行することにより事なきを得ました。以下、方法を簡単に説明します。
     1) 今までどおり SWGVC を実行させてVPN 接続を行い、Connected が出た直後に SWGVC がクラッシュすることを確認します。
     2) SWGVC のプログラムアイコンを右クリックして「プロパティ」を選択し、表示されるダイアログより「互換性」タブをクリックします。そこで「互換モードで実行する」にチェックを付けて、以前の OS のリストの中からできるだけ最新のものを選択して実行してみます。
    Windows 互換モード
     この方法で、今のところ Windows 98/Windows ME の互換モードで実行に成功しています。今までいろいろ試してみたが、クラッシュしてどうにもならないという方はダメ元で試してみる価値はあると思います。

【応用その2】FX.php を使ったアンケートフォーム作成 --- 従来のファイルメーカー Pro データベースで Web アプリケーション作成

 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 *FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。
 
 さて前回の FX.php 解説に引き続き、今回は FX.php を使って従来の FileMaker データベースにアクセスする方法について触れてみることにします。今回もまた、今まで使ってきたアンケートフォームにちょっと修正を入れるだけです。アンケートフォーム作成のおさらいが必要な方は、こちらを先にご覧ください。

 FileMaker API for PHP を利用するためには、FileMaker Pro 9 と FileMaker Server 9 がインストールされていることが条件となるため、従来に比べるとコスト的に敷居が高くなってきています。安定したデータサーバ運用を目指すのなら、もちろんこれらを導入するのが確実ですが、FileMaker Pro 5.x/6 で機能的に十分に満足している方には、ちょっと手が出にくいパッケージであることも確かでしょう。

 そこで、FX.php と FileMaker Pro 5.x/6 の Web コンパニオンプラグインを組み合わせてもデータベースへの書き込みを実現できるため、既存のシステムをそのまま Web 公開データベースとして活かすことも可能となります。
 ただし、通常版は 10 アクセスユーザ数(10 IP アドレス)という制限が伴うため、現実的な運用にあたっては FileMaker Pro 5.x/6 Unlimited が必要になることは注記しておきたいと思います。

 それでは実際に既存のサンプルコードを修正していくことにしましょう。
 処理は前回の FX.php 接続とほぼ同じですが、今回はそれに加え、文字コードの変換が必要となります。
 FileMaker Pro 9 では内部コードを UTF-8 で処理しているため、ソースが UTF-8 で記述されていれば問題はなかったのですが、FileMaker Pro 5.x/6 では内部コードを Shift-JIS で扱うため、このままデータを送るとエラーが起こったり、文字化けが発生してしまいます。

 そこで、今までの処理に文字コード処理を追加します。

  1. FX を使用することを宣言する(FX インスタンスを作成する)。

  2. 使用するデータベース名とレイアウト名を指定する。

  3. 使用するユーザ名とパスワードを指定する。

  4. データ送信時の文字コードを Shift-JIS に変換する。

  5. 追加するフィールドと、そのデータを指定する。

  6. レコード追加を実行する。



 上記を FX.php の記述規則に従って置き換えると、次のようになります。

 赤線を引いた部分と、赤で囲った部分が前回と異なってはいますが、その他はすべて同じです。
 指定の通り、FX インスタンス作成時に、使用するデータソース(データベース)が FileMaker Pro5.x/6 であることを知らせます。
 そして、データ送信前に文字コードセットを UTF-8 から Shift-JIS(SJIS) に置き換えます。

 ただし、FMP7/8/8.5/9 に対してこの文字コード変換を行うとデータ書き込みに失敗してしまうため、必要に応じて、データソースが FMPro5/6 のときだけ文字コード変換を行うという条件を追加する必要があります。
 この条件を追加するとこのようになります。

 変数 $databaseType には、コードの最初の方で予め "FMPro9" もしくは "FMPro5/6" のいずれかを設定しておきます。こうしておくことによって、使用するデータソースに応じて処理を切り替えられるので便利です。
 ソースの詳細は、サンプルコードをご覧になってみてください。

 先に PHP ソースについて解説しましたが、最後に FileMaker Pro 5.x/6 データベースファイルの作成と設定方法について説明します。

1. データベースファイルを作成します。FileMaker Pro 5.x/6 を起動し、Comment.fp5 というファイルを作成し、以下のフィールドを作成します。

 [RecID]、[作成日]、[作成アカウント]、[修正日]、[修正アカウント]は管理用のフィールドですが、作成しておくと便利でしょう。

2. レイアウト名を cgi に変更します。
3. 「アプリケーション環境設定」ダイアログを出し、プラグイン一覧より、Web コンパニオンにチェックを付けて「設定」ダイアログを開きます。

 セキュリティに「ファイルメーカー Pro アクセス権」を指定し、TCP/IP ポート番号に 80、もしくは 591 を指定します。

4. ファイルの共有設定で、以下のようにチェックを付けることによって Web コンパニオンを公開します。


5. パスワードを指定します。図のように、web というパスワードを作成し、web で公開させる最低限のアクセス権を決めます。

 この他にフルアクセスを許可するパスワードが必要となりますので、ここでは Admin を作成してあります。

 以上で準備が整いました。
 FMPro5/6 用の設定を施した comment_fp5.php というファイルをサンプルに用意してありますので、参照してみてください。

参考: FX.php vs FileMaker API Benchmarks Discussion(英文)

2008-07-03

【応用その1】FX.php を使ったアンケートフォーム作成

 本記事は2008年に FileMaker 9 の環境下で執筆されました。2016年11月現在、FileMaker の最新バージョンは 15 となっていますが、15 においても本記事の内容はなお有効と思われます。
 一方Ver 15 では WebDirect と呼ばれる 機能があり、これにより PHP などで Webプログラミングを行うことなく、 FileMaker デスクトップアプリとほぼ同様の操作がブラウザ上でも可能となります。WebDirect は開発が非常に楽になる半面、ライセンス費用やブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し、ブラウザ互換性をある程度無視できる環境では WebDirect は FX.php の代替となる可能性があります。

 参考: アンケートシステム・プロトタイプ


 *FileMaker API for PHP を使ったアンケートフォーム作成をお読みになっていない方は、先にこちらをご覧ください。

 さて、前回まで 4 回にわたって FileMaker API for PHP によるアンケートフォームの作成方法を解説してきましたが、今回はさらに FX.php による FileMaker データベースアクセス機能も実装してみることにします。

 FX.phpiViking.org によって無償で提供されている FileMaker アクセスクラス群で、FileMaker Pro 5~ 9 に幅広く対応しているため、FileMaker API for PHP が実現できない環境のユーザでも FX.php を使うことによって php からのアクセスが可能となります。

 インストール方法も簡単で、ダウンロードして解凍した FX フォルダを Web サーバの適当な場所に配置するだけです。

 それでは実際にやってみましょう。
 Comment.fp7 を開き、「アカウントとアクセス権の管理」ダイアログを出し、そこからすでに登録済の Webuser を選択して「アクセス権セット...」を選択して以下のダイアログを開きます。

 FX.php は xml によるデータアクセスを行いますので、反転部分のように、「XML Web 公開でのアクセス- FMS のみ(fmxml)」にチェックを付けて保存します。

 これで FileMaker の FX.php 向け Web 公開の準備が整いました。

 さて、次は FX.php 向けのコードを追加していきます。
 まずは、コードの最初の方で FX.php をロードします。今ある Comment.php から FX.php が辿れるように設定してください。

 require_once '../../FX/FX.php';

 そしていつものように、日本語で手順を考えてみます。

  1. FX を使用することを宣言する(FX インスタンスを作成する)。

  2. 使用するデータベース名とレイアウト名を指定する。

  3. 使用するユーザ名とパスワードを指定する。

  4. 追加するフィールドと、そのデータを指定する。

  5. レコード追加を実行する。

 
 こうして見てみると、前回のデータベース書込手順とほとんど変わらないことがわかりますね。
 あとは上記の内容を FX.php 向けに書き換えていくだけです。

 一行目のデータベース接続にサーバ名、ポート番号、データソース名(FMpro9)を明示的に指定する必要がありますが、その他メソッド名に差異はあるものの、前回の FileMaker API for PHP のコードとさほど形式が変わらないことがおわかりいただけるでしょう。

 サンプルコードの方に FX.php と FileMaker API for PHP の切り替え操作も盛り込んでありますので、併せて確認してみてください。


※サンプルコード
サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

2008-07-02

FileMaker API for PHP を使ったアンケートフォーム作成 (4/4)

 本記事は2008年に FileMaker 9 の環境下で執筆されました。2016年11月現在、FileMaker の最新バージョンは 15 となっていますが、15 においても本記事の内容はなお有効と思われます。
 一方Ver 15 では WebDirect と呼ばれる 機能があり、これにより PHP などで Webプログラミングを行うことなく、 FileMaker デスクトップアプリとほぼ同様の操作がブラウザ上でも可能となります。WebDirect は開発が非常に楽になる半面、ライセンス費用やブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し、ブラウザ互換性をある程度無視できる環境では WebDirect は FileMaker API for PHP の代替となる可能性があります。

 参考: アンケートシステム・プロトタイプ

ブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し。ブラウザ互換性をある程度無視できる環境では WebDirect は FileMaker API for PHP の代替となる可能性があります。
 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 さて、今回がアンケートフォーム作成の最終回となります。
 ステップ 1 から渡ってきたユーザ入力データをここでデータベースに登録し、続いてその内容をメール送信します。

 コードの記述に入る前に、FileMaker データベースを用意する必要があります。
 以下の手順に従ってください。

1. FileMaker Pro 9 よりComment.fp7 という名前のファイルを新規作成します。
2. 以下の図を参考にしながらフィールドを作成します。

 アンケート入力ページで実際に使用するのは、[氏名]、[email]、[回答]、[その他回答]、[意見など]の5 つだけですが、残りのフィールドはデータベースを管理する際に作っておくと便利ですので、最初の段階で用意しておきます。
3. 「アカウントとアクセス権」ダイアログを開き、webuser というユーザを追加します。
 パスワードを入力(サンプルデータベースでは web となっています)し、[アクセス権セット]では、「新規アクセス権セット...」を選択します。以下のように入力していきます。

 ここで最も重要なのは、ダイアログの一番下に表示されている[PHP Web 公開でのアクセス - FMS のみ (fmphp)]にチェックが付いていることです。これによって、FileMaker Server 9 への PHP によるアクセスを有効にします。
 また、[レコード]の欄で「カスタムアクセス権...」を選択することによって、レコードへのアクセス範囲を設定することもできます(任意)。
4. デフォルトのレイアウト名が Comment になっていますので、cgi に変更します。
5. ここまで終わったら、このデータベースファイルを FMS9 の Databases フォルダに入れて公開します。

 これでデータベースの準備が整いましたので、今度はアンケート入力の PHP コードの方に Comment データベース書き込みの処理を追加していきます。

まずは、コードの最初の方で FileMaker.php をロードします。

 require_once 'FileMaker.php';

 API for PHP による FileMaker データベースへのデータ書き込み手順を日本語で書くと、次のようになります。

  1. FileMaker を使用することを宣言する(FileMaker インスタンスを作成する)。

  2. 使用するデータベース名、レイアウト名、ユーザ名、パスワードを指定する。

  3. レコード追加をこれから行うことを宣言する。

  4. 追加するフィールドと、そのデータを指定する。

  5. レコード追加を実行する。


 このように日本語で書いてみると、操作は思ったより単純であることがわかりますね。
 あとは上記の内容を PHP の記述規則に従って置き換えるだけです。

 日本語で何をやっているかが理解できれば、この PHP ソースも容易に理解できるでしょう。
 $databaseName、$layoutName、$userName、$passWord というように変数を用意しておくことで、後でデータベース名や、ユーザ名、パスワードが変更になったときにも柔軟に対応できるようになっています。
 一番最後の行の $newrec->execute(); で実際に FileMaker データベースの方にレコードを新規追加します。

 最後にメール送信機能を追加します。
 すでにご存じのように、メールは差出人(From)、宛先(To)、件名(Subject)、本文(Body)、ヘッダ情報で成り立っています。これと同様の指定をコーディングの中でも行います。後でいつでも変更できるように、以下のように変数に入れておくと便利です。
 


 宛先(To)はアンケートに回答してくれた人のメールアドレスになりますので、ここでは指定しません。
 アンケート回答者にメールを送信すると同時にそのコピーをサーバ管理者に送るようにするには、上記のように $bcc 変数を用意して、そこにコピーを送るメールアドレスを設定しておきます。

 それでは実際にメールを送信するための手順を日本語で書いてみます。

  1. メールヘッダを組み立てる。

  2. アンケートに対するユーザ回答を使って本文を組み立てる。

  3. メール送信時に発生する文字化け対策を施す。

  4. 上記の内容を使ってメールを送信する。


 上記を PHP で置き換えると、次のようになります。


 $_POST の中にユーザ入力の内容が納められていますので、その中から該当するものを取り出しながら本文を組み立て、mb_sendmail() 関数の To の部分に回答者のメールアドレス $_POST['email']を設定します。

 上記を踏まえながら、サンプルコードを確認し、Comment.fp7 データベースをお使いの FMS9 環境に配置して、動作を確認してみてください。

 これで、FileMaker API for PHP による FileMaker データベースへの書き込み操作がひととおりできるようになりました。

 あとは、ステップ 1 のときと同様に、渡ってきたデータをお礼ページに表示するだけです。
 詳細は、サンプルコードを参照してみてください。

*サンプルデータベースの Admin パスワードは「admin」、webuser パスワードは「web」となっております。必要に応じて変更してお使いください。

●まとめ
 FileMaker データベースへのデータ書込の理解
 メール送信の理解

SonicWALL (4) --- IPS

前回「SonicWALL (2) --- IPS」で書いた警告メールの続きです。


IPS Detection Alert: IM Skype -- Application Activity, SID: 2800, 優先順位: 低 - 192.168.*.*, 4787, LAN - 204.9.163.158, 80, WAN, 163-158.static.quiettouch.com -
Skype を使用していると普通に送られてくる警告メール。 Skypeの利用を許可している環境では問題無い、Skypeに何らかの穴が見つからない限りですが。 ViewPointでは攻撃としては認識されていない。詳細解説


IPS Detection Alert: POLICY Google SSL Connections, SID: 3075, 優先順位: 低 - 209.85.171.97, 443, WAN, cg-in-f97.google.com - 192.168.*.*, 1774, LAN, **** -
Google Talkがクライアントと行うSSL通信をブロックしている。ViewPointでは攻撃として認識されない。 詳細解説


IPS Detection Alert: DNS BIND Version UDP Request, SID: 143, 優先順位: 低 - 149.20.52.206, 64457, WAN - 192.168.*.*, 53, LAN, **** -
DNSバージョンをチェックするクエリ。通常は無視していいが、自社のネットワーク情報を知られる可能性もある。 詳細解説


IPS Detection Alert: IM AIM -- Login, SID: 102, 優先順位: 低 - 192.168.*.*, 1253, LAN, **** - 64.12.161.185, 5190, WAN -
IPS Detection Alert: IM AIM -- Instant Message Sent, SID: 103, 優先順位: 低 - 192.168.*.*, 3749, LAN, **** - 205.188.12.130, 5190, WAN -
AIMを使用したログイン、またはメッセージ送信の発生を通知する。AIMの利用を許可している場合は無視。 詳細解説 詳細解説 


IPS Detection Alert: MULTIMEDIA Flash Video (FLV) Download 3, SID: 78, 優先順位: 低 - *.*.*.*, 80, WAN - 192.168.*.*, 4752, LAN, **** -
Flash Video (FLV)はYouTube等で使用されるビデオフォーマット、これをダウンロードしたときに通知される。 詳細解説


IP spoof dropped - 192.168.*.*, 4388, LAN - 205.188.179.233, 5190, WAN - MAC address: 00:90:cc:c3:06:49
以下、SonicWallのマニュアルから引用
「IP Spoof は、ハッカーが他のコンピュータのアドレスを使って、TCP/IP パケットを送ろうとする、侵入の企てです。保護されたネットワークに、そのネットワーク上のマシンの IP アドレスを使ってアクセスするために利用されます。SonicWALL では、これを侵入の企てとして認識し、それらのパケットを破棄します。SonicWALL の構成が間違っていると、IP Spoof の警告がログされることがよくあります。IP Spoof の警告
を見つけた場合には、LAN、WAN および DMZ 上の IP アドレスがすべて正しいことを確認してください。LAN 上の IP アドレスが LAN のサブネットに入らない場合にもIP Spoof の警告が出ることがあります。」


IPS Detection Alert: SMTP Reply-To Pipe Passthrough, SID: 1888, 優先順位: 低 - 194.150.164.130, 29174, WAN - 192.168.*.*, 25, LAN, -
旧Sendmailのバグを利用してコマンドを実行させる攻撃の可能性。SonicWallはこの攻撃を排除する。 詳細解説

以上

2008-07-01

FileMaker API for PHP を使ったアンケートフォーム作成 (3/4)

 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 前回はアンケートページ操作の枠組みとなる、アンケート入力ページ、確認ページ、そしてお礼ページの切替方法について説明しました。いよいよ本格的なコード記述に入っていきます。PHP のコーディング規則については割愛しておりますので、不明な点があれば PHP のマニュアルを参照してください。

 皆さんご存じのとおり、Web ページの構成はざっと以下のようになっています。



 前回の説明では、本文部分の表示切替について説明したわけですが、実際は、本文を表示する前にヘッダを表示し、本文の表示が終わったところでフッタを表示することによって、Web ページを構成する必要があります。第一回目で、ヘッダとフッタは部品化できると申し上げたとおり、ヘッダとフッタをそれぞれ独立した文字列として変数にセットしておくことで、実際のページ表示を行うときに呼び出して使うことができます。
 以下はその部分を取り出したものですが、HTML による Web ページ作成経験がある方なら、この部分は容易に想像できるでしょう。

 ●ヘッダ部品のソース


ヘッダ中にある $pagetitle は、ページのタイトルを表示するための変数です。入力ページ、確認ページ、お礼ページでタイトルを切り替えることができるため、このようにしておくと便利です。

 ●フッタ部品のソース


 このように部品を用意しておけば、極端な話、PHP コードの中で以下のように記述するだけで一つの Web ページが出来上がります。


echo $header;
echo $footer;


 次に、上記のヘッダとフッタの間に入れる本文部分を検討していきます。

1. ステップ 0 (ユーザ入力ページ)

 ここでは、入力用のフォームを作っていきます。
 フォーム部品(エレメント)は次の 5 つです。

 氏名 -- テキストボックス (myname というエレメント名)
 email -- テキストボックス (email というエレメント名)
 アンケート回答 -- ラジオボタン (answer というエレメント名)
 その他回答 -- テキストボックス (otheranswer というエレメント名)
 ご意見など -- テキストエリア (memo というエレメント名)

 以下は上記を踏まえてフォームを起こすためのコードを PHP で記述したものです。



 上記赤で囲った部分がアンケート回答の選択肢を示すラジオボタンです。これですと、アンケート回答の選択肢が増えるたびにラジオボタン行を増やす必要があるため、将来的に非効率といえば非効率です。というわけで、このラジオボタンの部分を可変対応にしてみましょう。

 そこで選択肢のリスト作って変数に入れてみます。ここでは $answeroptions という変数にリストを配列としてセットしているところです。



 そして、ラジオボタンを表示したいところでこの変数($answeroptions)を呼び出して、各項目を取り出します。その加工を行っているのがこの部分です。



これでデフォルトのページの部品ができあがりました。しかし、これでは各エレメントの value が空欄のため、前回何らかのユーザ入力が行われていたとしても値はページには反映されません。そこで、前回ユーザ入力があった場合にはその値を当該の項目に表示する処理を追加します。
 この処理を施すと、次のようになります。赤線部分に注目してください。



 そしてさらに、必須項目である[氏名]欄と[email]欄が正しく入力されているかどうかをチェックして、値が不正の場合には赤字でメッセージを表示するようにします。
 その処理を施したものが以下のソースです。赤線部分に注目してください。



 入力項目の処理はこれで終わりですが、後は今のステップ番号を次の操作のためにどこかに用意しておく必要があります。
 ここでは以下のような隠しエレメントを用意して、そこにステップ番号を入れることにします。エレメントの名前は後で参照しやすいように page_flg としておきます。今回はステップ 0 (ユーザ入力フォーム)なので、設定しておく値は 0 ですね。



 後は送信ボタンとリセットボタンを用意するだけです。
 上記を踏まえて、もう一度サンプルコードを見てみてください。

2. ステップ 1 (確認ページ)
 このステップは、ステップ 0 に比べると比較的処理が容易です。ここでは、ステップ 0 で入力された値 ($_POST にまとめて入っています)を取り出してページに表示し、ユーザにこの内容でデータベースに送信しても良いか尋ねて、ステップ 2 に入力値を渡すだけです。

 まずは入力された値を表示します。この部分は、確認ページとお礼ページの両方で同じものを表示しますので、使い回すことができます。


 次に、ステップ 2 (お礼ページ)に渡すためのユーザ入力値を隠しエレメントとしてフォームに用意します。
 以下、赤線を引いた箇所が現在のステップ番号を渡しているところです。



 実際にサンプルコードのソースを開いてみて、この部分を確認してみてください。

 残すはステップ 2 です。ステップ 2 では、データベース操作およびメール送信について触れますので、次回詳しく説明いたします。

●まとめ
 入力フォームの記述方法とユーザ入力値の表示方法の理解

FileMaker API for PHP を使ったアンケートフォーム作成 (2/4)

 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 さて、前回の説明ではアンケートページの流れと、流用可能部分の洗い出しを行いました。

 以降、PHP を使って話を進めていきますが、実際にコードを書く前に、まずは日本語で分岐処理を考えてみましょう。この作業がしっかりできれば、あとはそれを PHP の規則に従って置き換えるだけです。このやり方ならあらゆるプログラミング言語にも応用が利くので便利です。

 ページがロードされたときに、最初にしなければならないのは、このページが初回ロード(デフォルトページ)なのか、確認用ページなのか、それともお礼ページなのかを把握することです。そこで前回解説した 3 つのステップが登場するわけです。


 0 -- 初回ロード時(デフォルト)ユーザによるアンケート入力用ページ
 1 -- 確認ページ
2 -- お礼ページ

 ここで注目すべきことは、ユーザが正しい入力を行わなければ、いつまでたってもステップ 1 には進めないということです。今回のアンケートフォームでは、このために[氏名]欄と[email]欄を入力必須としています。この二つの項目正しい入力がなければ、誰が送ったのか後で判断できませんし、メールも送信できなくなってしまいます。また、ゴミデータを増やす原因にもなりますので、最低限[氏名]と[email]には入力をしてもらいたいところです。

 つまり、ステップ 0 ではユーザ入力ページを表示させつつ、正しい入力が行われているかどうかという判断も行います。

 ページがロードされた場合に、[氏名]欄と[email]欄に正しいデータ入力が行われていたときは、必要最低限の情報が揃ったことになりますので、ステップ 1 に進みます。

 さらにページがロードされた場合に、前回のユーザ操作で“確定”ボタンが押されていたことを確認できたときは、ステップ 2 に進んでデータを FileMaker データベースに書き込み、さらにメールを送信して終了します。

 実際にコード記述を行う際には、ステップにプログラム内で管理しやすい固有の名前を付けます。ここでは page_flg としてみます。page_flg が 0 ならステップ 0 というわけです。PHP では変数を取る場合は先頭に $ を付けますので $page_flg という名前になります。

 それではここまでを日本語で表現してみます。見やすさのために、各項目内はインデントを行います。ステップの名前は page_flg となっていますので、覚えておいてください。



   
 上記のように、ページがロードされた直後の処理が最も重要であることがわかりますね。page_flg の番号が特定できれば、あとはそれに応じたフォームを表示するだけです。
 さて、次はこれらの分岐を PHP に置き換えてみます。処理の詳細はまだ記述しませんので、コメント行として日本語で表します。先ほど申し上げたとおり、page_flg は PHP では $page_flg と記述します。



 分岐の方法や入力されたフォームの値($_POST に入っています)の説明は PHP のマニュアルをご覧いただくとして、こうして見てみると、処理の流れが意外と単純であることがわかりますね。ちなみに、Mailck()という名前の付いているものは、入力されたメールアドレスが適切な形式であるかどうかをチェックするために私が用意したユーザ定義関数の名前です。

 この枠組みができれば、あとはページヘッダ、フッタ、そしてフォームの詳細を追加していくだけです。
また、前回の説明にあったように、確認ページとお礼ページのコードは流用できる部分があるため、$page_flg の分岐を以下のように変更します。



 コードがさらにすっきりましたね。

 ここで、サンプルコードをダウンロードして、該当箇所を検索し、コードがどのようになっているかを調べてみてください。
 フォーム内容が記述されているため、PHP に不慣れな方には複雑に見えるとは思いますが、この枠組みが理解できていれば、今回のアンケートフォームの操作は 70% 理解できたと言っても過言ではないでしょう。

●まとめ
 ページ操作の枠組みとその記述方法(日本語、PHP)の理解

2008-06-30

FileMaker API for PHP を使ったアンケートフォーム作成 (1/4)

 本記事は2008年に FileMaker 9 の環境下で執筆されました。2016年11月現在、FileMaker の最新バージョンは 15 となっていますが、15 においても本記事の内容はなお有効と思われます。
 一方Ver 15 では WebDirect と呼ばれる 機能があり、これにより PHP などで Webプログラミングを行うことなく、 FileMaker デスクトップアプリとほぼ同様の操作がブラウザ上でも可能となります。WebDirect は開発が非常に楽になる半面、ライセンス費用やブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し、ブラウザ互換性をある程度無視できる環境では WebDirect は FileMaker API for PHP の代替となる可能性があります。

 参考: アンケートシステム・プロトタイプ


ブラウザとの互換性等に問題があります。 したがって、高速開発性(RAD)を重視し。ブラウザ互換性をある程度無視できる環境では WebDirect は FileMaker API for PHP の代替となる可能性があります。
 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)
 さて、前回の投稿FileMaker Server 9 のインストールを終えましたので、これから数回にわたって FMS9 に装備されている FileMaker API for PHP を使うことによって FileMaker データベースにデータ書き込みを行う方法について説明します。
 ここでは最も手っ取り早く操作を理解することを目標に掲げていますが、今後は機会を見て同操作の Fx.php への展開、MySQL への展開、セッション管理などについても書いていきたいと思っております。

 FileMaker API for PHP は、PHP スクリプトから FileMaker データベースにアクセスすることによって、データベース操作を実現するクラスをまとめた API で、従来の CDML やインスタント Web 公開では機能的に限界のあったデータベース操作がさらに高度で柔軟なものになっています。
 操作にあたってはどうしても HTML と PHP を記述するための知識が必要になるわけですが、今回は理解の最短コースを目指し、最も単純な操作方法をコード付きで紹介します。

 サンプルデータベースと PHP ソースコードはこちらからダウンロードできます。(本アーカイブは、不定期に差し替えが行われる可能性があります。あらかじめご了承ください。)

 こんなページを想像してみましょう。

  1. アンケート入力ページが出てくる。

  2. 上記で正しい入力が行われると、確認ページが出てくる。

  3. 確定ボタンを押すと、入力されたデータが FileMaker データベースに書き込まれるとともに、その内容がメールで投稿者およびサーバ管理者に送信される。


 この動作を実現させたものがこちらのアンケート入力ページです。

入力→確認→データ書込(必要に応じてメール送信)、この三段構えを応用すると、商品申込ページや、住所録作成なども比較的簡単にできるようになります。

さて難しいことは抜きにして、まずは入力ページの部品を見てみましょう。



 ユーザ入力欄は以下の 5 つだけです。

  1. 氏名 -- 入力必須

  2. emailアドレス -- 入力必須

  3. アンケート回答 -- 選択必須。一番上の選択肢が最初に選択されている状態

  4. その他回答入力欄 -- 任意

  5. 要望など入力欄 -- 任意


 HTML による Web ページ作成経験のある方なら、ページ構成は容易に想像できるでしょう。
 PHP では、ある程度ページ部品を使いまわすことができますので、入力、確認、お礼のページで使いまわせそうな部分を抜き出していきます。

 ヘッダ --- 流用可能
 ボディ(本文) --- 一部流用可能
 フッタ --- 流用可能

 ボディが一部流用可能となっている理由は、入力ページではユーザ入力を許可し、確認ページとお礼のページではテキストのみが表示されるという理由で表示動作が異なるためです。それでも確認ページとお礼のページに表示させる内容は使い回せそうですね。

 それではこのアンケートページのブラウザ表示後のソースを見ながら流用できそうな部分にマークを付けてみます。



 図中の赤で囲んだ部分が入力、確認、お礼ページで共通している部分となりますので、PHP コードの中では一度記述すればよいことになります。

 次に、ページ動作の流れを決めます。

  1. 初回ページロード時は入力画面表示。

  2. 必須項目に正しく入力が行われたら、確認ページを表示

  3. 確認ページでユーザが“確定”ボタンを押したら、お礼のページを表示


ページの表示切替を容易に行うため、各ステップを 0 (デフォルト)、1 (確認)、2(お礼)のように決めます。つまり、ステップ 0 では、いくらページをロードしても入力画面が表示され、1 なら確認画面、2 ならお礼の画面という具合です。表示イメージは弊社サーバでテスト公開しているアンケート入力ページで確認していただくことにして、それぞれのステップのフォーム部分のコードを見てみましょう。

【ステップ 0 のソース】


【ステップ 1 のソース】


【ステップ 2 のソース】


ステップ 1 と ステップ 2 を比べてみてください。多少の差異は認められるものの、赤で囲んだ部分が殆んど同じであることがおわかりいただけるでしょう。ということで、この部分も PHP で使いまわすことができます。


●まとめ

  1. アンケート入力→確認→お礼ページの流れを把握

  2. 上記のそれそれのステップに 0, 1, 2 という番号を付ける

  3. ページのヘッダ、フッタ、本文で流用できそうな部分を洗い出す


流用できる部分の洗い出しは、設計段階でとても重要な作業となります。
次回より、上記を踏まえた上で、実際に php を使ってコーディングをしていきます。

2008-06-23

アンチウィルスソフト --- 果てしないセキュリティ

SonicWALL Total Security のようなUTM(統合脅威管理機器)をLAN⇔WAN間に設置すると、ファイアウォール、IPS、アンチウィルス・アンチスパイウェア、コンテンツフィルタリング、暗号化等の機能により、LAN⇔WAN間のすべての通信を管理・監視しネットワークセキュリティを向上させることができます。 では、UTMを配置すればセキュリティは確保できるのでしょうか? 残念ながらそうとは言えません。 ハードディスクのデータをUSBメモリにコピーして持ち出した、機密データを印刷して紛失した、ノートPCを紛失した、サーバ室に許可無く入室した等、セキュリティはシステム管理者だけの問題ではなく、社員など個々人のモラルの問題でもあり、あらゆるリスクを予め想定して対応するのは不可能と言っていでしょう。 

自宅の家の鍵を二重三重にし、窓ガラスも強化ガラスを入れ、セコムを頼み、家人が十分気をつけていたとしても、有能で悪意ある確信犯がいれば、その凶行を防ぐのは至難です。 セキュリティも同様です。 どこまでセキュリティに費用と労力をかけるか、実に悩ましいところですが、システム的にはやはりホスト(PCやサーバ)レベルでのウィルス等のマルウェア対策が必要と思います。 以前にも総論的に書きましたが、数十台を超えるPCのセキュリティを各ユーザのスキルとモラルに委ねるのは危険で、業務的にも効率的とは言えず、なるべく統合的、集中的なセキュリティ管理が望まれます。その統合集中的管理が可能なアンチウィルスソリューションの一つに Panda WebAdmin があります。

Panda WebAdmin のメリット

1. 比較的廉価
2. Windows 2000/2003 Server で利用可(但し、Vistaは未対応)
3. 動作が軽い --- 他のアプリケーションに悪影響を与えない、与えにくい
4. 管理PCからクライアント/サーバを統合集中管理
  • 管理PCから各PC/サーバへPanda WebAdminクライアントを(Push式)インストール
  • 各PC/サーバのウィルス感染状況を表示
  • 各PC/サーバのウィルス定義ファイルの更新状況を表示
  • 外出先のモバイルPCも管理可
【各PCのウィルス定義更新状況を表示するWebAdmin】

5.それなりのウィルス検出精度
6.システムに障害を及ぼす“トンデモ”アップデートがあまり無い

以上

2008-06-20

SonicWALL (3) ---ログ分析ツールViewPointインストールで泣く

前回書いたようにSonicWALLには通信を監視し、「問題あり」とみなした通信内容を警告メールとしてネットワーク管理者に送付することができます。 ただ、この警告メールが大量に届くため、管理者がこれを逐一読むのはまず無理です。 そこでSonicWALL Total Security には、ViewPoint というログ分析ツールが無料で付属してきます。 この ViewPoint ですが、ある一定の環境下は簡単にインストールできます。 しかし一定以外の環境では、多分、嵌ります。 一定以外の環境とは? 私が思うに SQL-Server インスタンスが複数動いている環境はマズイのではないかと。 

以前、 SQL-Server インスタンスが既に2つ存在するWindows 2003 に ViewPoint 4.0 をインストールしようとしたのですが、途中までいくとMSDE(Microsoft SQL-Server Desktop Engine、ViewPointのログ保存用データベース)へのログインの画面で認証に失敗し、続行できなくなりました。 表示されたエラーメッセージには、「後で\ViewPoint4\bin\postInstall.batを実行してインストールを続行できます」みたいなことが出ているので、インストールを一旦中断。 ただ、 その後に postInstall.bat を実行しても、全く同じ状況でMSDEの認証で弾かれてしまいます。 で、サポートに電話したのですが、「そのような事例はあるのですが、解決方法は記されていません」の一言。 「おい、おい、 それで終わりかい?」(心の声)
その時は忙しかったので、既存のSQL-ServerインスタンスがないXP機に ViewPoint 4.0 を入れてしまいました。 こちらは全く問題無くインストール終了。

で、最近改めて件のWindows 2003機へ ViewPoint のインストールをトライしてみました。 前回失敗したときにアンインストールをしたみたいだったので、インストーラの VPS_JP.exe を再度実行。 「もしや今度はすんなりと完了するのでは…」という儚い望みはあっさり裏切らせ、前回と同じメッセージ。 しかたんくインストーラを終了して、上記の postInstall.bat を実行してもやっぱり駄目。 ここまでは前回と同様なので、トラブルシュートする腹を決めました。 まず「サービス」を起動してSQL-Serverインスタンス(サーバ名\SNWL)が存在することを確認。 また、インストール時に指定したディレクトリにMSDEが存在することも確認。では、ViewPoint4\MSDE\Data\MSSQL$SNWL\Data\ 内に存在する 筈のViewPoint 用の.mdfと.ldfファイルは…と思って探しても無い。 あるのは、master/msdb/model/tempの4つのシステムファイルだけ。 SQL-Server Management Studio Express を起動して見ても、やはりこの4ファイル以外は無し。 先に成功したXP内のDataディレクトリには sgmsdb.mdf 他のViewPoint用ファイルがあるのに。
ここにきて、データベースのインストールに失敗していることが判明。 そこでググってみると、灯台下暗し「SonicWALL ViewPoint ユーザーズ ガイド」にたどり着く。 このガイドは ViewPoint 2.5 用でエラーのメッセージの出方も違うけど、第六感的にはぴったし。 P.157以降に解決策というのが書いてあります。 以下、上記マニュアルを引用。

******************** 引用始 ********************
ViewPoint が MSDE データベースの場所を見つけることができない
問題
SonicWALL ViewPoint 2.0 のインストールで、MSDE データベースが見つからない場合、次のようなアップグレード失敗を通知するメッセージが表示され、インストールはフェーズ 2 で失敗します。
[DBNETLIB]SQL Server does not exist or access denied. [DBNETLIB]ConnectionOpen (Connect()).
Java doesn't recognize the MSDE database using the URL "127.0.0.1\SNWL". This is an issue on some Windows 2000 servers.
解決策
次の手順を実行し、インストールを続行します。
1. 「キャンセル」 を選択して、フェーズ 2 のインストールを終了します。
2. コマンド プロンプトから、「SQL Server Network Utility」 (SVRNETCN.EXE) を実行します。 一般的に、このプログラムは、C:\Program Files\Microsoft SQL Server\80\Tools\Binn フォルダ内にあります。
3. 複数の SQL サーバ インスタンスがシステム上で稼動している場合は、「Instance(s) on this server」 リスト ボックスに複数のインスタンスが表示されます。 リスト ボックスから、サーバ名\SNWL の項目を選択します。
4. 「Protocols」 リストから 「TCP/IP」を選択し、「Properties」を選択します。
5. ポート番号を記録します。
6. メニューを終了します。
7. c:\sgmsConfig.xml ファイルと \Tomcat\webapps\sgms\WEB-INF\web.xml ファイルに以下の修正を行います。
dbURL の値を、"127.0.0.1/SNWL" から "localhost:ポート番号" へ変更。
dbhost の値を、 "127.0.0.1\SNWL" から "127.0.0.1" へ変更。
技術的ヒントとトラブルシューティング 157
8. \SQL\bldMSDB.bat に、以下の修正を行います。
User の値を sa に変更
Password の値を <フェーズ 1で選択したデータベースのパスワード> に変更。
9. コマンド プロンプトで、\SQL フォルダへ移動し, bldMSDB.bat プログラムを実行して MSDE データベースをインストールします。
10. \Temp へ移動し、次のプログラムを実行して 「SNWL ViewPoint Summarizer」 サービスと 「SNWL ViewPoint Syslogd」 サービスをインストールします。
schedInstall.bat
vpInstall.bat
11. \Tomcat\bin へ移動し、次のプログラムを実行して 「SNWL ViewPoint Web Server」 サービスをインストールします。
tomcat.bat install
12. Windows システムを再起動

******************** 引用終 ********************

上記ステップの8までは問題なく実行できたんですが、ステップ9 bldMSDB.bat が失敗してしまう。 SQL-Serverの認証方法がWindows認証になっているのが問題か?、と思い、認証を混合モードに変更してもやはり駄目。 仕方が無いので、bldMSDB.bat を開いてみると、その中で大量の.sqlファイル群を実行していて、しかも最初の行(sgmsdb.sqlの実行)から失敗している。 で、sgmsdb.sql では何をしてるかというと、

      USE master;

どうもここから失敗している。 コマンドプロンプトを開いて、

      osql -U sa -P password -S 127.0.0.1\snwl

とやると失敗してしてしまう。 そこで、

      
osql -U sa -P password -S computer_name\snwl

とすると成功(computer_nameはWindows のコンピュータ名)。 そこで、どうやらこのループバックアドレス(127.0.0.1)がおかしいらしいと見当をつけて、以下を実行。

  1. 上記ステップ8にある「127.0.0.1」と「localhost」を「computer_name」に変更。
  2. bldMSDB.bat をメモ帳で開き、すべての「127.0.0.1」を「computer_name」に置換。
上記を実行すると、上記マニュアルのステップ9~12はスムーズに終了し、Windows 2003起動してデスクトップに作成された SonicWALL ViewPoint 4.0 を実行すると、ブラウザに ViewPointの認証画面が表示されるようになり、デフォルトのID:admin、Password:password と入力することにより、ログインできました。 めでたし、めでたし。

2008-06-16

FMS9 のインストールで四苦八苦

FileMaker Server 9 で API for PHP が公開されたということで(今まではベータ版での公開だった)、当方の環境にも Filemaker Server 9 (以降 FMS9) をインストールしてみました。

 しかし、一口にインストールとは言っても、アプリケーションの構成が複雑な環境ではなかなか一筋縄ではいかなかったりします。
 今回は FMS9 をインストールしてから希望どおりの結果が得られるまで丸二日を費やすことになってしまいました。

 以下、当方での FMS9 インストールトラブルの記録です。

  1.  FMS7 との競合。FMS7 がインストールされている環境には FMS9 を追加インストールできない。そこで、FMS7 のアンインストールを試みたが、FMS7 インストール構成ファイルの一部が壊れていた模様で、コントロールパネルの「アプリケーションの追加と削除」からは削除ができなくなってしまっていた。
     そこで、Microsoft 社のサイトから Windows Installer CleanUp ユーティリティというツールをダウンロードして、FMS7 のインストール情報を削除してから、ハードディスクに残っている実体ファイル群を削除する目的でもう一度 FMS7 をインストールし、そしてもう一度アンインストール。

  2.  FMS9 インストール。インストーラのガイドにしたがって無事にインストールは終了したが、FMS9 開始ページを起動して設定を始めてみると Web 公開用に接続を試みた IIS が認識されていないことが判明。サービスでは、IIS は正常に動作していたので、どうやら FMS9 とIIS の対話がうまくできていないようだ。
     そこで、コントロールパネルから一度 IIS を外して、もう一度インストールしたら、今度は FMS9 側から認識されるようになった。

  3. ところが、実際にサーバのトップページにアクセスしてみると、ページが見つからないという白紙のページが表示された。IIS マネージャの設定をどう直しても状況は改善しなかったので、試しに FMS9 をアンインストールしたところ、ページが表示されるようになった。
  4.  FMS9 は Java を使うので、インストールされている Java を調べたところ、すでに古いものが 3 つインストールされていた。それらをすべて削除してから IIS 再インストール、FMS9 のインストール、そして FMS9 インストール直後に推奨される Java のインストールに従って、FMS9 に入っている Java をインストールしたところ、FMS9 と IIS の対話がうまくいくようになり、ページも無事に表示されるようになった。


 今回のインストール作業から得られたことは、FMS9 をインストールするには、FMS9 を操作するのに適切な Java と IIS が入っていないとうまく動作しないので、どう設定をいじっても歯が立たない場合は、一度この三点を全部削除して、順にインストールしていくことで解決する可能性が高くなるということです。

 ただ、IIS で複雑なサイトを構築している企業では、IIS をそうやすやすとアンインストールなんてできないと思ってしまうのですが...。

2008-06-14

SonicWALL (2) --- IPS

SonicWall Total Security シリーズには、IPS(Intrusion Prevention System、不正侵入防御システム)が付属してきます。 これは SonicWALL 上の通信を監視し、悪意または不正な行為を検知・遮断する機能です。 通常のファイヤウォールは各ポートの通信を許可・不許可するだけですが、IPSはファイアウォールが許可したポートの通信の内容までも、シグネチャーデータベースに照らして監視します。ネットワーク管理者は SonicWALL の IPS が検知した不正または不正の可能性を含む通信の概要を警告メールとして送信するように設定することができます。 実際メール送信するように設定すると、やたら多くの警告メールが届き、困惑することになります。

よくある警告メール
警告メールの中を見ると、不正またはその可能性がある通信の内容の概要と、その危険度を低、中、高で示されています。 以下、ありがちな警告メールとその説明。

IPS Detection Alert: ICMP Destination Unreachable (Port Unreachable), SID: 310, 優先順位: 低 - 89.178.40.145, 17127, WAN, 89-178-40-145.broadband.corbina.ru - 192.168.*.*, 59367, LAN, ****** -
 外部からのICMPパケットがSonicWallの内側のホストに届かなかった場合に発生。 危険度は「低」。あまり気にする必要はないが、DoS攻撃やネットワーク構成の探知が行なわれている可能性もある。頻発する場合は要注意。 詳細解説


IPS Detection Alert: PROXY-ACCESS SOCKS 5 outbound proxy access, SID: 1775, 優先順位: 低 - 192.168.*.*, 38248, LAN, ***** - 219.160.253.130, 8558, WAN -

 SOCKS Protocol version 5のプロキシサーバへアクセス。攻撃ではないので無視。詳細解説


IPS Detection Alert: ICMP Time-To-Live Exceeded in Transit, SID: 352, 優先順位: 低 - 192.35.246.1, 53, WAN - 192.168.*.*, 1091, LAN -

IPデータグラムが断片化されて相手先ホストに送信されたため、一つ以上の断片化されたデータが未着となっているため、SonicWALLがデータ待ちをしない状態となる。 通常は無視してよいが、DoS攻撃やネットワーク構成探知行為の可能性もある。 詳細解説


Possible port scan detected -  210.248.168.20, 443, WAN, kanri.shopserve.jp -  *.*.*.*, 6887, WAN, ****** - TCP scanned port list, 6755, 6769, 6833, 6845, 6861

Possible port scan detected - 203.77.186.119, 80, WAN, cds32.tyo.llnw.net - *.*.*.*, 1277, WAN, *.*.*.jp - TCP scanned port list, 1263, 1267, 1271, 1273, 1275
クラッカーが侵入準備のために行うポートスキャン、但し、管理目的のことが多い模様。
***.tyo.llnw.net からは非常に多くのアクセスがあるが、Microsoft Windows Update が使用しているミラーサイト(負荷分散サイト)との推定あり。



SonicALERTの全種別一覧
http://software.sonicwall.com/applications/ips/index.asp?ev=cat

2008-05-30

SonicWALL (1)

UTM (統合脅威管理=Unified Threat Management) という言葉ですが、日本ではいまひとつ馴染みが無いようです。 言葉としてもいまいちな感じ。 Integrated Secrurity Appliance とか、All-in-one Security Mnagement Device とか、Security という言葉を入れたほうがピンとくると思うのですが。 認知度が低いのはネーミングが悪いせいかどうかは兎も角、UTM製品名で検索をかけてもヒットするのは宣伝・広告ばかりで、日本のIT関連メディアやユーザサイドからの情報は、今のところ多くはありません。 したがって、運用に際してはには、英語のサイトに頼ることが多くなります。

さて、当方で使用しているのはSonicWALL Total Secure TZ-180というUTMです。 この製品はインターネットとLANの間に配置され、インターネットとLAN間の通信を監視し、設定した内容に従い、許容されていない通信パケットを破棄するとともに、VPNによりパケットの暗号化も行います。通信パケットの管理/暗号化は、ファイアウォール、VPN、ゲートウェイアンチウィルス、アンチスパイウェア、IPS、コンテンツフィルタリングにより行います。 また、ログ解析機能(ViewPoint)/警告メール送信機能も付属しています。

このうち、ゲートウェイアンチウィルス/アンチスパイウェアはhttp/ftp/smtp/POP3といったプロトコル(メーカーの謳い文句による50以上)を監視し、ウィルスやスパイウェアを発見すると除去します。 ただ、ゲートウェイアンチウィルスがあれば個々のPC/サーバにウィルス等のマルウェア対策が必要ないかというとそうではなく、個々のPC/サーバでもやはり対策が必要だと思います。 テロや外国人犯罪を防ぐのに飛行場や港湾といった水際の対策だけではなく、国内に侵入された場合にそなえ個人レベルの警戒も重要、というのと同義でしょう。厭な世の中ですが、破壊・犯罪を防ぐためには仕方がありません。

コンテンツフィルタリングは有害サイトへのアクセスを防ぎます。 一見すると子供向けの機能のようですが、有害サイトにはマルウェアが埋め込まれていることが多く、アクセスするだけで感染することもあります。 有害サイトへのアクセス遮断はマルウェアの侵入を防ぐ意味もあります。

ファイヤウォールとIPS(Intrusion-prevention system、侵入防止システム)の違いですが、一般のファイヤウォールはIPとポートへのアクセスを許可/拒否するように設定できますが、許可しているポートへの通信は、その通信パケットの中に悪意の命令が埋め込まれていても通してしまいます。 その結果、例えば、バッファオーバーフローを起こし、PCの動作異常や異常終了を引き起こしてしまったり、データベースのデータを改竄・消去されてしまったり(SQLインジェクション)ということも起こりえます。 これに対してIPSは、通常、IPやポートに依存せず、通信パケットのヘッダからデータをシグネチャ(攻撃パターン)データベースに照らして監視し、シグネチャに合致する通信パケットは侵入とみなし破棄します。 SonicWALLのシグネチャは24時間自動アップデートされ、新たな攻撃パターンをデータベースに記録します。

参考
Intrusion-prevention system(Wikipedia/英語版)

シグネチャを超えたプロアクティブな防御を――チェック・ポイントが戦略披露


土屋