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 サーバーで公開」の方を見てください。
Linux の操作をするための SSH クライアントを用意します。Windows で動作する SSH クライアントには、以下のようなものがあります。
Linux のツールを Windows 上でそのまま使えるようにするために、サブシステムとして導入されたものです。最近は Bashシェルのノウハウや情報が豊富ななので、Windows 10 を使っている場合にはお勧めです。それに、Linux VPS を借りる前に Linux のコマンドを練習できるというのはいいです。
元々は寺西 高氏によって開発・公開されたもので、日本にはユーザーが多いです。設計思想は古いですが、SSH の設定は Putty よりもしやすいです。
SSH クライアントの定番的ソフトです。ただし、設計思想が古く少し癖があるソフトなので最初は戸惑うときがあると思います。Pageant が便利で使っています。
とても多機能なクライアントで、個人的には気に入っているクライアントソフトです。
マルチタブ、SCPに対応しています。
「さくらの 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 も有名なディストリビューションには対応しているので、好みのディストリビューションを使った方がいいと思います。
Ubuntu 16.04 は、「さくらの VPS」の Ubuntu 16.04 のカスタムインストールガイドに従ってインストールしました。
「さくらの VPS」では、SSHへの攻撃を避けるため、インストール直後に次のことをする必要があります。詳しくは以下のステップで説明します。
公開鍵認証方式にすることにより、パスワードの場合より安全に接続できるようになります。
まず、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
Bash on Ubuntu on Windows を使えない場合は、Tera Term を使うとキーペアが Linux と同じものなので便利です。
(1)キーペアの作成
[設定]>[SSH鍵設定]で以下の画面が表示されます。
生成ボタンをクリックして、パスフレーズを入力すると、キーペアが保存できる状態になります。保存する場所はどこでもいいのですが、注意しないといけないのは、普通に保存するとキーペアが隠しファイルになるということです。もし、隠しファイルだと困る場合には、別ドライブ、例えば USB メモリーに保存するといいです。隠しファイルで保存した場合に、後になって公開キーの中身が必要になった場合には、後で説明する PuTTYgen を使って読み込むという方法があります。
(2) SCPでサーバーにアップロード パスワード認証でサーバーに接続後、[ファイル]>[SSH 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...]で、認証設定をおこないます。下の図で、ユーザー名と秘密キーを登録して、メニュー[設定]>[設定の保存...]で設定した内容を保存します。
PuTTY では、id_rsa ファイルの読み込みや新たにキーペアを作成する場合は、PuTTYgen を使います。PuTTYgen を起動すると以下のような画面になります。
新しくキーペアを作成する場合は「Generate」ボタンを、既存のキーペアを利用する場合は「Load」ボタンをクリックします。PuTTY が使用する秘密キーは *.ppk ファイルで、linux で通常使用する id_rsa とは形式が異なっています。既存の id_rsa があっても「Load」して、 *.ppk ファイルを作成する必要があります。
新たにキーペアが作成されるか、既存の秘密キーが読み込まれた場合は、下の図のような画面になります。
次に、[SavePribateKey]ボタンをクリックして、秘密キーを保存してください。そのファイルは、隠しファイルになっています。公開キーについては、画面の一番に上に表示されている[Public key for pasting]のものをコピーして使ってください。[Save public key]ボタンを使って公開キーを保存する必要はありません。秘密キーがあればいつでも PuTTYgen で「Load」すれば表示されます。
次に、公開キーをサーバーにどうやってアップロードするかですが、エディターに貼り付けることで対応します。それで、PuTTY を起動します。すると下の図のような画面が立ち上がります。パスワード認証のSSH接続だと [Host Name]を入力して、[Open] ボタンをクリックするとサーバーに接続されて、ユーザー名とパスワードを聞いてくるので、OSをインストールしたときに設定したものを入力してください。
サーバーと接続できたら、下のコマンドを入力してください。
nano
下の図のような画面になります。nano は、初心者向けのテキストエディタで、Windows のメモ帳のようなものです。
そこに、PuTTYgen の 画面の一番に上に表示されている[Public key for pasting]のものをコピーして、貼り付けてください。PuTTY の画面で右クリックで貼り付けることができます。
公開キーを貼り付けれたら、Ctrl+o キーを押してください。すると下の図のように、保存するファイル名を入力する画面になるので、適当な名前を入力してリターンキーを押してください。
それで、入力したファイル名で、ホームディレクトリーに公開キーが保存されました。Ctrl+x キーで nano を終了します。公開キーがサーバーに保存されたので、以降の設定は Tera Term の場合と同じです。
PuTTY で便利なのは、Pageant です。Windows では、秘密鍵をどう管理するかがはっきりしていません。セキュリティ的には隠しファイルにするのがいいのですが、隠しファイルにすると他のアプリケーションから利用するのが難しくなります。Pageant を利用することで秘密鍵を隠しファイルにしておくことができるし、Pageant を常駐している状態にしておくと、Pageant を立ち上げるときにパスフレーズを入力しておくとその後は、対応している ssh クライアントであれば、パスフレーズを聞かれることなく利用できます。また、設定も楽です。
自分の場合は、MobaXterm、FileZilla を Pageant を利用して使っています。
具体的に Pageant はどういうものかというと、Pagent を起動するとタスクバーにタスクバーに下の図のようなアイコンが表示されます。
そのアイコンをダブルクリックすると、キーの登録画面が表示されます。その画面で、使用したい秘密キーを登録します。そうすると、Pageant に対応したアプリケーションで、その秘密キーが使えるようになります。
ファイアーウォールの設定には 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