xinetdの設定ファイルは以下のようになります:
/etc/xinetd.conf — グローバルな xinetd設定ファイル。
/etc/xinetd.d/ディレクトリ — 全てのサービス特有のファイルを含んだディレクトリ。
/etc/xinetd.confには、xinetdの制御の元で 全てのサービスが影響を受ける一般的な構成の設定が含まれています。xinetd サービスが開始される時に1回だけ読み込まれるため、設定の変更が反映されるようにするためには 管理者はまた、xinetdサービスを再起動する必要があります。以下にサンプルの /etc/xinetd.confファイルを示します:
defaults { instances = 60 log_type = SYSLOG authpriv log_on_success = HOST PID log_on_failure = HOST cps = 25 30 } includedir /etc/xinetd.d |
これらの行は、xinetdのさまざまな側面を制御します:
instances — xinetdが 1度に対処できる最大の要求数を設定します。
log_type — xinetdを設定して authprivログ設備を使用します。これはログエントリーを /var/log/secureファイルに書き込みます。 FILE /var/log/xinetdlogのようなディレクティブをここに 追加すると、/var/log/ディレクトリの中にxinetdlogと 言うカスタムログファイルを作成します。
log_on_success — xinetdを設定して、接続が成功したか どうかをログします。デフォルトでは、リモートホストの IPアドレスと要求をプロセスしているサーバーのプロセスIDが 記録されます。
log_on_failure — xinetdを設定して、接続失敗があるかどうか 又は、接続が許可されていないかどうかをログします。
cps — xinetdを設定して どのサービスにも毎秒25接続以上は許可しないようにします。この限度に到達 した場合は、サービスは30秒だけ休憩します。
includedir /etc/xinetd.d/ —/etc/xinetd.d/ディレクトリに あるサービス特有の設定ファイルで宣言してあるオプションを含めます。このディレクトリの 詳細については項15.4.2を参照して下さい。
注意 | |
---|---|
多くの場合、/etc/xinetd.conf内のlog_on_successと log_on_failureの両方の設定は、さらにサービス特有のログファイルで編集され ます。この理由で、このファイルが示す以上に該当するサービスログにはより多くの情報が表示される 可能性があります。ロギングオプションの詳細については項15.4.3.1を 御覧下さい。 |
/etc/xinetd.d/ディレクトリ内のファイルには、xinetdで 管理されている各サービスの設定ファイルと、そのサービスに関連したファイルの名前が含まれて います。xinetd.confの場合と同様にこのファイルはxinetd サービスが開始する時にだけ読み込まれます。変更を反映させるためには、管理者はxinetd サービスを再起動する必要があります。
/etc/xinetd.d/ディレクトリ内のファイルのフォーマットは /etc/xinetd.confと同じ慣例を使用します。各サービスの 設定が別々のファイルに格納されている主な理由は、カスタマイズを簡単にすることと、 他のサービスに影響を与える可能性が少なくなるからです。
これらのファイルがどのように構成されるかを知るには、 /etc/xinetd.d/telnetファイルを考慮して下さい:
service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = yes } |
これらの行は、telnetサービスのさまざまな側面を制御します:
service — サービス名を定義します。 通常、/etc/servicesファイルにリストしてある サービスに合わせます。
flags — 接続の為の必要な数の属性を セットします。REUSEはxinetdに対して Telnet接続のソケットを再使用するように指示します。
socket_type — ネットワークソケットの タイプをstreamに設定します。
wait — サービスがシングルスレッド(yes)か 又はマルチスレッド(no)かを定義します。
user — プロセスが実行に使用するユーザーIDを定義します。
server — 始動する予定のバイナリ実行ファイルを定義します。
log_on_failure — 既にxinetd.confに 定義している物に追加して、log_on_failure用のロギングパラメータを定義します。
disable — サービスが有効かどうか定義します。
xinetdで保護されているサービス用には利用できる多くの種類の ディレクティブがあります。このセクションはより一般的に使用されているオプションの 一部を強調して説明します。
以下のロギングオプションは、/etc/xinetd.confと /etc/xinetd.d/ディレクトリ内のサービス特有の 設定ファイルの両方で利用できます。
以下により一般的に使用されているロギングオプションの一覧を表示します:
ATTEMPT — 失敗の試行があった事実をログします (log_on_failure)。
DURATION — リモートシステムによって使用された サービスの時間の長さをログします(log_on_success)。
EXIT — サービスの終了ステータス、又は終結シグナルを ログします(log_on_success)。
HOST — リモートホストのIPアドレス(log_on_failureと log_on_success)をログします。
PID — 要求を受けているサーバーのプロセスIDをログします (log_on_success)。
RECORD — サービスがスタートできない場合に、リモートシステムに 関する情報を記録します。loginやfingerなどの特定の サービスのみがこのオプション(log_on_failure)を使用できます。
USERID — 全てのマルチスレッドシステムの為に RFC 1413で定義された方法を使用しているリモートユーザーをログします (log_on_failureとlog_on_success)。
ロギングオプションの総合的リストについては、xinetd.confのmanページを 御覧下さい。
xinetdのユーザーは、TCPラッパーホストアクセス規則の使用か、 xinetd設定ファイル経由でのアクセス制御の用意か、又はその 両方を選択できます。TCPラッパーホストアクセス制御ファイルの使用に関する情報は 項15.2で見ることができます。このセクションでは サービスへのアクセスを制御するためのxinetdの使用を説明します。
注意 | |
---|---|
TCPラッパーとは異なり、xinetdの管理者がxinetdサービスを 再起動した場合にのみ、アクセス制御への変更が反映されます。 |
xinetdホストアクセス制御は、TCPラッパーで使用されている方法と 異なります。TCPラッパーが全てのアクセス設定を2つのファイル、/etc/hosts.allowと /etc/hosts.denyに配置するのに対して、/etc/xinetd.d内の 各サービスファイルはそれ自身のアクセス制御規則を含むことができます。
以下のホストアクセスオプションは、xinetdによってサポートされています:
only_from — 特定のホストのみにサービスの使用を許可します。
no_access — リストにあるホストのサービス利用を拒否する。
access_times — 特定のサービスが利用できる時間幅を指定する。 この時間幅は24時間形式でHH:MM-HH:MMの表示をする必要があります。
only_fromとno_accessオプションは IPアドレス又はホスト名の一覧、あるいはネットワーク全体の指定ができます。 TCPラッパーの様に、強化ロギング設定と共にxinetdアクセス 制御を結合することにより、それぞれの接続試行の記録を詳細に取りながら、 禁止されているホストからの要求をブロックしてセキュリティを強化できます。
例えば、以下の/etc/xinetd.d/telnetファイルは、特定の ネットワークグループからのTelnetアクセスをブロックして、許可されたユーザーに さえも、ログイン可能な時間帯を制限する為に使用できます:
service telnet { disable = no flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID no_access = 10.0.1.0/24 log_on_success += PID HOST EXIT access_times = 09:45-16:15 } |
この例では、10.0.1.2などの10.0.1.0/24ネットワークのクライアントシステムが、 Telnetサービスにアクセスを試みた場合、以下のように表示したメッセージを受け取る ことになります:
Connection closed by foreign host. |
さらに、彼らのログイン試行は、次のように/var/log/secureの 中に記録されます:
May 15 17:38:49 boo xinetd[16252]: START: telnet pid=16256 from=10.0.1.2 May 15 17:38:49 boo xinetd[16256]: FAIL: telnet address from=10.0.1.2 May 15 17:38:49 boo xinetd[16252]: EXIT: telnet status=0 pid=16256 |
TCPラッパーをxinetdアクセス制御と併用する場合、2つの アクセス制御メカニズム間の関係を理解することが重要です。
クライアントが接続の要求をした時、xinetdによって続けられる 動きの順序を以下に示します:
xinetdデーモンはlibwrap.aライブラリコールを 経由して、TCPラッパーホストアクセス規則にアクセスします。もし拒否の規則がクライアントホストに 適合するならば、その接続は切断されます。許可の規則がクライアントホストと適合する場合、接続が xinetdに渡されます。
xinetdデーモンは、xinetdサービスと 要求されたサービスの両方の為に、自身のアクセス制御規則をチェックします。もし、 拒否の規則がクライアントホストに適合する場合、接続は切断されます。その他の 場合は、xinetdは要求されたインスタンスを開始して接続の 制御を渡します。
重要 | |
---|---|
TCPラッパーアクセス制御をxinetdアクセス制御と併用する場合、 注意が必要です。設定ミスは良からぬ結果を招くことになります。 |
xinetd用のサービス設定は、サービスをあるIPアドレスに バインドし、そのサービス用の要求を別のIPアドレス、ホスト名、あるいは ポートへリダイレクトします。
バインディングは、サービス特有の設定ファイルの中でbindオプションと 共に制御されており、サービスをシステム上のIPアドレスと連結します。設定されると、 bindオプションは、正式なIPアドレスの為の要求のみをそのサービスへ アクセスする許可をします。この方法で異なるサービスは異なるネットワークインターフェイスに 需要ベースでバインドできます。
これは、特に複数のネットワークアダプターか、複数のIPアドレスを設定したシステムには 便利なものです。このようなシステムでは、Telnetなどの安全でないサービスはプライベートな ネットワークに接続されているインターフェイス上でのみリッスンするようにして、インターネット 接続のインターフェイスではリッスンしないように設定できます。
redirectオプションは、IPアドレス又はホスト名とそれに続く ポート番号を受け付けます。サービスを設定して、このサービス用の要求を全て 指定したホストか、又はポート番号にリダイレクトできるようにします。この機能は 同じシステム上のポートから別のポートへポイントする、あるいは要求を同じマシン上の 別のIPアドレスへリダイレクトする、あるいは要求を全く別のシステムとポート番号へ 移動する、あるいはこれらのオプションの組合せをする場合に使用できます。この様に して、システム上の特定のサービスに接続しているユーザーは、問題なく他のシステムへ 回送されるようにできます。
xinetdデーモンは、リクエストを送信したクライアントマシンと実際にサービスを提供する ホストが接続されている間だけ有効なプロセスを生成し、2つのシステム間でデータを転送することによって、 このリダイレクトを実現します。
bindとredirectオプションの利点は、 それらが一緒に使用される時にはっきりと判別できます。サービスをシステム上の 特定のIPアドレスにバインドして、その後そのサービス用の要求を1番目のマシンだけが 見ることができる2番目のマシンにリダイレクトすることにより、内部のシステムが 全く別のネットワークの為にサービスを提供することに使用できます。別の方法として 複数ホームのマシン上の特定のサービスが、既知のIPアドレスへの露呈されることを 制限したり、またそのサービスの要求をその目的用に特定の設定をしたマシンへ リダイレクトするのに使用できます。
例えば、Telnetサービス用にこの設定でファイアウォールとして使用されている システムを考えて見ましょう:
service telnet { socket_type = stream wait = no server = /usr/sbin/in.telnetd log_on_success += DURATION USERID log_on_failure += USERID bind = 123.123.123.123 redirect = 10.0.1.13 21 23 } |
このファイル内のbindとredirectオプションは、 マシン上のTelnetサービスがインターネットに向けた外部IPアドレス(123.123.123.123)に バインドされていることを確定します。さらには、123.123.123.123に送信された Telnetサービスへの要求は2番目のネットワークアダプターを通じて、内部IPアドレスの 10.0.1.13にリダイレクトされ、これはファイアウォールと内部のシステムしかアクセス できないようになっています。ファイアウォールはその後、その2つのシステム間で通信を しますので、接続しているシステムは実際には別のマシンに接続されている状態でも 123.123.123.123に接続されているように見えます。
この機能は、ブロードバンド接続で1つの固定IPアドレスをしているユーザーに 特に役に立ちます。NAT(Network Address Translation)を使用するとき、 内部専用のIPアドレスを使用する、ゲートウェイマシンの背後にあるシステムは ゲートウェイマシン外部のマシンからは利用できません。しかし、xinetdで 制御されている特定のサービスがbindとredirect オプションで設定されている場合、そのゲートウェイマシンは外部システムとサービスを 提供するように設定されている特定の内部マシン間でのプロキシの一種として動作することが できます。さらには、各種のxinetdアクセス制御とロギングオプションが、 リダイレクトされたサービスの同時接続の数量を制限するなどの、追加の保護が提供されることに なります。
xinetdデーモンは、DoS(Denial of Serviceサービスの拒否)攻撃から に対する基本的レベルの保護を追加することができます。以下のリストでは、そのような 終りのない攻撃を制限できるディレクティブを表示します:
per_source — ソースIPアドレス毎のサービス用の インスタンスの最大数を定義します。これは整数のみを引数として受け付け、 xinetd.conf内とxinetd.d/のサービス 特有の設定ファイル内で使用できます。
cps — 毎秒の接続最大数を定義します。 このディレクティブは中間にスペースを入れた2つの整数引数を使います。 1番目は1秒間に接続が許可される最大数です。2番目はサービスを再開始 する時にxinetdが待機する必要のある時間の秒数です。 整数のみを引数として受け付け、xinetd.conf内と xinetd.d/ディレクトリのサービス特有の設定 ファイル内の両方で使用できます。
max_load — サービスのCPU使用限界を 定義します。これは引数に小数点を受け付けます。
他にも利用できるxinetd用のリソース管理オプションは あります。詳細はRed Hat Linux セキュリティ ガイド内のサーバー セキュリティという章を御覧下さい。また、xinetd.confの manページも参照して下さい。