ゴールデンウィークは、4月にリリースされた最新のUbuntuでがっつり遊ぶ。これはもはや毎年の恒例行事と言っても良いでしょう。せっかくですから、新しいOSは新しい環境にインストールしたいもの。しかし新しいサーバーを購入して自宅で運用するには、奥さん、電気代、騒音など、様々な障害を乗り越えなければなりません。そんな時は……そう、VPSです。こっそり新しいサーバーを追加しても家族にバレないなんて、仮想化最高! そんなわけで今週のレシピでは、過去にも何度か紹介した「さくらのVPS」を使った、Ubuntu Server 14.04 LTSのセットアップを紹介します[1] 。
さくらのVPSは、CentOSがインストールされた状態で提供されています。第142回 では、カスタムインストール機能を使い、Ubuntuをインストールする方法を紹介しました。また第154回 では、ネットブートインストーラーを使うことで、さくらインターネットから提供されていないバージョンのUbuntuをインストールする方法を紹介しています。
現在のさくらのVPSには、任意のISOイメージをアップロードし、そこから仮想マシンを起動する「ISOイメージインストール」機能が実装されています。今回はこの機能を使い、ubuntu.comから入手できる14.04のISOイメージを使ってインストールを行います[2] 。
[1] 石狩リージョンの1Gプランを利用することにしました。筆者は既に石狩でDebianのVPSを運用しているのですが、同一リージョン内のVPSはローカルネットワーク接続ができるので、できるだけ同一リージョンに固めたいという思惑と、単に筆者が北海道大好きという理由によるものです。
Javaのインストール
インストールは、VNCコンソールを用いて行います[3] 。WebブラウザからTightVNC Java Viewerが起動するのですが、実行にはJavaの実行環境が必要になります。筆者はPPA のoracle-java7-installerを使用しました。
PPAの追加とJava 7のインストール
$ sudo apt-add-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer
[3] 5月1日。Webブラウザーのみで動作する、VNCコンソールのHTML5モードの提供が開始されました。 これによって、起動しているサーバーのコンソールを取るだけであれば、Javaは不要になりました。しかし現時点では、ISOインストールの段階では従来のJavaアプレットモードのコンソールが自動的に起動するようです。
ISOイメージインストールの手順
まずVPSのコントロールパネルにログインして、「 OS再インストール」をクリックします。標準のCentOSを自動再インストールするためのページが表示されますので、ここで「ISOイメージインストールへ」をクリックします。
図1 「 ISOイメージインストールへ」をクリック
インストールに先立ち、ISOイメージをアップロードする必要があります。そのために、まず「アカウント作成」をクリックして、アップロード用のサーバーに一時的なアカウントを作成します。
図2 一時的なアカウントを作成
24時間有効なアカウントが作成されました。表示されているホスト名、ユーザー名、パスワードを用いて、ISOファイルをアップロードしてください。気を付けることは、最初から存在する「iso」というディレクトリの中にアップロードするということと、scpは使えないので、必ずsftpを使う必要があるということです。
図3 SFTPを使用してアップロードすること
Ubuntu(Linux)からアップロードする場合は、コマンドラインからsftpコマンドを使ってしまうのが一番手っ取り早いでしょう。「 sftp ユーザー名@ホスト名」を実行し、パスワードを入力します。ログインに成功したら、「 iso」ディレクトリにcdして、putコマンドでISOファイルをアップロードします[4] 。
図4 ISOファイルをアップロード
アップロードが完了したら、「 ISOイメージ」に、アップロードしたファイル名とサイズが表示されていることを確認してください。問題がなければページ下部の「確認」をクリックします。
図5 ファイル名とサイズを確認
インストールを開始してよければ「実行」をクリックします。サーバーが再起動され、ISOイメージから起動されます。
図6 「 実行」をクリックしてサーバーを再起動
前述のとおり、コンソールを得るためにTightVNC Java Viewerが起動します。Javaのダイアログが表示されますので、内容を確認の上「実行」をクリックしてください。
図7 内容を確認の上「実行」をクリック
あとは通常のUbuntuのインストールと同様です。違いと言えば、virtioを利用しているため、ディスクが/dev/sdaではなく/dev/vdaなことくらいでしょう。インストール中にIPアドレスなどのネットワーク設定を行う必要がありますが、これはWebブラウザ上に表示されているものを手動で入力します。カスタムOSインストールガイド も参考にしてください。またVPSにはNICが3つ搭載されているので、グローバルIPアドレスはeth0に設定してください。
図8 Ubuntu Serverのインストール開始
Ubuntu Serverでは、インストールの途中でtaskselが起動し、どのようなタスクをインストールするか選択することができます。LAMP環境やメールサーバーなどを簡単にインストールすることができますが、とりあえずはリモートから接続するために「OpenSSH server」にチェックを入れておくと良いでしょう。それ以外のタスクは、後からSSHでログインしてゆっくり構築すれば良いですが、SSHだけは最初にインストールしておかないとリモートログインができなくなってしまいます[5] 。
図9 「 OpenSSH server」にチェックを入れておく
インストールが完了して、サーバーが再起動したら使用準備は完了です。
[4] 当然ですが、あらかじめUbuntu 14.04のISOイメージをダウンロードしておいてください。この例ではISOファイルが、sftpを実行した際のカレントディレクトリに存在することを前提にしています。
注5)
もちろんVNCコンソールで接続することはできますので、ログイン不能になるというわけではありません。しかし作業の利便性を考えるとSSHは必須でしょう。ただしセキュリティを厳密に考えるのであれば、この段階でSSHサーバーはインストールせず、VNCコンソールで接続した状態でまずファイアウォールを有効にし(後述) 、適切なアクセス制限などの設定を行ったうえでSSHサーバーを起動すべきです。
VNCコンソールが表示されないときは
Java 7を利用していると、TightVNC Java Viewerのウィンドウが表示されない場合があります。これはJavaのセキュリティ設定の問題です。この問題を解決するためには、まず「Oracle Java 7 Plugin Control Panel」をDashから起動します。その中の「セキュリティ」タブを開き、「 例外サイト・リスト」に「https://secure.sakura.ad.jp/」を追加してください。これで、このURLからのJavaコンテンツの実行が可能になります。
図10 「 Oracle Java 7 Plugin Control Panel」をDashから起動
図11 「 例外サイト・リスト」に「https://secure.sakura.ad.jp/」を追加
コンソールに文字が入力できないときは
インストーラーでIPアドレスの設定をする際などに、キーボードからの入力が効かない場合があります。筆者は文字の入力にibus-skkを利用しているのですが、ibus-skk(の半角英数モード)だと、VNCコンソールへの文字入力ができないようです。このような場合はキーボードインジケーターの「テキスト入力設定」で、それ以外の入力ソースを追加してください。ここでは英語キーボードを追加しています。なおibus-anthyの半角英数モードでなら、入力が可能なことを確認しています。
図12 キーボードインジケーターの「テキスト入力設定」で、ここでは英語キーボードを追加
公開鍵の設置とSSHサーバーの設定変更
初期状態では、インストール時に作成したユーザーで、パスワードログインが可能になっています。インターネットにつながっているサーバーの場合、パスワードでSSHログインできてしまうのは好ましくありません。SSH公開鍵を登録し、パスワードログインを許可しない設定にしておきましょう。これは、OSをインストールしたら一番最初にやっておくべきです。
SSH公開鍵の登録には、第53回 で紹介した「ssh-copy-id」を使うと便利です。またLaunchpadに公開鍵を登録しているのならば、ssh-import-idも便利です。たとえば筆者の公開鍵[6] を登録したい場合、筆者のLaunchpadアカウントである「mizuno-as」を引数に指定します。
Launchpadに登録されている公開鍵をインポートする
$ ssh-import-id mizuno-as
2014-04-20 11:33:00,911 INFO Authorized key ['2048', 'ab:0c:91:14:ed:0b:f4:1d:fa:88:b5:d4:41:db:2a:d1', 'hajime.mizuno@gmail.com', '(RSA)']
2014-04-20 11:33:00,911 INFO [1] SSH keys [Authorized]
設置した鍵でログインができることを確認したら、SSHサーバーの設定を変更します。具体的には「PasswordAuthentication」と「UsePAM」それぞれに「no」を指定し、SSHサーバーを再起動します。「 PasswordAuthentication」はコメントアウトされたうえで「yes」と書かれているはずです[7] 。コメントアウトを解除したうえで、「 no」に書き換えてください。「 UsePAM」は「yes」になっていますので、単純に「no」とします。
/etc/ssh/sshd_configの設定変更
#PasswordAuthentication yes
↓
PasswordAuthentication no
UsePAM yes
↓
UsePAM no
シリアルコンソールを設定する
さくらのVPSのコントロールパネルでは、Webブラウザからリモートコンソールを操作することができます。これはVPSのシリアルポートを経由してコンソールを取るという仕様のため、OS側でシリアルコンソールの設定をしておく必要があります。具体的には/etc/init/ttyS0.confというファイルを作成し、以下の設定を記述します。
Ubuntu WikiのSerial Console How To も参考にしてください。
/etc/init/ttyS0.confの内容
# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.
start on stopped rc or RUNLEVEL=[12345]
stop on runlevel [!12345]
respawn
exec /sbin/getty -L 115200 ttyS0 vt102
Upstartからgettyを開始
$ sudo start ttyS0
図13 シリアルコンソールからログイン
IPv6を設定する
さくらのVPSでは、IPv6のグローバルアドレスを1つもらえます。自宅の環境をIPv6化するには、まだまだ色々と面倒な手続や作業が必要ですが、VPSであれば気軽にIPv6を使い始めることができます。せっかくですので、IPv6アドレスを設定して、通信できるようにしておきましょう。
ネットワークの設定は、/etc/network/interfacesに記述されています。インストールが完了した状態で、以下のようにIPv4の設定がなされているはずです。
/etc/network/interfacesの内容
(……省略……)
# The primary network interface
auto eth0
iface eth0 inet static
address (IPアドレス)
netmask 255.255.254.0
network (ネットワークアドレス)
broadcast (ブロードキャストアドレス)
gateway (ゲートウェイのIPアドレス)
# dns-* options are implemented by the resolvconf package, if installed
dns-nameservers 133.242.0.3
この下に、IPv6用の設定を追記します。VPSに割り当てられているIPv6アドレスは、コントロールパネルの「VPSホーム」より確認できます。
/etc/network/interfacesに追記
iface eth0 inet6 static
address (IPv6アドレス)
netmask 64
gateway fe80::1
accept_ra 0
autoconf 0
privext 0
dns-nameservers 2401:2500::1
設定が完了したらネットワークを再起動してください。「 ip addr」コマンドを実行し、IPv6のグローバルアドレスがNICに付与されていることを確認します。その後は「ping6」コマンドで、外部のIPv6サイトに対して疎通できているか、確認しておくと良いでしょう。
「ip addr」コマンドを実行
$ ip addr show eth0
(……省略……)
inet6 (指定したIPv6アドレス)/64 scope global
valid_lft forever preferred_lft forever
$ ping6 ipv6.google.com
PING ipv6.google.com(2404:6800:4004:808::1008) 56 data bytes
64 bytes from 2404:6800:4004:808::1008: icmp_seq=1 ttl=52 time=18.6 ms
(……省略……)
ファイアウォールを設定する
インターネットに直接接続されているサーバーですので、ファイアウォールをきちんと設定し、不正なアクセスから防御しておきましょう。一般的なLinuxでは、iptablesコマンドを使ってソフトウェアファイアウォールを設定します。しかしiptablesは設定を行うのに専門の知識が必要で、ユーザーフレンドリーなツールとは言えません。そこで、iptablesを簡単に設定するツールとして「ufw(Uncomplicated FireWall) 」を使います。
このVPSではOpenSSHサーバーを起動しましたので、SSHの接続を許可し、それ以外のポートを遮断する設定を行いましょう。第76回 を参考に、SSH(22番ポート)にLIMIT(接続頻度を制限する)の設定を行います。
SSHコネクションを張っている状態でufwを有効にしようとすると、続行して良いかの確認が表示されます。ufwはデフォルトですべての通信を遮断する設定になっているため、SSHを許可するルールを設定していない状態でufw有効にすると、サーバーに接続できなくなってしまうためです。さくらのVPSであればシリアルコンソールをWebから取ることができるため、失敗しても致命的な事態にはなりませんが、そうでないサーバーの場合は十分に注意してください。
ufwを有効にした状態で「ufw status」を実行すると、現在の状態が表示されます。22番ポートに対し、頻度を制限したアクセス許可が設定されていることがわかります。またご覧のとおり、「 ufw limit ssh」コマンドを1回実行するだけで、IPv4とIPv6両方のルールが設定されます。
もしもWebサーバーやメールサーバーなどを立ち上げるのであれば、80/443や25/587など、必要なポートを適宜解放してください。
「ufw」コマンドを実行
$ sudo ufw limit ssh
Rules updated
Rules updated (v6)
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22 LIMIT Anywhere
22 (v6) LIMIT Anywhere (v6)
おわりに
この新しいVPSを使って、筆者は自分用のメールサーバーと、ownCloud 、Tiny Tiny RSS をすでに動作さています[8] 。お手軽なVPSと最新のUbuntuで、サーバーいじりを楽しんでみてはいかがでしょうか。
[8] というより、筆者はさくらのVPS大阪リージョンに借りているUbuntu 12.04サーバーで既にこれらのサービスを動かしており、今回の構築は14.04リリースに合わせた石狩への引越し案件であったというのが真相です。