tomesuke.log

サーバ運用とかセキュリティとか余裕があるとき書き残します。

QNAP TS-231+の非RAIDなHDD×2を交換した

自宅用NASにQNAP TS-231+を使っているが、最初に入れたWD青の4TB×2本を録画用サーバに転用するため、QNAPのHDDをSeagateBarraCuda 8TB×2に交換することを思い立った。


自分はQNAPでRAIDを使わずHDDごとに静的ボリュームフォルダ単位にHDD1からHDD2へ日次バックアップすることで運用している。
RAIDを使ってない理由は下記のリスクとデメリットがあると思っているため。

RAIDのリビルド中に生存しているHDDが壊れる可能性がある。
・RAID6やRAID10などのリビルドに強い構成はHDDを4台以上揃える必要があるため初期費が比較的高い。
RAIDコントローラーが壊れた場合に筐体またはRAIDコントローラーの交換は個人では難しい場合があり、生存HDDからのデータの引き上げができない可能性が高い。*1*2


そこで非RAID構成のQNAPの交換方法を調べてみたが、同じ構成で運用している方のサイトが見当たらず、RAID構成で1台のHDDが故障した際のdisk交換、みたいな記事しか見当たらなかったので、今回の流れを残しておく。
RAID構成であれば、RAID管理から容量の追加などが可能なので、それほど困らないと思われる。
RAID構成の場合、そういったメニューは使えない。特にデフォルトでシステムボリュームに設定されるHDD1を交換するとどうなるのか分からなかったので、最悪設定等全てリセットされることも想定して進めたが、それは杞憂で、結論としては普通に順番に交換したら何事もなく元のまま起動した。

交換の流れ

①QNAPを一度再起動してシャットダウン
②HDD2をベイから取り出して新しいHDDに交換し、HDD2側に挿入する
③QNAPを起動後、HDD2をフォーマットし、「DataVol2」という名前で静的ボリュームを作成する
④HDD2に1つ共有フォルダを作り、File StationでHDD1の全フォルダとファイルをコピーする
 ※4TBで20時間程度かかる
⑤AppCenterで、インストールしているアプリを選択し、「移行先」と表示されるアプリをすべてHDD2側に移動する
⑥QNAPを1度再起動してシャットダウン
⑦HDD1をベイから取り出して新しいHDDに交換し、HDD1側に挿入する
⑧QNAPを起動後、HDD1をフォーマットし、「DataVol1」という名前で静的ボリュームを作成する
⑨HDD2にコピーしたHDD1のデータを新HDD1にコピーし戻す。
 ※これも20時間程度
⑩AppCenterで移行したアプリをHDD1に戻す
※あとは自分はHDD1からHDD2へのバックアップジョブを作っており、それを再作成しなおした。

感想

  • 自分の考えではQNAPの設定もHDD1に保存されていて、HDD1を交換した時点で設定など全て消えてしまうのでは、と思ってたが全然そんなことはなかったぜ!HW仕様を見たら「Flash Memory 512MB」とかあるのでそこに入ってるのかも。

TS-231+ - ハードウェア仕様 | QNAP

  • 2度の4TBレベルのコピーが必要なのでとにかく時間がかかる。今8TB×2で運用しているけどこれで足りなくなった場合どうしよう。
  • っていうかQNAPはHDD1からHDD2とかのローカル間のコピーに時間かかりすぎでは?と思うけどHDDってこんなもんだしCPUが貧弱なのかもしれないけど。
  • 自宅で手間を少なくQNAPを運用するベストプラクティス的なのが知りたい。2ベイだったら素直にRAID組んでストレージプール作ってオラオラして、USBで外部ストレージにバックアップ取る方がいいのかな。でもHDD費用が高くなるしなー。

*1:基本的にRAID構成を運用する場合は機器ベンダの保守に入っており、各部材がタイムリーかつ潤沢に使える状態でないと運用が難しいと思う。とは言いつつ筐体が壊れたらQNAPの新しい筐体買えばいいのかなぁ。

*2:RAID構成でストレージプール作ってLUNだぜオラオラとかそういうのが好きで、技術的なチャレンジで運用しているなら話は別だけど、復旧できないリスクを抱えたままは良くない気がする。

Windows10でVPNを自動接続する方法

L2TP/IPsecなどのVPNを、WIndows起動時に自動で接続したい場合や、やけにVPN接続が切れてしまうので頻繁に自動接続したい場合に、Windows7まではタスクスケジューラやコマンドプロンプトで「rasphone -d "VPN接続名"」というコマンドを起動時や5分間隔で実行させれば自動接続できていたが、Windows10になって、いちいち下記の接続ダイアログが表示され、「接続」ボタンを押さないと接続できないよう変わった。

f:id:tomesk:20160725000432p:plain

これをボタンを押さずに自動接続させるためには、
「C:¥Users¥ユーザ名(※)¥AppData¥Roaming¥Microsoft¥Network¥Connections¥Pbk」にある
VPN接続名(※).pbk」というファイルをメモ帳などで開き、「PreviewUserPw=1」となっている行の「1」を「0」へ書き換えればOK。
※「ユーザ名」と「VPN接続名」は自分の環境に合わせて変更すること。

補足1

タスクスケジューラでの自動接続の設定方法については「タスクスケジューラ VPN 自動接続」などでググれば画像付きの詳しいサイトが出てくるので、それらを参考にしてください。

補足2

「rasdial VPN接続名 ユーザ名 パスワード」というコマンドでも同様のことはできるが、rasdialコマンドを実行するとコマンドプロンプトの黒画面が毎回立ち上がってしまう(.bat化して@echo offで標準出力抑制してもダメ)ので、5分とか10分ごとに自動接続しにいくタスクを組んでる場合、けっこう気になる。

補足3

Windows7の時点でpbkファイルを変更してなくて自動接続できていれば、Windows10にアップグレードしても変わらず自動接続できるので、Windows10で新たにVPN接続を作成した場合はpbkファイルの変更が必要。

ソースからインストールしたnginxをパッケージインストールへ切り替える方法

うちのWebサーバはnginxで運用していて、過去にspdy対応させるためにnginxをソースからインストールしていた。バージョンは1.7.2。

けど公式のパッケージの付加オプションを見てみたらv1.9.5(mainline)から既にhttp v2対応と書いて(※)あったので、試しにyumで入れてみた。

 

nginx: Linux packages

Packages for mainline version also have the following arguments:
--with-threads
--with-stream
--with-stream_ssl_module

 

and
--with-http_spdy_module

 

replaced with

--with-http_v2_module

 

 

 

インストール方法(mainlineの場合)

事前準備として公式にもあるようにyumリポジトリへnginxを追加

nginx: Linux packages

To set up the yum repository for RHEL/CentOS, create the file named /etc/yum.repos.d/nginx.repo with the following contents:

 

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/mainline/OS/OSRELEASE/$basearch/

gpgcheck=0

enabled=1

 

Replace “OS” with “rhel” or “centos”, depending on the distribution used, and “OSRELEASE” with “5”, “6”, or “7”, for 5.x, 6.x, or 7.x versions, respectively. 

 

うちはOSはCentOS 6.xなのでbaseurlは下記に書き換え。

http://nginx.org/packages/mainline/centos/6/$basearch/

 

1.念のため/etc/nginx以下をバックアップ

#tar zcvf nginx_conf_bak.tar.gz /etc/nginx/*

2.yumでインストール

#yum install nginx

nginx v1.7.2ではmake uninstallは準備されてないため、特に何もせずそのままyum installした。(うちの環境では結果的にはアンインストールは不要だった)

 

nginxを起動するとspdyじゃなくてhttp v2だよ!って怒られたけど、起動はした。

 

nginx: [warn] invalid parameter "spdy": ngx_http_spdy_module was superseded by ngx_http_v2_module in /etc/nginx/conf.d/server.conf:11
nginx: [warn] invalid directive "spdy_max_concurrent_streams": ngx_http_spdy_module was superseded by ngx_http_v2_module in /etc/nginx/conf.d/server.conf:28

(…以下同じようにspdy関連の設定でwarnが出る)

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

3.設定ファイル(うちではserver.conf)の書き換え

ssl時の動作をspdyからhttp2へ変更

listen 443 ssl http2;

 

spdy関連の設定がある場合、削除してhttp2のデフォルト値へ書き換え(必要ないかも?)

http2_chunk_size 8k;
http2_idle_timeout 3m;
http2_max_concurrent_streams 128;
http2_recv_timeout 30s;

 

以上で終わり。

確認にはChromeデベロッパツールを使って、Networkの表示列にProtocolを追加すると「spdy」から「h2」へ変更されている。

 

なんか色々アンインストールとかいるかと思ってたけど、普通にインストールしただけで終わったので楽ちんだった。nginxは色々とストレスフリーなところが好き。

 

SECCON 2014 オンライン予選(日本語)writeup

大学時代のサークルの演奏会があり東京に行っていたという言い訳はさておき、7/19にSECCONが開催した12時間のCTFに参加したので遅すぎなwriteup書きます。

社内の方々と一緒にやったのでチーム名は伏せますが、1000点超えたのですごいなって思いました(チームの人がめちゃくちゃ優秀で全くチームに貢献できず。くそー)

なので自分が取り組めた問題だけ。

 

ネットワーク

このパケットを解析せよ

ftpをパケキャプしたpcapファイルがダウンロードできるので、wiresharkで開き、ftpでgetしているflag.txtを取り出すと末尾が=になっている文字列がある。それをbase64デコードしたものがFLAG。

FLAG{F7P 15 N07 53CUR3}

 

ソーシャルハック?

今回最も長い時間取り組んだけど結局解けなかった問題。

題材は最近よく見かけるLINEアカウント乗っ取りでWebマネーを購入させるアレ。

f:id:tomesk:20140723004541p:plain

天安門事件」で金盾にブロックされる(というネタで実際はされてないんだけど)も実装されていてチームメイトと大笑いした。

 

ネットワーク系の問題なのでパケキャプしたりjavascriptのソース読んだりしてて、ずっと遠回りしてた。

で、解法は向こうが定型文で「画像を送ってくれ」と言うのでアクセスログが取れるサーバ(例えば公開しているVPSなど)に画像を置いて、そのURIを送信してやると実際にアクセスしに来るみたい(他の方のwriteup読んだ)。

そのアクセスログVNCのアカウントが書いてあるのでアクセスするとデスクトップにFLAGが表示してある、という発想の転換が必要な問題でした。

画像のURIを送ると「見たよ」とpostして来るとこまでは確認してたけど、すっかりスルーしていてまさか実際にアクセスしているとは・・・。

 

※追記

2014/7/23現在まだサーバ動いてるのでアクセスして遊んでみるといいかも。

http://chat.quals.seccon.jp/

 

 

Web

箱庭XSSリターンズ

この問題はSECCONでは定番なようで、ダウンロードしたhakoniwaXSSreturns.exeを実行すると画像のようなウィンドウが上がってくるので、あの手この手で「XSS」というalertを実行させる、という問題。

f:id:tomesk:20140723005937p:plain

ポイントはクリアするごとにこれまでに使った「alert」や「script」、「XSS」などの重要な文字列がどんどん使えなくなっていくこと。これを20回も繰り返すとか無理です・・・。

結局色々考えて3回突破でリタイア。

 

 

まとめ

他にもたくさん問題があり、中には技術的なことをあまり知らなくても、フリーソフトと発想の転換で解ける問題もいくつか出題されていたので、ちょっとパソコン使えますな人もチャレンジすると良い頭の体操になったりするかもしれないと思った。

とりあえず下記のモノがあればCTFチャレンジできます(解けるとは言ってない)

WindowsLinuxMacも可)

バイナリエディタWindowsだとStirling、Macだと0xEDがおすすめ)

Wireshark

テキストエディタ(なるべく文字コード変換や改行変換ついてるやつ)

 

個人的には思ったより解けなくて悔しかったので次回別のCTFまでにとりあえずバイナリファイルの扱いとアセンブラを読めるようになること、XSSの復習やって臨みたい…!

 

※次回はHITCONという団体がやってるCTFの予定。中国かな?

https://ctf2014.hitcon.org/

けど時期が8/16〜18という鬼日程なのでやれるかどうか。。

GlobalなIPを持ってないけど自宅サーバを公開したい!(構成編)

はじめに

ちょっとでもLinuxApache等に触った人であれば、一度は

「自宅でサーバを運用したい!あわよくば外に公開したい!!」

と思ったことがあると思う。たぶん。

 

サーバを外部に公開するために最も必要なもの、

それは決して高スペックなPCや高機能なサーバアプリケーションではなく、

グローバルIPアドレスである。

 

日本の大多数の人たちはフレッツ光au光などのインターネット回線を契約し、

静的・動的関らずグローバルIPアドレスを借りて日々インターネットしているけど、

世の中にはグローバルIPをもらえない環境の人もいる。

 

マンション付属の無料インターネットユーザである。

 

これはマンションに管理者が1本インターネット回線を引き、

DHCPで各部屋にローカルIPアドレスを配ることで回線コストを下げ、

そのマンションに住む人は回線料金を払わずに数十Mbpsのそこそこの速度で

インターネットができる、というもの。(家賃にちょっとは上乗せ?)

以前住んでたレオパレスもこの方式だった。今住んでるアパートもこれ。

 

この環境だと自部屋にはローカルIPアドレスしか払い出されず、

せっかくの自宅サーバが公開できない!!ということになる。とてもショック。

マンションルータに入って静的NAPT設定できるなら話は別だけど…

 

そこで自分が考えた方法は、「サーバを外に張り出させる」という作戦。

グローバル環境のVPSとか借りて、そこでリクエストを受け付けて自宅サーバに流せば、

リソースとしては自宅サーバを公開できる!と考えた。

 

 

 

構成

とりあえずさくらVPSの一番安いプランのHDD 100GB、Mem1GBのCentOSを借りて、

そいつをVPNサーバにしつつ、自宅サーバからVPNを張って、

その中にhttpやらcifsやらを流す。

 

f:id:tomesk:20140715013612p:plain

 

ちなみにさくらの費用は年間11158 円(消費税含)です。

高いか安いかは人それぞれですが、固定IPだしハードは壊れる心配がないし遊べるし、

個人的には満足してます。

 

VPNスマホからの接続性も考慮してL2TP/IPSecにしてるけど、

ぶっちゃけ使わないし色々問題もある(また別途書く)ので、

大人しくOpenVPNで良いと思う。

 

フロントエンドのWebサーバはプロキシ中心だし設定書きやすい、最近流行り(重要)

という観点でNginxにした。Apacheは動かしてない。

バックエンドのEpgTimerSrvはブラウザ経由で録画予約するためのWebサーバ

アプリケーションで、あるURLへのアクセスを

EpgTimerSrvが待ち受けるportの5510へとリバプロする。

 

各部屋の回線を束ねるマンションルータはうちの場合YAMAHAのNVR500なんだけど、

普通にtelnet出来てshow configとかshow techinfoとか叩ける。いいのかこれ。

 

今のところの自宅サーバの役割は2つ

自宅サーバ(実は録画サーバ)のWeb予約

②録画した番組のストリーミング再生(できるけどほとんど使ってない…)

NASも兼ねてるけど外部には未公開

 

細かい設定とかも備忘録的に残しておきたいので、別の日にまた書く。

 

 

 

まとめ

・動的でも静的でもグローバルIPアドレスない環境は色々と大変

・だけどVPN使うとそのへんが捗る

自宅サーバ公開してないじゃん(タイトル詐欺)

以上。

 

 

 

おまけ

自宅サーバのスペック

OS:Windows7 Professional

CPU:Intel Core i5 3470-T

SSD:Intel520 128GB(OS領域用)

HDD:WD緑2TB×4 RAID10構成(NAS用)

Mem:DDR3-1600 8GB×2 DDR3-1333 4GB×2(24GB)  

M/B:ASUS P8H77-M PRO

電源:SST-ST45SF

 

仮想化もしたいけど2Core4Threadだとオーバーコミットしそう…エンコもしてるし。