TCP経由でSSHを起動するように設定します。


/etc/hosts.allow
/etc/hosts.deny


このファイルでアクセスを制限するためです。


厳密ではないのですが、デフォルトでアクセス制限できるようですが、

tcpdmatch で動作の確認をすると以下のようになります。


[root@localhost home]# /usr/sbin/tcpdmatch sshd xxx.xxx.xxx.xxx
warning: sshd: no such process name in /etc/inetd.conf
client: address xxx.xxx.xxx.xxx
server: process sshd
access: granted


ご覧のように、warning が出てしまいます。
そんなプロセスは設定されてない、という意味です。

今回は、この warning を出さないように設定します。



# vi /etc/inetd.conf

ssh stream tcp nowait root /usr/sbin/tcpd sshd -i



sshd の起動オプション -i は、inetd経由で起動するという意味です。
詳しくは、man sshd を参照してください。


さて、次はアクセス制限をしましょう。



# vi /etc/hosts.deny

ALL : ALL



これで終了です。すべてのアクセスを禁止しています。
「原則アクセス禁止、必要なものだけ許可」
という基本的な考え方に従っています。


これだけでは、アクセスできませんので、以下のファイルで、
必要なものだけ許可という設定を行います。



# vi /etc/hosts.allow

sshd : xxx.xxx.xxx.xxx : allow
sshd : xxx.xxx.xxx.xxx/255.255.255.xxx : allow
sshd : xxx.xxx.xxx.xxx/24 : allow
sshd : .ameblo.jp : allow



いろんな記述方法がありますが、お好みでどうぞw
これはみなさんの環境に合わせて設定してください。

当たり前ですが、なるべく限定できるように設定しておくのがいいですネ。


ここで、inetd を再起動しておきましょう。


# /etc/init.d/inet restart



さて、ここまで設定できたら、今まで自動起動されていた
sshd を自動起動しないように設定しておきます。



# /sbin/chkconfig --list



sshd が自動起動になっていたら、起動しないように設定します。



# /sbin/chkconfig sshd off



sshd が off になってることをもう一度確認しておいてください。
runlevel 毎に設定したい場合は、


chkconfig [--level <levels>] <name> <on|off|reset>)


を参考に設定してください。


さて、あと一息。

すでに起動されている sshd を stop させます。



# /etc/init.d/sshd stop



サーバ本体のターミナルから sshd のプロセスを確認します。



# /etc/init.d/sshd status



ここで停止中なのを確認してください。


さて、クライアントから ssh 接続を試みてください。


できましたか?

接続できたら、今回の設定は成功したことになります。


hosts.allow の設定を変更するときは、必ず tcpdmatch を実行して
動作を確認してくださいネ。せっかくのセキュリティ対策が動いてないと、

これほど悲しいことはありませんから。