ここからは契約したら、あるいは新規にインスタンスを作成したらまず施すべき対策について、手順を追って解説していく。ざっと作業の流れを整理しておこう。
(2)不要なプログラムを停止/削除
(3)パッケージを最新化
(4)必要な通信を解放
クラウド環境は「常時オンラインである」ことを考慮すれば、インスタンスを起動したら即座に対処すべきは(1)の作業だ。(1)の作業さえ完了していれば、(2)以降の作業は時間を掛けて確実に実施できるようになる。
クラウド環境の管理機能によって、クラウド環境の仮想NIC(ネットワークインタフェース)をオフラインに設定できるのであれば、(1)の作業よりも先にオフラインにしておくとなおよい。以下は、仮想NICをオフラインにできない場合を想定している。
手順1:iptablesですべてのポートを閉じる
SSH経由のリモートアクセス以外の管理コンソール(以下「仮想コンソール」と呼ぶ)を使えるのであれば、仮想コンソールを使ってSSHを含むすべてのポートを閉じる。仮想コンソールが使えないクラウドでは、SSH経由でログインしてSSHとDNS以外のポートをすべて閉じることになる(図12)。
ポートを閉じた後は、外部からiptablesの結果がきちんと反映されているかを確認しておいた方がよい。あるサーバーで動作していたiptablesの内容をServersMan@VPSで試したところ、何かの間違いかまるでフィルターが設定されていないように見えたことがあるためだ*2。
手順2:SSH以外のサービスを停止する
筆者が見たところ、どのクラウドも必要以上のサービスは動作していなかった。ただし、Osukini Serverのように契約するプランによっては、データベース管理ソフトの「MySQL」や運用管理ツールの「Webmin」などが動作している可能性がある。必要なければ停止しておいた方がよいだろう。
動作しているサービスは、
# lsof -i
サービスの停止は、サービスごとに実行する必要がある。例えばMySQLであれば次のように実行すると、起動中のサービスを停止できる。
# /etc/rc.d/init.d/mysqld stop
自動起動も停止させるには、次のように実行しておく。
# chkconfig mysqld off
手順3:rootユーザーのパスワードを設定
この手順は、rootユーザーのログインで公開鍵認証を採用しているクラウドだけ実行する。今回の場合だとニフティクラウドが相当する。ニフティクラウドでこの手順を飛ばして後の手順6で「rootユーザーの直接ログイン禁止」を設定してしまうと、一般ユーザーでログイン後にroot権限で作業できなくなってしまう。
rootユーザーのパスワードを設定するには、rootユーザーでリモートログイン後、次のように実行する。
# passwd root
手順4:一般ユーザーを作成
通常はroot権限で作業する場合、一般ユーザーでログインしてからsuコマンドを実行し、rootになってから作業する流れとなる。あるいは「sudo」コマンドで対応する。ログインユーザーがsuコマンドを実行してrootになったことを記録しておくと、後で作業記録を追跡しやすくなる。可能な限り一般ユーザー権限でログインするようにしよう。
一般ユーザーを作成するには、次のように実行する。
# adduser ログインユーザー名