このページは 2002年の 12/5、 12/12 の日記を まとめて作成。
はじめに
SSH に代わる汎用 secure proxy をとして
BJORB がある。
この文書では Linux (VineLinux 2.5) で BJORB をインストール & 設定する方法に付いて述べる。
(最後の SOCKS5 の設定方法は管理人の備忘録なのです。)
1. BJORB インストール
BJORB は 0.5.7a が最新のようだ。
ソースコード (bjorb-0.5.7a.tar.gz) を展開すると
bjorb-0.5.7a というディレクトリができるので、
以下の手順を踏めば OK だった。
% cd bjorb-0.5.7a/src % ./configure --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var --with-ssltop=/usr % make % su # make certificate # make install-<platform名> # make install
<platform名> には準備されたプラットフォーム名が入る。
しかし環境によっては、
ソースコード上の問題でコンパイルエラーが発生したり、
インストーラ箇所がおかしかったりするので、
目視と手作業による修正が必要である。
まず、 当方の Vine Linux 2.5 + gcc version 2.95.3 (20010315) では Config.cc コンパイル中にエラーが発生する。 これを以下のように修正する
diff Config.cc.orig Config.cc.modifed 336c336 < csoc = ::accept(soc_accept, (SOCKADDR *)&sa_client, (int *)&addr_len); --- > csoc = ::accept(soc_accept, (SOCKADDR *)&sa_client, (socklen_t*)&addr_len);
また configure の各種指定が 設定ファイル等に正しく反映されないようだ。 以下に従ってソース等を修正する必要がある。
ファイル | 註釈 |
bjorb 本体 | configureで指定した sbindirは無視され、
prefix/sbinに bjorb は移動させられる。
デフォルトは /usr/local/sbin/ の下。 これを修正するには Makefile 中の sbindir の指定を変更する。 |
設定ファイル(bjorb.conf) |
configureで指定した sysconfdirは無視され、
prefix/etcに bjorb は移動させられる。
デフォルトは /usr/local/etc の下。 変更するためには、 コンパイル前に common.h 中の CONFIG_FILE_SEARCH_PATH を書き変える必要がある。 また、 インストールによって設定サンプル(bjorb.conf.sample) がコピーされる 位置を合わせるには、 Makefile 中の etcdir を合わせる必要がある。 |
SSL 認証書 (bjorb.pem) |
make certificate時に
設定ファイルと同じ位置にできる。 設定ファイルによって変更可能。 |
とりあえず以上でインストールで終り。
2. BJORB の設定
まずローカルホストからリモートホストへの telnet 通信を暗号化してみる。
ローカルホストのポート 23 番を待ち受けポートとし
(ローカルに telnet サーバーは立てない)、
そのポートへの接続は
リモートホストの 9023番ポートへ転送される。
この際、ローカルホスト ― リモートホスト間の通信は SSLによって暗号化される。
リモートホストは 9023番で受けた SSL 通信を復号して、
自身の telnet サーバ(リモートホストの 23 番で待機)へ
接続することにする。
クライアント側の設定 | サーバー側の設定 | |
---|---|---|
# runsocks bjorb -f client.conf |
# bjorb -f server.conf |
|
log_level 1 access_log /var/log/bjorb.log error_log /var/log/bjorb-err.log do_fork true entry "MyClientSetteing" { accept 23 connect remote-host:9023 with SSL } |
log_level 1 access_log /var/log/bjorb.log error_log /var/log/bjorb-err.log do_fork true CA_cert_file /etc/bjorb.pem CA_cert_path /etc/CA max_connection 100 entry "MyServerSetteing" { # service_type "SSL Telnet" # (ここはコメントアウト) accept 9023 with SSL connect 127.0.0.1:23 } |
これでローカルホストの 23 番ポートは、 リモートホストの telnet サーバーとつながり、 途中の通信も暗号化されるはずなのである。
BJORB を SSL Telnet サーバーとして使いたい場合には、 service_type に "SSL Telnet" を指定するようだが、 ここでは次に汎用のプロトコルを通すので無指定にしておく。
3. SOCKS5 の設定
ローカルホスト側が LAN の内側にあり
外部と SOCKS5 で繋がっているとする。
この SOCKS5 の中を BJORB のチャンネルを通すには、
SOCKS5 の runsocks コマンドを用いればよい。
runsocks は、これを使って起動した子プロセスの socket 通信を
socks 経由の通信に置き換えることができるコマンドである。
bjorb コマンドが /usr/loccal/sbin に置かれている場合、 ローカル側の bjorb を runsocks 上で立ち上げればよい。
> runsocks /usr/local/sbin/bjorb >/dev/null 2>&1 &
ホスト毎に通常の socket 通信を行うか socks 経由で通信を行うかは、
/etc/libsocks5.conf で指定可能。
ローカルホストが 10.0.0.0/8 のネットワーク内にあり、
この中の端末とは通常の socket 経由でのやりとりを行い、
それ以外の IP では SOCKS5 サーバー socks.hoge.moge.jp を
経由させるには以下のようになる。
noproxy - 10. - - socks5 - - - - socks.hoge.moge.jp
参考
yamamoto 氏のページ POP,IMAP の SSL による暗号化