ServersMan@VPS お試し中

ServersMan@VPS というのを契約してみました。

名前の通り VPS なんだけど、中身は CentOS5 のサーバで、あとはいろいろな WEB ベースのツールやらモバイル用のツールやらも用意してますよってものらしい。モバイルで云々とかそんな環境を持っていない身からすると、安い CentOS ベースのレンタルサーバでしかないのでした。

SSH でのログオンもできるということなので、ちょうど Windows で見ていた私は PuTTY 立ち上げて接続先を入力して。送られてきた root パスワードを入れてログオン。デフォルトの状態では公開鍵もなにもないし、 ssh での root ログオンも禁止されてません。「最低限の環境しか用意しないけど、 root 権限つけとくから容量許す限りどうにでもして」ってもののようですね。

しかしやはりそれでは心配。データぶっ壊されることより何より、踏み台にされて犯罪に加担してしまうというのは避けたいので、最低限このあたりはセキュリティを強化しておきます。でも問題が。

  • フィルタ (iptables) の設定失敗したらどーすんだろ
  • SSHd の設定失敗したらどーすんだろ


コレ失敗したらリモートでのメンテナンスも一切できなくなりますよね。自宅なら物理的にログインしてなんとかなりますが…。てことで調べてみました。ちゃんと設定画面 (うちの場合 MyDTI の契約中サービスのところ) が用意されていて、ここから iptables の設定初期化・ root パスワード初期化・完全初期化、等々できるようになっていました。

VPSに最低限のセキュリティを適用しておく

パスワードの管理とか運用的な面もありますが、 SSH でアクセスする場合に最低限必要なセキュリティ対策はしておくこととします。今回やるのは以下のこと。

作業用ユーザ追加

何でもかんでも root でやりたくはないので、一般ユーザをつくります。以下、例として nanasi というユーザをつくってこれを使っていきますが、適宜自分の好きなように読み替えてください。

# useradd -m -G users,wheel nanasi
# passwd nanasi

追加したユーザが root になれるよう、 wheel グループに入れておきます。


次に、 sudo 出来るようにします。

# visudo

以下の行の行頭の # を削除
# %wheel        ALL=(ALL)

これで wheel グループ所属なら sudo 出来るようになります。


もしくは、こんな感じでユーザ名で決め打ちでもいいでしょう。

nanasi        ALL=(ALL)


動作を確認してみます。

# su - nanasi
$ pwd
/home/nanasi
$ sudo ls /root
password:

ちゃんと動いていますね。ただ、たぶん下のようなエラーが出ます。

audit_log_user_command(): Connection refused

ググッてみたところ、これは CentOS5 で sudo を使ったとき固有のエラーメッセージらしいです。 sudo のバージョンを上げてしまえば出なくなるようなので、出ないようにしてしまいます。必須ではないです。個人的にとても気持ち悪いので出ないようにするだけです。

# yum install sudo


あとは、出ないようになることを確認しておきます。

ファイアウォールの設定

ファイアウォールの設定もしておきます。 iptables を使います。これでも見ておくといいでしょう。


どういう風にするか、その設計がキモですが、単純にこうしておきます

  • 外から内へは基本的に遮断
  • 内から外へは基本的に通過
  • SSH は開放。ただしアクセスは自分の IP からだけ
  • WEB は開放。不特定多数に開放
  • PING への反応は自分の IP からだけ

基本的には全部遮断して、メンテ用に SSH のポートを開放します。ただ SSH を不特定多数に開放してしまうと不安なので、これは自分の IP からだけに制限します。また SSH だけ通すようにしちゃうと Web 系サービスは一切使えなくなりますので、ここも空けます。


設定自体は上で紹介したリンク先のテンプレートを使ってホストアドレスだけ変更すればできます。

SSH のログオン方法変更

ここまでやったら、 PuTTY をもうひとつ起動して VPSSSH で接続してみましょう。追加したユーザとパスワードで接続できるようになっていると思います。

ただしこのままではまだ不安です。セキュリティを考えてこんな感じにしたいと思います。

  • 公開鍵認証方式だけ許可する
  • root でのログオンは許可しない


まず公開鍵を作ります。今回は

  1. Windows 上で鍵のペアを作成
  2. 公開鍵をリモートホストに sftp でコピー

の手順をとります。PuTTY には公開鍵と秘密鍵をつくる機能がついていますのでそれを使い、それを同じく PuTTY でリモートにコピーすれば OK です。

詳細な手順は検索すれば出てきます。 コチラ とかが詳しいです。


上のサイトにもありますが、権限は重要です。

$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys


これは忘れずにやっておきます。やらないとあとで接続しなおしたときに蹴られます。
# 自分はちょっとハマりました。


次に sshd の設定を変更します。現在はユーザ名とパスワードで認証できてしまいますが、公開鍵方式だけになるように設定します。設定には root 権限で設定ファイル書き換えます。

$ sudo vi /etc/ssh/sshd_config


自分の場合こんな感じにしてあります。

Port 22                                        ←ポート番号。セキュリティのためには変更推奨。
#Protocol 2,1                                         ただし、その場合 iptables のポートにも注意。
Protocol 2
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 768

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
LogLevel INFO                                  ←ログをとります。

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no                             ←root でのログオンを明示的に不許可
#StrictModes yes
#MaxAuthTries 6

#RSAAuthentication yes
PubkeyAuthentication yes                       ←公開鍵認証方式にします
AuthorizedKeysFile      .ssh/authorized_keys

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PermitEmptyPasswords no                        ←空のパスワードは不許可
PasswordAuthentication no                      ←従来のパスワード認証方式を不許可

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no             ←チャレンジレスポンス方式認証を不許可

(以下略)


あとは以下のとおりに sshd サービスを再起動します。

$ sudo /etc/init.d/sshd restart


念のため、 PuTTY から公開鍵認証方式でログインできることを確認してください。 PuTTY での公開鍵認証方式を使った接続の設定の仕方も、上のサイトに書いてあります。