13-3. ファイアウォ−ルとDNS (1) named.boot でのフォワ−ド指定 '96〜 * フォワ−ド指定の概要 DNS の "単一スプリット・ドメイン構成" は、外部に内部ネットのホスト名情報をさらし たくない場合の DNS の設定方法である。外部用の DNS と内部用の DNS を設ける。 内部 用の DNS には、内部ホストの情報しか基本的に載せない。 これでは内部ホストから外部 にアクセスができない。そこで内部用 DNS に細工をし、この DNS で分からないホスト名 を、外部用 DNS に問い合わせるようにする。これは DNS の "フォワ−ド指定" という機 能である。そして "単一スプリット・ドメイン構成" を実装するためには、DNS の "管理 ゾ−ンの範囲" と "複数の nameserver 指定の意味" を理解する必要がある。さらに外部 用 DNS に内部ホストの情報が無いことによる問題、 DNS の逆引きに答えられないという 問題にも実運用では解決しなければならない。 [ フォワ−ド指定のテスト ] hostA hostB named ■ 1 □ 2 | | -------------------------------- 192.9.200.0 | ------ | | hostX hostY ------ named ■ 3 □ 4 | | | -------------------------------- 192.9.201.0 * hostA の named の設定 /etc/named.boot ----------------------------------------------------- |cache . /etc/named.ca |primary nix.co.jp /etc/named.hosts |primary 200.9.192.in-addr.arpa /etc/named.rev |primary 0.0.127.in-addr.arpa /etc/named.local named.hosts と named.rev には、hostA の 192.9.200.1 と hostB の 192.9.200.2 の情 報のみ記述する。 /etc/named.ca ------------------------------------------ |. IN NS hostA.nix.co.jp. << '.' のところ nix.co.jp. でもいい。 |hostA.nix.co.jp. IN A 192.9.200.1 * hostX での named の設定 /etc/named.boot ------------------------------------------ |cache . /etc/named.ca << 一応これも入れておくこと。 |forwarders 192.9.200.1 << cache, forwarders, slave はお揃い |slave で使うと思ってよい。 /etc/named.ca ------------------------------------------ |. IN NS hostX.nix.co.jp. << '.' のところ nix.co.jp. でもいい。 |hostX.nix.co.jp. IN A 192.9.201.3 上記 cache の記述はフォワ−ド指定には関係ないはずである。 しかしこれをなしにする と、下記 ping は応答しなかった。また cache の項目があるため、hostX の named には hostA に問い合わせた時のデ−タを保持することになる。 hostX の named は代理検索し、 かつ結果を蓄えて、同じ検索要求がきたら、直ちに答えるという働きをするわけである。 * hostY の resolver の設定 /etc/resolv.conf ------------------------ |nameserver 192.9.201.3 hostY % ping hostB.nix.co.jp 上記のように ping をかけると hostB.nix.co.jp のIPアドレスを検索するため、 自ホ ストの /etc/resolv.conf を見て、192.9.201.3 の named に問い合わせる。 この named は何も知らない。しかしどこに聞いたら分かるかは知っている。これが forwarders 部で ある。言ってみれば代理で聞いてくれるわけだ。 hostX の named には forwarders の他、 slave も指定してある。 これは forwarders 指定したIPアドレスの named にのみ聞く ように制限する。forwarders 指定する場合は、slave も必ずつけた方が named の設定と して間違いがなくてよい。slave の記述がないと、 forwarders 先で名前解決ができなか ったら named.ca のル−トキャッシュ情報や、これまでキャッシュした情報を元に、問い 合わせしていくことになる。 (2) フォワ−ド指定とファイアウォ−ル `21/03 * DNS の forward 機能の確認 hostA はWWWサ−バ、hostB はメ−ルサ−バとして実際に稼働している中でのテストで ある。hostB の named を hostA の named のフォワ−ド指定として設定、 稼働させてみ る。内部ネットワ−クのホストは hostB の named を参照するようにする。つまり各ホス トでのネ−ムサ−バの指定を 192.168.1.1 とするのである。ここでは hostD,Windows 98 をネ−ムサ−バ 192.168.1.1、Netscape Communicator はプロキシを使わない直接インタ −ネット接続の設定にする。HTTP のプロキシの設定をすると、 DNS パケットの動きが違 ってくるので、ここではシンプルな設定にした。マシンは hostA,B とも Solaris 2.6 で ある。Solaris では named ではなく、実際は in.named である。 hostA | WWW ■ □ Router named |.3 | hostD の Windows パソコンの --------------------- 202.241.128.0 DNSの設定は、ネ−ムサ−バを | 192.168.1.1 とする。 FireWall-1 ------ | | hostB hostC hostD ------ ■ □ INDY □ Windows | named |.1 |.3 |.4 ---------------------------------------------- 192.168.1.0 [ hostB での設定 ] /etc/named.boot --------------------------- |forwarders 202.241.128.3 << もう問い合わせは全部 hostA の named に回す。 |slave /etc/resolv.conf ファイルなし << このホストではWWWブラウザも使わないため。 /etc/nsswitch.conf で dns なし --------------------------- |hosts: files | | # /usr/sbin/in.named & << DNS の named デ−モンを起動する。 # /usr/sbin/in.named -d 1 & << named デ−モンを起動した後にやること。次のよ # cat /var/tmp/named.run うにデバッグ・ファイル named.run ができる。 Debug turned ON, Level 1 Version = named 4.9.4-P1 bootfile = /etc/named.boot ns_init(/etc/named.boot) forwarders 202.241.177.65 sched_maint: Next interrupt in 900 sec exit ns_init() * DNS パケットの流れの確認 hostB と hostA の間では UDP/53 を通せばいいことが以下で分かる。 フォワ−ドの DNS を設けることによって、ファイアウォ−ルのル−ル設定を絞り込むことができる。以下は hostC の INDY でパケットの流れをみたところである。 hostD の Windows パソコンから、 どこか外に http://www.iij.ad.jp/ などとアクセスすると、 www.iij.ad.jp のIPアド レスを hostB 192.168.1.1 の DNS に問い合わせる。ここでは分からないので、この DNS は hostA 202.241.128.3 の DNS に問い合わせる。そして結果を hostB の DNS に返して hostB が hostD に知らせていることが読める。 % tcpdump -n src 192.168.1.4 and udp 15:02:00.541072 192.168.1.4.1033 > 192.168.1.1.53: 1+ (36) 1つのホスト名の問 15:02:14.682368 192.168.1.4.1036 > 192.168.1.1.53: 2+ (32) い合わせで1つ % tcpdump -n src 192.168.1.1 and udp 15:20:00.153734 192.168.1.1.53 > 202.241.128.3.53: 42794+ (31) (DF) 2つで1組 15:20:00.157453 192.168.1.1.53 > 192.168.1.4.1072: 1 1/3/3 (170) (DF) * hostB の named のキャッシュの確認 # ps -e | grep in.named 2963 ? 0:00 in.named # kill -INT 2963 << DNS のキャッシュ情報を /var/tmp/named_dump.db に吐き出す。 # cat named_dump.db << まだメモリに何も蓄えられていない。 ; Dumped at Thu Mar 22 13:41:00 2001 ;; ++zone table++ ;; --zone table-- ; Note: Cr=(auth,answer,addtnl,cache) tag only shown for non-auth RR's ; Note: NT=milliseconds for any A RR which we've used as a nameserver ; --- Cache & Data --- ; --- Hints --- # nslookup << www.iij.ad.jpのIPアドレスを問い合わせてみる。 Default Server: localhost このマシンでは、/etc/resolv.conf ファイルがな Address: 127.0.0.1 くても nslookupコマンドが使えることに注意した い。 > www.iij.ad.jp Server: localhost Address: 127.0.0.1 Non-authoritative answer: ※ IIJ さんを例にさせて頂きました。 Name: www.iij.ad.jp 有名税だと思って許して下さい。 Address: 202.232.2.13 > exit # kill -INT 2963 << さあ、今度は情報がキャッシュされているかな。 # cat named_dump.db ; Dumped at Thu Mar 22 13:43:13 2001 ;; ++zone table++ ;; --zone table-- ; Note: Cr=(auth,answer,addtnl,cache) tag only shown for non-auth RR's ; Note: NT=milliseconds for any A RR which we've used as a nameserver ; --- Cache & Data --- $ORIGIN ad.jp. iij 85759 IN NS dns0.IIJ.AD.jp. ;Cr=addtnl [202.241.128.3] 85759 IN NS dns1.IIJ.AD.jp. ;Cr=addtnl [202.241.128.3] 85759 IN NS ns.tokyo.wide.AD.jp. ;Cr=addtnl [202.241.128.3] $ORIGIN iij.ad.jp. dns0 85759 IN A 202.232.2.44 ;Cr=addtnl [202.241.128.3] dns1 85759 IN A 202.232.15.18 ;Cr=addtnl [202.241.128.3] www 85609 IN A 202.232.2.13 ;Cr=answer [202.241.128.3] $ORIGIN tokyo.wide.ad.jp. ns 171125 IN A 203.178.136.61 ;Cr=addtnl [202.241.128.3] $ORIGIN nix.co.jp. www 3507 IN A 202.241.128.3 ;Cr=addtnl [202.241.128.3] $ORIGIN 0.127.in-addr.arpa. 0 3507 IN NS www.nix.co.jp. ;Cr=addtnl [202.241.128.3] $ORIGIN 0.0.127.in-addr.arpa. 1 3507 IN PTR localhost. ;Cr=auth [202.241.128.3] ; --- Hints --- (3) 単一スプリット・ドメイン構成 '96〜 * ネットワ−ク構成の例 一応分かりやすくするため、バリアネットと内部ネットのIPアドレスは公式なIPアド レスとした。これが基本でクラスBをサブネットにする場合とか。hostG でIPアドレス 変換して、内部ネットにプライベ−トアドレスを使うとかいった応用になる。電子メ−ル については、DNS で内部ネットのホスト情報を隠したいということから、hostA で受けて hostB に中継する設定が自然である。もし hostA が直接、 内部ホストにメ−ルを配送し ようとすると hostA でも結局、内部ホストの情報を持たなくてはならなくなる。 メ−ルリレ−、メ−ルサ−バ構成だと hostA と hostB 間でのメ−ルの中継において、そ れぞれの sendmail は hostA,B のIPアドレスを知る必要がある。 このためには、それ ぞれのホストの /etc/hosts ファイルにIPアドレスを記述する。 hostA,B の DNS に相 手ホストの情報を追加するやり方もあるが、 hostA の named に内部ホストである hostB の情報を入れることになってしまう。これは面白くない。 メ−ルリレ− | インタ−ネットへ ------- named -------- |hostA| MX hostA |Router| ------- -------- | .1 | ---*-----------*----------*------------ 202.241.128.0、公式IPアドレス | nix.co.jp ドメイン パケットフィ ------- ------- メ−ルサ−バ ルタリング |hostG| |hostB| named ------- ------- | | .1 ---------------*----------*------------ 202.241.129.0、公式IPアドレス |.3 |.4 nix.co.jp ドメイン □ □ hostX hostY * hostA の named の設定 /etc/named.boot ------------------------------------------------------------- |cache . /etc/named.ca |primary nix.co.jp /etc/named.hosts |primary 128.241.202.in-addr.arpa /etc/named.rev |primary 0.0.127.in-addr.arpa /etc/named.local named.ca はインタ−ネット用のル−ト・キャッシュ・ファイルである。 /etc/named.hosts -------------------------------------------------------------- |@ IN SOA hostA.nix.co.jp. katou.hostA.nix.co.jp. ( | 1 3600 300 3600000 360000 ) | IN NS hostA.nix.co.jp. | IN MX 0 hostA.nix.co.jp. | |localhost. IN A 127.0.0.1 |hostA IN A 202.241.128.1 /etc/named.rev -------------------------------------------------------------- |@ IN SOA hostA.nix.co.jp. katou.hostA.nix.co.jp. ( ... 上に同じ。 | IN NS hostA.nix.co.jp. |1 IN PTR hostA.nix.co.jp. * hostB の named の設定 /etc/named.boot -------------------------------------------------------------- |cache . /etc/named.ca |primary nix.co.jp /etc/named.hosts |;primary 129.241.202.in-addr.arpa /etc/named.rev << 内部で使うだけだから |primary 0.0.127.in-addr.arpa /etc/named.local 別になくても構わない。 | |forwarders 202.241.128.1 << 分からないホスト名は、ここに聞きにいく。 |slave /etc/named.ca ------------------------------------------ |. IN NS hostB.nix.co.jp. |hostB.nix.co.jp. IN A 202.241.129.1 /etc/named.hosts -------------------------------------------------------------- |@ IN SOA hostB.nix.co.jp. katou.hostB.nix.co.jp. ( | 1 3600 300 3600000 360000 ) | IN NS hostB.nix.co.jp. | |localhost. IN A 127.0.0.1 |hostB IN A 202.241.129.1 |hostX IN A 202.241.129.3 |hostY IN A 202.241.129.4 * hostX,Y の resolver の設定 /etc/resolv.conf -------------------------- |nameserver 202.241.129.1 * 追加要求 a. 内部ホストから hostA のWWWサ−バにドメイン名でアクセスしたい hostB /etc/named.hosts -------------------------------------------------------------- |@ IN SOA hostB.nix.co.jp. katou.hostB.nix.co.jp. ( ... |hostX IN A 202.241.129.3 |hostY IN A 202.241.129.4 | |hostA IN A 202.241.128.1 << 追加する。別にこの記述は問題ない。 b. 逆引きに答えるようにしたい hostA /etc/named.rev -------------------------------------------------------------- |@ IN SOA hostA.nix.co.jp. katou.hostA.nix.co.jp. ( ... | IN NS hostA.nix.co.jp. |1 IN PTR hostA.nix.co.jp. | |* IN PTR unknown.nix.co.jp. << 何でもいいから返答する。 内部のホスト hostX,Y からインタ−ネットのホストにアクセスして、 IPアドレスの逆 引きをされた場合の対応である。 逆引きの結果ドメイン名は unknown.nix.co.jp を返す ことになる。 (4) IPアドレスの逆引きチェック '96〜 * DNS による認証の問題 セキュリティを強化したWWWサ−バや、anonymous FTP サイトへアクセスしようとする と許可されない場合が出てきたと、雑誌等に最近書かれている。本当にそうなのか確認し たわけではないが。これはどうもアクセス元のIPアドレスから、DNS を使ってちゃんと ホスト名があるか調べているだけのようである。つまり逆引きファイルもちゃんと設定さ れているかを見ている。DNS の逆引きによるチェックというが認証ではない。本当に認証 するならば、IPアドレスからホスト名を検索して、そのホスト名から更にIPアドレス をゲットする。両者のIPアドレスが等しければ本物であると分かる。 どうも現時点ではこのような認証を組み込んだアプリケ−ションは、ファイアウォ−ルの tcp_wrapper のオプション設定ぐらいしかない。anonymous FTP の wuftpd も設定できる みたいだが。rlogin、rsh、sendmail、netstat は DNS の逆引きを行うのみで、ホスト名 さえ引いてくればよしとするようである。アクセス拒否するわけではない。tcpdump でも 使って、どんなパケットが飛んでいるかチェックしてみたい。逆引きはWWWサ−バへの アクセス・ログをIPアドレスでなく、ホスト名で記録する場合にも用いられる。 だいぶ長いこと、この逆引きの話しは理解できなかった。DNS は当初、逆引き用の制御フ ァイルは用意しなくても構わないということだったらしい。それとアクセスにあたっては IPアドレスさえ分かれば DNS は無くてもできてしまう。 アクセス元のIPアドレスが 信用に足るものかどうか何も分からない。インタ−ネットに接続するホストは、基本的に は全て DNS の管理下にあるはずだし、そうでなければならない。 それならば逆引き用の 制御ファイルもちゃんと用意し、DNS 管理下にあることをチェックできるようにしようと いう狙いがあると考えられる。 [自ホスト] ---> 自ホストのIPアドレスで [相手ホスト] へアクセス % mosaic http://www.tcp-ip.or.jp/ 相手ホストではIPアドレスからホスト名を検索 ホスト名=gethostbyaddr(IPアドレス) [ 検索できるかどうかだけをみている ] ↓認証する場合 さらに検索したホスト名からIPアドレスを引く IPアドレス=gethostbyname(ホスト名) [ IPアドレスが一致するかチェック ] * 何が問題か コネクションフィルタリング型のファイアウォ−ルの場合は、問題になることはない。内 部ホストから外部へのアクセスは全て、ファイアウォ−ルのホストからのアクセスになる。 このファイアウォ−ルのホストのバリアネット側のIPアドレスは、 自社の DNS に登録 することによって、相手ホストからの逆引きの問い合わせに答えることができる。しかし パケットフィルタリング型のファイアウォ−ルでは、DNS をバリアネットと内部ネットで を分けて管理する。 このため、バリアネットの DNS には内部ホストの情報を持っていな いため、逆引きの要求に答えられないのである。 -------------------------------------------------------------------------------- 内部ネットのホスト名情報を外部から隠したい。隠そうとするとアクセスできなくなる!。 --------------------------------------------------------------------------------
Fig. d41
上図にはもう1つ別な問題がある。JPNIC に登録する DNS のIPアドレスは hostA のも のである。上記例では hostB の DNS がインタ−ネットに問い合わせしている。DNS の機 能からすれば別段問題があるようには思えない(ただし内部ネットのIPアドレスも公式 の場合)。多分本来的には、hostB の DNS には hostA を forwarders 指定し、slave 指 定もすべきだろう。分からないIPアドレスの検索は、インタ−ネットのル−ト・キャッ シュに送るのでなく、自サイトの公式 DNS を経由させるのがまっとうではないだろうか。 * 逆引きチェックへの対応 幾つかの方法がある。設定は hostA の DNS で行う。 [b][c] のやり方はちゃんとテスト して確認する必要がある。注意点は、これらの設定をした場合 named デ−モンを再起動 しなければならない。それに named 制御ファイルのシリアル番号も更新して、 プロパイ ダに設置してもらっている2次ネ−ムサ−バにも変更を伝えなければならないことである。 [a] /etc/named.hosts ---------------------------- |hostC IN A 202.241.128.35 << 内部ネットのホスト hostC を追加する。 内部ネットのホスト全部が外部のWWWなどにアクセスしたいというようなことは困 る。結局、内部ネットのホスト情報を外部に全部公開することになってしまう。この 方法が有効なのは特定の内部ホストが ftp をやりたいけどといった場合に限られる。 [b] /etc/named.hosts ---------------------------- | IN NS hostB.nix.co.jp. << 内部ネット用のネ−ムサ−バを追加する。 この設定はできない。内部ネットが nix.co.jpのサブドメインならできるが。しかし これも [a] と同じく、内部ネットのホストの情報を公開することになり面白くない。 [c] /etc/named.rev --------------------------------------------------- |*.3.2.127.in-addr.arpa. IN PTR UNKNOWN.bar.com. 本「ファイアウォ−ル」P.62〜63、ソフトバンク刊にあるやり方である。何でもいい からホスト名を返事してしまえということである。しかし、逆引きチェックだけでな く、認証も行うとなれば UNKNOWN.bar.com のIPアドレスは何ということになる。 * 電子メ−ル受取りへの対応から [ その1]
Fig. d42
「UNIX MAGAZINE」'95/06 に掲載されているマ−ジサ−バの話である。hostC をマ−ジサ −バと呼んでいる。ここの話は電子メ−ルの配送を、内部ネットのホスト情報を隠しつつ、 DNS で可能にするための方法である。外からの電子メ−ルは hostA の DNS の MX レコ− ドにより、hostC に中継される。 hostC まで来ると内部ネットの hostB で管理している DNS のコピ−情報があるため、それによって内部ホストに電子メ−ルが配送されるという ことである。 [ その2] これも本「ファイアウォ−ル」P.62〜63 に掲載されているやり方である。 電子メ−ルは とりあえず hostA に配送される。 hostA から各内部ホストのユ−ザに配送することにな る。この時に /etc/resolv.conf により、 内部ホスト用の DNS を見にいくという具合で ある。ただし、単一スプリット・ドメイン構成の場合は確認すること。 ------- DNS /etc/resolv.conf に hostB を指定 |hostA| ------- MX hostA | -----*-----*--------------- a ドメイン(公式IPアドレス) | パケットフィ------- ------- ルタリング | | |hostB| DNS ------- ------- | | -------*---------*----- b.a サブドメイン(公式IPアドレス) [ その3] ------- DNS |hostA| ------- MX hostA、メ−ルリレ− | -----*----*--------------- a ドメイン(公式IPアドレス) | ------- ------- DNS または /etc/hosts | | |hostB| ------- ------- メ−ルサ−バ | | ------*---------*-----(プライベ−トIPアドレス) このケ−スは先の2つとは少し事情が違う。内部ネットのホスト名情報を外部から隠した いのではなく、外に出さないようにしなければならないのである。プライベ−トなIPア ドレスを外部に出してはならない。 外部からのメ−ルは hostA の sendmail が先ず受け る。すぐに hostB の sendmail に中継する。配送はここから行う。 hostB で内部ホスト のIPアドレスを、内部だけの DNS か /etc/hosts で管理すればいいのである。 (5) DNS 逆引きの確認テスト * DNS の逆引きに答える 本「ファイアウォ−ル」P.62〜63、ソフトバンク刊に書かれている、IPアドレスの逆引 きに答えるやり方を検証してみる。 /etc/named.rev の "*.3.2.127.in-addr.arpa. IN PTR UNKNOWN.bar.com." テストの方法は、下記のようなテスト等価環境で、"12-1. CERN httpd サ−バ" のWWW サ−バのログのとり方でやってみた。その結果 CERN の % httpd -v によるアクセスログ を見ると、ちゃんと逆引きに答えていることが分かった。 % httpd -v | TCP......... Peer name is `unknown.nix.co.jj' << hostA からアクセスした。 Reading..... socket 6 from host 192.9.200.1 TCP......... Peer name is `hostB.nix.co.jj' << hostB からアクセスした。 Reading..... socket 6 from host 192.9.200.2 * 確認テストの環境 ------- hostB の DNSが、インタ−ネットにドメイン登録 |hostB| 外部用 DNS されている。hostA からインタ−ネットのホスト ------- にアクセスしようとすると、相手がIPアドレス | を逆引きする場合、hostB の DNSにホスト名を尋 ------------------ 192.9.200.0 ねにくる。 | □ パケットフィルタリング | --------------- 192.9.201.0 | ------- 外部も引ける内部用 DNS |hostA| ------- ‖ テスト等価環境:hostA,B の DNS の働きだけに注目する。下図では hostA には DNS はなし。hostA,B は同じセグメントに配置してある。 ------- ------- httpd (WWW) /etc/httpd.conf |hostA| |hostB| named (DNS) --------------- ------- ------- resolv.conf |DNS-lookup On | .1 | .2 -------*-----------------------*-------- nix.co.jj ドメイン 192.9.200.0 hostA のWWWブラウザから、hostB のWWWサ−バにアクセスする。WWWブラウザは この時 Mosaic を使用した。% mosaic http://192.9.200.2。 WWWサ−バはアクセスさ れると、httpd.conf の "DNS-lookup On" の設定により、 IPアドレス 192.9.200.1 を 元に、ホスト名を調べようとする。 hostB の /etc/resolv.conf の名前解決を hostB 自 身にしてあれば、hostB の named に 192.9.200.1 について問い合わせをする。しかしこ の named の逆引きファイルには、192.9.200.1 は記載されていない。 しかし何でもマッ チする 192.9.200.* があるので 192.9.200.1 がマッチし、ホスト名 unknown.nix.co.jj を返すことになる。何でもマッチするといっても、192.9.200.0 ネットワ−クのIPアド レスの範囲である。つまり hostA が実際のネットワ−ク環境、上記では 192.9.201.0 に ある場合は、この方法では対応できないことになる。 * hostB の named 制御ファイル /etc/named.boot ----------------------------------------------------- |cache . /etc/named.ca << 一応これも用意すること。 |primary nix.co.jj /etc/named.hosts |primary 200.9.192.in-addr.arpa /etc/named.rev |primary 0.0.127.in-addr.arpa /etc/named.local << とりあえずなくてもよい。 /etc/named.hosts ------------------------------------------------------------- |@ IN SOA hostB.nix.co.jj. katou.hostB.nix.co.jj. ( | 1996040101 3600 300 3600000 360000 ) | IN NS hostB.nix.co.jj. |localhost. IN A 127.0.0.1 |hostB IN A 192.9.200.2 << hostA の部分が無いことに注意したい。 /etc/named.rev -------------------------------------- |;@ から 360000 ) まで同じ | IN NS hostB.nix.co.jj. |2 IN PTR hostB.nix.co.jj. << 2 と * の項目は逆でも構わない。ちゃん |* IN PTR unknown.nix.co.jj. とマッチしないIPアドレス以外は * こ れと扱われる。 * この現象はいかに '02/04/27 200.241.128.3 ftp.xxx.ne.jp Fire ホストには FireWall-1 を入れて ------- www : いて、内部ホストのIPアドレスをグロ |hostA| | −バルIPアドレス 200.241.128.2 に ------- DNS1次 □Router 変換する。それにセキュリティ対策のた | | め Fire ホストには ping も効かないよ -------*-------*----------- nix.co.jp うにしている。 そしてhostA の DNS は | fire 200.241.128.2 の逆引きデ−タも含めて 200.241.128.2 ------- ------- いる。設定に問題はなさそうである。し |Fire | |hostB| かしこれで、ftp アクセスが拒否される 192.168.1.2 ------- ------- 場合が出てきた。 | | 192.168.1.1 ----------------*---------*----- hostB % ftp ftp.xxx.ne.jp Connected to ftp.xxx.ne.jp. このサイトは wu-ftpd Ver. 2.6.0 を使っている。 220- 220- VALIDATION_CHECKING and DNS_PROOFING of the PASSWORD. 220- 220 FTP server (Version wu-2.6.0(WIN) Sun Dec 26 06:00:00 JST 1999) ready. Name (ftp.xxx.ne.jp:katou): anonymous 530- Sorry, we are unable to map your IP address [200.241.128.2] 530- to a hostname in the DNS. This is probably because your nameserver 530- does not have a PTR record for your address in its tables, or because 530- your reverse nameservers are not registered. We refuse service to 530- hosts whose name cannnot resolve. | アクセスが拒否された hostA % ftp ftp.xxx.ne.jp hostB から外部のある ftpサイトにアクセスした OK.アクセスできる。 ら、こんなようにアクセスが拒否されてしまった。 IPアドレスの逆引きができないと出ている。そ hostB % nslookup こで念のため % nslookup コマンドで調べてみた。 Default Server: www.nix.co.jp ちゃんと逆引きもできている。hostA からだと問 Address: 200.241.128.3 題なくアクセスできるので、DNS 登録の不具合で はないといえる。それでは一体どうなっているの > fire.nix.co.jp か。多分 ftp.xxx.ne.jp から 200.241.128.2 に Server: www.nix.co.jp %ping のようなチェックをかけているのでないか。 Address: 200.241.128.3 一度 FireWall-1 の設定をかえて %ping、つまり Name: fire.nix.co.jp ICMP を 200.241.128.2 が受け付けるようにして Address: 200.241.128.2 みる。これで確認してみるしかないか。具体的に IPアドレスの逆引きチェックに、ひっかかった > 200.241.128.2 のは初めてだ。 これからは ftp サイトのみなら Server: www.nix.co.jp ず、 HTTP サイトでもチェックをかけるところが Address: 200.241.128.3 出てくるかも知れない。 Name: fire.nix.co.jp Address: 200.241.128.2 * アクセス元チェックのいろいろ `24/05 自分がどこかにアクセスする場合。IIJ のWWWサ−バ、www.iij.ad.jp としようか。最 寄りのDNSサ−バに www.iij.ad.jp のIPアドレスを問い合わせる。 返ってきたその IPアドレスで IIJ のWWWサ−バにアクセスする。 この際WWWサ−バにアクセスさ れた方は、アクセスしに来た相手先に対して次の様な挙動をとることになる。 1) そのままノ−・チェックでアクセスさせる。Apache や sendmail など主要なサ−バソ フトでも、デフォルトは何もチェックしないようになっている。 2) アクセスしてきたIPアドレスを逆引きして、 そのホスト名がインタ−ネット上に存 在するか調べる。そして調べるだけでアクセスさせる、または拒否する。 3) 逆引きしてホスト名がインタ−ネット上に存在し、 かつ正引きしてホスト名からIP アドレスを引いて一致するか調べる。調べるだけでアクセスさせる、または拒否する。 * 逆引きに対応するソフト `24/05 [ tcp_wrapper ] /etc/inetd.conf /etc/deny ------------------------- tcp_wrapper のプログラム --------------- | | ↓ |ALL: PARANOID |telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd コンパイルはソ−スを展開したままでは、 Makefile に PARANOID= -DPARANOID と記述が あり、アクセスしてきたIPアドレスからホスト名を検索し、さらにホスト名からIPア ドレスを検索して一致するか調べる。 そのこと自体を tcp_wrapper では PARANOID と言 っている。アクセス制御ファイルは /etc/allow と /etc/deny である、 自分で記述する。 /etc/deny でアクセスを拒否したい サ−ビス:ホスト を列挙する。上の /etc/deny の記 述は、コンパイルで PARANOID 指定なしで tcpd プログラムを作って、稼働時にPARANOID 指定する場合である。/etc/allow と /etc/deny では allow 指定が優先される。 tcp_wrappers_7.6 の README を見たら、"4.2 - Host name spoofing" に PARANOID のこ とが、"4.3 - Host address spoofing"、"4.4 - Client username lookups" に IDENT の ことが書かれていた。Makefile には HOSTNAME= -DALWAYS_HOSTNAME の記述、どうやらい ろいろアクセス制限ができるようである。他、参考としては http://www.linux.or.jp/JM には hosts_access と tcpd のマニュアルがある。「UNIX MAGAZINE」1992/02,"UNIX の玉手箱 tcp_wrappers と NIS サ−バ−の設定" も詳しい。 [ wu-ftpd ] ftpaccess ファイルに次のように記述すると、ア /etc/ftpaccess クセスしてきたホストで、そのドメインのネ−ム --------------------------------- サ−バが動いてないと拒否する。拒否する際には、 |deny !nameservedで指定したファイルを表示する。 WU-FTPD Development Group がメンテンスをしている。http://www.wu-ftpd.org/ が公式 サイト。最新は "WU-FTP SERVER, RELEASE 2.6.2 - November, 2001"。 展開した doc 内の ftpaccess のマニュアルには次のように書かれている。"Always deny access to host(s) matching . is displayed. may be "!nameserved" to deny access to sites without a working nameserver. [ tcpserver ] % tcpserver -H -R -v -x /etc ... このプログラムはどうか?、分かりにくいですが。 djbdns や qmail の作者が作った ucspi-tcp パッケ−ジに入っているソフト。 オリジナ ルはここ、 http://cr.yp.to/ucspi-tcp/tcpserver.html に "Data-gathering options:" 以下にオプションの説明がある。デ−タ収集オプションということで、要はリモ−トホス トの名前やIPアドレスなど調べるけど、どうするかは設定する人にお任せということら しい。日本語訳は http://tools.qmail.jp/ucspi-tcp/tcpserver.html にある。 オプションの説明。 -p はパラノイド( PARANOID )を行なってIPアドレスが結果、一致 すれば環境変数の $TCPREMOTEHOSTをセットする。-P はパラノイドは行わない、デフォル ト。-h はリモ−トホスト名を調べ $TCPREMOTEHOST をセットする、デフォルト。-H はリ モ−トホスト名は調べない。-r は IDENT を行ない環境変数 $TCPREMOTEINFO をセットす る、デフォルト。-R は IDENT は行なわない。果て、環境変数の仕組みがどうだったか?。 [ OpenSSH ] /usr/local/etc/sshd_config 2004/04/19 にリリ−スされた移植版 OpenSSH の --------------------------- 3.8.1p1 でも確認。逆引きチェックのオプション | | にかつて VerifyReverseMapping no(デフォルト) |#UseDNS yes というのがあった?。今は UseDNS に変わり、デ | | フォルトはチェックするの yesになっている。し かしチェックしても拒否はしないようである。 openssh-3.7.1p2 を展開した ChangeLog -------------------------------------------------------------------------- |20030603 | | deprecate VerifyReverseMapping since it's dangerous if combined | with IP based access control as noted by Mike Harding; replace with | a UseDNS option, UseDNS is on by default and includes the | VerifyReverseMapping check; with itojun@, provos@, ... openssh-3.7.1p2 を展開した sshd_config.5.out -------------------------------------------------------------------------- |UseDNS Specifies whether sshd should lookup the remote host name and | check that the resolved host name for the remote IP address maps | back to the very same IP address. The default is ``yes''.