🦁

LIPC102まとめ:ホストレベルのセキュリティ

2021/05/15に公開

スーパーサーバの設定と管理

サービスを提供しているサーバには、デーモンと呼ばれるメモリ上に常駐するプログラムが存在する。デーモンは常時メモリ上に待機しており、クライアントからのリクエストを監視している。サービスが稼働していなくても、メモリなどのリソースを消費するため、常駐するデーモンの数が多くなると、デーモンが消費するシステムリソースもそれだけ大きくなってしまう。

この課題を解決するために、「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