カテゴリー別アーカイブ: Web

ウェブ関連の話題。

AWS/EC2にfactorioサーバをたてる

久しぶりに技術記事です。夜な夜な友人とプレイしているfactorioが、普通にマルチプレイでやるとNW遅延が大きすぎるということで、流行りと無料キャンペーンに乗ってAWS/EC2にfactorioサーバをたててみました。

  • https://aws.amazon.com/jp/freeで無料キャンペーンを開催していることを確認します。
  • t2.micro インスタンスを作成します。途中でセキュリティグループの設定も行います。ssh接続するための鍵もダウンロードしておきます。(作成時に無料と書かれている)
  • セキュリティグループの設定(インバウンド)を変更して、既存のsshポートに加え、factorioのデフォルト使用ポートであるUDP/34197を許可します。
  • (ローカル端末でブラウザからログインした後)https://www.factorio.com/downloadからheadlessバージョンをダウンロードします。リモート先ではブラウザが使えないので、ローカル端末で行うことを勧めます。ダウンロードしたファイルを何かしらの手段を使ってリモート先の/home配下等に送ります。
  • インスタンス一覧画面の「接続」から、鍵等を使ったsshコマンドに与えるオプションのカンニングが出てくるので参考にします。(ユーザ名、接続サーバのDNS名、鍵ファイル名をオプションで与えます。)

sshクライアントにTeraTermを使う場合は、サーバ名を入力後、ユーザIDとダウンロードした鍵ファイルを指定して接続すればOKです。

下記の様に、/home配下に展開して起動してやっても出来なくはありませんが、serviceで起動してやった方が安定します。

tar xvfz factorio_headless_x64_0.14.22.tar.gz
cd factorio/bin/x64/
./factorio --create ../../saves/hogehoge.zip
./factorio --start-server ../../saves/hogehoge.zip

もう少しこだわる人は下記の手順メモを参考にしてください。

-- serviceに登録するプロジェクトをダウンロードするためgitをインストールします。
$ sudo yum install git

-- headless版のfactorioを/opt配下に展開します。
$ cd /opt/
$ sudo tar xvfz ~/factorio_headless_x64_0.14.22.tar.gz

-- 英語版Wikiに従ってfactorioユーザを追加します。
-- これを怠ってしまうと、後々factorioユーザを前提とした設定で面倒です。
$ sudo useradd factorio
$ sudo chown -R factorio:factorio factorio/

-- serviceに登録する有志のプロジェクトをダウンロードしてきます。
$ sudo git clone https://github.com/Bisa/factorio-init.git
$ sudo chown -R factorio:factorio factorio-init/

-- 意図がわかりませんでしたが、README.mdに書いてあったので設定。
-- 設定後にbashを再起動します。
$ sudo ln -s /opt/factorio-init/bash_autocomplete /etc/bash_completion.d/factorio
$ echo "source /opt/factorio-init/bash_autocomplete" >> ~/.bashrc
$ exec bash

-- serviceを登録してやります。
$ sudo ln -s /opt/factorio-init/factorio /etc/init.d/factorio
$ sudo chmod +x /opt/factorio-init/factorio

-- 自動的にfactorioをUpdateするスクリプトもダウンロードしておきます。
-- 手動でやるという人は不要です。こちらも有志のプロジェクトです。
$ sudo git clone https://github.com/narc0tiq/factorio-updater
$ sudo chown -R factorio:factorio factorio-updater/
$ ll
total 16
drwxr-xr-x 5 root     root     4096 Apr  2 05:38 aws
drwxr-xr-x 4 factorio factorio 4096 Apr 20 00:01 factorio
drwxr-xr-x 3 factorio factorio 4096 Apr 20 00:05 factorio-init
drwxr-xr-x 3 factorio factorio 4096 Apr 20 00:29 factorio-updater

-- ↑こんな感じの状態になっていればOKです。

-- ここからはfactorioユーザで作業した方が効率的です。
$ sudo su - factorio

-- exampleを参考に設定ファイルを作成します。
$ cd factorio-init/
$ cp -p config.example config
$ vi config

-- 触るところは基本的にありませんが、先ほどの手順でfactorio-updaterをダウンロードした人のみ下記を設定します。
-- UPDATE_SCRIPTの設定と、USERNAME/TOKENにfactorio公式のアカウントを設定すればよいと思います。
# absolute path to the factorio-updater script
UPDATE_SCRIPT=/opt/factorio-updater/update_factorio.py
# Note that if you set HEADLESS=1 the username/token will not be used as the headless
# download is provided free of charge
HEADLESS=1
UPDATE_USERNAME=you
UPDATE_TOKEN=yourtoken
UPDATE_EXPERIMENTAL=0
UPDATE_TMPDIR=/tmp

-- serviceに正常に登録できたことを確認します。
$ service factorio help

-- 自動更新の設定が正常にできたことを確認します。(当然、最新です。)
$ python update_factorio.py -l
Available packages:
        core-linux_headless64
$ python update_factorio.py -p core-linux_headless64
No updates available for version None (latest stable is 0.14.22). Did you want `--experimental`?
$ python update_factorio.py -p core-linux_headless64 -f 0.14.22 -x
No updates available for version 0.14.22 (latest experimental is 0.14.22).

-- factorio本体の設定を行います。適宜修正してください。
-- name/descriptionあたりは全員変更の必要があると思います。
-- 友人だけのサーバの場合は、public/game_passwordあたりを設定してください。
$ cd /opt/factorio/data/
$ cp server-settings.example.json server-settings.json
$ vi server-settings.json

-- factorioの初期設定をするため、初回のみセーブファイルを作成する手順が必要です。
$ cd /opt/factorio/
$ ./bin/x64/factorio --create ./saves/mysavegame

-- serviceで起動してやります。
$ service factorio start

下記に途中で出たエラーと対処法を記しておきます。(メッセージを読めば分かるので、私は特にハマりませんでしたが)

-- 設定ファイルが不足しています。exampleを参考に作成してください。
$ service factorio start
Could not find factorio server settings file: /opt/factorio/data/server-settings.json
Update your config and point SERVER_SETTINGS to a modified version of data/server-settings.example.json

-- 初期設定のため、初回のみセーブデータを手動で作ってください。
$ service factorio start
Could not find factorio config file: /opt/factorio/config/config.ini
If this is the first time you run this script you need to generate the config.ini by starting the server manually.
(also make sure you have a save to run or the server will not start)

Create save: sudo -u factorio /opt/factorio/bin/x64/factorio --create /opt/factorio/saves/my_savegame
Start server: sudo -u factorio /opt/factorio/bin/x64/factorio --start-server-load-latest

(If you rather store the config.ini in another location, set FCONF='/your/path' in this scripts config file)

参考

JMeter走行でTimeoutedException

Windows端末でJMeter走行中にJMeter自身のExceptionが「結果をツリーで表示」リスナーの結果画面に表示される場合があります。これは、スレッド数を多くした場合や、画像やjavascriptやcssが多い場合に発生します。最終的にはクライアント端末の同時接続数を超えたことが原因です。

Windowsのレジストリに項目を追加することで、本事象を回避することが出来るのでメモしておきます。下記内容をテキストファイルに保存して、拡張子を.regとして実行すれば簡単です。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"MaxUserPort"=dword:0000FFFE
"TcpTimedWaitDelay"=dword:0000001E

GoogleGroupsで謎のエラー

謎のエラーが出てdocomoアドレスをGoogleGroupsに登録できませんでした。

エラーメッセージをパッと見て思いついたのが、登録済みGmailのGoogleアカウントに、追加しようとしているdocomoアドレスを結びつけている可能性でした。

エラーメッセージを見る限り、「予備のメールアドレス」の部分が妙に引っかかります。特に原因特定するつもりもありませんが、同様のメッセージで悩んでいる人のためになるかもしれないと記しておきます。

招待状が送信されませんでした
新しい招待状が送信されませんでした
1 人は既にグループのメンバーです。指定されたメールアドレスがこのユーザーのメインのメールアドレスか予備のメールアドレスかは不明です。

AmazonJSでアフィリエイトを始める

全く興味ありませんでしたが、知識として興味があったので試してみました。色々と大変でした。

AWSアカウントの準備

まずはamazon.comのアカウントを取得します。商品を購入するamazon.co.jpのアカウントではありません。襷に長し感は有りますが、ここで取得するアカウントはAWSのアカウントです。AWSで提供されるサービスが多すぎて意味が分からなくなります。

ルートユーザ(今取得したアカウント)でアフィリエイト用キーを発行しても良いのですが、「ルートユーザから払出した子ユーザから発行したアフィリエイト用キーを使うのが最近の流行りだよ!」とAmazonから勧められるので大人しく従います。サービスメニュー(サービスが山ほどあるので頑張って見つけてください)から「IAM(正式にはアイアムと発音)」を選択します。サイドメニュー(ダッシュボード)より「ユーザ」を選択します。新規ユーザを払出して、アクセスキーとシークレットキーを取得します。シークレットキーは後では2度と確認出来ないのでメモっておきましょう。

次に、払出した子ユーザに対して権限を付与します。ユーザ詳細ページの「アクセス許可」タブから、「ポリシーのアタッチ」をして、「AdministratorAccess」を付与します。(何の権限が最低限必要なのか、最後まで不明でした。色々組み合わせて試したのですが分からず。全権限付与しちゃうと、子ユーザを払出する意味は無いのかも。)権限が足りない場合は、後で実施するAmazonJSの使用中に下記エラーが発生します。後で分かったのですが「Amazon EC2 Container Service」権限さえあれば良いと思います。

Amazon Product Advertising APIのエラー
UnauthorizedOperation
Your AccessKeyId is not authorized to perform this operation. Please check IAM policies for the Access Key.

アソシエイトアカウントの準備

支払先等を設定するためのアカウントも個別に取得する必要があります。淡々とアカウント登録を進め、トラッキングID(日本アカウントの場合は、末尾が「-22」となります)を取得して完了です。ちなみに、銀行振替の設定だと面倒そうで、Amazonギフトとして受け取る設定だとワンクリックで設定完了しました。アカウントが正常に設定できていないと、後で実施するAmazonJSの使用中に下記エラーが発生します。

Amazon Product Advertising APIのエラー
AWS.MissingParameters
リクエストには、必要なパラメータが含まれていません。必要なパラメータには、AssociateTagなどがあります。

AmazonJSの準備

AmazonJSをインストールして設定ページで、アクセスキー、シークレットキー、アソシエイトタグを入力します。

記事の執筆画面のメニューにAmazonマークが現れており、URL入力等で簡単に記事へアフィリエイトリンクを挿入できてしまいます。折角なので、最後に最近読んで面白かった漫画のアフィリエイトを貼っておきます。

PostgreSQLのpg_dumpで単一のfunctionのみ取得する

pg_dumpでは-tオプションで単一または複数のtable/view/sequenceを指定して定義の抽出が可能ですが、functionの指定はできません。これを解決する、裏技チックな方法が英語ページにしか掲載されていなかったので、日本語ページの一人目になるべく本記事を執筆しました。

pg_dump -Fc -s | pg_restore -P 'funcname(args)' > function_define.dmp

-sオプションでスキーマ(定義)のみを抽出します。(ここでいうスキーマとは、テーブルの完全修飾名の前半に使う名称(schema)ではないので注意。単なる定義情報(雑に言うとcreate table)のことを指します。この注意事項は本家にも記されています。ややこしいですね。)

これと–schemaオプションと混乱しないでください。”schema”という単語を異なる意味で使用しています。pg_dump

結果をパイプでpg_restoreに繋いでいます。pg_restoreはcustom形式しか処理できないため、-Fcオプションを付与しています。(デフォルトはplainです。)

-Pは名称を指定してcustomからfunctionの定義を取り出すことができます。また、pg_restoreは特に接続先データベースが指定されていない場合、標準出力にplain形式で吐き出すため、リダイレクトでファイルに出力しています。

データベース名が指定された場合、pg_restoreはそのデータベースに接続し、アーカイブを直接そのデータベースにリストアします。 データベース名が指定されなかった場合は、データベースを再構築するために必要となるSQLコマンドが含まれたスクリプトが作成されます(ファイルもしくは標準出力に書き出されます)。pg_restore

functionに引数(args)がある場合、正しい引数の数だけ、型を指定してやる必要がありますので注意が必要です。不明の場合は下記コマンドで確認できるでしょう。

pg_dump -Fp -s | less

注意事項

私の環境では2回以上-Pを指定した場合、最後に指定したfunction以外が無視されました。そのため、下記のように工夫する必要があります。

pg_dump -Fc -s | pg_restore -P 'funcname(args)' > function_define.dmp
pg_dump -Fc -s | pg_restore -P 'funcname2(args)' >> function_define.dmp
pg_dump -Fc -s | pg_restore -P 'funcname3(args)' >> function_define.dmp

最終的な出力ファイルを見ると、SETが重複して出力されていますが、特に弊害はありません。

参考

xreaアップデートに伴うDB移行手順メモ

xreaが大規模更改にあたり、各ソフトウェアのバージョンがドラスティックに変わりました。MySQLも大幅にバージョンアップするため、本ブログ(Wordpress)のデータがすべて削除されました。xrea運営が作業前に取得してくれていたdumpファイルを元に無事復旧できたのでメモしておきます。

蛇足ですが、XREA自体がそもそも上級者向けの低価格低サポートなサービスだっただけに、殆どの方は自分で解決されているようでした。また、公式サポートフォーラムでも技術者らしい冷静な対応をされている方ばかりだったので、なんだか安心しました。

[usename]や[dbname]やサーバ名やファイル名は適宜読み替えてください。

手順

xreaのコントロールパネルからDBを作成

xreaのコントロールパネルから、過去にWordpressで使用していた名前でDBを作成します。パスワードも過去(Hint:初期パスワードはFTPパスワードの前8文字)と同じにしてください。稀に、xreaの更改作業を乗り切ってしまうDBもあるそうですが、間違いなく中途半端にしか復元できていないため、一旦削除してから再作成(空のDBを用意)してください。

sshで接続してftp8変換とインポート

サーバにsshで接続します。xreaのコントロールパネルから「ホスト登録」をお忘れなく。出来ない場合は1~3分待ってください。

ssh -l [username] sXXX.xrea.com

公式からutf8への変換が必要とアナウンスがあるため、dumpファイルをutf8に変換します。nkfでいけます。

MySQL4以前などの古いデータベースからデータは完全には引き継げませんので、データベース内のデータが一旦空になります。
特に文字コードはUTF-8が標準となりますので、そのまま引き継ぐと不具合が出る可能性があります。
MySQL/PostgreSQL/Apache/PHPのバージョンアップメンテナンスについて

ll
cd _DB_BACKUP_XREA_UPGRADE/
ll
nkf -w mysql_[dbname].dump > mysql_[dbname].dump.nkf
ll
view mysql_[dbname].dump.nkf

中身を見て問題なさそうならインポートします。先ほど設定したDBのパスワードを聞かれます。

mysql -u [dbname] -D [dbname] -p < mysql_[dbname].dump.nkf

特にエラーが起きなければ以上となります。念のためレベルで、インポートしたDBを確認してみてください。

mysql -u [dbname] -D [dbname] -p
use [dbname]
show tables;

その他

phpMyAdminの再インストール(バージョンアップ)

phpMyAdminを使用する場合は再インストールが必要です。公式では下記のように説明されていますが、私はコントロールパネルで「インストール」を選択するだけでいけました。

1、ファイルマネージャーもしくは、ご利用のFTPクライアントから、現在のディレクトリ「./public_html /log /phpmyadmin_」等に名前を変更します。
2、XREAサーバー管理画面二ログインし、「データベース」メニューから
「■PhpMyAdmin自動インストール(MySQL管理) 」項目の「インストール」ボタンをクリックします。
3、「./public_html /log /phpmyadmin」が生成されたことを確認されましたら、ログインします。
【公式】XREAサーバー:最新の環境へのアップデートメンテナンス関連

秘密鍵/公開鍵を使ってパスワード無しのssh接続をする(cygwin@Windows→xrea)

公開鍵/秘密鍵を使ったパスワード無しのssh接続を、Windowsのcygwinからxreaサーバに実施する際のメモです。

まずは公開鍵/秘密鍵を作成する。cygwinはデフォルトで~/.sshフォルダが存在するため作成不要。ssh-keygenはオプションなしだとrsaを使用する。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/User/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/User/.ssh/id_rsa.
Your public key has been saved in /home/User/.ssh/id_rsa.pub.
The key fingerprint is:

$ cd .ssh/

$ ls -la
合計 13
drwxrwx---+ 1 User なし    0 11月 29 15:10 .
drwxrwxr-x+ 1 User なし    0 9月  29 23:51 ..
-rw-rw----  1 User なし 1679 11月 29 15:10 id_rsa
-rw-rw-r--  1 User なし  394 11月 29 15:10 id_rsa.pub
-rw-rw-r--  1 User なし  745 11月 29 14:03 known_hosts

xreaに公開鍵をscpでファイル転送する。

$ scp ./id_rsa.pub jikkenjo@s353.xrea.com:.

xrea側でauthorized_keysに追加する。xreaにssh接続するためには、Webのコントロールパネルから「ホスト情報登録」をしておく必要があります。

$ ssh -l jikkenjo s353.xrea.com

> mkdir .ssh
> chmod 700 .ssh
> mv id_rsa.pub ./.ssh/.
> cd .ssh/
> cat ./id_rsa.pub >> authorized_keys
> chmod 600 authorized_keys
> logout

早速、sshで接続してみる。が、「秘密鍵のパーミッションが緩すぎる」と怒られてエラーとなる。

$ ssh -l jikkenjo s353.xrea.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for '/home/User/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/User/.ssh/id_rsa
jikkenjo@s353.xrea.com's password:

そもそも、id_rsaに所有グループが設定されていなかったので設定して、グループからのアクセスを拒否するパーミッションに設定する。(念のため、ユーザの所属するグループを確認して設定。)

$ groups
なし Users HomeUsers

$ chgrp Users ./id_rsa
$ chmod 400 ./id_rsa

これにて一件落着。

$ ssh -l jikkenjo s353.xrea.com
> 

新規投稿画面のツールバーが表示されない時はプラグインを疑う(wordpress-4.0–ja/wp-emmet-0.2.6)

wordpress-4.0–jaとwp-emmet-0.2.6の組み合わせで、新規投稿(執筆)画面のツールバーがまったく表示されなくなる事象が発生したのでメモしておきます。ひとまず、fixされるまではEmmetを無効化して乗り過ごすことにします。

また、今回のプラグインを導入していない場合でも、執筆時に動作する他のプラグインを疑ってみたほうが良いかもしれません。

ツールバーが表示されない事象

ツールバーが表示されない事象

Emmetを無効化すると表示される

Emmetを無効化すると表示される

それはそうと、Emmetが使用できないのはかなり痛い……(というか、ツールバーのほうがあんまり使わないし、非表示覚悟でEmmetを有効化したほうが個人的には良いかも。)

PHPの配列で色々と実験してみました

久しぶりにPHPを触ってみると、配列の扱いで「どうだっけ?」となった箇所が幾つかあったので、色々と実験をしてみました。メモしておきます。

foreachでループカウンタ(っぽいもの)が欲しいとき

foreachがある言語では、宗教的な理由により可能な限りforeachを使いたいものです。ところが、ループカウンタの出力が要件としてある場合はforを使うしか無い、ように見えますが、foreachでいけます。(ただし、後で触れますが落とし穴があります。)

<pre><?php

$as = array(
    "data0"
  , "data1"
  , "data2"
  , "data3"
  , "data0"
 );

foreach($as as $key => $a) {
  echo "id:" . $key . " value:" . $a . "\n";
}

// これでいけるし当然か……
echo $as[0] . "\n";
echo $as[1] . "\n";
echo $as[2] . "\n";
echo $as[3] . "\n";
echo $as[4] . "\n";
id:0 value:data0
id:1 value:data1
id:2 value:data2
id:3 value:data3
id:4 value:data0
data0
data1
data2
data3
data0

unsetで要素を削除するとキーごと削除される

配列から要素を削除する場合はunsetを使用します。すると、キーごと削除されてしまうようなのです。上記foreachを使用する場合は気をつけておかなければ足元を掬われそうです。

forのcount($as)で3が取得されるため、id:2までしかループしないうえ、UndefinedのNoticeが出てしまいます。

<pre><?php

$as = array(
    "data0"
  , "data1"
  , "data2"
  , "data3"
  , "data0"
 );

$delkeys = array(0, 2);

foreach($delkeys as $delkey) {
  unset($as[$delkey]);
}

var_dump($as);

for($i = 0; $i < count($as); $i++) {
  echo $i . " : " . $as[$i] . "\n";
}
array(3) {
  [1]=>
  string(5) "data1"
  [3]=>
  string(5) "data3"
  [4]=>
  string(5) "data0"
}


Notice:  Undefined offset: 0 in D:\xampp\htdocs\sample\unset_sample.php on line 20

0 : 
1 : data1


Notice:  Undefined offset: 2 in D:\xampp\htdocs\sample\unset_sample.php on line 20

2 : 

キーを削除しない(イメージとしては、削除された要素分、キーを詰めて再設定?)ようにするためには下記の方法を使えば良いようです。

<pre><?php

$as = array(
    "data0"
  , "data1"
  , "data2"
  , "data3"
  , "data0"
 );

array_splice($as, 1, 1);

var_dump($as);
array(4) {
  [0]=>
  string(5) "data0"
  [1]=>
  string(5) "data2"
  [2]=>
  string(5) "data3"
  [3]=>
  string(5) "data0"
}

今回はあくまで実験だったため以上の書き方としましたが、キーに意味がある要件の場合は、そもそもデータ構造を見なおしたほうが良さそうです。

Windows8.1でVMWarePlayer6.0でOWASPでBurbSuiteで……

思った以上にハマったのでメモしておきます。備忘録レベルです。

はじまりは、Webセキュリティを攻撃者の立場から勉強しようと思い、脆弱性の残されたWebアプリケーション(Webサーバ)をローカルでたてて実験しようと考えたことからでした。調べてみると、OWASP Broken Web Applicationsという、脆弱性の残されたWebサーバとWebアプリがVM仮想イメージで配布されていることを知りました。Windows8.1のホストOSから、VMWarePlayer6.0を使ってゲストOSとして呼び出す手順が妥当と判断しました。また、脆弱性診断のためローカルプロキシツールであるBurbSuite(FreeEdition)を使用することとしました。

各種ダウンロード/インストール

VMwareWorkstation10はインストーラに内包されるネットワーク設定ツールを抽出するために必要のため、インストールする必要はありません。今回はなくてもいいですが、VMwareのネットワークをツールを使ってわかりやすく学びたければ、少し重いですがダウンロードしておきましょう。

VMwarePlayer6.0
普通にインストールしてください。
VMwareWorkstation10 評価版
別項で説明。
Java Runtime Environment
私のPCにはJavaがインストールされていませんでした……。インストール後はPATHを通しておいてください。
BurbSuite FreeEdition
jarをどこかに配置してください。
OWASP Broken Web Applications
どこかに配置します。(C:\vm)

VMwareWorkstation10の使い方(なくてもいい)

PlayerシリーズにはVMwareのネットワーク設定ツールが含まれていないため、必要の場合は、Workstaionのインストーラに含まれるツールを抽出してやります。コマンドラインで同じフォルダに移動して、下記コマンドを実行します。

./VMware-workstation-full-10.0.1-1379776.exe -e work

後は、workフォルダにあるcore.cabを解凍して、下記ファイルを「C:\Program Files (x86)\VMware\VMware Player」に移動します。もうWorkstationは用済みのため削除していただいて構いません。

  1. vmnetcfg.exe
  2. _vmnetcfglib.dll→vmnetcfglib.dllにリネーム

VMwareのネットワークを設定

「コントロールパネル>ネットワークの状態とタスクの表示>アダプターの設定の変更」で下記画面を開くと、VMnet1とVMnet8ができています。

ネットワークアダプターの設定

ネットワークアダプターの設定

VMwareではVMを起動するときにネットワークアダプタの設定をBridge/HostOnly/NATから選択できます。それぞれの違いは下記のとおりです。今回はNATを選びますがHostOnlyでも良いです。セキュリティ脆弱のあるアプリをあげるので、念のためBridgeはやらないほうが無難です。

ネットワークの接続形態を理解するために、ここの図が非常にわかりやすかったです。

設定 使用する仮想アダプタ 用途
Bridge VMnet0 ゲストOSをホストOSのつながるルータへ接続したい場合。(今回は非推奨。)
HostOnly VMnet1 ゲストOSとホストOSをHUB(L2SW)で接続したい場合。
NAT VMnet8 ゲストOSとホストOSとNATルータ(L3SW)で接続したい場合。
仮想マシン設定の編集

仮想マシン設定の編集

NAT接続にした前提で話を進めます。ゲストOSからインターネットに接続するためには設定が必要となります。(まあ、やらなくてもいいですが。)設定のイメージについてはここの図が非常にわかりやすかったです。ちなみに、VMnet8をvmnetcfg.exeで見てみると下記の通り。DHCPサーバ機能も兼ねているので、DHCPの設定を見てみると.128からIPアドレスが配布されるように初期設定されていました。

仮想ネットワークエディタ

仮想ネットワークエディタ

DHCP設定

DHCP設定

Windows8.1側では、インターネット接続をしているアダプタの設定画面を開いて、インターネット接続をVMnet8と共有します。(こういう設定をICSと呼ぶらしいです。)

インターネット接続の共有

インターネット接続の共有

あとは、VMnet8アダプタのIPアドレス設定を確認します。(ゲストOSのeth0にVMnet8(DHCP)から配布されるIPアドレス/ネットマスクに従ったIPアドレスが設定されていれば問題ありません。)このあたりのイメージは先程も紹介したこちらの記事にある画像がわかりやすいですのでぜひ参照してください。ちなみに、DHCPでIPアドレスは.128から配布される設定となっているので.1固定にしておけばゲストOSとIPアドレスが被りません。

VMnet8のIPアドレスを確認

VMnet8のIPアドレスを確認

後は、VMwarePlayerでOWASP仮想イメージを実行するだけです。root/owaspbwaでログインできると思います。Windows8.1側とLinux側で相互にpingが通り、Linuxからgoogle.com(インターネット)にpingが通り、ホストOSのブラウザから「http://192.168.137.129/」(IPアドレスはifconfigで確認)につながれば設定完了です。長い道のりでした。

BurbSuiteの設定

BurbSuiteの配置されたフォルダにコマンドラインで移動して、下記コマンドを実行します。パス等の関係なのか、バッチファイルではうまく行きませんでした。動かない場合は、きちんとコマンドラインでフォルダに移動してから実行してみてください。

java -jar burpsuite_free_v1.5.jar

Proxy>OptionsよりIP:Portを確認します。ループバックアドレスである「127.0.0.1:8080」で待ち受けていることを確認できました。(わざわざ確認するまでもないですが。)つまり、試験するブラウザにプロキシを設定します。

ループバックアドレスの確認

ループバックアドレスの確認

ブラウザへのプロキシ設定

試験対象のページ以外へのアクセスはループさせたくありません。そういう、プロキシ適用有無のルールを記述する方法があります。下記ファイルをどこかに配置してください。

function FindProxyForURL(url, host)
{
	if(isInNet(host, "192.168.137.0", "255.255.255.0")){
		return "PROXY 127.0.0.1:8080";
	}
	else return "DIRECT";
}

Firefoxの場合は下記のように設定します。バックスラッシュとスラッシュ問題もあるようなのでいろいろ試してみてください。

プロキシの設定

プロキシの設定

最終確認

試験ページ(http://192.168.137.129/)にアクセスした時はBurbSuiteがリクエストを捉えてくれて、それ以外のページにアクセスした時は素通りしてくれるようになることを確認して全ての工程が完了です。自分、お疲れ様でした。

おまけ

できない! つながらない! というときはWindows側アダプタの停止→開始や、Linux側アダプタのdown→upを試してください。

ifconfig eth0 down
ifconfig eth0 up

参考URL

非常に多くのサイトを参考にしました。感謝。