さくらVPSにカスタムOSのUbuntu 10.04をインストール+セキュリティ設定などをした時のメモ

仮想サーバひとつの管理権限をまるごともらえるさくらVPSが便利そうだったので契約してみた.これならレンタルサーバでは動かせないような高負荷のサービスも運用できそうだ.
デフォルトのOSはCentOS 5.5 x86_64だったけど,カスタムOSとしてUbuntu 10.04 LTS amd64が利用可能だったのでそちらに切り替えて運用している.

備忘録として,Ubuntuのインストール手順とセキュリティ設定などについてまとめておく.

構成や設定について

  • サーバ版Ubuntu 10.04を使う
  • sshサーバのみ立ち上がった状態にする
  • sshサーバのポート番号を変更する (例では22から12345に変更している)
  • sshサーバは公開鍵認証のみ許可する
  • ufwを使ってファイヤーウォールを設定し,sshのポートのみ開く
  • ロケールをja_JP.UTF-8にする
  • デフォルトエディタを変更する

Ubuntu 10.04のインストール

以下のさくらVPSのカスタムOSインストールガイドを参考に入れる.

インストールされるUbuntuはサーバ版で,デフォルトではGNOMEのデスクトップ環境はインストールされない.

ここで注意点がひとつ.
カスタムOSのインストールを開始すると,ブラウザ上でJavaによるVNCコンソールが立ち上がってインストール画面が表示されるが,Google Chrome 10 for Mac (dev版)ではVNCコンソールの画面が一向に表示されず,インストールを進めることができなかった.Safariなどの別のブラウザで再度インストールを試したら大丈夫だった.

以下の画面が出たまま進まなくなった場合はVNCコンソールの起動に失敗している可能性があるので,再度他のブラウザで試してみると解決するかもしれない.

sshの公開鍵の設置

セキュリティ対策として,sshでサーバにログインする際はパスワード認証ではなく公開鍵認証を使うようにする.

まず,VPSサーバのログイン元として使うマシン上で秘密鍵と公開鍵のペアを作成する.ログイン元のマシンに~/.sshのディレクトリが存在しない場合は,以下のようにあらかじめmkdirしておく.~/.sshのパーミッションは700にし,他のユーザから見えないようにする.

local$ mkdir -m 700 ~/.ssh

ssh-keygenを使うと簡単に鍵のペアを作れる.

local$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/mickey/.ssh/id_rsa): .ssh/id_rsa_sakura 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in .ssh/id_rsa_sakura.
Your public key has been saved in .ssh/id_rsa_sakura.pub.
The key fingerprint is:
01:23:45:67:89:ab:cd:ef:01:23:45:67:89:ab:cd:ef mickey@local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|   o         o   |
|   **       **   |
|   * *     * *   |
|   *  *   *  *   |
|   *   * *   *   |
|   *    o    *   |
|   o         o   |
|                 |
+-----------------+

拡張子が.pubの方が公開鍵.ちなみに上のrandomart imageは適当なので気にしないように.

各鍵ファイルのパーミッションを設定して他のユーザから見えないようにし,公開鍵ファイルの中身を確認する.

local$ chmod 600 ~/id_rsa_sakura ~/id_rsa_sakura.pub
local$ cat ~/id_rsa_sakura.pub

公開鍵の中身をコピーしておく.

一度sshでVPSサーバ上にログインし,公開鍵の中身をVPSサーバの~/.ssh/authorized_keysに登録する.パーミッションも設定しておく.

sakura$ mkdir -m 700 ~/.ssh
sakura$ echo 公開鍵ファイルの中身 > ~/.ssh/authorized_keys
sakura$ chmod 600 ~/.ssh/authorized_keys

手元のマシンの別のターミナルから公開鍵認証でsshログインできるかどうかを確認する.

local$ ssh -i ~/.ssh/id_rsa_sakura username@www12345a.sakura.ne.jp

ログインできればOK.

sshサーバの設定

以降のコマンド作業はVPSサーバ上で行う.

デフォルトのsshサーバの設定はお世辞にもセキュリティ的によいとは言えないので,変更する.

VPSサーバのsshd_configを書き換え,以下の設定変更を行う.

  • sshのポート番号を22から他の番号に変える (10000〜65535あたりが良いらしい)
  • ssh経由でrootログインできないようにする
  • パスワードによる認証を不可にする (公開鍵認証のみ許可)
$ sudo vi /etc/ssh/sshd_config
- Port 22
+ Port 12345

- PermitRootLogin yes
+ PermitRootLogin no

- #PasswordAuthentication yes
+ PasswordAuthentication no

/etc/serviceに登録されているsshのポート番号を変更する.

$ sudo vi /etc/services
- ssh             22/tcp                          # SSH Remote Login Protocol
- ssh             22/udp
+ ssh             12345/tcp                       # SSH Remote Login Protocol
+ ssh             12345/udp

sshd_configの設定が正しく書けているかチェックする.何も出力されなければOK.

$ sudo sshd -t

sshdを再起動する.

$ sudo service ssh restart

念のため現在sshでログインしているセッションは残したまま,別のターミナルからsshでVPSのサーバにログインし,設定が反映されていることを確認する.問題がある場合はsshd_configの設定を見直す.

ufwによるファイヤーウォールの設定

Ubuntuにデフォルトで入っているファイヤーウォールの「ufw」を使い,不要なポートに対する外部アクセスを制限する.ここではsshのポートのみ開いた状態にする.

まず,現在のufwの状況を確認する.

$ sudo ufw status
Status: inactive

デフォルトでは動いていない.

全てのポートへのアクセスを遮断するようにルールを変更する.この設定はufwを有効にするまでは反映されない.

$ sudo ufw default deny
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)

sshのポートのみ開ける.

$ sudo ufw allow 12345
Rules updated

ufwを有効にする.

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

ufwが動いていることを確認する.

$ sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
12345                      ALLOW       Anywhere

ufwの設定を間違えてsshログインできなくなってしまった場合でも,VNCコンソールからはログインできるので焦らなくても大丈夫.

ロケールの変更 (ja_JP.UTF-8)

システムのロケールをデフォルトのen_US.UTF-8からja_JP.UTF-8に変更する.

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
$ sudo locale-gen ja_JP.UTF-8
Generating locales...
  ja_JP.UTF-8... done
Generation complete.
$ sudo update-locale LANG=ja_JP.UTF-8

再ログインすると設定が反映される.

$ locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=

パッケージのアップデートとインストール

パッケージを最新のものにアップデートする.

$ sudo apt-get update
$ sudo apt-get upgrade

好みで運用に必要なパッケージをインストールする.

$ sudo apt-get install build-essential
$ sudo apt-get install zsh
$ sudo apt-get install screen
$ sudo apt-get install vim
$ sudo apt-get install curl
$ sudo apt-get install git-svn

デフォルトエディタの変更

Ubuntuではデフォルトのエディタはnanoになっている.これを他のエディタに変える場合はupdate-alternativesコマンドを使えばOK.

$ sudo update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode.

edの優先度が-100になってるのには笑った.

これでcrontab -eなどのコマンドでお好みのエディタが立ち上がるようになる.

以上

これくらい設定をしておけばひとまずセキュリティは大丈夫そう.ブルートフォースアタックが不安ならばdenyhostsの導入も検討するといいかもしれない.

これからじゃんじゃんいじりまくるぞう.