stone を使って tiarra を SSL 化する方法

マンガ名刺を心待ちにしている nagata (@handlename) です。

今回は IRC proxy の tiarra を SSL で使う方法を紹介したいと思います。

tiarra って?

サーバーに常駐するIRCクライアント兼サーバー、とでも言えばいいのでしょうか。 IRC使う人にとっては割と常識っぽいアプリケーションみたいです(ぼくは最近知りました)。

通常IRCは接続している間の発言しか見ることができません。

tiarra-ssl-no-tiarra.png

が、サーバーにクライアントを常駐させ、 そのクライアントに対してローカルのクライアントを接続することによって、 ローカルなクライアントから接続していない状態の発言も拾うことができるようになります。

tiarra-ssl-with-tiarra.png

SSL 接続したい!

便利な tiarra なのですが、いまのところ SSL 接続をサポートしていません。 SSL で接続できないと・・・

  • IRC の発言は平文でやりとりされるので、不安。
  • SSL 接続を要求する IRC サーバーに接続できない。

これはちょっと困る。

と、いうことで、今回は stone を使って tiarra の通信を SSL 化してみます。

必要なもの

せっかくなのでゼロの状態からセットアップする方法を説明します。 今回使うものはこちら。

  • tiarra を常駐させるためのサーバー
  • screen
  • stone
  • tiarra
  • ローカルなPC
  • LimeChat

本記事の説明では、サーバーは CentOS 5.5、ローカルPCは Mac OSX 10.6 を使用しています。

[server] screen のインストール

いろいろ多機能な screen ですが、 今回は tiarra その他を起動しっぱなしにするために使います。

$ yum install screen

~/.screenrc に設定を書けば、自分好みにカスタマイズできますが、 とりあえずデフォルトのままで使うことにします。

[server] stone のインストール

stone は任意のポートからポートへトンネルを作ることができるアプリケーションです。 これを使って tiarra がおこなう外部との通信を SSL を使ったものに変換します。

tiarra-ssl-tonnel.png

wget して make したのちに stone コマンドをパスの通ったディレクトリに放り込みます。

$ cd ~/src
$ wget http://www.gcd.org/sengoku/stone/stone-2.3e.tar.gz
$ tar zxvf stone-2.3e.tar.gz 
$ cd stone-2.3d-2.3.2.7
$ make linux-ssl
$ sudo cp stone /usr/local/bin/

[server] tiarra のインストール

SVN リポジトリからもらってきましょう。

$ cd ~/
$ svn co http://svn.coderepos.org/share/lang/perl/tiarra/trunk/ tiarra

場所はどこでもいいんですが、とりあえずホームディレクトリに置くことにします。

[local] LimeChat をインストール

Windows 版は http://limechat.net/ から、 Mac 版は http://limechat.net/mac/ja.html から、それぞれダウンロードできます。

諸々の設定

stone 経由で tiarra を使うための設定をしていきます。

screen を起動

まずは screen を起動しましょう。

$ screen -S tiarra

「tiarra という名前で screen を起動する」という意味です。 screen を起動している状態で、

$ screen -d

とすれば、現在行っている作業をそのままにして、screen を抜けることができます。 この状態であればサーバーからログアウトしても screen 上で行っていた処理は実行され続けます。

再び screen に戻る場合は次のようにします。

$ screen -r tiarra

もし -S でつけた名前がわからなくなってしまった場合は、

$ screen -ls

とすれば、名前をつけた screen の一覧が出てきます。

stone の設定

証明書の作成

SSL で通信を行うためには証明書が必要なので、これをつくります。

$ cd /etc/pki/tls/certs
$ sudo make stone.pem
Country Name (2 letter code) [GB]: JP
State or Province Name (full name) [Berkshire]: Kanagawa
Locality Name (eg, city) [Newbury]: Kamakura
Organization Name (eg, company) [My Company Ltd]: Private
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

トンネル作成

  • IRC サーバー ⇔ tiarra
  • tiarra ⇔ LimeChat

の、2つのトンネルを作る必要があります。 つくる前に screen で新しいウィンドウを作っておきます。 新しいウィンドウをつくるコマンドは、 Ctrl + a c (Ctrl + a を押したあとに c を押す) です。

$ su
# stone irc.example.com:6667/ssl 6669 &
# stone localhost:6667 6668/ssl &

ひとつは IRC サーバーと tiarra の間のトンネル。 6667 は IRC サーバーのポート(IRC サーバーに合わせて変更してください)、 6669 が tiarra から参照するIRC サーバーのポート(実際はローカルのポート)です。 irc.example.com は IRCサーバー名です。 実際のサーバーに合わせて変更してください。

もうひとつは tiarra と ローカルPCの間とトンネル。 6667 が tiarra が使うポート(あとで設定します)、 6668 がローカルPCがサーバーにつなぐときに使うポートです。

これで入り口と出口ができました。

注意点が2つ。

  • root で実行してください。sudo ではうまくいきませんでした。
  • はじめからバックグラウンドで実行してください(コマンドのあとに 「&」 をつける)。コマンドを実行してから Ctrl + z でバックグラウンドにするとうまくいきません。

トンネルを作ったら Ctrl + space ではじめのウィンドウに戻ります (Ctrl + space は「次のウィンドウに移動する」コマンドです)。

tiarra の設定

必要最低限の設定です。 サンプルの設定ファイルに詳しいコメントが書いてあるので、 その他の設定はコメントを見ながらやればできると思います。

まずはサンプル設定ファイルをコピーします。

$ cd ~/tiarra
$ cp sample.conf tiarra.conf

エディタで開いて設定します。

ニックネームの設定

IRC 上で表示される自分の名前です。 62行目付近にあります。

nick: handlename
user: handlename
name: NAGATA Hiroaki

それぞれ自分に合わせた名前に設定してください。

パスワードの設定

ローカルPCから接続する際に必要なパスワードを設定します。 まずは tiarra コマンドでパスワードをエンコードします。

$ ./tiarra --make-password
Tiarra encrypts your raw password to use it for config file.

Please enter raw password: hogehoge

Q0.IC3vB1d5Oc is your encoded password.
Use this for the general/tiarra-password entry.

上の例で言うと、

Q0.IC3vB1d5Oc

がエンコードされたパスワードです。 これを設定ファイルの92行目付近にある tiarra-password に設定します。

tiarra-password: Q0.IC3vB1d5Oc

IRCサーバーの設定

まずは IRCサーバーの名前を設定します。 227行目付近の name がそれです。

name: ircnet
name: 2ch
#name: freenode                                                                                            
#name: ustream
name: ssltest # 追加

説明のために ssltest という名前を追加してみました。 実際にはSSL接続したいサーバーの名前を書いてください。 この部分は単なる名前なので、何でもいいです。 適当にわかりやすい名前をつけておきましょう。

次に、サーバーに接続するための設定をします。

316行目付近に 2ch という設定があると思います。 その下に先ほど名前をつけた ssltest の設定を追記します。

ssltest {
    server: localhost
    port: 6669
}

server は本来IRCサーバーの名前を書く部分ですが、 今回は stone で作ったトンネルを経由して接続するので localhost と記入しています。 同じく port にはトンネルのこちら側のポートを指定しておきます。

以上で設定は終了です。

起動する

tiarra を起動しましょう。

./tiarra &

screen を抜ける

サーバー上での設定が終わったので、

$ screen -d

として screen を抜けます。 必要がなければサーバーをログアウトしてしまいましょう。

LimeChat で接続

Mac 版の LimeChat を使って説明します。 起動したら、メニューの 「Server」 → 「Server Properties …」 からサーバー設定を開きます。

こんな感じで設定しましょう。

tiarra-ssl-lime.png

最後に、「Server」 → 「Connect」 とすれば SSL を使いつつ tiarra を経由して IRC サーバーに接続できるはずです。

おわり

これでローカルのクライアントから接続していなくても IRCが追える環境ができました。 いままで見逃していた情報が拾えるようになるってすばらしいですね!

なお、本記事を作成するにあたり、以下のサイトを参考にさせていただきました。 ありがとうございます。

カヤックではおいしい情報を見逃さない技術者も募集しています!