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 を実行して
動作を確認してくださいネ。せっかくのセキュリティ対策が動いてないと、
これほど悲しいことはありませんから。