🦁
LIPC102まとめ:ホストレベルのセキュリティ
スーパーサーバの設定と管理
サービスを提供しているサーバには、デーモンと呼ばれるメモリ上に常駐するプログラムが存在する。デーモンは常時メモリ上に待機しており、クライアントからのリクエストを監視している。サービスが稼働していなくても、メモリなどのリソースを消費するため、常駐するデーモンの数が多くなると、デーモンが消費するシステムリソースもそれだけ大きくなってしまう。
この課題を解決するために、「inetd」や「xinetd」と言ったサーバプログラムを管理する、スーパーサーバが開発された。スーパーサーバは他のサーバプログラム(デーモン)変わって、サービス要求を監視し、接続が確立した時点で本来のサーバプログラムに要求を引き継ぎする。
スーパーサーバのメリット
- システムリソースを効率よく使うことができる。
- TCP Wrapperと組み合わせることで、アクセス制御を集中的に管理することができる。
スーパーサーバのデメリット
- スーパーサーバを経由するため、応答が遅くなる。(そのため、接続頻度が高くないサービスがスーパーサーバ経由での接続に適している)
xinetdの設定
xinetdの全体的な設定は、「/etc/xinetd.conf」ファイルで行い、各サービス個別の設定は、「/etc/xinetd.d/」ディレクトリ内の設定ファイルで行う。
xinetdの設定項目
パラメータ | 説明 |
---|---|
instances | 各サービスの最大デーモン数 |
log_type | ログの出力方法(ファシリティ) |
log_on_success | 接続を許可した時にログに記録する内容 |
log_on_failure | 接続を拒否した時にログに記録する内容 |
cps | 1秒間に接続できる最大コネクション数と、限度に達した場合にサービスを休止させる秒数 |
includedir | サービスごとの設定ファイルを収めるディレクトリ |
bind/interface | サービスを提供するインターフェースのIPアドレス |
disable | サービスを無効化するかの設定 |
socket_type | 通信のタイプ(TCP:stream、UDP:dgram) |
no_access | サービスへのアクセスを拒否する接続元 |
only_from | サービスへのアクセスを許可する接続元 |
server | サーバプログラムの絶対パス |
server_args | サーバプログラム起動時に指定する引数 |
user | サービスを実行するユーザ名 |
wait | サーバプログラムへの後続処理を待ち合わせるかの設定。マルチスレッドは「no」、シングルスレッドは「yes」 |
nice | 実行優先度 |
access_time | アクセスを許可する時間帯 |
TCP Wrapperによるアクセス制御
ネットワークサービスのアクセス制御を集中的に行うには、TCP Wrapperを使用する。TCP Wrapperのデーモンである、tcpdデーモンは、各サービスのサーバプログラムに代わって、サービス要求を受け取り、設定に基づいてチェックを行い、接続が許可された場合はそれぞれのサーバプログラムに処理を引き渡す。設定ファイルは「/etc/hosts.allow」と「/etc/hosts.deny」で、次の形式で条件を記載する。
サービス名 : 対象ホストのリスト
Discussion