リモート RPC アクセス
こんにちは、
RPC インターフェースを介して getinfo を呼び出すクライアントがある。host=localhost の場合はすべて正常に動作する。 しかし、別のホストにある Bitcoin にアクセスしようとするとできない。 Wiki を読んだところ、インターフェースは 127.0.0.1 からのリクエストのみを受け付けるとのことだ。これは今も変わらないのか? オーバーライドする設定はあるか?
なければ、各マシンにデプロイする「プロキシ」アプリを書かなければならないだろう。できれば避けたいのだが。
よろしく、 Marko
wikiを読んだら、インターフェースは127.0.0.1からのリクエストしか受け付けないとあった。今もそうか? オーバーライドする設定はあるか?
まだ変わっておらず、オーバーライド設定はないと思う。ソースにハードコーディングされている。「プロキシ」アプリを書く代わりに、SSH トンネルが使える。例えば Bitcoin インスタンスが「example.com」で動いており SSH サーバーがあるなら、別のマシンからこうトンネルできる:
ssh -N example.com -L 9481:localhost:9481
これでローカルマシンのポート 9481 の RPC インターフェースが、暗号化された SSH セッション経由で Bitcoin RPC サーバーにトンネルされる。
JSON-RPC パスワードはクリアテキストで送信されるため(base64 エンコードだが実質クリアテキスト同等)、接続の暗号化が必要だ。
Markoの投稿(2010年9月27日 07:50 UTC)Wikiを読んだところ、インターフェースは127.0.0.1からのリクエストのみを受け付けるとのことだ。これは今も変わらないのか? オーバーライドする設定はあるか?
これは今も変わらず、オーバーライドする設定はないと思う。ソースにハードコードされている。「プロキシ」アプリを書く代わりに、SSHトンネルを使える。例えば、bitcoinインスタンスが「example.com」で動作しており、そのマシンでSSHサーバーが稼働していれば、別のマシンから以下のようにトンネルできる:
ssh -N example.com -L 9481:localhost:9481
これでローカルマシンのポート9481でRPCインターフェースを使えるようになり、暗号化されたSSHセッションを通じてbitcoin RPCサーバーが稼働しているマシンにトンネルされる。
接続を暗号化したいのは、JSON-RPCパスワードが平文で送信されるからだ(実際にはbase64エンコードされているが、基本的に平文と同等だ)。
自分で Bitcoin をコンパイルできるか? 最新の SVN には localhost だけでなく他のインターフェースにバインドするオプションがある。できなければ、次のバージョン(0.3.13)にそれが含まれるはずだ。
SVN に -rpcallowip= スイッチがあり、指定した IP アドレスから RPC にアクセスできる。ただし、MITM 攻撃に対しては安全ではない。
みなさん……フィードバックありがとう
SSH の方法は素晴らしい。ただし、マシンはすべて Windows なので、すべてにインストールする必要がある。プロキシアプリを書くよりはましだけど……
数週間前の -rpcallowip スイッチに関するエントリを見た。必要なら自分でコンパイルする。とはいえ、公式リリースの方がいい。次のバージョンがいつリリースされるか知っている人はいるだろうか?
MITM 攻撃の可能性については、公開するネットワークが信頼されていない場合にのみ問題になる。それとも見落としている他の影響があるだろうか?
自分の LAN 上で使用する場合、例えばある場所に複数のサーバーがあって互いに通信する場合は安全だ。
0.3.13 RC1 が Windows 版で利用可能だ:
http://www.bitcoin.org/download/bitcoin-0.3.13-rc1-win32-setup.exe