hosts_access(5) FreeBSD 一般コマンドマニュアル

hosts_access

前のページ 上に戻る 次のページ

hosts_access



解説

       本 マ ニュ アルページは、クライアント (ホストの名前/アドレ
       ス、ユーザ名) とサーバ (プロセス名、ホストの名前/アドレス)
       のパターンをベースとする、単純なアクセス制御言語を解説しま
       す。最後に使用例を示しています。我慢できない方は、てっとり
       早い導入のために、使用例の節へ進んでください。

       拡張バージョンのアクセス制御言語は、 hosts_options(5) 文書
       で解説しています。プログラム構築時に -DPROCESS_OPTIONS  付
       きで構築することにより、拡張機能はオンになります。

       以降の文章においては、 daemon はネットワークデーモンプロセ
       スのプロセス名であり、 client はサービスを要求しているホス
       トの名前やアドレスです。ネットワークデーモンプロセスの名前
       は、inetd 設定ファイルにおいて指定されます。


アクセス制御ファイル

       アクセス制御ソフトウェアは、2 つのファイルを参照します。検
       索は、最初のマッチで終了します。つまり、

       o      (daemon,client)  の組が /etc/hosts.allow ファイルの
              エントリにマッチするとき、アクセスは許可されます。

       o      そ う で な い 場 合、(daemon,client)    の  組  が
              /etc/hosts.deny   ファ イルのエントリにマッチすると
              き、アクセスは拒否されます。

       o      そうでない場合、アクセスは許可されます。

       存在しないアクセス制御ファイルは、そのファイルが空であるも
       のとして扱われます。よって、アクセス制御ファイルをなにも用
       意しないことにより、アクセス制御をオフにすることが可 能 で
       す。


アクセス制御ルール

       各アクセス制御ファイルは、0 個以上のテキスト行を持ちます。
       これらの行は、出現順に処理されます。マッチが検出されたとき
       に、検索が終了します。

       o      改 行文字は、前にバックスラッシュ文字がある場合、無
              視されます。これにより、長い行の分割が可能とな り、
              編集が容易になります。

       o      空行または `#' 文字で開始する行は無視されます。これ
              により、コメントや空白の挿入が可能となり、表が読 み
              易くなります。

       o      他 の す べ て の行は、次の書式を満たす必要がありま
              す。[] の間のものは省略可能です。

                 daemon_list : client_list [ : shell_command ]

       すべてのアクセス制御チェックは大文字小文字の違いは影響あり
       ません。ただし、NIS (YP) の netgroup の検索は例外です。


パターン

       アクセス制御言語は、次のパターンを実装しています。

       o      `.'  文字で開始する文字列。ホスト名は、その最後の部
              分が指定されたパターンにマッチする場合、マッチし ま
              す。 例 え ば、 パ タ ー ン  `.tue.nl' は、ホスト名
              `wzv.win.tue.nl' にマッチします。

       o      `.' 文字で終了する文字列。ホストアドレスは、その 最
              初 の数値フィールドが指定された文字列にマッチする場
              合、マッチします。例えば、パターン `131.155.'  は、
              Eindhoven  University ネットワーク (131.155.x.x) の
              (ほぼ) すべてのホストのアドレスにマッチします。

       o      `@' 文字で開始する文字列は、NIS (以前の YP) の net-
              group   名 として扱われます。ホスト名は、指定された
              netgroup のメンバである場合、マッチします。デーモン
              プロセス名およびクライアントユーザ名では、 netgroup
              のマッチはサポートされていません。

       o      `n.n.n.n/m.m.m.m' 書式の表現は、`net/mask' ペアとし
              て 解 釈されます。 `net' が、アドレスと `mask' とを
              ビットごとに AND したものに等しい場合、ホストアドレ
              ス は マッ チ し ま す。 例 えば、net/mask パターン
              `131.155.72.0/255.255.254.0' は、 `131.155.72.0' か
              ら  `131.155.73.255' までの範囲のすべてのアドレスに
              マッチします。

       o      `[n:n:n:n:n:n:n:n]/m' 書式 の 表 現 は  `[net]/pre-
              fixlen'   ペ ア として解釈されます。 `net' の `pre-
              fixlen' ビットが、アドレスの `prefixlen' ビットと等
              し い場合、 IPv6 ホストアドレスはマッチします。例え
              ば [net]/prefixlen パター ン  `[3ffe:505:2:1::]/64'
              は、        `3ffe:505:2:1::'             か      ら
              `3ffe:505:2:1:ffff:ffff:ffff:ffff' までの範囲のすべ
              てのアドレスにマッチします。

       o      文字 `/' で開始する文字列はファイル名として扱われま
              す。ホスト名またはアドレスは、指定されたファイル 中
              の ホスト名またはアドレスのパターンのいずれかにマッ
              チするとき、マッチします。ファイルの書式は、ホス ト
              名またはアドレスのパターンを空白で区切って 0 個以上
              指定した行が、0 個以上存在するというものです。 ファ
              イ ル名パターンは、ホスト名またはアドレスのパターン
              を使用可能な場所であればどこでも使用可能です。


ワイルドカード

       アクセス制御言語は、明示的なワイルドカードをサポート し ま
       す。
              ワークアドレスを得られなくなるからです。

       KNOWN   名前が既知のすべてのユーザにマッチします。また、名
              前 および アドレスが ともに 既知のすべてのホスト に
              マッ チします。このパターンの使用には注意してくださ
              い。というのは、一時的なネームサーバの問題によ り、
              ホ スト名を得られなくなる場合があるからです。また、
              どのタイプのネットワークに対して話しているのかソ フ
              ト ウェアが分かっていない場合、ネットワークアドレス
              を得られなくなるからです。

       PARANOID
              名前がアドレスにマッチしないすべてのホストにマッ チ
              し ます。 tcpd が -DPARANOID (デフォルトモードです)
              付きで構築された場合、アクセス制御表を検索 す る 前
              に、 このようなクライアントからの要求を落とします。
              このような要求に対して更に制御を行 い た い 場 合、
              -DPARANOID なしで構築してください。


オペレータ

       EXCEPT `list_1 EXCEPT list_2' という形式で使用することを意
              図しています。 list_1 にマッチするもの で、  list_2
              に マッ チ し な いものに、この構造はマッチします。
              EXCEPT オペレータは、daemon_lists  と  client_lists
              で 使用可能です。 EXCEPT オペレータは、入れ子 (ネス
              ト) にすることが可能です。これは、仮に制御言語が 括
              弧 の 使 用を許すとして表記するならば、 `a EXCEPT b
              EXCEPT c' は `(a EXCEPT (b EXCEPT c))' のように解釈
              されます。


シェルコマンド

       最初にマッチしたアクセス制御ルールがシェルコマンドを含む場
       合、このコマンドは %<letter> 置換 (次節参照) の対象にな り
       ま す。置換結果は、標準入出力とエラー出力が /dev/null に接
       続される /bin/sh 子プロセスにより実行されます。実行完了 を
       待 ち た くない場合、コマンドの最後に `&' を指定してくださ
       い。

       シェルコマンドは inetd の PATH の設定に依存してはなりま せ
       ん。 かわりに、絶対パス名を使用するか、明示的な PATH=what-
       ever という文で開始すべきです。

       シェルコマンドフィールドを、これとは異なる互換性のない方法
       で扱う別の言語については、 hosts_options(5) 文書に解説して
       あります。


% の展開

       シェルコマンド中で、次の展開を使用可能です。

       %a (%A)
              クライアント (サーバ) のホストアドレス。


       %p     デーモンプロセス id。

       %s      サ ー バ の 情 報。 こ れは、 daemon@host か、dae-
              mon@address か、単にデーモン名かのいずれかです。 こ
              の うちのどれが使えるかは、得られる情報量に依存しま
              す。

       %u     クライアントユーザの名前 (または "unknown")。

       %%     単一の `%' 文字に展開されます。

       % 展開中の文字でシェルを混乱させ得るものは、アンダスコアに
       置き換えられます。


サーバ終点パターン

       クライアントの区別のために、クライアントが接続しているネッ
       トワークアドレスを使用するには、次の形式のパターンを使用し
       ます。

          process_name@host_pattern : client_list ...

       異なったインターネットアドレスに異なったインターネットホス
       ト名をマシンが持つ場合、このようなパターンを使用可能です。
       サービス提供者がこの機構を使用することにより、複数のインタ
       ーネットの名前を使用して、 FTP, GOPHER, WWW といったアーカ
       イ ブ を提供可能です。この場合、インターネットの名前は、異
       なった組織に属することも可能です。 hosts_options(5) 文書の
       `twist' オプションも参照してください。単一の物理インタフェ
       ースに 1 個以上のインターネットアドレスを持てるシステム が
       あ り ま す (Solaris や FreeBSD)。他のシステムでは、専用の
       ネットワークアドレス空間で、 SLIP や PPP といった擬似イ ン
       タフェースを使用する必要があるかもしれません。

       host_pattern  は、client_list の文脈におけるホストの名前お
       よびアドレスのものと同じ文法ルールに従います。通常、サーバ
       終 点情報は、コネクション指向の (connection-oriented) サー
       ビスにおいてのみ使用可能です。


クライアントユーザ名検索

       クライアントホストが RFC 931 プロトコルまた は そ の 後 継
       (TAP,  IDENT, RFC 1413) をサポートする場合、コネクションの
       所有者に関する追加の情報を、ラッパプログラムが引き出せるよ
       うになります。クライアントのユーザ名情報が得られると、クラ
       イアントホスト名とともに記録され、次のようなパターンマッチ
       に使用可能です。

          daemon_list : ... user_pattern@host_pattern ...

       ルールにもとづいてユーザ名を検索 (デフォルト) するか、常に
       クライアントホストに問い合わせるかの設定は、デーモンラッパ
       のコンパイル時に設定可能です。ルールにもとづいてユーザ名を
       o      TCP ベースのサービスにおいてのみ、かつクライアン ト
              ホ ストが適切なデーモンを実行しているときのみ、ユー
              ザ名検索を使用可能です。他の 場 合 に は、 結 果 は
              "unknown" になります。

       o      ユ ーザ名検索がファイアウォールにブロックされると、
              UNIX カーネルの良く知られた (well-known) バグ に よ
              り、 サービスを失うことがあります。カーネルにこのバ
              グがあるかを判断するための手順は、ラッパ の  README
              文書に解説しています。

       o      ユ ーザ名検索により、非 UNIX ユーザに対する顕著な遅
              延を生じることがあります。ユーザ名検索のデフォル ト
              の タイムアウトは 10 秒です。これは、遅いネットワー
              クに対しては短か過ぎますが、 PC ユーザをいらいら さ
              せるには十分長いです。

       最後の問題は、選択的なユーザ名検索により、緩和可能です。例
       えば、次のようにします。

          daemon_list : @pcnetgroup ALL@ALL

       これは、ユーザ名検索を行わずに、pc netgroup のメンバにマッ
       チします。しかし、他のシステムに対しては、ユーザ名検索を行
       います。


アドレス詐称攻撃の検知

       多くの TCP/IP 実装ににあるシーケンス番号生成器の欠陥 に よ
       り、侵入者が信頼されたホストになりすました上で、例えばリモ
       ートシェルサービスを介して侵入することができま す。  IDENT
       (RFC931 等) のサービスを使用することにより、このような攻撃
       や別のホストアドレス詐称攻撃を検知可能となります。

       クライアントの要求を受け付ける前に、ラッパが IDENT サー ビ
       ス を 使用することにより、そのクライアントが要求をまったく
       送っていなかったことを検知可能です。クライアントホス ト が
       IDENT  サービスを提供している場合、否定的な IDENT 検索結果
       (クライアントが `UNKNOWN@host' にマッチ) は、ホスト詐称 攻
       撃の有力な証拠となります。

       肯 定 的 な IDENT 検索結果 (クライアントが `KNOWN@host' に
       マッチ) は、これより信頼性が低いです。クライアントの接続の
       みを詐称するよりは難しいですが、侵入者がクライアントの接続
       と IDENT 検索の両方を詐称することが可能です。クライアン ト
       の IDENT サーバが嘘をついている可能性もあります。

       注: IDENT 検索は、UDP サービスでは動作しません。


使用例

       この言語は十分柔軟性があるので、ほとんど手間もかけずに、異
       なったタイプのアクセス制御方針を表現可能です。またこの言語
       は  2 つのアクセス制御表を使用しますが、一方の表は単純にし
       この場合、デフォルトではアクセスは拒否されます。明示的に権
       限を与えられたホストのみが、アクセスを許可されます。

       デフォルトの方針 (アクセスを拒否) は、簡単な拒否ファイルに
       より実装されます:

       /etc/hosts.deny:
          ALL: ALL

       これにより、全ホストに対する全サービスが拒否されます。ただ
       し、許可ファイルのエントリにより許可されたアクセスである場
       合は例外です。

       明示的に権限を与えられるホストは、許可ファイルにリストしま
       す。例えば次のようにします:

       /etc/hosts.allow:
          ALL: LOCAL @some_netgroup
          ALL: .foobar.edu EXCEPT terminalserver.foobar.edu

       最初のルールは、ローカルドメインの (ホスト名に `.' を含 ま
       な い) ホストからのアクセスと、 some_netgroup のメンバから
       のアクセスを、許可します。 2 番目のルール は、  foobar.edu
       ドメイン (先頭のドットに注意) の全ホストからのアクセスを、
       許可します。ただし、terminalserver.foobar.edu は例外です。


ほとんど開いている状態

       今度は、デフォルトではアクセスは許可されます。明示的に指定
       されたホストのみが、サービスを拒否されます。

       デフォルトの方針 (アクセスを許可) では許可ファイルは冗長で
       あり、省略可能です。明示的に権限を与えられないホストは、拒
       否ファイルにリストします。例えば次のようにします:

       /etc/hosts.deny:
          ALL: some.host.name, .some.domain
          ALL EXCEPT in.fingerd: other.host.name, .other.domain

       最初のルールは、あるホストとあるドメインに対する全サービス
       を 拒否します。 2 番目のルールは、別のホストと別のドメイン
       からの finger 要求は許可しています。


ブービートラップ

       次の使用例は、ローカルドメイン (先頭のドットに注意) からの
       tftp   要 求を許可します。他のホストからの要求は拒否されま
       す。要求されたファイルの代りに、 finger プローブが攻撃元ホ
       ストに対して送られます。結果はスーパユーザに対してメールさ
       れます。

       /etc/hosts.allow:
          in.tftpd: LOCAL, .my.domain

       ください。かけてしまうと、finger の無限ループになります。

       ネットワークファイアウォールシステムでは、このトリックをさ
       らに幅広く活用できます。典型的なネットワークファイアウォー
       ルでは、外部の世界に対して限定されたサービスのみを提供しま
       す。 他 の全サービスは、前述の tftp の使用例と同様の方法で
       「監視」可能です。その結果、素晴しい早期警戒システムができ
       ます。


診断

       次の場合、エラーが報告されます。ホストアクセス制御ルールに
       文法エラーがある場合、アクセス制御ルールが内部バッファの容
       量 を 越えた場合、アクセス制御ルールが改行文字で終端されな
       かった場合、 %<letter> の展開結果が内部バッファを溢れさ せ
       た場合、失敗すべきでないシステムコールが失敗した場合です。
       すべての問題は、syslog デーモンを介して報告されます。


実装に関する注

       オペレーティングシステムによっては、 TCP Wrappers を基本シ
       ステムの一部として配布されているものがあります。このような
       システムでは、ネットワークユーティリティにラッピング機能を
       組み込むのが一般的です。特に、システムによっては、 tcpd(8)
       が不要な inetd(8) を提供しているものがあります。詳細につい
       ては、システムの文書を確認してください。


関連ファイル

       /etc/hosts.allow, アクセスを許可された (daemon,client) のペア。
       /etc/hosts.deny, アクセスを拒否された (daemon,client) のペア。


関連項目

       tcpd(8) tcp/ip デーモンラッパプログラム。
       tcpdchk(8), tcpdmatch(8), テストプログラム。


バグ

       ネームサーバの検索がタイムアウトすると、ホスト名が登録され
       ていたとしても、アクセス制御ソフトウェアはホスト名を使用で
       きなくなります。

       ドメインネームサーバの検索は大文字小文字を区別しません。一
       方、 NIS (以前の YP) の netgroup の検索は大文字小文字を 区
       別します。


作者

       Wietse Venema (wietse@wzv.win.tue.nl)
       Department of Mathematics and Computing Science
       Eindhoven University of Technology
       Den Dolech 2, P.O. Box 513,
       5600 MB Eindhoven, The Netherlands





ABELNET VPSサービス