最初、ここがいまひとつ分かりませんでした。通常、サーバと私たちが言ってるもの(WebとかメールとかftpとかSambaとかsshとか)は、当然これらのサーバのあるドメインにアクセスした際、どのポートを呼び出したかによって、それに対応するサーバがそれに応答する(これがデーモンでいいのかな?)のですが、サーバによってはそれ程立ち上げる頻度が高くないものもあります。
だから、そういった起動頻度の少ないサーバは、常時立ち上げずにその代わりになるTCP Wrapperというプログラム(こいつもサーバデーモンですよね)を立ち上げて置いて、こいつに任せてしまおうと言うことです。で、必要なサーバをTCP Wrapperがその都度呼び出して動かそうと。これだと、使わない余分なサーバが立ち上がらないのでサーバマシンに負荷がかかるのを押さえられると。更に、TCP Wrapperを経由してサーバを起動させる場合には、hosts.allowとhosts.denyという設定をすることで、アクセスコントロールすることができるのです。
では、実際にはどういう設定をするのか?重要になるファイルはまず以下の3つです。
まず、viでinetd.confを開いてみます。
# To re-read this file after changes, just do a 'killall -HUP inetd' # #echo stream tcp nowait root internal #echo dgram udp wait root internal #discard stream tcp nowait root internal #discard dgram udp wait root internal #daytime stream tcp nowait root internal #daytime dgram udp wait root internal #chargen stream tcp nowait root internal #chargen dgram udp wait root internal #ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a ftp stream tcp nowait root /usr/sbin/tcpd in.proftpd #telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd (中略) #time dgram udp wait nobody /usr/sbin/tcpd in.timed #auth stream tcp wait root /usr/sbin/in.identd in.identd -e -o #swat stream tcp nowait.400 root /usr/sbin/tcpd swat
とりあえず#でコメントアウトしてあるのは動かしてないヤツです。あと、各行の要素がどういう意味かを見ていきましょう。もう一度例として1行抜いてみます。
ftp stream tcp nowait root /usr/sbin/tcpd in.proftpd
一番左はサーバの名称(この場合FTP)、その後の4つはとばして、5つ目の/usr/sbin/tcpd、このtcpdというのがtcp daemon、たぶんTCP Wrapperのデーモンでしょう。で右側が tcpd で動かすプログラム(デーモン)ということになるはずです。
実際に、ls /usr/sbinしてみると、確かにここにtcpdとin.proftpdというヤツがあります。では先程設定したsshをTCP Wrapper経由で動かせるように設定をします。以下の1行を加えてください。
ssh stream tcp nowait root /usr/sbin/tcpd sshd -i
sshdというのもtcpdと同じく、/usr/sbinにあるのでこういう感じになります。(-iオプションは、man sshdとかで調べましょう)。で、こうやってinetd.confでTCP Wrapper経由で起動するデーモンを指定した後、hosts.allow/denyで、動作環境を制限します。
vi /etc/hosts.denyします。基本的な考え方は、原則としてはすべて禁止して、必要なものだけ許可をするです。よってhosts.denyは以下のようになります。
ALL: ALL
そして、hosts.allowで、許可設定を行います。現状では、sshをサーバーマシン(localhost/127.0.0.1)以外のLAN内のPC(192.168.0.)で使いたいということになるので、
sshd : 192.168.0.0/255.255.255.0
と設定します。(書き忘れましたが、hosts.deny/allowの書き方は、許可するもの : 対象範囲です)。まぁ自分だけしか使わない訳なので、複数のユーザでLAN内で使っているわけでないなら、下記のようにしても良いかと思います。
ALL : 192.168.0.0/255.255.255.0 ALL : 127.0.0.1
後々、メールサーバとかftpサーバとかをインターネット上に公開する場合に、またこのhosts.allowで設定する感じになります。
さて、設定が終わったので、TCP Wrapperのデーモンを再起動しましょう。/etc/rc.d/init.d/inet restart。これでTCP Wrapperを経由してsshを起動させるように設定を変えたわけですが、先程sshdを既に起動させているので、これでは本当にinetd経由でsshを起動しているかどうか分かりません。ということで、まずsshdの起動をストップさせます。suになって、
/etc/rc.d/init.d/sshd stop 次にntsysvで起動時に立ち上げるデーモンの一覧を表示させて、sshにチェックが入っていれば外しましょう。これで一旦、クライアントマシン上のsshからログアウトします。そして、サーバ本体のターミナル上でsshが止まっているかどうかを確認しましょう。
/etc/rc.d/init.d/sshd status おそらくsshdは停止中です
というメッセージが出てくると思います。では、もう一度クライアントのWindows2000からTeratermを起動させて、sshで接続してみましょう。おそらくうまく接続できるはずです。つまり、TCP Wrapperを介してsshdが起動されたと言うことになります。これで成功です。