Google Cloud Platform を使って JATOS サーバを動かす #3 仮想サーバの設定 (CentOS 6 編)

前の記事はこちら

では,立ち上がった 仮想サーバ (VPM) について,最低限の設定をしていきます。CentOS は基本的に Linux ですから,やろうと思えば色々なタイプのサーバとして使うことができます。しかし,今回必要なのは,実験をホストするための Web サーバとしての機能だけですし,余計なサーバを動かすだけのマシンパワーもありませんので,本当に最低限の設定だけ行い,余計なサービスは全て停止する方向でいきたいと思います。

あと CentOS 6 編,とありますが,他のディストリビューションについては説明しません。作業内容は共通していても,設定ファイルの所在や書き方が,それぞれのディストリビューション毎に異なるからです。しかし,概ねやることは似ていますので,細かい所で設定や作業が合わない部分については,ご自分の選んだディストリビューションの Linux でのサーバ設定の記事を探していただければ,解決策は見つかることと思います。

まずは sshd でログイン

SSH (Secure SHell) は,サーバにログインして色々な作業をするのに必要なシェル環境を提供します。これがないと始まらないので,まずはこの設定を行います。とは言うものの,実は SSH (SSH のアクセスを受け付ける sshd) はデフォルトですでに動くようになっています。

まずは,アクセスしてみましょう。SSH のクライアント(手元側)の環境としては,Linux や Mac をお使いの方の場合は既に手元の PC にありますので,そちらを使っても良いですし,VM インスタンスの管理画面からブラウザ経由で使うこともできます。ここでは,ブラウザからの SSH アクセスをしてみましょう。

画像2

VM  インスタンスの右側に,接続と書かれている欄があります。そこの下向きの矢印をクリックすると,いくつかの選択肢が出てきます。ブラウザ経由で SSH にアクセスする場合,[ブラウザウィンドウを開く] または [gcloud コマンドを表示] といったオプションが使えます(まあ,どっちでも良いです)。

ブラウザウィンドウを使う,の場合は,クリックしてしばらくすると

画像2

こんな感じのウィンドウが出てきます [xxx@instance-name ~]$ というもの(プロンプト)が表示されたらログインに成功しています。

gcloud コマンドを表示,を選ぶと

画像3

こんな感じの画面になります。下にある CLOUD SHELL で実行する,をクリックすると,ブラウザウィンドウでシェルを動かすことができます。

画像4

gcloud コマンドというのは,Google が開発した VM インスタンスへのアクセスを容易にするコマンドツールです。ブラウザ経由のアクセス以外にも,ローカル PC にインストールして,(例えば Mac のターミナルなどから)使うこともできます。

gcloud コマンドを表示,の方を選ぶと gcloud コマンドを実行するのに必要なコマンド入力が表示されるわけです。これをローカル PC のシェルプロンプトにコピー・ペーストしても良いですし,CLOUD SHELL で実行を選んで,ブラウザウィンドウ上でシェルを起動しても良い,というわけです。なお,CLOUD SHELL で実行の場合,gcloud コマンドがコピーされただけなので,必ず Enter キーをおしてコマンドを実行するのを忘れないでください。

なお,CLOUD SHELL を実行した場合,初回は ssh の暗号鍵が作成されます。ssh-keygen というコマンドを実行して,鍵ペアを作成するという一連の作業が自動で行われます。基本的に,聞かれた内容に答えて行けば良いので詳細は割愛します(↓の記事あたりを読んでくださいませ)。

公開鍵認証を使うと,パスワードよりも長いパスフレーズが使えますし,ローカル側とリモート側で鍵ペアが一致しないとログインできないので,セキュリティ上よろしいです(そもそも SSH はそれを行うためのものです)。鍵の作成は一回行えば良いので,2回目以降はパスフレーズを入力するだけでログインできます。ブラウザウィンドウで開く,の方ではこの公開鍵は作成されません。

sshd の設定

無事ログインできましたか?さて,これで sshd が動いてアクセスすることができるわけですから sshd については,これ以上の設定は必要ないような気がします。

じゃあ,なんでわざわざこのセクションを書いたかというと,sshd,ログインに必要なシステムであることは知れ渡っていますし,デフォルトの通信用ポート番号もわかっています。

ポート番号とは,ネットワークでデータをやり取りするために使われる経路を指定する番号です。どのタイプのサービスがどのポート番号を使うかというのは,初期値があり,ほとんどのサーバが初期値で動かしています。

ということは,不正アクセスの試みは,まずこの通信ポート (sshd の場合は 22番) から来ると思って間違いありません。適切な設定をしていれば,侵入されることはほとんどないと思われますが,ここで GCP ならでは問題が発生します。GCP は使用状況(≒通信料)に応じて課金されるという点です。つまり,不正アクセスの試みがあると,sshd は,まずそのリクエストを受け付け,アクセスを許可しない場合は,接続不可の反応を返すことになり,そこに通信が発生してしまうわけです。この手の不正侵入は,可能性のありそうなパスワードを総当たりで試すブルートフォース攻撃という形をとることが多いので,ムダな不正侵入の試みに対して,こちらがお金を払う羽目になる,というありがたくない事態が発生します。

じゃあ,どうしましょう,というのがここでの主題です。sshd それ自体を停めることはできませんので,一番手っ取り早いのは sshd の通信ポートをデフォルトの22番から,使われていないものへと変え,そもそも22番の方は通信自体を出来なくする,という方法です。そのためには,sshd の通信ポートを変えるとともに,アクセスの制御を行うファイアウォールの設定を変える必要があります。

sshd の通信ポートを変える

まず,どの番号のポートで sshd を待機させるかを決めます。原理的には何番でもいいのですが,あまり適当に付けると,他のサービスが使う番号と被ってしまい両者の通信がバッティングします(サービスが異なると応答の仕方が違うのでうまくいきません)。ですので,他のサービスで使われていない番号を選ぶ必要があります。サービスで使われる番号はサーバ上の /etc というディレクトリにある /etc/services というファイルに一覧がありますので,そこに書かれていない番号を選ぶ,という方法があります。まあ,4桁ないし5桁の番号だと,ところどころ使われていないところがあるので,そこから選ぶというのが無難でしょうか。とおもったら,Wikipedia にポート番号の一覧がありました。

ここに挙げられていない番号を選べば大丈夫そうです。例えば,今年の西暦 2020 はリストにないですね。じゃ,例えば 2020 にするとして,以下の解説をしてみます(もちろん,皆さんが実際に行う場合は,2020は止めた方がいいですよ)。

ファイアウォール・ルールを作って適用

では,まず,sshd の設定を変える前に,ファイアウォールの設定を変えましょう(こちらを先にしておかないと,全く通信できなくなる可能性があります)。ナビゲーションメニュー(上にある水平線三本の形をしたボタン)から,VPC ネットワークファイアウォールルール,を選びます。

画像12

現れた画面で,ファイアウォール・ルールを作成,を選んでください。画面が長いので,スクリーンショットは載せませんが,重要なポイントは以下の通りです。

名前

適当な名前を付けてください(ルールの識別のためのものです)。先頭が小文字,最大62文字,小文字,数字,ハイフンが使えます。パッと見でわかるような命名規則を採用した方が良いと思います。例えば,allow-XXXX (XXXX はポート番号)とすると,XXXX 番の通信を許可,ということが一目でわかるので,良いのではないでしょうか。

優先度

優先度の高い順にルールが適用されます。まあ,ほとんど,デフォルトの 1000 で良いでしょうが。

トラフィックの方向

サーバに対しての通信(受信トラフィック)なら上り,サーバから出て行く通信(送信トラフィック)なら下りになります。今回は sshd を受け付ける設定なので,上りにします。

一致したときのアクション

許可または拒否を選んでください。今回は許可。

ターゲットタグ

仮想ネットワークの中で,タグ指定されたもののみに適用します。サーバインスタンスの方で,タグを指定してファイアウォールを適用させるので,その指定のための名前とします。例えば,ファイアウォールの名前を利用して allow-XXXX-server とかだと分かりやすいと思います。

ソースフィルタ,ソース IP の範囲

設定を適用するネットワークを選びます。今回は,IP 範囲,ソース IP の範囲は 0.0.0.0/0 とします(全てのネットワークを許可,もし自分が使う端末のアドレスが決まっているなら,もっと限定して指定するとさらにセキュリティが高まります)

プロトコルとポート

ファイアウォールを設定する通信ポートを指定します。sshd の場合は TCP,ポートは通信を許可したい番号を入力します(今回の例の場合 2020 になります)

以上の設定が終わったら,[作成] をクリック。うまくいくと,↓のような感じに。

画像6

次に,VM インスタンスに,このルールを適用します。Compute Engine -> VM インスタンスと移動し,VM インスタンスの名前をクリック。

画像7

インスタンスの詳細で,[編集]をクリック。

画像8

スクロールして,ファイアウォールの設定(http, https にチェック,ネットワークタグに先ほど設定したルールのターゲットタグを入力)。

画像10

終わったら [保存] をクリック。

sshd の動作ポートを変更

注)ここをミスると,接続できなくなりますので慎重に

ログインしているシェル(ターミナル)で,以下のコマンドを実行します(プロンプトの $ は入力しない)。

・設定ファイルのバックアップ

$ sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.orig

・ポートの変更

$ sudo sed -i -e "s/#Port 22/Port 2020/g" /etc/ssh/sshd_config
2020 の部分は自分が選んだポート番号に読み替えてください。sed は好かん,いう方は別のコマンド使ってもいいですし,もちろん,vi 等のエディタを使っても構いません。

ここまで終わったら(↑の作業をしたシェルはまだ閉じないでください,設定がうまく行かないときにシェルを閉じてしまうと ssh 接続が出来なくなって詰む可能性があります),↑の作業をしたシェルで以下のコマンドを実行。

$ sudo service sshd restart

ポート番号を指定して,新しい SSH 接続を行います。

画像9

VM インスタンスの画面で,接続 → ブラウザウィンドウでカスタムポートを開く → ポート番号に指定した番号を入力(例 2020)→ 開く,の順でポート番号指定した SSH 接続を試みる。無事 SSH 接続できれば OK。ダメなら,設定に間違いが無いか確認し,うまくいくまでやり直す。その際,まだ閉じていないシェルで作業してください(うまくいくまでこのシェルは閉じてはいけません)。

上手くいったら,ファイアウォールの設定で 22 番ポートを閉じるルールを追加します(やり方は↑を見てください)。設定の内容は以下の通り。

名前  disallow-22
優先度 1000
方向 上り
一致したときのアクション 拒否
ターゲットタグ disallow-22-server
IP 範囲 0.0.0.0/0
プロトコルとポート tcp:22

名前,タグ,優先度は任意です。あとは VM インスタンスの方で,このファイアウォール・ルールを追加してください。

以後,ssh でアクセスする場合は,ポート番号の指定が必要です。

・ブラウザウィンドウでカスタムポートを開く → 指定した番号を入力する
・gcloud コマンドを表示 → CLOUD SHELL 画面に表示されたコマンドに,の後ろに --ssh-flag="-p XXXX" を追加(XXXX は↑で設定した ssh のポート番号)
gcloud beta compute ssh --zone "us-west1-a" "インスタンス名" --project "プロジェクト名"  --ssh-flag="-p XXXX"

Web サーバが動くか確認

ここまでの設定を行えば,基本的な設定は大体完了です。あとは,Web サーバがきちんと動くかどうかを確認しましょう。さきほど,ファイアウォールの設定のところで,http, https のトラフィックに許可を与えていますので,通信はできます。また,Web サーバ自体はデフォルトで起動するように設定されていますので,ブラウザでアクセスしてみましょう。アクセスに必要な IP アドレスは VM インスタンスのコンソールに表示されています。

画像11

外部 IP に書かれている IP アドレスの辺りにカーソルを持って行くと書類のような形をしたボタンが表示されますので,クリップボードにアドレスをコピーして,ブラウザのアドレスバーに貼り付けてください。

画像12

こんな感じでテストページが表示されたら大丈夫です。

これで,仮想サーバの基本的な設定は(だいたい)終わりです。次は,JATOS をインストールします。次の記事は↓


この記事が気に入ったらサポートをしてみませんか?