名
hosts_access - ホストアクセスLinux制御ファイルの形式。
説明
このマニュアルページでは、クライアント(ホスト名/アドレス、ユーザー名)、およびサーバー(プロセス名、ホスト名/アドレス)のパターンに基づいた単純なアクセス制御言語としてのLinuxについて説明します。例は最後に記載されています。手間のかかる読者は、簡単な紹介のために例のセクションに飛ぶことをお勧めします。アクセス制御言語の拡張バージョンについては、 hosts_options (5)文書。拡張機能は、プログラムのビルド時に-DPROCESS_OPTIONSを使用してビルドすることで有効になります。
以下の文章では、 デーモン は、ネットワークデーモンプロセスのプロセス名です。 クライアント サービスを要求しているホストの名前および/またはアドレスです。ネットワークデーモンのプロセス名は、inetd構成ファイルで指定されます。
アクセス制御ファイル
アクセス制御ソフトウェアは2つのファイルを参照します。最初の試合で検索が停止します。
アクセスは、(デーモン、クライアント)のペアが /etc/hosts.allow ファイル。
それ以外の場合は、(デーモン、クライアント)のペアが /etc/hosts.deny ファイル。
それ以外の場合は、アクセスが許可されます。
存在しないアクセス制御ファイルは、空のファイルであるかのように扱われます。したがって、アクセス制御ファイルを提供しないことによって、アクセス制御をオフにすることができます。
アクセス制御ルール
各アクセス制御ファイルは、0行以上のテキスト行から構成されています。これらの行は、外観順に処理されます。一致が見つかると検索が終了します。
改行文字の前にバックスラッシュ文字がある場合、改行文字は無視されます。これにより、長い行を分割して編集しやすくなります。
空行または `# '文字で始まる行は無視されます。これにより、コメントと空白を挿入してテーブルを読みやすくすることができます。
他のすべての行は、次の形式を満たす必要があります。間のものはオプションです。
daemon_list:client_list :shell_command
daemon_list 1つ以上のデーモンプロセス名(argv 0値)またはワイルドカード(下記参照)のリストです。
client_list クライアントホスト名またはアドレスと照合される1つ以上のホスト名、ホストアドレス、パターンまたはワイルドカード(下記参照)のリストです。
より複雑なフォーム デーモン@ホスト そして ユーザー@ホスト サーバーエンドポイントパターンとクライアントユーザー名参照のセクションでそれぞれ説明します。
リストの要素は空白および/またはコンマで区切る必要があります。
NIS(YP)ネットグループルックアップを除き、すべてのアクセス制御チェックでは大文字と小文字が区別されません。
パターン
アクセス制御言語は、次のパターンを実装します。
`。 'で始まる文字列。キャラクター。ホスト名は、その名前の最後の構成要素が指定されたパターンと一致する場合にマッチします。たとえば、パターン `.tue.nl 'はホスト名` wzv.win.tue.nl'と一致します。
`。 'で終わる文字列。キャラクター。最初の数値フィールドが指定された文字列と一致する場合、ホストアドレスは一致します。たとえば、パターン「131.155」。アイントホーフェン大学のネットワーク(131.155.x.x)のすべてのホスト(ほとんど)のアドレスと一致します。
`@ '文字で始まる文字列はNIS(以前のYP)ネットグループ名として扱われます。指定されたネットグループのホストメンバーである場合、ホスト名は一致します。デーモンプロセス名またはクライアントユーザー名では、Netgroup一致はサポートされていません。
`n.n.n.n / m.m.m.m 'の形式の表現は` net / mask'の対として解釈されます。 `net 'がアドレスと` mask'のビット単位の論理積と等しい場合、IPv4ホストアドレスはマッチします。たとえば、ネット/マスクパターン `131.155.72.0/255.255.254.0 'は、` 131.155.72.0'から `131.155.73.255 'までのすべてのアドレスと一致します。
`n:n:n:n:n:n:n:n / m 'という形式の表現は` net / prefixlen'の対として解釈されます。 `net 'の` prefixlen'ビットがアドレスの `prefixlen 'ビットと等しい場合、IPv6ホストアドレスはマッチします。たとえば、3ffe:505:2:1 :: / 64のnet / prefixlenパターンは、3ffe:505:2:1 ::〜3ffe:505:2: 1:ffff:ffff:ffff:ffff '。
`/ '文字で始まる文字列はファイル名として扱われます。ホスト名またはアドレスは、指定されたファイルにリストされているホスト名またはアドレスパターンと一致する場合に一致します。ファイル形式は0個以上の行で、0個以上のホスト名またはアドレスパターンが空白で区切られています。ファイル名パターンは、ホスト名またはアドレスパターンを使用できる場所であればどこでも使用できます。
ワイルドカード `* 'と`?'ホスト名またはIPアドレスの照合に使用できます。このマッチングの方法は `net / mask 'のマッチング、`。'で始まるホスト名マッチングと組み合わせて使うことはできません。 IPアドレスのマッチングは `。 'で終わります。
ワイルドカード
アクセス制御言語は、次のような明示的なワイルドカードをサポートしています。
'すべて'
ユニバーサルワイルドカードは常に一致します。
'地元'
名前にドット文字が含まれていないホストに一致します。
'道の'
名前が不明な任意のユーザに一致し、名前が または アドレスは不明です。このパターンは注意して使用する必要があります。一時的なネームサーバーの問題のために、ホスト名を使用できない可能性があります。ネットワークアドレスは、ソフトウェアがどのタイプのネットワークと通信しているのか把握できない場合は使用できません。
'知らせる'
名前がわかっているすべてのユーザーと一致し、名前が そして アドレスは既知である。このパターンは注意して使用する必要があります。一時的なネームサーバーの問題のために、ホスト名を使用できない可能性があります。ネットワークアドレスは、ソフトウェアがどのタイプのネットワークと通信しているのか把握できない場合は使用できません。
'PARANOID'
名前がアドレスと一致しないホストに一致します。 tcpdが-DPARANOID(デフォルトモード)で構築されると、アクセス制御テーブルを調べる前にそのようなクライアントからの要求を削除します。このような要求をより詳細に制御したい場合は、-DPARANOIDなしでビルドします。
「オペレーター」
'EXCEPT'
意図された使用の形式は `list_1 EXCEPT list_2 ';このコンストラクトは一致するものと一致します リスト1 一致しない限り リスト2 。 EXCEPT演算子は、daemon_listsとclient_listsで使用できます。 EXCEPT演算子は入れ子にすることができます。制御言語がかっこの使用を許可する場合、 `EXCEPT b EXCEPT c 'は`(EXCEPT(b EXCEPT c))'として解析されます。
シェルコマンド
最初に一致したアクセス制御ルールにシェルコマンドが含まれている場合、そのコマンドには%置換が適用されます(次のセクションを参照)。結果は、 / bin / sh 標準入力、出力、およびエラーが接続された子プロセス / dev / null 。完了するまで待たない場合は、端末コマンドの最後に `& 'を指定してください。
シェルコマンドは、inetdのPATH設定に依存してはいけません。代わりに、絶対パス名を使用するか、明示的なPATH = whateverステートメントで始める必要があります。
ザ hosts_options (5)ドキュメントには、シェルコマンドフィールドを異なる互換性のない方法で使用する代替言語が記載されています。
%拡張
シェルコマンドでは、次の拡張が利用できます。
%a(%A) - クライアント(サーバー)のホストアドレス。
%c - クライアント情報:利用可能な情報の量に応じて、user @ host、user @ address、ホスト名、またはアドレスのみ。
%d - デーモンプロセス名(argv 0値)。
%h(%H) - ホスト名が使用できない場合は、クライアント(サーバー)のホスト名またはアドレス。
%n(%N) - クライアント(サーバー)ホスト名(または "不明"または "パラノイド")。
%p - デーモンプロセスID。
%s - サーバー情報:利用可能な情報の量に応じて、daemon @ host、daemon @ address、または単にデーモン名。
%u - クライアントのユーザー名(または「不明」)。
%% - 単一の `% '文字に展開されます。
シェルを混乱させる可能性のある%拡張の文字は、アンダースコアで置き換えられます。
サーバーエンドポイントパターン
接続先のネットワークアドレスでクライアントを区別するには、次の形式のパターンを使用します。
process_name @ host_pattern:client_list …
マシンが異なるインターネットホスト名を持つ異なるインターネットアドレスを持つ場合、これらのパターンを使用できます。サービスプロバイダは、この機能を使用して、FTP、GOPHERまたはWWWアーカイブを提供することができます。 hosts_options(5)ドキュメントの `twist 'オプションも参照してください。いくつかのシステム(Solaris、FreeBSD)は、1つの物理インタフェース上に複数のインターネットアドレスを持つことができます。他のシステムでは、専用のネットワークアドレス空間に存在するSLIPまたはPPP疑似インターフェイスに頼らざるを得なくなる可能性があります。
host_patternは、client_listコンテキスト内のホスト名およびアドレスと同じ構文規則に従います。通常、サーバーのエンドポイント情報は、接続指向のサービスでのみ使用できます。
クライアントユーザー名検索
クライアントホストがRFC 931プロトコルまたはその子孫(TAP、IDENT、RFC 1413)のいずれかをサポートする場合、ラッパープログラムは接続の所有者に関する追加情報を取得できます。利用可能な場合、クライアントのユーザー名情報は、クライアントのホスト名と一緒に記録され、次のようなパターンの照合に使用できます。
daemon_list:… user_pattern @ host_pattern …
コンパイル時にデーモンラッパーを設定して、ルール駆動型のユーザー名検索(デフォルト)を実行したり、クライアントホストに常に問い合せたりすることができます。ルール駆動のユーザー名検索の場合、上記のルールはユーザー名の参照を daemon_list そしてその host_pattern 一致。
ユーザーパターンはデーモンプロセスパターンと同じ構文を持つので、同じワイルドカードが適用されます(netgroupメンバシップはサポートされていません)。しかし、ユーザー名検索で怒られるべきではありません。
クライアントのユーザ名情報は、最も必要とされるとき、すなわちクライアントシステムが侵害されたときに信頼されることはできない。一般的には、ALLと(UN)KNOWNは理にかなっている唯一のユーザー名パターンです。
ユーザー名の検索は、TCPベースのサービスでのみ可能で、クライアントホストが適切なデーモンを実行している場合にのみ可能です。それ以外の場合は「不明」となります。
よく知られているUNIXカーネルのバグは、ユーザー名の参照がファイアウォールによってブロックされていると、サービスが失われる可能性があります。ラッパーのREADME文書には、カーネルにこのバグがあるかどうかを調べるための手順が記載されています。
ユーザー名の参照は、UNIX以外のユーザーに顕著な遅延を引き起こす可能性があります。ユーザー名参照のデフォルトのタイムアウトは10秒です。遅いネットワークには対応するには時間がかかりませんが、PCユーザーを苛立たせるほど長くなります。
選択的なユーザー名検索は、最後の問題を緩和することができます。たとえば、次のようなルールがあります。daemon_list:@pcnetgroup ALL @ ALL
ユーザ名検索を行わずにpcネットグループのメンバーに一致しますが、他のすべてのシステムでユーザ名検索を実行します。 多くのTCP / IP実装のシーケンス番号ジェネレータの欠陥により、侵入者は信頼できるホストを偽装したり、リモートシェルサービスなどを介して侵入したりすることが容易になります。IDENT(RFC931など)サービスは、そのようなホストアドレススプーフィング攻撃を検出するために使用できます。 ラッパーは、クライアント要求を受け入れる前に、IDENTサービスを使用して、クライアントが要求をまったく送信しなかったことを知ることができます。クライアントホストがIDENTサービスを提供する場合、ネガティブIDENT検索結果(クライアントは `UNKNOWN @ host 'と一致します)は、ホストスプーフィング攻撃の強力な証拠です。 正のIDENT検索結果(クライアントは `KNOWN @ host 'にマッチします)は信頼性が低くなります。侵入者がクライアント接続とIDENTルックアップの両方を偽装する可能性はありますが、クライアント接続だけをスプーフィングするよりもはるかに難しくなります。また、クライアントのIDENTサーバーが横たわっていることもあります。 注:IDENTルックアップはUDPサービスでは機能しません。 この言語は柔軟性があり、さまざまなタイプのアクセス制御ポリシーを最小限に抑えることができます。言語は2つのアクセス制御テーブルを使用しますが、最も一般的なポリシーは、テーブルの1つを些細なもの、または空のもので実装することができます。 以下の例を読むときには、許可テーブルが拒否テーブルの前でスキャンされ、一致が検出されたときに検索が終了し、一致が全く見つからない場合にそのアクセスが許可されることに気づくことが重要です。 例では、ホスト名とドメイン名を使用しています。アドレスやネットワーク/ネットマスクの情報を含めることで、一時的なネームサーバー検索の失敗の影響を減らすことができます。 この場合、アクセスはデフォルトで拒否されます。明示的に許可されたホストだけがアクセスを許可されます。 デフォルトポリシー(アクセスなし)は、些細な拒否ファイルで実装されています: /etc/hosts.deny:ALL:ALL これにより、allowファイルのエントリによるアクセスが許可されていない限り、すべてのホストに対するすべてのサービスが拒否されます。 明示的に許可されたホストは、許可ファイルにリストされます。例えば: /etc/hosts.allow:ALL:ローカル@some_netgroupALL:.foobar.eduを除いてterminalerver.foobar.edu 最初のルールは、ローカルドメインのホストからのアクセスを許可します(ホスト名の `。 'は含まれません)。 some_netgroup ネットグループ。 2番目のルールは、すべてのホストからのアクセスを許可します。 foobar.edu ドメイン(先頭のドットに気付く) terminalserver.foobar.edu . ここでは、デフォルトでアクセスが許可されます。明示的に指定されたホストだけがサービスを拒否されます。 既定のポリシー(アクセスが許可されている)では、許可ファイルを冗長にして省略することができます。明示的に許可されていないホストは、拒否ファイルにリストされます。例えば: /etc/hosts.deny:ALL:some.host.name、.some.domainALL以外のin.fingerd:other.host.name、.other.domain 第1のルールは、いくつかのホストとドメインすべてのサービスを拒否します。第2のルールは依然として他のホストおよびドメインからのフィンガー要求を許可する。 次の例では、ローカルドメインのホストからのtftp要求を許可しています(先頭のドットに注意してください)。他のホストからの要求は拒否されます。要求されたファイルの代わりに、フィンガープローブが問題のホストに送信されます。結果はスーパーユーザーに郵送されます。 /etc/hosts.allow: in.tftpd:LOCAL、.my.domain/etc/hosts.deny:in.tftpd:ALL:spawn(/ some / where / safe_finger -l @%h | / usr / ucb / mail -s%d-%hルート)&
safe_fingerコマンドにはtcpdラッパーが付属しており、適切な場所にインストールする必要があります。これは、リモートフィンガーサーバによって送信されるデータから起こりうる損傷を制限します。これは、標準的なfingerコマンドより優れた保護を提供します。 %h(クライアントホスト)と%d(サービス名)シーケンスの拡張については、シェルコマンドのセクションで説明しています。 警告: あなたが無限の指ループの準備ができていない限り、あなたの指デーモンをブービートラップしないでください。 ネットワーク・ファイアウォール・システムでは、このトリックをさらに実行することができます。典型的なネットワークファイアウォールは、外界に対して限られたサービスしか提供しません。他のすべてのサービスは、上記のtftpの例のように "盗聴"することができます。結果は、優れた早期警告システムです。 tcpd(8)tcp / ipデーモンラッパープログラム。tcpdchk(8)、tcpdmatch(8)、テストプログラム。
重要: 使用 おとこ コマンド( % おとこ 特定のコンピュータでどのようにコマンドが使用されているかを確認することができます。 アドレスのなりすまし攻撃の検出
例
ほとんどクローズド
ほとんどオープン
ブービートラップ
関連項目




