yuu26's memo

試したことや技術的なメモを記録しています。まずは隔週程度の更新を目指します。

極小ガラケー NichePhone-S が届きました

2台目に最適なガラケーとして、Makuake で話題になっていた NichePhone-S が届きました。せっかくなので開封レビューです。

www.makuake.com


特徴

  • 小さい・軽い(横: 90mm, 縦: 50mm, 厚さ: 6.5mm, 重量: 38g)
  • docomo WCDMA 対応(3Gのみ、LTE非対応)
  • nano SIM 対応
  • 対応バンド: Band 1 のみ
  • 0.96インチモノクロ有機EL(128x64ドット)
  • SMS 対応
  • Bluetooth 対応
  • Wi-Fi テザリング対応

f:id:yuu2634:20170829205935p:plain


外箱

f:id:yuu2634:20170829201940j:plain f:id:yuu2634:20170829204656j:plain

箱を持っただけで明らかに軽いことが分かります。


開封

f:id:yuu2634:20170829201919j:plain

開けると本体が登場するスタイル、もはやお馴染みですね。
上にあるのは充電器です。


内容物

f:id:yuu2634:20170829202226j:plain

必要最低限のものだけが同梱されています。

  • 本体
  • 充電器
  • micro USB ケーブル
  • 取扱説明書
  • クロス


充電する

f:id:yuu2634:20170829203109j:plain

付属の充電器に microUSB ケーブルを接続し、そこに載せるイメージです。磁石で吸い付くため楽に装着できます。

上下を逆に取り付けようとすると、磁石が反発して付けられないようになっています。


初期設定

f:id:yuu2634:20170829202654j:plain

SIM トレイは裏面にあります。ピン等は必要ないですが、キャップが完全に外れるため紛失に注意が必要ですね。

f:id:yuu2634:20170829214529j:plain

IIJmio の SIM を挿入後、電源を入れるとそのまま電波を掴んで時刻が同期されました。通話だけなら設定不要です。


着信させてみる

f:id:yuu2634:20170829210145j:plain

電話を掛けてみたところ、本体サイズの割には大きな音が鳴ります。少し離れた場所に居ても気がつけそうです。通話品質も普通の 3G といった印象。

マナーモードのバイブレーションは弱めです。胸ポケットにも余裕で入るサイズなので、気が付きやすい場所に入れておくほうが良さそう。


Wi-Fi テザリングしてみる

パケット通信をする場合は、APN の設定が必要です。IIJmio の設定を登録しておきました。

f:id:yuu2634:20170829211433j:plain

『Wi-Fiテザリングをオンにする?』とフランクに聞かれるので OK します。

f:id:yuu2634:20170829212411j:plain

iPhone で接続してスピードテストをしました。3G でこれだけ出るのであれば文句なしですね。


まとめ

小さくて軽くて、通話も普通にできるので2台目に最適です。

3G テザリングは、電池残量との兼ね合いもあるので常用には向かないものの、非常用やサブ回線としては問題なく使えます。

専用充電器のため外で気軽に充電はできませんが、待受時間は72時間(公称)なので、3日ほどは充電なしでも持つと思われます。


第一印象で期待を下回ることもなく、現時点では良さそうな感じです。とりあえずは、しばらく持ち歩いてみることにします。

#スプラトゥーン2 のステージ情報が取得できるAPIを作りました

Spla2 API - スプラトゥーン2のステージ情報API

Web API を作りたいとネタを探していたところに、ちょうどイカの波が押し寄せてきたので作ってみました。ぜひ使ってみて下さい。

この記事ではシステムの裏側について書いてみたいと思います。


システム構成

主な構成はイカの通り。

  • Google Cloud Platforn
  • CentOS 7
  • h2o
  • MariaDB
  • Go言語

インフラ

個人的に最近お気に入りの GCP です。無料枠が余っていたのも理由の一つ。

OS

CentOS 7.3 を入れています。よく使っているので慣れているというのが理由です。

Webサーバ

nginx で作っていましたが、HTTP2 の ALPN に対応するのが大変そうだったので、h2o に初挑戦。特にチューニング等はしていませんが、早くていい感じですね。

データベース

Twitter のステージ情報bot (@splatoon_stage, @splatoon2_stage) 向けに構築したものを流用しています。

データも全く同じものを使っているので、仮に片方が狂った場合はもう片方も同じ状態になっているはずです。

Go 言語

バックエンドのプログラムはすべて Go で書いています。マトモに使ったのはこれが初めてですが、書きやすくて良い言語だと思います。

やっていることは複雑ではなく、DB からデータを引っ張って加工して JSON に吐くだけのお仕事です。


データの取得元

肝心の情報をどこから取得しているのかですが……お察しください。イカプレイヤーの皆さんが普段見ているところと同じです。

そのため、突然取れなくなる可能性は大いにあります。

Zabbix の監視対象に追加して、更新がコケたら通知するように設定するのもアリかな。


任天堂(or はてな)さんが API を公開してくれるのが一番ですが、なかなか厳しいような気がしています。

公式側が提供してしまうとサポートの負荷が高そうなので…… (分かる人だけ勝手にどうぞ、が出来るといいんですが)


SSL Labs A+

SSL の脆弱性診断サービスである SSL Server Test (Powered by Qualys SSL Labs) にて、最高ランク A+ の評価を獲得しました。

f:id:yuu2634:20170810005651p:plain

正確には、A+ になるまでサーバを弄ったりググったりしたのですが、何とか達成できました。先人の知恵に感謝。


今後について

まずは、元である splapi さんの仕様に追いつくように開発を進めていきます。

急ぎで作ったため、フィールドはあるのに値は 空 みたいな部分があるので、そこは早めに解消したいところ。


Page Speed Insights でも高評価を取りたいですね。作っているときは満点でしたが、説明書きを詰め込むと低下してしまったので。


最終的には、FaaS を利用したサーバレスアーキテクチャで作り直してみたいです。(気力のあるときに)


不具合の発見報告や要望があれば、ぜひコメントや Twitter でお知らせください。私が喜びます!


Spla2 API - スプラトゥーン2のステージ情報API

Trend Micro CTF 2017 - MISC 100 writeup

2017/06/23~24 の日程で、Trend Micro CTF 2017 に参加しました。

時間の都合もあって一部しか参加できませんでしたが、担当して解けた1問の writeup を残しておきます。

Trend Micro CTF 2017 f:id:yuu2634:20170627224948p:plain


MISC 100

与えられた .pcap ファイルを解析する問題です。


とりあえず覗く

なぜか Wireshark で開けないため、とりあえず strings コマンドで覗きます。

最後のあたりに FTP 通信が見えるので抜き出してみます。keylog.txt とやらを転送していますね。

220 Welcome to blah FTP service.
4c9@
USER user1
331 Please specify the password.
7c:@
PASS P@ssw0rd
230 Login successful.
Bc<@
PORT 192,168,2,10,250,19
200 PORT command successful. Consider using PASV.
9c=@
STOR keylog.txt
<c>@
150 Ok to send data.
CLIENT_RANDOM 9563c57725522ab0cebb420f2ff549cdcc214d05a2b7aa5601f1935bcd1ac7c3 c5e10df5dbd09bd97b5ea6f1b291d8cac7066178d6805cf371e12ea1095131d1e6096132d7d0e072c78005f6d1b7fe5b
CLIENT_RANDOM f51ac603ddd9c6d8146cd03028f129365e32a928a08629892be4c26a454634bb 0a9dea018920113ec333446e1a185fd072444a1db9d7a8a9b9b21f2472f39db3f92929a25e3d634d58259537a3b47d60
CLIENT_RANDOM 3e401f34cc591c8a35aeedaddf181f7c458a84e058392735d74679eb0393431a 89d66ea9f10d711b6ff8c54c86474096252b8e8173aa271d8441b38c720d9d4a5b569b14cb1d898df16473ebfa23a1d2
CLIENT_RANDOM 0e2d5ecede1cf0f7d1d75329e3e386e160d99ac89e0ec09187651096d79ba35a afe74535c230c9d7e5f08ace8ce02d8200b8078854e41c30703f7da4ab7bd405788956805e9403996aa9412e2a26d545
CLIENT_RANDOM 89e8225f13ed1b39406f25c3f634f0ec91da0be693b7dcb9044efbbf2fe9363e 60b8b92fd58faabbfe00bec7fbf1c39db21030ff3c215c079176be6bcfe167df4114f1950790aaf432312a1397be2cb6
CLIENT_RANDOM 55d1989b2b9005b72599552ff352c4eef03bdb7153aaddd9942d69a19441fdaf 07cc14d902872bbdbdf5d05463a918c585604d373d7524ff405c396a2d4adafffd82b6136de4b7204d33fd9f2ff8f113
CLIENT_RANDOM 3cd78f4befe06bdb4c5559930817c8056aa14fe0c6a67d806ea0cc34c317fa51 ac7be48df12853bae2896042829a2011225e56ccdb63a05520b574b6d9f4aedd3f6c8377d47130e995f16a588dad5858
CLIENT_RANDOM cfaf0c18297c00ba7541ae55012df1fe825727a32ab94e38e1aeb985f9cf3ce5 3f81b68f0b9df5b719a54bb364505cb29209ae7a30d0525bb5a873e375bdbc9ac77ff24aa21def886d61f7cdcc0b06d5
CLIENT_RANDOM a77cdcf8084d073ec7059933e454408e25c6a01c8dbb888e9a3a862b609d8503 b5e7230fc735a87666fd2aee430917fd97bcf5f961b4099b979453b51176c0496629fe5af17da7f52204953782c90fdb
CLIENT_RANDOM d2d06ea94000a9204ea9e2d8272e77e4758958caaff0e9b4bfa7dbe4228d9251 bb716b4ff6de9730d0cd85446f3b5682b9055a54ac071279326ad2739083f54f0d13e689b47fcbb88a0dddb9ddd44175
CLIENT_RANDOM 4955c52a45946483854a4f333493870baa838a5c54c7112252a2828931393cd3 45aef6edb24a058b613559847db56db375b2f4286f9633f26735799ac2e8b0679853e72c1ec4188908bfa9b021c829cd
CLIENT_RANDOM 2acd97c21e8d33bb349d9612cb5b6220f10e5e4106d9449bf7dc5c933292f59e f70dc2ce8a96da62b9c6c5e2dea8aa776a666908c46a34d71dd297a002ba9e6a55b39e1cc8e845a7e058c779b400f82f
4cA@
4cB@
226 Transfer complete.
(cC@
.cD@
QUIT
221 Goodbye.

CLIENT_RANDOM って何ぞやと調べてみたところ、HTTPS 通信を復号できる鍵であると判明。

www.m00nie.com

一連の CLIENT_RANDOM 部分だけ抜き出して、 keylog.txt の名前で保存しておきます。


Wireshark で開く

バイナリで見ると先頭が a1 b2 c3 d4 となっているはずなのに、d4 c3 b2 a1 とエンディアンが逆になっている。

手動で書き換えてみると、無事 Wireshark で開けるように。(チームメンバが気づいてくれました)

f:id:yuu2634:20170627225600p:plain

HTTP2 な通信ですね。

Edit → Preferences で設定画面を開き、 Protocols → SSL → (Pre)-Master-Secret log filename に、先ほど保存しておいた keylog.txt を読み込ませます。

f:id:yuu2634:20170627225929p:plain


データを抽出

HTTP2 の DATA を 適当に 選んで Follow → SSL Stream で開いてみます。(いい目星の付け方があれば知りたい)

f:id:yuu2634:20170627230428p:plain

Show and save data asRaw にして、ローカルに保存します。

f:id:yuu2634:20170627230712p:plain


抽出したデータを確認

binwalk コマンドで調べてみると、以下のファイルが含まれていました。

$ binwalk -e data.bin

DECIMAL         HEX             DESCRIPTION
-------------------------------------------------------------------------------------------------------
324             0x144           LZMA compressed data, properties: 0x01, dictionary size: 16777216 bytes, uncompressed size: 559903 bytes
329             0x149           gzip compressed data, from Unix, NULL date: Thu Jan  1 09:00:00 1970
3016            0xBC8           TIFF image data, big-endian
47301           0xB8C5          TIFF image data, big-endian
91520           0x16580         gzip compressed data, from Unix, NULL date: Thu Jan  1 09:00:00 1970
102770          0x19172         gzip compressed data, from Unix, NULL date: Thu Jan  1 09:00:00 1970

gzip の中身が謎ですね。

file コマンドを叩いたり、直接開いて確認した結果、2つの HTML と、1つの CSS であることが分かりました。


HTML を確認

ブラウザで開いてみると、最後に怪しげな画像が2つ並んだページが表示されました。

f:id:yuu2634:20170627231527p:plain f:id:yuu2634:20170627231634p:plain

HTML ソースを確認すると

<samp>HINT: visual cryptgraphy</samp>

の記載があるため、Visual Cryptgraphy でググると Wikipedia がヒット。

Visual cryptography - Wikipedia

f:id:yuu2634:20170627232115g:plain

なるほど、上手いこと重ねると答えが出そうですね。


画像データを取り出す

該当部分の CSS を見ると、BASE64 でデータが埋め込まれていたので、そこだけを抜き出してデコードし、画像ファイルに。

.sp {
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSU(略)ErkJggg==);
    background-repeat: no-repeat;
    display: block;
}

Base64 Online - base64 decode and encode

f:id:yuu2634:20170627232801p:plain


画像ファイルの高さが 106px であったことから、上下半分の 53px ずつに分割しました。

よく見ると、CSS にも以下の記載があるので間違いなさそうです。

.sp-0 {
    width: 440px;
    height: 53px;
    background-position: 0 0;
}

.sp-1 {
    width: 440px;
    height: 53px;
    background-position: 0 -53px;
}


画像ファイルを重ねる

どうやって重ねようかと考えていたところ、チームメンバが SiriusComp というソフトを見つけてくれました。

JPG と TIFF にしか対応していないようなので、Convert PNG to TIFF あたりを使用して PNG から TIFF に変換します。

上下 53px ずつに分割したファイルを重ねてみます。

f:id:yuu2634:20170627234343p:plain

TMCTF{CanYouSeeThis?}

色々と遠回りをした気もしますが、無事にフラグゲットです。

RTX1210 と AWS VPC 間で VPN 接続を設定する

概要

ヤマハから、Amazon VPC への VPN 接続に対応した RTX1210 向けのファームウェアが公開されました。

今回は AWS VPC と RTX1210 間で VPN 接続を設定してみます。
なお、RTX1210 側は Web GUI を利用します。(CLI版はまた今度……)


1. IAMユーザ作成

RTX1210 が AWS から設定を取得するためのユーザを作成します。
IAM の新規ユーザ作成画面 を開きます。

ユーザ名を入力後、 プログラムによるアクセス を選択して次に進みます。

f:id:yuu2634:20170607233805p:plain


既存のポリシーを直接アタッチ から AmazonVPCReadOnlyAccess を追加します。(本来はグループ管理したいですが今回はテストのため省略) f:id:yuu2634:20170607233953p:plain


内容を確認して ユーザーの作成 をクリック。 f:id:yuu2634:20170607234207p:plain


アクセスキーIDシークレットアクセスキー を控えておきます。心配であれば CSV をダウンロードしておきましょう。 f:id:yuu2634:20170607234249p:plain


2. カスタマーゲートウェイ作成

VPC から見て外側のゲートウェイを作成します。
事前に ipinfo.io 等で、RTX1210 のグローバルIPアドレスを確認しておきましょう。

VPC の カスタマーゲートウェイ画面 を開き、カスタマーゲートウェイの作成 をクリックします。 f:id:yuu2634:20170607234412p:plain


ルーティングは 静的、IP アドレス欄に、事前に確認した RTX1210 のグローバルIPアドレスを入力し、作成 をクリックします。 f:id:yuu2634:20170607234431p:plain


作成されたことを確認します。 f:id:yuu2634:20170607234501p:plain


3. 仮想プライベートゲートウェイ作成

VPC から見て内側のゲートウェイを作成します。

VPC の 仮想プライベートゲートウェイ画面 を開き、仮想プライベートゲートウェイの作成 をクリックします。 f:id:yuu2634:20170607235159p:plain


適当な名前を指定します。 f:id:yuu2634:20170607235206p:plain


作成されたことを確認します。 f:id:yuu2634:20170607235214p:plain


4. VPN接続作成

ここからやっと本題の VPN 設定に入ります。

VPC の VPN接続画面 を開き、VPN接続の作成 をクリックします。 f:id:yuu2634:20170607235525p:plain


先ほど作成した、仮想プライベートゲートウェイ・カスタマーゲートウェイを選択し、ルーティングオプションを 動的 にして作成します。 f:id:yuu2634:20170607235529p:plain


数分後に状態が available になれば完了です。VPN ID を後ほど使用するため控えておきます。 f:id:yuu2634:20170607235534p:plain


5. RTX1210設定

RTX1210 の Web GUI に管理者パスワードでログインします。

かんたん設定VPNクラウド接続 のメニューを開き、新規 をクリックします。 f:id:yuu2634:20170608000019p:plain


サービス種別の選択画面ですが、現在は VPC しかないため特に選べません。次へ をクリックします。

f:id:yuu2634:20170608000023p:plain


接続設定画面が開きます。

アクセスキー IDシークレットアクセスキーVPN ID には、控えておいた内容を入力、VPC が存在するリージョンを選択し、次へ をクリックします。 f:id:yuu2634:20170608000027p:plain


内容を確認し、設定の確定 をクリックします。 f:id:yuu2634:20170608000029p:plain


設定が開始されます。正常に完了したら OK をクリックします。 f:id:yuu2634:20170608000031p:plain


6. 接続確認

かんたん設定VPNクラウド接続 のメニューから、接続情報の詳細を確認できます。 f:id:yuu2634:20170608001641p:plain


CUI でログインし show ip route コマンドを実行すると、VPC 向けのルート情報が追加されたことを確認できます。 f:id:yuu2634:20170608001404p:plain

Zabbix Server と Zabbix Proxy 間の通信を暗号化する

概要

前回の記事 で、Zabbix Proxy を構築しました。

初期状態では Zabbix Server と Zabbix Proxy の通信が平文となっているため、通信暗号化の設定を行います。

f:id:yuu2634:20170528210546p:plain

共有鍵方式と証明書方式がありますが、今回は共有鍵方式 (PSK : Pre-Shared Key) を使用します。


構成

Zabbix Server

  • CentOS 7.3 (1611)
  • Zabbix Server 3.2.6
  • 親サーバ

Zabbix Proxy

  • CentOS 7.3 (1611)
  • Zabbix Proxy 3.2.6
  • NAT 内に設置済みのプロキシサーバ


1. 共有鍵の作成

Zabbix Proxy サーバにログインし、鍵を作成します。
64 の部分は鍵の長さで、任意の値を指定できます。

# openssl rand -hex 64 > /etc/zabbix/zabbix_proxy.psk


今回は Zabbix Proxy と同じ場所にファイルを出力しました。
後ほど使用するため、鍵ファイルの中身を控えておきます。

# cat /etc/zabbix/zabbix_proxy.psk
11fb16b711ca9e90b25840……


2. Zabbix Proxy 側の設定

zabbix_proxy.conf ファイルを開き、以下の内容を追記します。

TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=<任意のユーザ名>
TLSPSKFile=<上記で作成したファイルのパス>


今回の場合は下記のようになります。

TLSConnect=psk
TLSAccept=psk
TLSPSKIdentity=zabbix
TLSPSKFile=/etc/zabbix/zabbix_proxy.psk


設定を反映させるため、サービスを再起動します。

# systemctl restart zabbix-proxy


3. Zabbix Server 側の設定

Zabbix Server にログインし、管理→プロキシ→登録済みのプロキシを開きます。
以下の内容を設定し、更新 をクリックします。

プロキシからの接続: PSK
PSKアイデンティティ: <TLSPSKIdentity に設定したユーザ名>
PSK: <作成したPSKファイルの文字列>

f:id:yuu2634:20170528205043p:plain


4. 動作確認

プロキシ一覧を確認し、暗号化欄が PSK となっていること、
最新データ受信時刻 が増え続けていないことを確認します。

f:id:yuu2634:20170528210546p:plain


念のため、Zabbix Proxy の /var/log/zabbix/zabbix_proxy.log を参照し、エラーが出力されていないことを確認します。

Fastly の無料プランでサイトを HTTP2 / TLS に対応させる

概要

CDN サービスの Fastly では、開発者向けに $50 分の無料トライアルが提供されています。
今回はそのプランを利用して、Webサイトを HTTP2 と TLS (HTTPS) に対応させてみました。


手順

1. fastly のアカウント作成
2. 配信サイトの新規登録
3. Free TLS の設定を追加
4. ブラウザから動作確認


注意点
今回の手順では、以下のような fastly ドメインが新たに作成されます。
例: <任意名>.freetls.fastly.net

なお、独自ドメインのまま fastly で TLS に対応する場合は有料オプションが必要です。証明書の関係もありますからね。


サイト構成

今回 HTTP2 対応させるのは以下のサイトです。話題のマストドンの自分用インスタンスです。

なお、登録する元サイトは HTTPS 非対応でも問題ありません。(恐らく…… ※未確認)


fastly のアカウント作成

Sign up ページ からアカウントを作成します。

個人利用のため、Company 欄には、Individual と入力しました。(合っているのか不安)

f:id:yuu2634:20170514220614p:plain

確認メールが来ますので、メール内のリンクにアクセスすると作成が完了します。


ログイン画面 から、作成したアカウントでログインします。

以下のような説明画面が表示されますが、右上の × で一旦閉じておきます。

f:id:yuu2634:20170514221323p:plain


配信サイトの新規登録

以下の画面から、CDN で配信したいサイトの URL を登録します。

左欄にはドメイン名、右欄には IP アドレス・ポート番号を入力し、CONTINUE をクリックします。
HTTPS 対応サイトの場合は 443、非対応の場合は 80になると思います。

f:id:yuu2634:20170514233733p:plain


オプションの選択画面が表示されます。
コンテンツ圧縮のため、gzip を有効にしてみます。ENABLE GZIP をクリックします。

f:id:yuu2634:20170514222956p:plain


gzip の設定画面では特に変更せず、ENABLE をクリックします。

f:id:yuu2634:20170514223155p:plain


gzip が有効になりました。CONTINUE をクリックします。

f:id:yuu2634:20170514223400p:plain


以下の画面が表示されれば登録完了です。EXPLORE をクリックします。

f:id:yuu2634:20170514224024p:plain

この段階で既に fastly 経由のアクセスは可能となっていますが、引き続き HTTP2 / TLS の設定を行います。


Free TLS の設定を追加

管理画面 から CONFIGURATIONClone active をクリックします。

f:id:yuu2634:20170514234402p:plain


現在の設定がコピーされて Version 2 の編集画面になりました。
DOMAINS 内の CREATE DOMAIN をクリックします。 f:id:yuu2634:20170514234530p:plain


Domain Name 欄に <任意名>.global.ssl.fastly.net を入力します。
既に使われているドメイン名の場合はエラーとなります。 f:id:yuu2634:20170514234644p:plain


ドメインが追加されました。設定を有効にするため、ACTIVATE をクリックします。
設定が反映されるまで数分待ちます。 f:id:yuu2634:20170514235443p:plain


ブラウザから動作確認

HTTP2 でアクセスする場合は、作成した <任意名>.global.ssl.fastly.net ではなく <任意名>.freetls.fastly.net を使用します。

f:id:yuu2634:20170515000059p:plain


HTTP/2 and SPDY indicator (Chrome用 / Firefox用) を使用すると、画面右上の稲妻マークで HTTP2 対応の確認ができます。

f:id:yuu2634:20170515001857p:plain f:id:yuu2634:20170515001901p:plain


fastly の管理画面からは、アクセス状況がリアルタイムで確認できます。

f:id:yuu2634:20170515001106p:plain


参考資料

CentOS 7.3 に Zabbix Proxy 3.2 をセットアップする

Zabbix Proxyとは

名前の通り、Zabbix 専用のプロキシサーバです。
Zabbix サーバから直接接続できないサーバの監視などに用いられます。

f:id:yuu2634:20170509222412p:plain
Zabbix Documentation 2.2

今回は、インターネット上の Zabbix サーバから NAT 内のサーバを監視する目的で、Zabbix Proxy を構築してみました。


1. インストール

yumリポジトリの登録

今回は yum でインストールするため、RHEL7 用のリポジトリをインストールします。

# rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

最新版のURLは http://repo.zabbix.com/zabbix/ から辿っていき、zabbix-release で始まる項目を確認してください。


Zabbix Proxy

利用する DB によってパッケージが異なります。
今回は MariaDB(MySQL) を使用するため、以下のパッケージをインストールします。

# yum install zabbix-proxy-mysql

Retrieving key from ... から始まる確認メッセージが表示された場合は y を入力します。


MariaDB

CentOS 7 から、MySQL の派生である MariaDB が標準のデータベースとして採用されています。

# yum install mariadb-server

サービスの自動起動を有効にし、サービスを開始します。

# systemctl enable mariadb
# systemctl start mariadb


2.データベース設定

DBの作成

root でログインします。パスワード設定は後ほど忘れずにしておきましょう。

# mysql -uroot

今回はzabbix_proxyという名称のDBを作成します。

MariaDB [(none)]> create database zabbix_proxy;


DBユーザの作成

ユーザ名は zabbix とし、先ほど作成したDBの全権限を付与します。
password の部分は、任意のパスワードに置き換えてください。

MariaDB [(none)]> grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'password';
MariaDB [(none)]> exit;


初期データのインポート

公式ドキュメントでは create.sql.gz でしたが、 schema.sql.gz しか見当たらないため、そちらを利用しています。

# zcat /usr/share/doc/zabbix-proxy-mysql-3.2.6/schema.sql.gz | mysql -uroot zabbix_proxy

gzをそのまま開ける zcat コマンドがあるんですね。初めて知りました。
なお、ファイルのパスはバージョンによって読み替えてください。


3. 設定ファイル更新

バックアップ

何ごともバックアップは大事、編集前にコピーしておきます。

[root@centos ~]# cd /etc/zabbix/
[root@centos zabbix]# cp -p zabbix_proxy.conf{,.bk}
[root@centos zabbix]# vi zabbix_proxy.conf


確認箇所

少なくとも、以下の項目は確認・修正しておきましょう。

Server=127.0.0.1 → Zabbix親サーバのIPもしくはホスト名に修正
Hostname=Zabbix proxy → 任意の名称に

DBHost=localhost → 追記
DBName=zabbix_proxy → そのまま
DBUser=zabbix → そのまま
DBPassword=password → 追記


4. Zabbix サーバ側の設定

親となるZabbix サーバに設定を追加します。
管理→プロキシ→プロキシの作成 の順に辿ります。

f:id:yuu2634:20170510005549p:plain

『プロキシ名』 には、zabbix_proxy.conf に設定した Hostname と同じ値を入力します。
『プロキシモード』 はアクティブのままで構いません。 f:id:yuu2634:20170510005656p:plain


5. ネットワークの設定

Zabbix 親サーバからの通信 (tcp:10051) が、今回構築する Zabbix-Proxy に届くようにポート転送等の設定をします。

Zabbix 親サーバ側でも、Zabbix-Proxy からの通信 (tcp:10050) が受信できるように、フィルタの解除等を行ってください。


6. 起動……失敗

サービスの自動起動設定と、サービスの開始を行います。

# systemctl enable zabbix-proxy
# systemctl start zabbix-proxy

しかし、開始に失敗してしまいました。ログを見てみます。

# less /var/log/zabbix/zabbix_proxy.log

以下のようなエラーが出力されていました。

cannot set resource limit: [13] Permission denied
cannot disable core dump, exiting...


7. SELinux の設定

経験上、この手のよく分からない権限エラーは SELinux が原因です。(適当)
SELinux のログから必要な権限を洗い出し、許可設定を追加します。

# grep zabbix /var/log/audit/audit.log | audit2allow -M zabbix-policy
# semodule -i zabbix-policy.pp

audit2allow が入っていない場合は、yum install policycoreutils-python でインストールできます。


また、以下の設定も後々必要になるので先に入れておきます。
(Zabbix サーバのインストール時にも必要な項目ですね)

# setsebool httpd_can_connect_zabbix on
# setsebool zabbix_can_network on


8. 改めて起動

今度は無事に起動できました。

# systemctl start zabbix-proxy

# systemctl status zabbix-proxy
>Active: active (running)


ログ上でも、正常に通信ができているようです。

# less /var/log/zabbix/zabbix_proxy.log
>received configuration data from server at "35.187.xxx.yyy", datalen 2911


Zabbix 親サーバ側でも無事に認識されました。 f:id:yuu2634:20170510002748p:plain


次回は……

Zabbix 親サーバと Zabbix-Proxy 間の通信暗号化設定を行います。

追記)書きました:Zabbix Server と Zabbix Proxy 間の通信を暗号化する