return to SSR TOP
return to Daemon Lab TOP

SMB over 暗号化回線


概要

Windowsのファイル共有の通信経路を、暗号化を行う方法を簡単に行う方法を示してみたいと思います。

なぜpptpじゃないの?

簡単にいって、pptpが使えない環境があるからです。
pptpにはGREというプロトコルが必要なので、TCPとUDPしか通らない環境だとつかえなかったりします。
それに暗号化レイヤーなど重要なレイヤーを、すぐ代替するのが出来ないのは気分的にいやげなので・・・(^^;

何故SMB(Windowsのファイル共有)?

SMBにはファイルを共有するだけの機能ではなく、windows同志を結びつける様々なサービスが有ります。
その関係でVSS(CVSみたいなもの)はwindowsのファイル共有が必須らしいです(よくしらないけど)
それ以前に、ちょっとしたファイル操作だけなら使い慣れたwindowsという話もありますし。

理屈

SMBはポート137-139及び445のUDP,TCPを利用して通信しています。 445は比較的新しいSMBのポートで、今までの137-139ポートの役割を全部ひきうける便利なポートらしいのですが、 でフォルトだとうまく転送出来ないので今回は445は使わないことにします。(レジストリの設定により 445を使う事ができるらしいです(未確認))
ここで、名前の解決はしないと割り切ると137-139のうち139/tcpだけを通せばいいので、それを暗号化して 転送するのがよさげです。そこで、多くの暗号化ソフトが利用出来るTCPのポートフォワードを利用します。
まとめ

手法

今回は、暗号化のレイヤーにZeBeDeeを利用する場合と、OpenSSHを利用する場合の2つの方法を説明します。 ただし、OpenSSH(3.4p1)の段階では、ポートフォワードに制限があるので、その制限をくぐりぬけるため stoneを利用します。

サーバ側の準備

今回は暗号化にZeBeDeeもしくはOpenSSHを用いて暗号化します
ZeBeDeeの場合
ZeBeDeeのインストールの仕方は解説サイトがあるので割愛します。 SMBはセキュリティ上やばいことが多いのでZeBeDeeの段階で認証をかけます。
ファイル名をserver.zbdとして。以下のようになります。
(ただし、下記は転送先に関する制限を加えていません。)
server true
detached true
udpmode false
include 'server.key'
checkidfile 'clients.id'
compression bzip2:9 # Allow maximum zlib compression
ちなみに、server.key及びclients.idは安全のためフルパスで書いた方が無難でしょう
server.keyの作成
zebedee -p >server.key
cliets.idについては、各ユーザからzebedeeの公開鍵を送ってもらい、1づつその内容をclients.idに 書きます。

クライアント側の準備

まず、139ポートをlistenする場所を作成します。(これが、接続先の仮想的なマシンのように振る舞います)

接続

接続するには、クライアント側に下記のようなファイルを作成します。
server        false
detached      false
serverhost    サーバのIPアドレス
tunnel        139:127.0.0.1:139
listenip      Loopback AdapterのIPアドレス
multiuse      true
compression   0
include       "c:\\〜〜〜\private.key"
	
上記のファイルをダブルクリックすれば接続完了になります。 private.keyは上記に示した通り作成し、登録した公開鍵に対応する秘密鍵を設定します。 その上でアドレスバーに「\\ループバックアダプタのIPアドレス」と打って下さい。

トラブルシュート