xinetd.png

 

[wu-ftpd][Apache][ntp][xinetd][NFS][iptables]

 

スーパーサーバ


■ スーパーサーバ

スーパーサーバとはひとことで言ってサーバの起動と停止を制御するサーバである。サーバの中にはXサーバのように常時起動してリクエストを待っているものがあるかと思えば、telnetのようにめったにリクエストされないものやpopのように1リクエスト当たりの稼働時間が短いものもある。 このようなサーバアプリの性格の違いを考えると、すべてのサーバを起動したままシステムに常駐させておくのは、あきらかにリソースの無駄遣いとなってしまう。
システムにとって望ましいのは、必要なサーバが必要なときにだけ動いていることである。そこで、別の常駐プログラムに入ってくるリクエストを監視させ、リクエストされたときだけそのサーバを起動すれば、リソースの節約に役立つ。このような役目でシステムに常駐するプログラムのことをスーパーサーバと呼ぶ。スーパーサーバはその「リクエストを仲介する」という動作原理から、登録されたサーバへのアクセスを制御することができる。
 

fig1 xinetd によるサーバの起動と停止


 

なお、サーバの起動モードについてはそれぞれのmanページを参照すること。たとえば Apache を xinetd 経由で起動することも httpd の起動モードを指定することによって可能である。


■ xinetdとinetd

カーネル2.4(Redhat Linux ではver.7 から)におけるスーパーサーバとして採用された xinetd は inetd の拡張版だが、その設定に関してはかなりの相違がある。たとえば、アクセス制限の設定について inetd では TCP_Wrappers を使い /etc/hosts.allow および/etc/hosts.deny に設定を書くが、xinetd ではその必要がない。そのかわりに xinetd ではアクセス制御用ファイルとして /etc/xinetd.d 以下にデーモンそれぞれの名前のついたファイルが用意されている。たとえば xinetdによって制御されるtelnet や ftp などでは/etc/xinetd.d 以下 /etc/xinetd.d/swat のようにそれぞれの名前のファイルがある。以下に TeraTerm からアクセスした RedHat 8 の初期ファイルを例示する。



一方、xinetd 自身の設定ファイルは /etc/xinetd.conf である。以下に初期設定を示す。


#
# Simple configuration file for xinetd
#
# Some defaults, and include /etc/xinetd.d/

defaults
{
        instances              = 60                              # 同時接続数の最大値。unlimited (無制限)にしないこと。
        log_type                 = SYSLOG authpriv         #  syslog のファシリティを authpriv に設定
        log_on_success       = HOST PID 
        log_on_failure          = HOST
        cps                       = 25 30                         # 一秒間に接続できるコネクション数と再アクセスまでの秒数を引数に指定
}

includedir /etc/xinetd.d

各種デーモン設定ファイルについては、別項を参照のこと。なお、inetd から xinetd へ移行する場合は inetdconvert というコマンドでinetd.conf から xinetd.conf を作成することが可能である。

設定ファイル

■ xinetd.conf

先に述べたとおり、xinetd ではドメイン名や IP アドレスでのアクセス制御やアクセス時間の制限、接続回数の制限などができる。/etc/xinetd.conf の各行の意味を簡単に示す。
 

defaults                                     # 管理するデーモンのデフォルト設定
{
    instance = 60                               # 起動できるデーモンの最大数
    log_type = SYSLOG authpriv              # syslogへの出力方法の指定(ファシリティにauthprivを指定)
    log_on_success = HOST PID                # ログインに成功した場合、ホスト名とプロセスIDをlogに記述
    log_on_failure = HOST RECORD            # ログインに失敗した場合、ホスト名と起動失敗のメッセージをlogに記述 
}
includedir /etc/xinetd.d                      # 設定ファイルのディレクトリパスの定義

 



■ 各種デーモン設定ファイル

xinetd をインストールすると、各種デーモンの設定ファイルのサンプルが自動的に /etc/xinetd.d 以下に置かれる。各デーモンを動作させたい場合は、このファイルの中の disable 行を no にしておけばよい。( disable が no という意味です。disable が yes では動かないこと、おわかりですね?)以下に fingerd の初期設定ファイルを例示する。
 

[root@server xinetd.d]# less finger

# default: on
# description: The finger server answers finger requests. Finger is \
#       a protocol that allows remote users to see information such \
#       as login name and last login time for local users.

service finger
{
        socket_type     = stream            # サービスタイプがTCP 
        wait            = no                    # TCPならnoでUDPならyes
        user            = nobody                              #  nobodyのユーザ権限で起動
        server          = /usr/sbin/in.fingerd     # サーバのデーモンルートの指定
        disable         = yes      # 起動は不可
}


その他の重要な設定項目として以下のようなものがある。

server_args =                            # サーバへのコマンドラインオプションを指定
log_on_success += DURATION USERID        # 成功時はデフォルトの指定に加えて接続時間・ユーザIDを記録
log_on_failure += USERID                 #   失敗時はデフォルトの指定に加えてユーザIDを記録
nice = 7                    # ナイスレベルの設定

なお、設定を変更した場合は必ずxinetdを再起動する必要がある。通常は以下のように起動スクリプトによって再起動する。

         /etc/rc.d/init.d/xinetd restart

これは service xinetd restart でもよい。さらに次のコマンドでサーバプロセスにシグナルを送ることによっても再起動できる。

         killall -HUP xinetd

アクセス制御


■ 基本的なアクセス制御

これらの設定ファイルでは TCP_Wrappers のようなアクセス制限ができる。各種デーモンごとにアクセス制限をかける場合はデーモン用の設定ファイルに設定を書き、xinetd 全体にアクセス制限をかけたい場合は xinetd.conf に以下の2種類のリードによる記述を施せばよい。

          no_access
          only_from


no_access は拒否するホストを指定し、 only_from は許可するホストを指定する。指定の様式はIPアドレスとドメイン名によるものが主だが、他にもいくつかあるので以下の例を参照のこと。

IPアドレスによるアクセス制御

only_from = 192.168.1.0                       192.168.1.0/255.255.255.0 の範囲に対してアクセスを許可
only_from = 192.168.1.0/24                  192.168.1.0/255.255.255.0 の範囲に対してアクセスを許可
only_from = 192.168.1.1 192.168.1.2      192.168.1.1 と 192.168.1.2 だけアクセスを許可


ホスト名またはドメイン名によるアクセス制御

only_from = localhost                      xinetd が動作しているホスト(自分自身)だけアクセスを許可
only_from = user.domain.ne.jp             ホスト user.domain.ne.jp に対してだけアクセスを許可
only_from = .domain.ne.jp                     .domain.ne.jp に属するすべてのホストに対してアクセスを許可
only_from = hostname                         ホスト名で定義されたホストにだけアクセスを許可


アクセスを拒否したい場合は上記の "only_from = " を "no_access = " に変えればよい。


コラム : xinetd における hosts.allow および hosts.deny ファイル

xinetd 経由で起動するデーモンが複数あるとき、他のサービスとの兼ね合いで簡単には xinetd に再起動をかけられないケースがしばしばある。このような場合、hosts.allow および hosts.deny にアクセス制限を追加して、サービスを動かしたまま一時的に設定を変更することができる。このようなことができるのは xinetd がサービスを起動するとき、最初に hosts.allow および hosts.deny を参照するからである。両ファイルの設定変更はアクセス制御に即時反映するので、継続稼動が前提となっているユーザ数の多いFTPサイトのように、うかつな再起動ができない環境ではアクセス制御の変更に必須技術となる。

一般に、hosts.allow および hosts.deny ファイルは inetd の遺物と誤解されている感があるが、実際にはこのファイルを使うデーモンは inetd だけではなく、他にも sshd やポートマッパ(portmap)などがある。さらにもうひとつ付け加えると inetd 時代、しばしば併用された TCP_Wrappers (tcpd) は xinetd とも併用が可能である。なお、TCP_Wrappwes の基本となるライブラリは libwrap.a によって供給されており、RedHat では tcp_wrappers のRPMパッケージにバンドルされているので、通常は特に併用を意識する必要はない。
以下に参考として telnet における tcpd 併用時の明示的な設定例を示す。ここではサーバとして tcpd を指定し、サーバ起動時の引数として /usr/sbin/in.telnetd を与えている。

service telnet
{
     flags = REUSE NAMEINARGS
     protocol = tcp
     socket_type = stream
     wait = no
     user = telnetd
     
server = /usr/sbin/tcpd
     server_args = /usr/sbin/in.telnetd

}


(筆者注:この項目はM.田邊氏のご指摘をもとに加筆しました。謹んでご協力に感謝申し上げます。)


■ アクセス時間帯の設定

次にアクセスを許可する時間帯を指定する方法を紹介する。

         access_times = 17:30-22:00

この設定例では 17:30-22:00 の間だけアクセス許可する。ただし、 0:00 をはさんだ時間設定はできないので、0時をはさんで両日にわたる設定を施したい場合は次のように表記する。xinetd の時間制限は分単位であるため、これで動作するはずである。

         access_times = 17:30-23:59 0:00-9:00


■ アクセスログ

syslogd に渡さずに特定のファイルでアクセスログを取りたい場合は、次のように /etc/xinetd.conf の log_type 行を書き換えてパスとファイル名を指定する。

          log_type = FILE /var/log/xinetdlog              # ログを/var/log以下の xinetdlog というファイルに掃き出す

この場合は touch /var/log/xinetdlog で前もって空ファイルを作っておくこと。
 


 

 

Copyright(c) 2003 My Company. All rights reserved. www.suzu841.com / mrs.suzu841.com