スーパーサーバの設定と管理
デーモンプロセスは常時メモリ上に待機し、クライアントからの要求を監視している。そのため、使用されていない時も、メモリなどのリソースを消費している。
常駐するデーモンの数が多くなると、待機中のデーモンが消費するシステムリソースもそれだけ大きくなる。
これを解決するために、サーバプロセスを管理するスーパーサーバが開発された。inetd や xinetd といったスーパーサーバは、他のサーバプロセスに変わってサービス要求を監視し、接続が確立した時点で本来のサーバプロセスに要求を引き渡す。
必要な時だけ個々のサーバプロセスを起動することで、システムリソーソを効率的に使用することができる。
また、TCP Wrapper という仕組みと合わせることで、アクセス制御を集中的に管理できる。
デメリットとして、レスポンスが遅れるという点があり、Web サーバなど、クライアントのサービス要求にすぐに応じる必要のあるものはスーパサーバ経由で動作するべきではない。
逆に FTP や Telnet など接続の頻度が高くないサーバはスーパーサーバ経由の接続に適している。
TCP Wrapper によるアクセス制御
ネットワークサービスのアクセス制御を集中的に行うには、TCP Wrapper を使う。
TCP Wrapper である tcpd デーモンは、telnetd や ftpd などのサーバプログラムに変わってサービス要求を受け取った後、設定に基づいてチェックを行い、接続が許可された場合はそれぞれのサーバプログラムに処理を引き渡す。
設定ファイルは /etc/hosts.allow 及び /etc/hosts.deny となる。inetd 自体はアクセス制御機能を持っておらず、inetd は tcpd と連携し、inetd がサービス要求を受け取るとそれを tcpd に渡し、tcpd がアクセス制御の設定ファイルである /etc/hosts.allow と /etc/hosts.deny を調べ、サービス要求の拒否* 許可を決定する。
/etc/hosts.allow は以下のように設定する。この例では .example.com ドメインからの ssh アクセスを許可し、また、192.168.100.0/24 のネットワークからのアクセスを全て許可する。
sshd: .example.com
ALL: 192.168.100.
なお、/etc/hosts.allow の設定は /etc/hosts.deny よりも先に評価されるため、/etc/hosts.deny で全てのアクセスを「ALL: ALL」で禁止した上で、/etc/hosts.allow に許可対象だけ記述する方法が一般的。
xinetd の設定
近年では inetd よりもきめ細かい設定が可能なスーパーサーバとして xinetd が使われることが多くなっている。xinetd ではサービスごとのアクセス制御を細かく設定できる。
xinetd の設定は全体的な設定を行う /etc/xinetd.conf ファイルと xinetd.d ディレクトリ以下にあるサービスごとの設定ファイルから構成される。
xinetd.conf では以下のようなパラメータが用いられる。
パラメータ | 説明 |
---|---|
instances | 各サービスの最大デーモン数 |
log_type | ログの出力方法 |
logonsuccess | 接続を許可した時にログに記録する内容 |
logonfailure | 接続を拒否した時にログに記録する内容 |
cps | 1 秒間に接続できる最大コネクション数と、限度に達した場合にサービスを休止させる秒数 |
includedir | サービスごとの設定ファイルを収めるディレクトリ |
defaults
{
cps = 50 10
instances = 50
per_source = 10
log_on_success = HOST PID
log_on_failure = HOST
log_type = SYSLOG authpriv
}
includedir /etc/xinetd.d
また、/etc/xinetd.d/ 配下の設定ファイルでは以下のパラメータが使用できる。
パラメータ | 説明 |
---|---|
disable | サービスの有効/無効 |
socket_type | 通信のタイプ (TCP は stream、UDP は dgram) |
wait | ウェイトタイム |
user | サービスを実行できるユーザー名 |
server | サーバプログラムへのフルパス |
server_args | サーバプログラムに渡す引数 |
logonfailure | 接続を拒否した時にログに記録する内容 |
nice | 実行優先度 |
only_from | 接続を許可する接続元 |
no_access | 接続を拒否する接続元 |
access_times | アクセスを許可する時間帯 |
もっとも重要なパラメータは disable であり、サービスを利用したくない場合は yes と記述する。