PIX/ASA の policy-map

備忘録を兼ねる Cisco PIX/ASA の設定情報です。

ICMP の扱い

以前は ping を通すために双方向に ICMP を許可する ACL を設定しなければなりませんでしたが、PIX 7.x 台より ICMP のステートを見るようになっています。すなわち片方向に ICMP 許可 ACL を設定すれば許された方向に ping をかけることができるようになります。

デフォルトでは ICMP の検査は有効でないので、policy-map で “inspect icmp” と設定する必要があります。初期設定を元にした場合は以下のように設定します。

FW(config)# policy-map global_policy
FW(config-pmap)# class inspection_default
FW(config-pmap-c)# inspect icmp

修正された policy-map の全体は次のセクションを参考にしてください。

UDP の扱い

多くのファイアーウォールと同様、UDP は擬似コネクションとして扱いステートフルインスペクションの対象となります。デフォルトではタイムアウトにより戻りパケットのポートを閉じる動作ですが、定義済みプロトコルについてはアプリケーション層の内容に基づきより厳しい検査を実施することができます。

例えば SNMP を検査するためには SNMP を識別する class-map を作って使用している policy-map に含める必要があります。具体的には次のような設定となります。先の ICMP と同様初期に自動で出来る policy-map では SNMP の検査は有効でありません。この辺りの設定は以前は fixup コマンドを用いましたが 7.0 よりこのような設定にガラリと変わっています。

class-map snmp
match port udp range snmp snmptrap
class-map inspection_default
match default-inspection-traffic
!
!
policy-map global_policy
class inspection_default
inspect dns maximum-length 512
inspect ftp
inspect h323 h225
inspect h323 ras
inspect rsh
inspect rtsp
inspect esmtp
inspect sqlnet
inspect skinny
inspect sunrpc
inspect xdmcp
inspect sip
inspect netbios
inspect tftp
inspect icmp
class snmp
inspect snmp
!
service-policy global_policy global

IP の access-list

access-list ACLNAME extended permit ip ...

と書くことができます。これだと一見アクセス制御をするのに IP 層までしか検査しないように見えます。しかし、実際はコネクション (ICMP/UDP 等の擬似コネクションを含む) の状態を検査するので、それぞれのプロトコルに応じた検査がなされます。

結局 ACL はコネクションの最初のパケットの通過可否を判断するためにのみ使われ、コネクションが確立された後は保持しているコネクションの状態と通過するパケットの整合性を基に通過可否が判断されるのです。ですので、ルータと同じように access-list を IP で書けば IP 層のチェックのみで通信を通過させることができるわけではないので注意が必要です。

そうそう 7.x からは inbound にも outbound にも ACL を適用できるようになっています。

グランプリサーキット30購入

とうとうミニッツグランプリサーキット30を購入してしまいました。洛西モデル東京店で取り寄せてもらい、1週間ほどで入荷しました。2割引でした。

とそこまでは良いのですが、「あそこにあるのがそうです」と指差されたダンボールを見た瞬間、

「でかっ…」

この大きさだからどの店も取り寄せになってしまうのですね。即断で電車で持ち帰るのを諦め、配送してもらうことにしました。送料が余分にかかってしまいますが仕方ありません。着払いでまだ届いていないのですがいくらになるのだろう…

車で取りに行ける人は良いですが、そうでない人は素直に通販を利用するのが良いと思います。なにはともあれ届くのが楽しみです

サボテンの花

気づいたらサボテンの花が咲いていたので写真に撮っておきました。いつもより少し大きめのイメージにして載せておきます。

サボテン

昨日(6日)撮ったのに今日(7日)はもうしぼんでいます。気づいてよかった。

HDR-HC3 と Premiere Elements 3.0

Sony のハイビジョンハンディカム HDR-HC3 を購入しました。 (正確には妻が買ってきました。)  最近出た HDR-SR1HDR-UX1 も候補だったのですが、結局以下の理由で HDR-HC3 を選びました。

  1. HDR-HC3 が一番小さくて軽い
  2. HDR-HC3 が一番安い (某量販店で税込 \88,700 + ポイント15% で購入)

新しいビデオカメラを買ったとなると PC でムービー編集したくなります。そこで Adobe Premiere Elements 3.0 の体験版を試すことにしました。これならば HDV (ハイビジョン形式) での読み込み、書き出しができます。カメラ、ソフト共に使いこむのはまだまだこれからなのですが、とりあえず今日は HDV で取り込むための設定を記しておきます。

Premiere 側
プロジェクトをつくる前にプロジェクトのプリセットを選択しなければなりません。 スタートアップスクリーンの「設定」で “Adobe HDV”, “HDV 1080i 30 (Sony 60i)” を選択します。この後新規プロジェクトを作成します。

HDR-HC3 側
メニュー設定で以下のようにします。

[ビデオ HDV/DV] → [HDV]
[i.LINK DV変換] → [切]

[i.LINK DV変換] のメニューは奥まったところにあるので探すのにマニュアルが必要でした。とりあえずデフォルトで切になっているようです。

ところで HDR-HC3 購入以前は、やはり Sony の DCR-PC7 を使っていました。よく見るとこれにも DV 端子がついているではないですか! 今月は保育園の発表会も控えていてしばらく PC へのキャプチャー作業が続きそうです。

Cisco ASA でパケットキャプチャー

最近続いている Cisco ASA/PIX の話です。ファイアーウォールの設定は完璧にしたはずなのに、「うまく動かない…」ということがたまにあります。その性質上何か問題が起こるとまず真っ先に「ファイアーウォールで止めてんじゃないの?」と疑われてしまう立場にあります。

ルールの書き間違いならばログを見れば大体わかりますが、ログを見てもわからない場合 ASA/PIX ではパケットをキャプチャーすることができます。

まず、キャプチャーしたいパケットを選別するための access-list (ACL) を作ります。これは問題判別に使うためのパケットを引っ掛けるためだけにファイアーウォールのルールとは独立した ACL を作れば良いです。

例えば、192.168.1.2 宛の通信がおかしければこんな風にします。

fw(config)# access-list mylist extended permit ip host 192.168.1.2 10.0.0.0 255.0.0.0
fw(config)# access-list mylist extended permit ip 10.0.0.0 255.0.0.0 host 192.168.1.2

そしてこの ACL とインターフェイスを指定してキャプチャーを開始します。

fw# capture mycap access-list mylist interface inside

ACL に適合するパケットがインターフェイスを通過すればキャプチャーされます。

fw# show capture
capture mycap type raw-data access-list mylist interface inside[Capturing - 1008 bytes]

キャプチャーできたのであれば詳細を見てみましょう。

fw# show capture mycap
12 packets captured
1: 15:53:16.278839 802.1Q vlan#128 P0 192.168.1.2 > 10.1.2.3: icmp: echo request
2: 15:53:16.279282 802.1Q vlan#128 P0 10.1.2.3 > 192.168.1.2: icmp: echo reply
3: (...略) 

キャプチャーを終了するには次のコマンドです。

fw# no capture mycap

私の経験ではこうして調べて見ると実はファイアーウォール以外に問題があった、ということもよくあります。これらのコマンドを覚えておくといざという時手際よく問題判別ができると思います。

引っ越して来ました

Yahoo ブログからこの FC2 ブログに引っ越して来ました。とりあえず、リストの最初の方にあったテンプレートを使ってサイトを立ち上げ過去記事をインポートしてみた、という状態です。過去のトラックバックやコメントは移していません。

引き続きボチボチとやっていきます。

HTMLDocument と Numeric character references

Java で HTML を読み込み、その内容を元に別の HTML を出力するちょっとしたプログラムを書こうとしています。こんな時、Java には HTMLEditorKit という便利なクラスがあります。これを使うと HTML を解析して HTMLDocument という HTML の内容を表すドキュメントクラスのインスタンスを生成してくれます。これがどんなに便利かは古い記事ですが、この記事等を読むとわかります。


さて逆に HTMLDocument の内容 HTML として出力しようとする時は HTMLWriter を使うことができます。ところがこれを使って日本語の HTMLDocument を出力しようとすると “&amp#12371;&amp#12398;&amp#12392;&amp#12371;” のような内容で出力されてしまいます。一瞬「また、文字化け??」と思ってしまいましたが、これはれっきとした HTML の書式で“Numeric character references (NCR)”と呼ばれるものだそうです。日本語では数値文字参照というようです。


「うーん、何で EUC や シフト JIS で出してくれないの??」と思い、Web 検索するもこのあたりの情報は乏しいです。仕方がないのでクラスのソースを見てみると、HTMLWriter クラスで思いっきり次のように書かれていました。


if (chars[counter] < ' ' || chars[counter] > 127) {
(中略)
// If the character is outside of ascii, write the
// numeric value.
output(“&#”);
output(String.valueOf((int)chars[counter]));
output(“;”);
}
(JDK 5.0 HTMLWriter クラスの “protected void output(char[], int, int)” のソース抜粋)


ascii でなけりゃ問答無用で NCR だということです。作った人はそれで済む国の人なのでしょう。日本でエディタ等を使って HTML を書くような人はシフト JIS や EUC で出力されないと困りますよね。


今回は EUC で出力したいのでどうしたものかと考えました。 HTMLWriter のサブクラスを作って該当の output 関数のみ override して HTMLWriter.output の丸コピーのチョイ直しという手も考えました。しかしそうすると HTMLWriter クラスの replaceEntities という重要なフラグが private なので参照することができません。本来 HTMLWriter が NCR で出力するかネイティブな文字コードで出力するか動作を選択できるようになっているべきなのでしょう。


そこで今回は使い捨てのプログラムだからと割り切り、出力する Writer の方にサブクラスをつくって”&#数字;” が来たらいつも使っているダブルバイトの文字に直すようにすることにしました。


で書いてみたのが、下のクラスです。このクラスのインスタンスを使って HTMLWriter を生成します。先に参照したソースの部分の output 呼び出し3連発に依存する書き方です。使い捨てなのでいいのです。


public class NCR2NativeWriter extends java.io.OutputStreamWriter {
private int count;
private String tempString; // NCR format string
public NCR2NativeWriter(OutputStream out, String s)
throws java.io.UnsupportedEncodingException {
super(out, s);
count = 0;
}
public void write(char[] cbuf, int off, int len)
throws java.io.IOException {
if (off != 0) {
super  .write  (cbuf, off, len);
return;
}
if (count == 0 && len == 2 && cbuf[0] == ‘&’ && cbuf[1] == ‘#’) {
count = 1;
return;
} else if (count == 1) {
int i = 0;
for (; i < len; i++) {
if (cbuf[i] > ‘9’ || cbuf[i] < '0') {
break;
}
}
if (i >= len) {
tempString = new String(cbuf, 0, len);
count = 2;
return;
} else {
super  .write  (“&#”);
}
} else if (count == 2) {
if (len == 1 && cbuf[0] == ‘;’) {
char c[] = new char[1];
c[0] = (char)new Integer(tempString).intValue();

super  .write  (c, 0, 1);
count = 0;
return;
} else {
super  .write  (“&#”);
super  .write  (tempString);
}
}
super  .write  (cbuf, 0, len);
count = 0;
}
}


Java のまとまったプログラムってほとんど書いたことないのでアレですが、いつか誰か(含自分)の参考になればということで。

Tomix 鉄道模型システムガイド

Tomix の鉄道模型システムガイドというものを模型店で見つけました。「システムガイド」ということなので役に立つ情報がいろいろあるかと思い、安価なこともあって反射的に買ってしまいました。しかし、カタログ持っている人には特に必要のない内容でした。カタログに比べて増えている情報といったらレールセットの組み合わせとビギナー用情報(車両の連結方法やパワーパックの扱い等々)なので、今年のカタログを持っている人には不要でしょう。最近のカタログを買ってなくて、「最近自動運転やら新しいポイントやらいろいろ増えてるけどよくわかんなーい」という人には良いと思います。

Cisco PIX/ASA の transparent mode

このところ触る機会が多い Cisco PIX/ASA の話です。Cisco ASA 5500 シリーズ (software version 7.0) の transparent mode を利用する機会がありました。transparent mode は通常の L3 IP forwarding でなく L2 で bridging をする動作モードです。このモードで動作している ASA を Spanning Tree Protocol (STP) が通過するように設定しなければならなかったのですが、これにハマってしまいました。


以下のコマンドで transparent mode での動作となります。


firewall transparent


デフォルトの設定では STP のフレーム (BPDU) は通過しないので ethertype を指定した ACL を inside/outside の両方のインターフェイスに明示的に適用しなければなりません。今回は特に ethertype は制限せず、全て通過するよう any を用いて ACL を作りました。


access-list Ethertypes ethertype permit any
access-group Ethertypes in interface inside
access-group Ethertypes in interface outside


これでうまくいくと思ったのですが、何故かツリーが構成されず、内側と外側で別々の root bridge ができてしまいます。


で結局何が悪かったかというと、物理インターフェイスをそのまま使っていたのがまずかったのです。うまく行かないときは次のように設定していました。


interface Ethernet0/0
speed 100
duplex full
nameif inside
security-level 100
!
interface Ethernet0/1
speed 100
duplex full
nameif outside
security-level 0


実は transparent mode ではサブインターフェイスを使わなければならないのです。次のように設定し直すとうまくいきました。


interface Ethernet0/0
speed 100
duplex full
no nameif
no security-level
!
interface Ethernet0/0.1
vlan 100
nameif inside
security-level 100
!
interface Ethernet0/1
speed 100
duplex full
no nameif
no security-level
!
interface Ethernet0/1.1
vlan 101
nameif outside
security-level 0


inside/outside で別々の VLAN 番号を振らなければなりません。このとき 802.1Q が使われるので、ASA が接続する inside 側のスイッチのインターフェイスは次のような設定になります。


(Catalyst 3550 の例)
interface GigabitEthernet0/1
switchport trunk encapsulation dot1q
switchport trunk allowed vlan 100
switchport mode trunk
no ip address
no cdp enable


物理インターフェイスを使っていた場合でも TCP/IP の ACL による制御機能は普通に動いてしまうのでハマりました。知っていれば何てことないのですが、transparent mode ではサブインターフェイスでの設定が必須ということで。

追記 (2007.9.11)

Cisco の Web サイトの設定例を見ると特に BPDU を通すためにはサブインターフェイスの設定が必要とは書かれていないですね。私の試した 7.0 では NG だったのですが、バージョンによるものかも知れないです。

最近は Cisco のサイトの設定例 (Configuration Examples and TechNotes) が充実してきているのでまずここを探すと良いと思います。

さらに追記 以下のバージョン以降はサブインターフェイス不要のようです。
7.0(6.26)、7.1(2.46)、7.2(2.14)、8.0(0.223)、8.2(0.7)

Microsoft Money 2000 からのアップグレード

そろそろヤバいか (?) と思い Microsoft Money 2000 から 2007 へアップグレードすることにしました。システム要件 を見ると「その他」のところで「Money 2000 以降のデータ ファイルが読み込み可能」とあるので、アップグレードは全然問題なさそうです。


ところが実際にアップグレードして既存の Money 2000 ファイルを読み込もうとすると、


○○ファイルを見つけられません、または開けません。読み取り専用ファイルであるか、書き込みの権限がないか、ディスクドライブが書き込み禁止である可能性があります。


というエラーが表示され Money 2000 で作ったファイルを読み込んでくれません。


困って情報を探すと、



に行き当たり、これをを見ると英語版 Money 98/99 で作ったファイルは Money 2006 以降で自動的に変換してくれないようです。ひょっとしてと思い Money 2002 体験版をダウンロードしていったん Money 2002 用のファイルに変換すると、見事 Money 2007 で読み込んで変換することができるではないですか!


Money 2002 の体験版はデータを読み込んだとたん、


コンピュータのシステムの日付が 2001 年または 2002 年に設定されている必要があります


と言って終了してしまいますが、ファイルの変換はできていました。このファイルを使えば Money 2007 に既存データを読み込むことができます。


推測するに英語版と日本語版で差があって英語版では 99 と 2000 が境目だけれど、日本語版では 2000 と 2001 の間が境界になっているのではないでしょうか。Microsoft のオンラインサポートには Money 日本語版の情報は十分でなく、しかも機械翻訳情報ばかりなので今ひとつです。


なお、実際には 2007 の体験版を用いて上の通りエラーが発生すること&それを解決できることを確認してから購入しています。(体験版だけでなく製品版でも先のエラーが起こります)
実際の購入はインプレスダイレクトで「ダウンロード版 バージョン アップグレード」を購入しました。インプレスダイレクトの利用規約には以下のような条項がありました。


利用者は、商品を購入・管理するために、「ダウンローダー」をダウンロードし、インストールする必要があります。商品の購入方法およびダウンローダーの取扱いについては、本条のほか弊社が別途定めるところに従うものとします。


何か余分なものをインストールさせられるかと身構えましたが、結局製品インストール用の ZIP ファイルをダウンロードするだけで、「ダウンローダー」なるものは不要でした。


久しぶりのアップグレードで税込み \7,140 ならばまあいいかという感じです。ただし機能については経過した年数を考えるとあまり進化を感じないですね。