inetd(8) は複数のデーモンに対する接続を制御するので、 「インターネットスーパサーバ」 と呼ばれます。 ネットワークサービスを提供するプログラムは、 一般的にデーモン呼ばれます。inetd は他のデーモンを管理するサーバを努めます。 接続が inetd によって受け付けられると、 inetd は接続がどのデーモンに対するものか判断して、 そのデーモンを起動し、ソケットを渡します。 inetd を 1 つ実行することにより、 それぞれのデーモンをスタンドアロンモードで実行することに比べ、 全体としてのシステム負荷を減らします。
基本的に、inetd は他のデーモンを起動するために使用されます。しかし、 chargen, auth および daytime のようなささいなプロトコルは直接扱われます。
この節ではコマンドラインオプションおよび設定ファイル
/etc/inetd.conf
による
inetd の設定の基本を説明します。
inetd は
/etc/rc.conf
の仕組によって初期化されます。
デフォルトでは inetd_enable
オプションは
「NO」 に設定されています。
しかし多くの場合、sysinstall
でセキュリティプロファイルを
medium に設定することにより、有効化されます。
または
を
/etc/rc.conf
に置くことで、起動時に
inetd を有効または無効にできます。
さらに inetd_flags
オプションによって、
いろいろなコマンドラインオプションを
inetd に渡すことができます。
inetd 書式
inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname]
[-p filename] [-R rate] [configuration file]
デバッグモードにします。
成功した接続のログをとります。
外部サービスに対して TCP Wrapper を有効にします (デフォルト)。
inetd 組み込みの内部サービスに対して TCP Wrapper を有効にします (デフォルト)。
サービス毎に同時に起動可能な最大値のデフォルトを指定します。
デフォルトでは無制限です。サービスごとに指定する
max-child
パラメータで上書きできます。
1 分間にひとつの IP アドレスから起動されるサービスの、
最大値のデフォルトを指定します。デフォルトは無制限です。
サービスごとに指定する
max-connections-per-ip-per-minute
パラメータで上書きできます。
あるサービスを 1 分間に起動できる最大の数を指定します。 デフォルトは 256 です。rate に 0 を指定すると、 起動可能な数は無制限になります。
バインドする IP アドレスを一つ指定します。 代わりにホスト名も指定できます。この場合、ホスト名に対応する IPv4 または IPv6 アドレスが使用されます。通常 inetd が jail(8) 内で起動される時点で、ホスト名が指定されます。この場合、 ホスト名は jail(8) 環境に対応するものです。
ホスト名指定が使用され、
IPv4 および IPv6 両方にバインドしたい場合、
/etc/inetd.conf
の各サービスに対して、
各バインドに対する適切なプロトコルのエントリが必要です。
たとえば TCP ベースのサービスは、
ひとつはプロトコルに 「tcp4」 を使用し、
もう一つは 「tcp6」 を使用する、
2 つのエントリが必要です。
デフォルトとは異なる PID を保持するファイルを指定します。
/etc/rc.conf
内の
inetd_flags
オプションを用いて、これらのオプションを
inetd に渡すことができます。デフォルトでは
inetd_flags
は 「-wW」 に設定されており、
これは inetd
の内部および外部サービスに対して TCP wrapper を有効にします。
初心者ユーザはこれらのパラメータを変更する必要は通常ありませんし、
/etc/rc.conf
に入力する必要もありません。
外部サービスは、接続を受け取ったときに起動される inetd の外部にあるデーモンで、 それに対して、内部サービスは inetd 自身が提供する内部のデーモンです。
inetd の設定は
/etc/inetd.conf
ファイルによって制御されます。
/etc/inetd.conf
が変更されたときは、
以下のように inetd プロセスに
HangUP シグナルを送ることにより、inetd
に設定ファイルを再読み込みさせられます。
設定ファイルのそれぞれの行は、
個々のデーモンについての指示になります。
ファイル内のコメントは 「#」 が先頭につきます。
/etc/inetd.conf
の書式は以下のとおりです。
IPv4 を利用する ftpd デーモンのエントリの例です。
これは特定のデーモンのサービス名です。
これは /etc/services
内のサービスリストに対応していなければなりません。
これは inetd
がどのポートで受け付けなければならないかを決定します。
新しいサービスが作成された場合、まずはじめに
/etc/services
内に記載しなければなりません。
stream
,
dgram
, raw
または
seqpacket
のどれかを指定します。
stream
はコネクションに基づいた TCP デーモンに使用しなければならず、
一方で dgram
は
UDP 転送プロトコルを利用したデーモンに対して使用されます。
次のうちのどれか 1 つを指定します。
プロトコル | 説明 |
---|---|
tcp, tcp4 | TCP IPv4 |
udp, udp4 | UDP IPv4 |
tcp6 | TCP IPv6 |
udp6 | UDP IPv6 |
tcp46 | TCP IPv4 および v6 の両方 |
udp46 | UDP IPv4 および v6 の両方 |
wait|nowait
は
inetd から起動したデーモンが、
自分のソケットを管理できるかどうかを示します。
通常マルチスレッド化されている stream ソケットデーモンは
nowait
を使用するべきである一方、
dgram
ソケットタイプは
wait オプションを使用しなければなりません。
nowait
は新しいソケット毎に子のデーモンを起動する一方で、
wait
は通常複数のソケットを 1 つのデーモンに渡します。
inetd
が起動できる子のデーモンの最大数は
max-child
オプションで設定できます。
特定のデーモンに対して、起動する数が
10 までという制限が必要な場合、
nowait
の後に /10
を置きます。
max-child
に加えて、他にある
1 つの場所から特定のデーモンへの最大接続数を制限するオプションが利用できます。
max-connections-per-ip-per-minute
がそれです。ここに 10 を指定すると、特定の
IP アドレスからの特定のサービスへの接続を
1 分間につき 10 回に制限します。
これは故意または故意でない資源の浪費および、
マシンへのサービス不能 (DoS) 攻撃を防ぐのに有用です。
wait
または
nowait
はこの欄に必ず必要です。
max-child
および
max-connections-per-ip-per-minute
は任意です。
max-child
または
max-connections-per-ip-per-minute
制限をかけない
stream タイプのマルチスレッドデーモンの設定は
nowait
になります。
作成できる子プロセスの上限が 10 である同じデーモンの設定は
nowait/10
になります。
さらに、
1 分間に IP アドレスあたりの接続制限が 20、
子プロセスの上限が 10 である同じデーモンの設定は
nowait/10/20
になります。
以下のように、これらのオプションはすべて fingerd デーモンのデフォルト設定に使われています。
user はあるデーモンが実行するときのユーザ名を指定します。
一般的にデーモンは root
ユーザとして実行します。セキュリティを考慮して、
いくつかのサーバは daemon
ユーザ、
または最低の権限が与えられている nobody
ユーザとして実行することも多く見られます。
接続を受け取ったときに実行するデーモンのフルパスです。
デーモンが inetd
によって内部的に提供されるサービスの場合
internal
を使用します。
ここには、起動するときにデーモンに渡される、
argv[0] から始まる引数を指定して、
server-program
と協調して動作します。
mydaemon -d がコマンドラインの場合、
server program arguments
の値に
mydaemon -d
を指定します。
また、デーモンが内部サービスの場合、ここに
internal
を指定します。
インストールの時に選択したセキュリティプロファイルによっては、 多くの inetd のデーモンがデフォルトで有効になっているかもしれません。 あるデーモンが特に必要でない場合には、それを無効にしてください! 問題となっているデーモンが記述されている行の先頭に 「#」 をおいて inetd にハングアップシグナルを送ってください。 fingerd のようないくつかのデーモンは、 動かそうとすべきではないかもしれません。なぜなら、 それらは攻撃者に対してあまりにも多くの情報を与えるからです。
セキュリティをあまり考慮せず、
接続試行に対してタイムアウトまでの時間が長いか、
タイムアウトしないデーモンもあります。
これは、特定のデーモンに攻撃者がゆっくり接続要求を送ることによって、
利用可能なリソースを飽和させることを可能にします。ある種のデーモンに
ip-per-minute
および max-child
制限を設けることはよい考えかもしれません。
TCP wrapper はデフォルトで有効です。 inetd から起動されるさまざまなデーモンに対して TCP 制限を設けることの詳細については hosts_access(5) マニュアルページを参照してください。
daytime, time, echo, discard, chargen および auth はすべて inetd が内部的に提供するサービスです。
auth サービスは identity (ident, identd) ネットワークサービスを提供し、 ある程度設定可能です。
詳細については inetd(8) マニュアルを参照してください。
本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。