低価格 Linux VPS を使う

ASP.NET Core になって、ASP.NET も正式に Linux サーバーで動くようになりました。そこで、「さくらの VPS」 の 1G 月額972円 を使って ASP.NET Core を動かしてみました。Windows サーバーと比べると約半額になります。

それに Linux VPS なので、Python, Ruby, Node.js と何でも動作するので、使い勝手はいいです。

以下は、VPS の設定についての説明で、ASP.NET Core のことについては、「ASP.NET Core アプリを Linux サーバーで公開」の方を見てください。

Step 0 - SSH クライアントの準備

Linux の操作をするための SSH クライアントを用意します。Windows で動作する SSH クライアントには、以下のようなものがあります。

Bash on Ubuntu on Windows

Linux のツールを Windows 上でそのまま使えるようにするために、サブシステムとして導入されたものです。最近は Bashシェルのノウハウや情報が豊富ななので、Windows 10 を使っている場合にはお勧めです。それに、Linux VPS を借りる前に Linux のコマンドを練習できるというのはいいです。

Tera Term

元々は寺西 高氏によって開発・公開されたもので、日本にはユーザーが多いです。設計思想は古いですが、SSH の設定は Putty よりもしやすいです。

PuTTY

SSH クライアントの定番的ソフトです。ただし、設計思想が古く少し癖があるソフトなので最初は戸惑うときがあると思います。Pageant が便利で使っています。

MobaXterm

とても多機能なクライアントで、個人的には気に入っているクライアントソフトです。

SmarTTY

マルチタブ、SCPに対応しています。

Step 1 - Linux VPS を契約

「さくらの VPS」の 1G プランのスペックはメモリー 1G、ストレージ SSD 30G、CPU 仮想 2Core で、利用料金は月額 972円です。

「さくらの VPS」の契約の申込みをすると、メールには30分~1時間程度待つようにと記載してありましたが、このときには10分でサーバ情報を記載したメールが届きました。そして、コントロールパネルにアクセスするとサーバー一覧に下の図のように表示されていました。 コントロールパネルの画像

そのサーバーの詳細を表示させると以下のような画面になります。AWS や Azure と比較するとコントロールパネルは非常に簡素です、サーバーの設定が必要になれば設定はコンソールからするという考え方です。 サーバー詳細の画像

画面の「OSインストール」のボタンをクリックすると、カスタムOSインストール及びISOイメージインストールが選択できます。

OS の方は、今回は Ubuntu 16.04(amd64)にしました。カスタムインストルできるOSに含まれているので、下の図のように、選択するだけでインストールが始まります。 カスタムインストールの画像 自分の場合は、Bash on Ubuntu on Windows と同じのが便利だと思って Ubuntu にしました。CentOS 7 等の方が好みであれば、ASP.NET Core も有名なディストリビューションには対応しているので、好みのディストリビューションを使った方がいいと思います。

Step 2 - OS のインストール

Ubuntu 16.04 は、「さくらの VPS」の Ubuntu 16.04 のカスタムインストールガイドに従ってインストールしました。

「さくらの VPS」では、SSHへの攻撃を避けるため、インストール直後に次のことをする必要があります。詳しくは以下のステップで説明します。

  • SSH接続を公開鍵認証に変更
  • ファイアーウォールの設定

Step 3 - SSH接続を公開鍵認証に変更

公開鍵認証方式にすることにより、パスワードの場合より安全に接続できるようになります。

Bash on Ubuntu on Windows の場合

まず、SSH クライアントに Bash on Ubuntu on Windows を使うということで説明します。Linux のクライアントを使う場合と同じなので問題が起きた場合にググって探しやすいです。

参考ドキュメント OpenSSHサーバー

キーペアの作成
-t rsa と指定することで、RSA が使われ、id_rsa.pub(公開鍵)とid_rsa(秘密鍵)が .ssh ディレクトリに作成される
$ ssh-keygen -t rsa

公開鍵をサーバーに設定
$ ssh-copy-id username@remotehost

パーミッションの確認
$ chmod 600 .ssh/authorized_keys

接続を一旦切って公開鍵認証で接続できることを確認
Enter passphraze for key '/home/username/.ssh/id_rsa': と表示されてパスフレーズの入力して接続できればOK
$ ssh username@remotehost

sshd_config ファイルを変更して、パスワードログインを禁止する。また、SSHを標準のポート番号22で開いていると攻撃を受けやすいので、ファイアーウォールの方で自分のPCのIPアドレスからの通信だけを許可する設定をできない場合はポート番号を49152~65535の任意の番号に変更しておく。
$ vi /etc/ssh/sshd_config

ポート番号変更
Port 54322
パスワードログイン禁止
PasswordAuthentication no

sshサーバーをリスタートして設定を反映
$ sudo service sshd restart

ssh のポート番号を標準から変更した場合は、下のように
$ ssh -p 54322 username@remotehost

毎回ポート番号等を入力するのは面倒なので ~/.ssh/config に以下のように記述すると簡単に接続できるようになります。

Host pp22
    HostName        pp22.net
    Port            54322
    IdentityFile    ~/.ssh/id_rsa
    User            awoni
Host creativeweb
    HostName        creativeweb.jp
    Port            58722
    IdentityFile    ~/.ssh/id_rsa
    User            awoni

config ファイルを保存したら、以下のようにパーミッションを600に変更して、その後は簡単入力になります。設定の詳しいことは、'man ssh_config' で調べてください。

$ chmod 600 .ssh/config
接続例
$ ssh pp22

Tera Term の場合

Bash on Ubuntu on Windows を使えない場合は、Tera Term を使うとキーペアが Linux と同じものなので便利です。

(1)キーペアの作成

[設定]>[SSH鍵設定]で以下の画面が表示されます。

キーペアの作成の画像

生成ボタンをクリックして、パスフレーズを入力すると、キーペアが保存できる状態になります。保存する場所はどこでもいいのですが、注意しないといけないのは、普通に保存するとキーペアが隠しファイルになるということです。もし、隠しファイルだと困る場合には、別ドライブ、例えば USB メモリーに保存するといいです。隠しファイルで保存した場合に、後になって公開キーの中身が必要になった場合には、後で説明する PuTTYgen を使って読み込むという方法があります。

(2) SCPでサーバーにアップロード パスワード認証でサーバーに接続後、[ファイル]>[SSH SCP...]で以下の画面が表示されます。

Tera Term のSCPの画像

[...]ボタンで、File エクスプローラーが表示されますが、ここでは隠しファイルも表示されるので、保存しておいた公開キーを送信します。

(3) authorized_keys の設定

.ssh ディレクトリがない場合は作成して、パーミッションを700に変更
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

送信した公開キーを authorized_keys に追加します。authorized_keys が既にある場合には、操作を間違った場合を想定してバックアップを取っておく安全です。
$ cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys_Backup
$ cat id_rsa.pub >> ~/.ssh/authorized_keys

パーミッションの確認
$ chmod 600 .ssh/authorized_keys

sshd_config の修正については、Bash on Ubuntu on Windows の場合と同じです。

(4) Tera Term の認証設定 Tera Term 側では、メニュー[設定]>[ssh...]で、認証設定をおこないます。下の図で、ユーザー名と秘密キーを登録して、メニュー[設定]>[設定の保存...]で設定した内容を保存します。

Tera Term の認証設定の画像

PuTTY の場合

PuTTY では、id_rsa ファイルの読み込みや新たにキーペアを作成する場合は、PuTTYgen を使います。PuTTYgen を起動すると以下のような画面になります。

PuTTYgen の初期画像

新しくキーペアを作成する場合は「Generate」ボタンを、既存のキーペアを利用する場合は「Load」ボタンをクリックします。PuTTY が使用する秘密キーは *.ppk ファイルで、linux で通常使用する id_rsa とは形式が異なっています。既存の id_rsa があっても「Load」して、 *.ppk ファイルを作成する必要があります。

新たにキーペアが作成されるか、既存の秘密キーが読み込まれた場合は、下の図のような画面になります。

PuTTYgen のキーが読み込まれた場合の画像

次に、[SavePribateKey]ボタンをクリックして、秘密キーを保存してください。そのファイルは、隠しファイルになっています。公開キーについては、画面の一番に上に表示されている[Public key for pasting]のものをコピーして使ってください。[Save public key]ボタンを使って公開キーを保存する必要はありません。秘密キーがあればいつでも PuTTYgen で「Load」すれば表示されます。

次に、公開キーをサーバーにどうやってアップロードするかですが、エディターに貼り付けることで対応します。それで、PuTTY を起動します。すると下の図のような画面が立ち上がります。パスワード認証のSSH接続だと [Host Name]を入力して、[Open] ボタンをクリックするとサーバーに接続されて、ユーザー名とパスワードを聞いてくるので、OSをインストールしたときに設定したものを入力してください。

PuTTYの初期画面の画像

サーバーと接続できたら、下のコマンドを入力してください。

nano

下の図のような画面になります。nano は、初心者向けのテキストエディタで、Windows のメモ帳のようなものです。

nano の画像

そこに、PuTTYgen の 画面の一番に上に表示されている[Public key for pasting]のものをコピーして、貼り付けてください。PuTTY の画面で右クリックで貼り付けることができます。

公開キーを貼り付けれたら、Ctrl+o キーを押してください。すると下の図のように、保存するファイル名を入力する画面になるので、適当な名前を入力してリターンキーを押してください。

nano の画像

それで、入力したファイル名で、ホームディレクトリーに公開キーが保存されました。Ctrl+x キーで nano を終了します。公開キーがサーバーに保存されたので、以降の設定は Tera Term の場合と同じです。

PuTTY で便利なのは、Pageant です。Windows では、秘密鍵をどう管理するかがはっきりしていません。セキュリティ的には隠しファイルにするのがいいのですが、隠しファイルにすると他のアプリケーションから利用するのが難しくなります。Pageant を利用することで秘密鍵を隠しファイルにしておくことができるし、Pageant を常駐している状態にしておくと、Pageant を立ち上げるときにパスフレーズを入力しておくとその後は、対応している ssh クライアントであれば、パスフレーズを聞かれることなく利用できます。また、設定も楽です。

自分の場合は、MobaXterm、FileZilla を Pageant を利用して使っています。

具体的に Pageant はどういうものかというと、Pagent を起動するとタスクバーにタスクバーに下の図のようなアイコンが表示されます。 Pageant のアイコン

そのアイコンをダブルクリックすると、キーの登録画面が表示されます。その画面で、使用したい秘密キーを登録します。そうすると、Pageant に対応したアプリケーションで、その秘密キーが使えるようになります。

Pageant の画像

Step 4 - ファイアーウォールの設定

ファイアーウォールの設定には UFW を使うと便利です。UFW の設定については以下を参考にしてください。

Ubuntu Community Help Wiki UFW

以下では、ufw を有効にして、ssh(ポート番号22)、http(ポート番号80)、hhtps(ポート番号443)を開けています。また、ssh については、接続元を指定して自分のIPアドレスからしか接続できないようにしています。ssh ポートは、攻撃の目標になりやすいので少し手間ですが気をつけた方がいいです。

$ sudo ufw enable
$ sudo ufw allow from 123.23.45.156 to any port 22 proto tcp
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

ufw の状況確認は次のコマンドでできます

$ sudo ufw status

自宅のインターネットは固定IP接続ではないので、時々IPアドレスが変更になります。その場合は、SSH クライアントからは接続できなくなるので、コントロールパネルのコンソールを使って新しい IP アドレスで入力します。

また、不要になった IP アドレスのルールは、以下のように ufw delete コマンドで削除できます。

$ sudo ufw delete allow from 123.23.45.156 to any port 22 proto tcp

補足

サーバーで動作しているサービスの状況を把握するコマンドです。

現在起動しているサービスの一覧

$ systemctl -t service

サービスの起動設定の一覧を表示

$ systemctl list-unit-files -t service

起動時にサービスを有効にする

$ sudo systemctl eable myservice

起動時にサービスを無効にする

$ sudo systemctl disable myservice