ライン

ポイント:簡単に準備できるし、SSL通信なので安心

ライン

 はじめに

 オフィスや可能の中で表示される管理ページなどを、外から操作したいことがたまにあります。
そんなときに、Rasbberry Piに建てたリバプロを使って、アクセスできると便利そうですよね。
 でも、少しはセキュリティを考慮した形で作れないかを検討しました。

 設定

node-http-proxy

 数行で記述できる便利なRevProxyで記事を読んだことのあるNode.jsで動作するnode-http-proxyを使ってみることにしました。

 インストールに関しては、ページの最後に記載しました参考ページの方々のページをご覧いただくこととしまして、ここでは省略します。
(ちなみに、CentOS上でも動かしてみました)

 npmを使えるようにして、npmでインストールコマンド突っ込んで、node ???.js &などのように作業をやってください。

 まず、SSL用の鍵作成をしました。

# cd /root/; mkdir certs
# openssl req -new -newkey rsa:2048 -x509 -nodes -days 3650
  -set_serial 0 -subject '/C=JP/ST=Tokyo/L=Tokyo/CN=*.example.jp' \
  -out /root/certs/wildcard.example.jp.crt \
  -keyout /root/certs/wildcard.example.jp.key
# chmod 600 certs/*

 これで2つの鍵ができあがりました。
 さて、設定ファイルは、多くが作られているものを参考に合わせ技にしてつくりました。
proxy.jsという名称にしています。

var http = require('https'),
    port = 8080,
    fs = require('fs'),
    path = require('path'),
    httpProxy = require('http-proxy'),
    domain = 'example.jp';

var options = {
    https : {
        key : fs.readFileSync(path.join(__dirname, 'certs', 'wildcard.' + domain +  '.key')),
        cert : fs.readFileSync(path.join(__dirname, 'certs', 'wildcard.' + domain + '.crt')),
    },
    hostnameOnly: true,
    router: {
        'router.example.jp': '192.168.0.1:80',
        'wlan.example.jp': '192.168.0.253:80',
        '.*': '127.0.0.1:80',
    }
};
var proxyServer = httpProxy.createServer(options);
proxyServer.listen(port);
console.log('Reverce Proxy start!');

これだけで終わりでした。

 アクセス

https://router.example.jp:8080/でアクセス

 俺俺な自己認証局なので、最初にエラー画面っぽく出るかも知れませんが、重要なのは中身を読み取られにくくすることなので、ここでは気にしないことにします。
 上記ようなアドレスでアクセスできるように、DNSやDDNSで設定。後はそのポートをポートフォワーディングするようにルータに設定してください。ルータごとに書き方は違うでしょうが、リバプロを入れているマシンが 192.168.0.2 だったら、ルータより8080番ポートを192.168.0.2の8080番ポートに転送することで完了です。後は、上記に作成した設定の通りに振り分け転送させます。

 Raspberry Pi上にもウェブを動作させてありましたので、並べた2つ以外のアドレス以外で参照が来た場合は、これが参照されます。
サブドメイン指定が一致するものは、それぞれの機器の管理ページにプロキシされて画面が表示されます。

 恐ろしく簡単にできてしまいました。PCやサーバの起動操作なども操作できるようになりましたので、必要なデータを持ってくるのを忘れた時などには便利そうです。

 StartSSL

無料らしいので評価してみる

名前だけ知っていたけど、試したことのなかったStartSSLを使ってみる。
https://www.startssl.com/
にアクセスすると想定通りの英語の画面。

Freeって書いてあるのを選ぶに決まっている。お金かけて評価したくないし。
次ページ入力がわかりにくいけど、最後にあるコントロールパネルを選べば良い。
「初めて来たの?」みたいにいわれるので、右側イメージを選ぶ。すると、入力フォーム登場。
入力後にメールに確認コードが来ているので、更にフォームに入力。
入力を終えると更にメールが来る。書かれているURLにアクセス。
住所とか少しまじめに入力しないとやり直せ!なメールが来ていました。
更にしばらく待っていると次のメールが来て、更にメールにあったコードを入力するとやっと先の画面。

「2048または4096」の鍵長を選択。なんだかブラウザに証明書が追加された。
その後は更に…メールが来る。
コントロールパネルで「Validations Wizard」を選ぶ。
何故だかこれまでと異なる登録していない別アドレスを指定された。知っているみたいだな。以前登録したんだっけかな。

Certificates Wizardを選択しなおし、ウェブを選択。キーパスフレーズが短いと怒られる。10文字以上を要求される。
結構待ったけど、ssk.key画面で来た。次にssl.crtも。
パスフレーズを毎回入力を求められても邪魔なんで、

# openssl rsa -in example.jp.key.orig -out example.jp.key
Enter pass phrase for example.jp.key.orig:
writing RSA key

確認してみましたが、ちゃんと利用できるようになっていました。中間局とかはありませんでした。
1年間の有効期限なので、その頃にまた更新が必要なようです。

実際に、このページのSSL鍵にも利用してみましたが、ウェブのSSLページとしても利用してみました。
IEでもSSLの認証局としてエラーにならずに利用できました。無料で使えているのにいいなって思います。
ワイルドカード証明書も高くないし、買ってみようかなと思えてしまいます。

少し、お試ししてみようと思います。


【改訂履歴】作成:2014/ 1/ 12 改訂: 2014/03/06
【参考リンク】

Raspberry Piにリバースプロキシを導入する - 人と技術のマッシュアップ
さくらVPS(Apache稼働中)にNode.jsをインストールする#2
Node.jsでつくるリバースプロキシ…Node.js勉強会@関西 第0回のページ
CentOSにNodeJS+nginxの環境を構築する
framework to run Etherpad Lite on Node via https, not using a reverse Apache or Nginx server proxy…SSL鍵の設定例
Reverse proxy for https…SSL鍵の設定例

Copyright © 1996,1997-2006,2007- by F.Kimura,

design テンプレート