楽してMinecraftサーバを立てたい!

久々に友人からMinecraftやろうと誘われたので、Minecraftサーバーを建てることに。

僕がネットワークのネの字もわからなかったその昔、友人たちとそれぞれの家のPCからMinecraftマルチプレイをやりたいといった時は、まずMinecraft入れて、Hamachi (VPN.net – Hamachi by LogMeIn)入れて・・・と結構準備が面倒だった記憶がありました。

今作るならGCPにサーバー置いて、どこかからマイクラコンテナ拾ってきてdockerで動かしたら一瞬で作れそうと考えたのでやってみました。

ホスト作成

GCPダッシュボードより、「Compute Engine」→「VMインスタンス」→「新規作成」

以降はお好みではありますが、今回下記のとおりに指定。
・リージョン:「asia-northeasia1(東京)」(金額が少し上がりますが、なるべく遅延を減らしたいため)
・ゾーン  :「asia-northeast1-a」
・CPU   :「1」
・メモリ  :「3.75GB」
・OS    :「CentOS7」
・HDD   :「100GB」

f:id:ylab-203:20190725142751p:plain

上記条件で起動したままの状態だと月額約4,000円です。
(普段は停止しておき、遊ぶ時だけ起動すればそこまでかかりません。)

Docker インストール

VMが起動したらsshでログインし、dockerのインストールを行います。
一つ一つ環境設定するが面倒だったので、公式のスクリプトを使用して一気にインストールしてしまいます。

# curl -fsSL https://get.docker.com -o get-docker.sh
# sudo sh get-docker.sh

詳細はこちら:
Get Docker Engine - Community for CentOS | Docker Documentation

インストールが完了したか確認。

# docker -v
Docker version 19.03.0, build aeac9490dc

正しくインストールできたら、dockerを起動と自動起動の設定を行います。

# systemctl start docker
# systemctl enable docker 

Minecraftコンテナインストール

Minecraftサーバのコンテナを作ってくださっている方はやはりいるようで、今回は下記のコンテナをお借りします。

hub.docker.com

立ち上げ

# docker run -e EULA=TRUE -d -p 25565:25565 --name mc --restart=always itzg/minecraft-server

メモ
「-e EULA=TRUE」
Minecraftの開発元のMojangが定めるエンドユーザーライセンス条項へ同意するかどうかについて。
詳細: Mojang Account

「-p 25565:25565 」
ホストとコンテナのポート番号の紐付けを設定。
Minecraftが利用しているデフォルトのポート番号は25565なので、変更したい場合は「-p 25575:25565」と設定。(クライアント側でもポートの変更が必要)

「--restart=always」
dockerプロセスが再起動した際、自動的にコンテナを立ち上げるようにする設定。

起動確認

# docker ps
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS                  PORTS                                 NAMES
bc5e2196a9a5        itzg/minecraft-server   "/start"            17 hours ago        Up 17 hours (healthy)   0.0.0.0:25565->25565/tcp, 25575/tcp   mc

ネットワーク設定

GCPVMは再起動するたびにグローバル側のIPが変わってしまうため、固定とする必要があります。
対象の「VMインスタンス詳細」→「編集」→「ネットワーク・インターフェース」の項目より、外部IPに名前をつけて予約します。
f:id:ylab-203:20190725151342p:plain

また、ネットワークタグの項目に「minecraft」というタグをつけます。(後のfirewallの項目で利用します)
f:id:ylab-203:20190725155131p:plain

firewall設定

サイドバーより「ネットワーキング」→「VPCネットワーキング」→「ファイアーウォールルール」に移ります。

「ファイアーウォールルールを新規作成」より、下記のようなルールを作成します。

・優先度:1000以下 (500くらい)
トラフィックの方向:「上り」
・アクション:「許可」
・ターゲット:「指定されたターゲットタグ」
・ターゲットタグ:「minecraft
・ソースフィルタ:プレイする人のグローバルIP
プロトコルとポート:「tcp:25565」
f:id:ylab-203:20190725154755p:plain

プレイ

Mnicraftを起動し、「マルチプレイ」→「サーバの登録」より、先程作成したVMIPアドレスを登録。
f:id:ylab-203:20190725155619j:plain

無事プレイすることができました。

時間があったら ・サーバー監視
・Slackへのログ通知
k8sでオートスケーリング
までやってみたいですねー。

NXOSのパスワードリカバリでハマった話

先日Nexus9000の初期構築を行った際、最初に設定したパスワードを間違えたためか2回目以降ログインができない状態に陥ってしまいました。
同じチームの大先輩に助けていただき、何とか出来たのでメモとして残します。

使用していた機器

対象機器:Nexus9000 93180YC-EX
OSバージョン: 7.0(3)I7(5a)

ハマった場所

まず、パスワードリカバリの方法をwebで検索すると、下記のciscoのドキュメントが見つかります。  

www.cisco.com

NX-OSをコンソール経由でリカバリを実施するためには、再起動してブートシークエンスのタイミングで「Ctrl + ](右かっこ)」を使用すると記載されています。
自分がリカバリを実施する際、上記に倣って再起動中に「Ctrl + ]」を押すのですがbootモードで上がってくる気配はなく、そのまま普通に起動してしまいました。

復旧方法

日本語のドキュメントの更新日時が2012 年 2 月 15 日となっているので、おそらくバージョンアップに伴って変更されたと思うのですが、
現在は「Ctrl + ]」ではなく「Ctrl + C」となっていました。

成功するとLoaderモードで上がってくるため、下記のコマンドを投入。

loader > cmdline recoverymode=1
loader > boot nxos.[NX-OSのバージョン]

するとOSが上がってくるので

switch(boot)# conf t
switch(boot)(config)# admin-password [新しいパスワード]
switch(boot)(config)# exit
switch(boot)# load-nxos

以上を投入することで、新規パスワードが設定された状態のNX-OSが起動します。

初心者のSECCON Beginners Writeup

先週開催されたCECCON Beginnersに参加しました。
CTFエンジョイ勢なので基本的な問題しか解けませんでしたが、せっかくなのでWriteup書きます。

概要

日時:2019 年 5 月 25 日 (土) 15:00 - 2019 年 5 月 26 日 (日) 15:00 (24 時間) 場所:場所: オンライン
形式: チーム戦 Jeopardy
チームメンバー:自分以外に2人(僕以外は今年からセキュリティ系の会社に就職したので今後に期待。)

結果

666人中131位
あまりきちんと解けたとは言えませんでしたが、それでも頑張った方かな。。。


【Web】[warmup] RAMEN

Web問題の一問目、基本的なSQLインジェクション

f:id:ylab-203:20190601103129p:plain
web1-1

最初に手を付けた問題がこれ。
午後三時くらいだったので飯テロによって早くもHPが削られました。

f:id:ylab-203:20190601103533p:plain
web1-2

Webページ中に店員さんの名前と一言コメントを検索するフォームがありましたので、
こちらにSQLインジェクションを仕掛けます。

流はは下記の通りです
1. 基本的なSQLインジェクションが仕掛けられるか確認
2. UNIONで情報を取得できるか確認
3. テーブルの名前とスキーマを取得
4. フラグが入っていそうなテーブルを表示

1. 基本的なSQLインジェクションが仕掛けられるか確認
まずは適当にSQLの構文に引っかかってくれそうな文字列を入れてみます。

f:id:ylab-203:20190601114943p:plain
web1-3
すると下記のようなエラーが発生しました。
f:id:ylab-203:20190601115013p:plain
web1-4
よって、CGIプレースホルダ等の仕組みを利用せず、入力フォームで直接SQLを操作できそうと推察できます。
そして後ろ側で走っているSQLは以下の様なものであると予想できます。
SELECT name,comment FROM table_name WEARE name = '[フォームに記載した内容]' ;

次にSQLインジェクションの定石を試します。
1' or "1" = "1" #
これがうまく行けば対象のテーブルに記載されているデータをすべて取得することができます。
細かい説明は割愛しますが、簡単な説明は下記の通りです。
* 「1'」:本来フォームに入れてSQLの検索対象になる文字列として適当に1を入れている。
* 「or 」:SQLの検索条件。orの左右が正ならそれにマッチしたデータが返ってくる。
* 「"1" = "1" 」:絶対にtrueになる条件。
* 「# 」:以降のSQL文はコメントアウト。#の後ろにスペースを入れるのがキモ。

さて、上記の文字列をフォームに入れてSEARCHをクリックします。

f:id:ylab-203:20190601122256p:plain
web1-5

特に変化はありません。
しかし、今回はエラーが出なかった = SQL文として正しい構造であることがわかりました。

2. UNIONで情報を取得できるか確認
UNIONとは、UNIONは二つ以上のSELECT FROM〜の結果を、統合して表示してくれる仕組みです。
とはいっても、現状テーブル名やカラム名は不明なため、"null"を利用して下記の通り試してみます。
1' or "1"="1" UNION SELECT null, null #

f:id:ylab-203:20190601123243p:plain
web1-6

すると、もともと表示されていた3行に加えて、なにも表示されていない行が1行追加で表示されました。
これにより、UNIONを利用することで別のテーブル等の情報を表示できることが確認できました。

3. テーブルの名前とスキーマを取得
UNIONで他のテーブルの情報が表示できそうであることを確認した後は、それらの一覧を表示させてみます。

1' or "1"="1" UNION SELECT table_name, column_name FROM information_schema.columns #

INFORMATION_SCHEMA COLUMNS テーブルというRDBが標準で保持しているテーブルにアクセスし、テーブル名(table_name)とテーブル内のカラムに関する情報(column_name)を表示させます。
参考: dev.mysql.com

f:id:ylab-203:20190601124526p:plain
web1-7

上記の文字列を入力すると、最初の3行に加え様々な情報が見えるようになりました。
(DB初心者なので詳しくはわかりませんが、おそらくRDBにデフォルトで準備されているテーブル等の情報かなと思ってます。)

そして下の方まで探してみると、明らかにフラグが入っていそうなテーブルを見つけました。

f:id:ylab-203:20190601130126p:plain
web1-8

4. フラグが入っていそうなテーブルを表示
最後に、フラグが入っているであろうテーブルと、そのカラムの内容を表示させます。

1' or "1"="1" UNION SELECT flag, null FROM flag #
flagテーブルの中にはflagというカラム1つしか入っていません。
UNIONで紐づけて表示を行う場合は、他のSELECT文で表示させているカラムの個数(「名前」、「一言」の2列分)と揃える必要があるため、あえてnullを追記しています。

f:id:ylab-203:20190601130728p:plain
web1-8

そしてめでたくフラグを取得することができました。


【Misc】containers

問題として提示されたのは「e35860e49ca3fa367e456207ebc9ff2f_containers」という名前のファイル一つでした。
「コンテナ」という名前と16進数で記載されたファイル名からdocker初めは関連の問題かと考えていました。
(コンテナexportしたものかな。。。?でもファイル容量が32KBしかないしな。。。)

viでファイルを強引に開いてみると、先頭には下記のように記載されていました。

CONTAINER.FILE0.<89>PNG^M
^Z
^@^@^@^MIHDR^@^@^@<80>^@^@^@<80>^H^F^@^@^@Ã>aË^@^@^@^AsRGB^@®Î^\é^@^@^@^DgAMA^@^@±<8f>^Küa^E^@^@^

一見バイナリファイルに見えますが、先頭の「CONTAINER.FILE0.」は読めるので、明らかにファイルに直接書き込んだ雰囲気がありました。
そして目についたのは「PNG」。viをバイナリエディタモードにして確認してみると下記のようになっていました。

00000000: 434f 4e54 4149 4e45 522e 4649 4c45 302e  CONTAINER.FILE0.
00000010: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
00000020: 0000 0080 0000 0080 0806 0000 00c3 3e61  ..............>a
00000030: cb00 0000 0173 5247 4200 aece 1ce9 0000  .....sRGB.......
00000040: 0004 6741 4d41 0000 b18f 0bfc 6105 0000  ..gAMA......a...
・・・(以下略)

0x10バイト目から「.PNG」で始まっているのを見るに、このファイルには画像が埋め込まれていそうだなと考えました。
(※ 「.PNG(8950 4e47)」はPNGマジックナンバーです、下記参照。)

qiita.com

まずは余計な0x00〜0x10バイト目までを削除してみました。

00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
00000010: 0000 0080 0000 0080 0806 0000 00c3 3e61  ..............>a
00000020: cb00 0000 0173 5247 4200 aece 1ce9 0000  .....sRGB.......
00000030: 0004 6741 4d41 0000 b18f 0bfc 6105 0000  ..gAMA......a...

そんなうまくいくわけ無いだろうなと思いつつ保存して確認してみましたが、案の定特に何も表示されませんでした。

f:id:ylab-203:20190601134254p:plain
misc1-1

さて、エディタに戻って他に情報がないか探してみると、「.PNG」が先頭以外にも複数あることを発見しました。

00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
・・・
000002c0: 0000 0000 4945 4e44 ae42 6082 4649 4c45  ....IEND.B`.FILE
000002d0: 312e 8950 4e47 0d0a 1a0a 0000 000d 4948  1..PNG........IH
・・・
00000510: ff57 6aad 0000 0000 4945 4e44 ae42 6082  .Wj.....IEND.B`.
00000520: 4649 4c45 322e 8950 4e47 0d0a 1a0a 0000  FILE2..PNG......
・・・
00000750: 61c6 f36a 3b5f b301 0000 0000 4945 4e44  a..j;_......IEND
00000760: ae42 6082 4649 4c45 332e 8950 4e47 0d0a  .B`.FILE3..PNG..
・・・(以下略)

これにより、以下のことが推測できました。
・.pngファイルは「8950 4e47」から始まり、「0000 0000 4945 4e44 ae42 6082」で終わる。
・各pngファイルの間には「FILEx」が目印として差し込まれている。
・つまり、「8950 4e47・・・」から「・・・ae42 6082」までを切り取れば画像ファイルの取り出しが可能。

先程先頭を切り取ったファイルの0バイト目から 0x2cc = 716 バイト目まで を下記のコマンドで出力します。
dd if=e35860e49ca3fa367e456207ebc9ff2f_containers of=flag1 skip=0 bs=716 count=1

すると「c」と表示された画像が出力されました。

f:id:ylab-203:20190601143836p:plain
misc1-2

これを続けること3時間、「}」まで画像を切り分けることによりflagを獲得しました。

f:id:ylab-203:20190601144628p:plain
misc1-3

(自分はddコマンドで一つずつ切り分けしましたが、スクリプト等でもっと簡単にできるようになりたいです。。。)


【Crypto】party

問題は2つのファイルから構成されていました。
1つ目はpythonのコードが書かれたファイル

from flag import FLAG
from Crypto.Util.number import bytes_to_long, getRandomInteger, getPrime


def f(x, coeff):
    y = 0
    for i in range(len(coeff)):
        y += coeff[i] * pow(x, i)
    return y


N = 512
M = 3
secret = bytes_to_long(FLAG)
assert(secret < 2**N)

coeff = [secret] + [getRandomInteger(N) for i in range(M-1)]
party = [getRandomInteger(N) for i in range(M)]

val = map(lambda x: f(x, coeff), party)
output = list(zip(party, val))
print(output)

2つ目は数字の書かれたファイル

[(5100090496682565208825623434336918311864447624450952089752237720911276820495717484390023008022927770468262348522176083674815520433075299744011857887705787, 222638290427721156440609599834544835128160823091076225790070665084076715023297095195684276322931921148857141465170916344422315100980924624012693522150607074944043048564215929798729234427365374901697953272928546220688006218875942373216634654077464666167179276898397564097622636986101121187280281132230947805911792158826522348799847505076755936308255744454313483999276893076685632006604872057110505842966189961880510223366337320981324768295629831215770023881406933), 
・・・(以下略)

フラグとなる文字列を「encrypt.py」で暗号化した結果が「encrypted」のようです。
文字列は「Crypto.Util.number」の「bytes_to_long()」で数値化し、ゴリゴリ計算した後リスト形式で出力しています。
そのため「encrypt.py」から計算式を組み立て、「encrypted」の値から逆算すれは回答が導き出せそうです。

計算

getRandomInteger()で得た値をA〜E、flagをxで表すと、リストcoeffとpartyは下記のように表せます。

coeff = [ x, A, B ] party = [ C, D, E ]

また、リストoutput(「encrypted」の中身)をl,m,nを用いて下記の通りに表します。

output = [ (C, l), (D, m), (E, n) ]

これをもとに「encrypt.py」の計算式を表すと下記のような連立方程式となります。

 x * C^{0} + A * C^{1} + B * C^{2} = l
 x * D^{0} + A * D^{1} + B * D^{2} = m
 x * E^{0} + A * E^{1} + B * E^{2} = n

C,D,E,l,m,nの値は既知なので、x,A,Bについて方程を解いて行きます。

 B = \displaystyle \frac{ ( n - l ) * ( D - C ) - ( m - l ) * ( E - C ) } {( E - C ) * ( D - C ) * ( E - D ) }

 A = - B * ( C + D ) +   \displaystyle \frac{ m - l } { D - C }

 x = l - A * C^{1} - B * C^{2}

以上をpythonに落とし込むと下記のようになります。

from Crypto.Util.number import bytes_to_long, getRandomInteger, getPrime, long_to_bytes

A = 0
B = 0
C = 510009 ・・・
D = 3084167 ・・・
E = 630891 ・・・
l = 222638 ・・・
m = 814179 ・・・
n = 340685 ・・・

B1 = (n-l)*(D-C)-(m-l)*(E-C)
B2 = (E-C)*(D-C)*(E-D)

B = int(B1/B2)
print("---B---")
print(B)

A = (-1)*B*(C+D)+int((m-l)/(D-C))
print("---A---")
print(A)

x = m-(A*D)-(B*D*D)
print("---x---")
print(x)

print(long_to_bytes(x))

最後xの値を出した後文字列に変換するために、long_to_bytes()を使用しました。(importを忘れずに)

Crypto.Util.number

実行結果は以下の通りとなります。

---B---
8559415 ・・・
---A---
6759741 ・・・
---X---
1757212 ・・・

ctf4b{just_d0ing_sh4mir} 

終わりに

SQLインジェクションの基本問題を意外とすんなり解くことができたため前回より成長を感じましたが、ゴリ押しで解いて時間を消費してしまったりpwnで手を付けられそうな問題がなかったりなど、まだまだ未熟だと感じる点が多々ありました。
チームの他のメンバーがセキュリティ本業なので、pwn等は任せてその他の細々とした問題(今回でいうとSliding puzzleなど)メインで解けるようになっていけば、チームとしてのバランスは取れるかなと思いました。

VirtualBox ローカルネットワーク作成

はじめに

個人的にはvmware派なのですが、スナップショット機能が使いたかったのでVirtualBoxを使うことに。
しかしVirtualBoxそのままではCLIのコピペなどができなくて少し不便です。
vmware-toolsのようなホスト・VM連携ツールもあるようなのですが、とりあえずコピペができればいいので使い慣れたTeraTermからsshでいいやと考えました。
デフォルトはNATのネットワークを利用するのでそれを使えばいいかなと思ったのですが、ホスト側でそのNATのネットワークが見えないのでsshできないのでさて困りました。
そこで、VMに2つ目のNICをつけてssh用のローカルネットワークを作成することにしました。
(もっと簡単な方法あるだろうという突っ込みが来そうですが。。。)

目的

VirtualBoxに立てたVMTeraTermからssh接続する

手順

f:id:ylab-203:20180714171832p:plain 1.VirtualBoxを開き、ファイルのタブを選択。

f:id:ylab-203:20180714171916p:plain
2.「ホストネットワークマネージャー」を選択し「作成」を選択。プログラムの変更を許可するかどうかの画面が出てくるので許可する。

f:id:ylab-203:20180714172010p:plain 3.するとアダプターが一つ作成されるので、プロパティを選択。IPアドレスのレンジやDHCPの設定を行う場合はこちらで設定。

f:id:ylab-203:20180714172443p:plain 4.(任意)コマンドプロンプトで「ipconfig」と入力すると、3で作成したアダプタがホストで認識できていることを確認できる。

f:id:ylab-203:20180714172247p:plain 5.最初の画面に戻り、sshで入りたい対象のVMを選択し「設定」を選択。

f:id:ylab-203:20180714172608p:plain 6.「ネットワーク」>「アダプター2」より、
・「ネットワークアダプターを有効化」にチェック
・割り当て:「ホストオンリーアダプター」を選択
・名前:「(3.で作成したネットワークアダプタの名前)」を選択
・「OK」を選択

7.VMを起動

8.ログイン後下記のコマンドを実行

[root@localhost ~]# nmcli device
デバイス  タイプ    状態      接続
enp0s3    ethernet  切断済み  --
enp0s8    ethernet  切断済み  --
lo        loopback  管理無し  --

ここでは「enp0s8」が先ほど作成した「アダプター2」のNICとなります。
このデバイス名を覚えておき、下記のコマンドを実行。

[root@localhost ~]# nmcli connection modify [デバイス名] ipv4.addresses [IPアドレス]/[CIDR長]
[root@localhost ~]# nmcli connection modify [デバイス名] ipv4.method manual
[root@localhost ~]# nmcli connection up [デバイス名]

バイス名とIPは各々の環境に合わせて変更してください。
僕の環境ですと下記の通りになります。

[root@localhost ~]# nmcli connection modify enp0s8 ipv4.addresses 192.168.56.200/24
[root@localhost ~]# nmcli connection modify enp0s8 ipv4.method manual
[root@localhost ~]# nmcli connection up enp0s8

設定後、再度下記のコマンドを実行し確認します。

[root@localhost ~]# nmcli device
デバイス  タイプ    状態      接続
enp0s8    ethernet  接続済み  enp0s8
enp0s3    ethernet  切断済み  --
lo        loopback  管理無し  --
[root@localhost ~]# ping 192.168.56.1
PING 192.168.56.1 (192.168.56.1) 56(84) bytes of data.
64 bytes from 192.168.56.1: icmp_seq=1 ttl=128 time=0.868 ms
64 bytes from 192.168.56.1: icmp_seq=2 ttl=128 time=0.732 ms
64 bytes from 192.168.56.1: icmp_seq=3 ttl=128 time=0.788 ms
64 bytes from 192.168.56.1: icmp_seq=4 ttl=128 time=0.756 ms
^C
--- 192.168.56.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.732/0.786/0.868/0.051 ms

先ほどコマンドプロンプトで「ipconfig」をたたいた際に出てきたIPあてにpingが飛べば成功です。

9.最後にTeraTermを起動し、設定したIPあてにsshができれば成功です。

終わりに

VMのネットワーク設定を行うだけで、本当にやりたかった作業にたどり着く前に休日が終わりました。。。

不明点・記載ミス・誤字脱字などのご指摘等ありましたらコメントお願いします。
それではまた。

さくらのクラウドを使ってみた

はじめに

以前Manabiyaというエンジニアのイベントに参加させていただいた際に、さくらインターネット様からお試しチケット20,000円分を頂来ました。
クラウドをほとんど触ったことがありませんでしたが、せっかくの機会なのでお試しさせていただきました。
(申し込み期限が6月末までだったので、なかなかギリギリでした・・・)

アカウント開設

さくらのクラウドを利用する際は、まずは以下のサイトからアカウントの開設を行います。
cloud.sakura.ad.jp

f:id:ylab-203:20180617144512p:plain

こちらのサイトから
→1.アカウント開設
→2.必要事項を記入
→3.同意して登録
→4.電話認証

の順で登録を行います。 登録が完了すると、以下のようなコントロールパネルのサイトが表示されます。
(UIおしゃれで個人的には好きです)

f:id:ylab-203:20180617151420p:plain

ユーザーの作成

さくらインターネットとしてのアカウント登録は行いましたが、まだサーバーなどを立ち上げられなさそうです。どうやらまずはアカウントの作成を行う必要がありそうです。

f:id:ylab-203:20180617151411p:plain

コントロールパネルの左のツールバーより、
→1.アカウント
→2.左上の作成
→3.約款に同意する、個人情報の扱いに同意する

→4.ユーザ →5.ユーザの作成 →6.項目を入力 →7.アクセス権限(作成・削除)

の順で作成していきます。
入力が全て完了したら右下の作成ボタンを押します。

f:id:ylab-203:20180617151335p:plain

いざ、さくらのクラウド

さて、アカウントの作成が完了しましたら、コントロールパネルのトップページへ戻ります。
そして、右上のプルダウンからアカウントを選択します。

f:id:ylab-203:20180617151447p:plain

そして選択を行うと各サービスのアイコンがくっきりしてきて選択できるようになります。
さて、それではお待ちかねのさくらのクラウドを選択してみましょう。

f:id:ylab-203:20180617151707p:plain

さて、そうすると別のコントロールパネルのような画面に飛びます。 ここで、クレジットカードが未登録という旨のメッセージが出ます。
あとで登録もできるのですが、サーバーなどのサービスを立ち上げる際に(クーポンを使用していても)カードが登録されていないとエラーが発生するので、この場で登録してしまいましょう。

f:id:ylab-203:20180617151804p:plain

クーポンの登録

さて、頂いたクーポン20,000円分を登録していきます。
さくらのクラウドのホーム画面から
→1.設定
→2.クーポン
→3.追加
→4.自動的に課金が始まります
 →5.同意
の順に設定を進めることでクーポンが反映されます。

f:id:ylab-203:20180617152345p:plain

以上で20,000円分のクーポンが反映されるとおもいます。

あとはサーバー作成のボタンを押すだけで簡単にサーバーが作れてしまうそう。
このクーポンの金額を超えない範囲でサーバーなど作って遊んで行けたらなと思います。

次回はサーバーと立てたり、ルーターを設定してみたり遊んで見たいと思います。

CentOSネットワーク設定

CentOSの基本的なネットワーク設定例です。 IPアドレスゲートウェイなどは、下記のパラメータ説明を参考によしなに変更を行ってください。

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
HWADDR=[MACアドレス] 
TYPE=Ethernet
UUID=[UUID]
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.3.201
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=8.8.8.8
IPV6INIT=no
USERCTL=no
1 パラメータ 説明
2 DEVICE 適応するインターフェース名
3 HWADDR MACアドレスの指定
4 TYPE インターフェースの種類
5 UUID 機器を一意に識別するID(UUID)
6 ONBOOT 起動時に有効にするか
7 IPADDR IPアドレス
8 NETMASK サブネットマスク
9 GATEWAY デフォルトゲートウェイ
10 DNS1 DNS指定
11 IPV6INIT IPv6を有効にするか
12 USERCTL rootユーザ以外にも設定を許可するか

CentOSパーティション

CentOSで切り分けるとよいパーティションについて以下にまとめました。
VMWarePlayer上で容量20GBで作成しているので少なめです。

バイス 容量 マウントポイント ファイルフォーマット 基本パーティション
sda1 300M /boot ext4
sda2 メモリと同程度 - swap
sda3 2000M程度 / ext4
sda4 - 拡張パーティション - -
sda5 5000M程度 /usr ext4
sda6 1000M以上 /usr/local ext4
sda7 300M程度 /tmp ext4
sda8 4000M以上 /var ext4
sda9 残り /home ext4

Linuxパーティション分けの際、4以内で収まる場合はすべて基本パーティションで作成できます。
しかし、5つ以上作成しようとした時は、4番目のパーティションを「拡張パーティション」として用意し、 それ以降のパーティションはすべて「論理パーティション」という扱いになります。
物理的に違いはありますが、実際使う際はほとんど意識しないで使えます。