前回はsshでVPSにログインして、一般ユーザーを作成しました。今回は、アクセス制限、パケットフィルタリングといった不正アクセス対策の設定をしてから、CentOSをアップデートします(編集部)
前回に引き続き、サーバの準備編です。前回、最低限やっておくべきこととして、以下の4点を挙げました。前回は一般ユーザー「atmarkit」を作って、sudoコマンドを使えるようにしました。、以下に挙げた4項目のうち、最初の1つが終わったところです。今回はアクセス制限の設定から続けていきます。
この連載で使っているさくらインターネットのVPSのほか、多くのサーバサービスでは、初期設定では、どこからでもsshによるリモートログインが可能になっています。もちろん、ログイン時にユーザー名とパスワードを入力しなければならないので、誰でも簡単にログインできてしまうということはありません。
しかし、ユーザー名が分かっていれば、パスワードは総当たりによるクラッキングで突き止められてしまう可能性もあります。しっかりしたパスワードを使っていれば、ログインに失敗した後の応答が遅延されるので、総当たりで当てるのは現実的にはほぼ不可能でですが、そうはいってもできる対策はしておくべきです。
まず、rootユーザーがログインすることを禁じてしまいましょう。前回、一般ユーザーを作成しました。もうrootユーザーでログインする必要はありません。以下のようにコマンドを実行してsshdの設定ファイルを編集しましょう。
$ sudo vi /etc/ssh/sshd_config
このファイルの中にPermitRootLoginという行があります。これをnoに書き換えましょう(図1)。
(略) # Authentication: #LoginGraceTime 2m PermitRootLogin no ←この行を書き換える #StrictModes yes #MaxAuthTries 6 (略)
書き換えたらログアウトして、以下のようにコマンドを入力してください。sshdをリロードします。
$ sudo /etc/init.d/sshd reload Reloading sshd: [ OK ]
そして、rootユーザーでログインし直してみましょう。正しいパスワードを入力しても失敗することが確認できれば完了です。
次に、sshログインを許可するIPアドレスを指定します。オフィスなどからログインするなら、これが最も簡単で効果的なアクセス制限の方法です。
しかし、インターネットに接続するたびにIPアドレスが変わるような、ダイヤルアップ接続などを使ってVPSに接続する時は、この方法でアクセス制限することは難しくなります。このようなときはパスワード認証を禁止した上で公開鍵認証を使うことで、無関係なユーザーのログインを防げるようになります。この件については、長くなるので解説は次回とします。
許可するIPアドレスは、/etc/hosts.allowファイルを開いて、以下のように設定します。許可したいIPアドレスが複数ある場合はカンマで区切っても良いですし、複数行にしても問題ありません。限定しない場合は、IPアドレスの部分を“ALL”とします。
sshd: 許可するIPアドレス1, 許可するIPアドレス2 sshd: 許可するIPアドレス3
最後に、/etc/hosts.denyファイルに以下の行を追加します。
ALL: ALL
この状態で、許可していないIPアドレスからsshでログインしようとすると、接続しようとするところで失敗し、パスワードの入力まで進みません。
この2つのファイルはTCP Wrapperの設定ファイルです。TCP Wrapperに対応している他のサーバソフトウェア、例えばMySQLなども参照します。今の/etc/hosts.denyファイルの設定は、sshを含め「すべてのサーバで、許可していないアクセスを拒否する」というものです。これを標準と考えて、必要に応じて/etc/hosts.allowファイルにアクセスを許可するIPアドレスを追記していくようにします。
アクセス制限が働いているかどうかを確認するときは、設定をしているターミナルはそのままにしておき、別のターミナルを開いて動作確認するようにしましょう。設定ファイルに記述するIPアドレスを間違えたままログアウトしてしまうと、ログイン不能になってしまうこともあり得ます。
なお、さくらインターネットのVPSであれば、リモートログインができなくなったとしてもWebブラウザで開ける管理画面があり、そこからログインできるという特長があります。ログイン不能になったとしても、この機能を利用すればやり直しができます(図3)。
もしこのような仕組みを用意していない業者を利用する場合、ログイン不能になったら初期化せざるを得なくなります。ネットワーク関連の設定だけ初期化できるのであればいいのですが、そうでなければOSごと初期化することになるので、ご注意ください。
さくらインターネットのVPSでは標準でntpサーバが有効になっていて、正確な時刻を保つようになっています。しかしそのままでは、誰でもntpサーバにアクセスして時刻を参照できてしまいます。ntp側の設定で制限することもできますが、ファイアウォールでパケットごと遮断してしまうというのも1つの手です。今後のことも考え、明示的に許可していないパケットは遮断することにしましょう。
Linuxでファイアウォールといえばiptablesです。/etc/sysconfig/iptablesを図4の内容で作成してください。
*filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i eth0 -p tcp -m state --state NEW -m tcp ! --syn -j DROP -A INPUT -i eth0 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT COMMIT
設定ファイルに必要事項を記入できたら、保存して、以下のコマンドを実行してください。iptablesの設定がリロードされて、ファイルに記述したパケットフィルタのルールが有効になります。
$ sudo /etc/init.d/iptables restart
iptablesは非常に多機能ですが、ここではルールをごくシンプルにしています。サーバから外部へ向かうパケットはすべて許可し、外部からのパケットは許可したもの以外をすべて遮断します。現在はsshのポート番号22のみ接続を許可しています。いずれは、httpなどのポートの設定も追加することになるでしょう。
最後に、OSのアップデートです。標準状態ではCentOSのバージョンは5.5です。つい最近5.6がリリースされたのでアップデートしましょう。以下のコマンドを実行すると5.6にアップデートできます。
$ sudo yum -y update
yum-cronパッケージを使って毎日同じ時間に自動的にアップデートさせることも可能です(図5)。しかし、アップデートを安易に自動化するのは好ましくないこともありますので、よく考えて設定してください。アップデートに起因する問題が発生することもあります。あるいは、環境をチームのメンバーや本番環境と一致させておきたいということもあるでしょう。バージョンによって挙動が変わることもあるので、全体で一致していないと無用なトラブルを招きかねません。
$ sudo yum install yum-cron $ sudo chkconfig yum-cron on $ sudo /etc/init.d/yum-cron start Enabling nightly yum update: [ OK ]
ここまで設定すればひとまずサーバの準備は完了です。次回は家庭向けブロードバンド接続を利用する方のために、公開鍵暗号を利用してsshでVPSに接続する方法を解説します。
Copyright © ITmedia, Inc. All Rights Reserved.