Secure POP via SSH mini-HOWTO Manish Singh, v1.0, 30 September 1998 高城 正平, 14 September 1999 この文書では ssh を用いた安全な POP 接続の設定方法について説明しています。 導入

通常の POP メールセッションは、その性質上安全ではありません。パスワード は誰からでも読まれるクリアテキストとしてネットワークを通過します。信用で きる環境やファイアウォールで守られた環境ならこのことはまったく問題になら ないかもしれません。しかし大学や普通の ISP のような公共のネットワークな らどこでも、簡単なネットワーク盗聴ソフトを使用して、あなたのパスワードを 見ることができてしまいます。しかも、多くの人が定期的にメールをチェックす るように設定しているために、かなり頻繁にパスワードが送られて、盗聴するの はさらに容易になっています。 アタッカーはこのパスワードを持っていれば、機密情報、あるいは私的な情報が つまっているかもしれないあなたの E-mail アカウントにアクセスすることがで きます。たいていこのパスワードはシェルアカウントのパスワードと同じになっ ているので、さらに被害が大きくなる可能性があります。 POP 通信を行うときは常に暗号化されたチャネルを使うようにすれば、ネットワー ク越しのクリアテキストによる通信はなくなります。ssh の持つ多様 な認証方法をプレーンテキストの代わりに利用することもできます。この方法を 用いる真の意味は、メールを暗号化して送信することではなく (この時点で暗号 化しても無駄です。メールボックスに届く前に通ったネットワーク上ではおそら く暗号化しないまま通ってしまっているからです。通信内容の暗号化は GNU Privacy Guard や PGP の仕事であって、ssh の仕事ではありません)、安全な認 証をすることにあります。 その他にも APOP, KPOP そして IMAP のように安全な認証を成し遂げる方法があ りますが、 ssh を用いる利点はそれが通常の POP の設定で動くということです。 何も特別なクライアントを使う必要はありません (すべてのメールクライアント がAPOP, KPOP, IMAP のようなプロトコルをサポートしている訳ではありません ) 。そしてサーバ側でもサポートは不要です (サーバで sshd が動いていること を除けば) 。あなたのプロバイダはこれ以上安全なプロトコルを使うことができ ない、もしくは使う気がないかもしれません。その他にも ssh を用いることに よってトラフィックを圧縮することもできます。低速な接続のユーザにとっては 一石二鳥という訳です。 (訳注 : この話題に関する情報は、SSH-FAQ の中にも見つけられます。日本語訳 は にあります ) 基本的な使い方

この方法は ssh の基本的な機能である、ポート転送 (port forwarding) を使っています。 このテーマについては、あなたのメールの設定の好みに依存してさまざまなバリ エーションがあります。とにかく ssh が必要です。次のところから入手できま す。 とそのミラーサイト。 RPM 版は から。それから Debian 版は から (そしてそれぞれのミラーサイトから)。(訳注 : 一般的にいって暗号関 係のソフトウェアは国内からの入手の方が問題が少ないように思います。 などから入 手できることと思います) ポート転送の設定

ポート転送を始めるには次のコマンドを (訳注 : クライアント側で) 入力して ください。 ssh -C -f popserver -L 11110:popserver:110 sleep 5 さあ手にとってじっくりとコマンドを眺めていきましょう。 ssh すべてをかなえてくれる魔法のプログラム ssh のバイナリ本体です。 -C これはデータの圧縮機能を有効にします。これを使うかどうかはお任せしますが、 とりわけダイヤルアップのユーザは重宝するでしょう。 -f 一度 ssh が認証し、ポート転送を確立すると、他のプログラムを動かせるよう にバックグラウンドにフォークします。私たちは ssh のポート転送の機能を使 いますので、 tty へのアタッチは必要ありません。 popserver これから接続する POP サーバを指定します。 -L 11110:popserver:110 ローカルポートの 11110 をリモートサーバ popserver のポート 110 に転送します。一般ユーザでも転送できるように大きいローカルポート (11110) を使用しています。(訳注 : 一般的に POP サーバのポート番号は 110 番です) sleep 5 ssh は自分自身をバックグラウンドにフォークした後にコマンドを実行します。 sleep はメールクライアントがサーバとの接続を確立するのに十分な 時間を稼ぐためのものです。これには 5 秒程もあれば十分でしょう。 他にも必要とあれば、適切なオプションを付け加えてください。例えば POP サー バとローカルでユーザ名が異なる場合には、ユーザ名の設定が必要です。 この為にはリモートサーバ popserver で sshd が動いている必要 があります。しかし、そこにあなたのシェルアカウントは必要ありません。 ``You cannot telnet here'' と表示する時間だけで、コネクションを設定する には十分です。 外部へのテスト

ポート転送するためのコマンドの詳細について理解したなら、以下のコマンドを 試してみてください。 $ ssh -C -f msingh@popserver -L 11110:popserver:110 sleep 1000 popserver は POP サーバの名前です。 私のローカルマシン上でのユー ザ名は manish なので、私は明示的に msingh と指定する必 要があります。(ローカルマシン上のユーザー名がリモートマシン上のユーザ名 と同じなら msingh@ の部分は必要ありません) するとこう表示されます: msingh@popserver's password: そして自分の POP パスワードを入力します (あなたのシェルのパスワードと POP のパスワードは違うかもしれませんが、その場合シェルのパスワードを使っ てください)。できましたね。それではこれもできるはずです。 $ telnet localhost 11110 こんな感じに表示されればいいでしょう: QUALCOMM POP v3.33 ready. やりました。データは暗号化されてネットワークをこえて送られました。クリア テキストでの通信は私のローカルマシン内と POP サーバ内のループバックイン タフェース上だけです。 メーラーでやってみましょう

このセクションでは ssh フォワードコネクションを使用するために POP クライ アントソフトウェアを設定する方法を説明します。まず私の知っている POP を 取り扱う最も柔軟なソフトウェアである fetchmail (ESR による優れたメールの 取得と転送のユーティリティ) を見ていきます。 fetchmail は でみつけることができます。 fetchmail に付いてくる優れた文書を読むことに よって fetchmail は素晴しい働きをしてくれるでしょう。 fetchmail の設定

私は .fetchmailrc を以下のように設定しています。 defaults user msingh is manish no rewrite poll localhost with protocol pop3 and port 11110: preconnect "ssh -C -f msingh@popserver -L 11110:popserver:110 sleep 5" password foobar; とっても単純でしょう? fetchmail には多くのコマンドがありますが、重要な部 分は preconnect の行と、poll のオプションです。 私たちは POP サーバに直接的には接続しません。代わりに localhost の 11110 番のポートに接続しています。preconnect の部分は fetchmail が実行されるたびに 5 秒間コネクションを張っておくということを 表わしています。fetchmail はこの時間を使って自分のコネクションを張ります。 残りはfetchmail 自身の処理です。 fetchmail を起動するたびに、ssh のパスワードを要求されます。fetchmail を バックグラウンドで動かす時 (私はそうしています) にはそれは少々都合が良く ありません。その場合は次のセクションに進みましょう。 自動化の方法

ssh ではさまざまな方法で認証を行えます。そのうちの一つが RSA 公開鍵暗号 です。 ssh-keygen を用いることによってあなたのアカウント用の鍵 を作りだすことができます。鍵にはパスフレーズを設定することもできますが、 空のままにすることもできます。あなたがローカルで用いるアカウントがどのぐ らい安全だと思うかによって、パスフレーズが必要かどうかが決まります。 もしあなたのマシンが安全だと思うなら、パスフレーズ無しでも構わないでしょ う。その場合は .fetchmailrc は単なる fetchmail の起動だけに使わ れます。fetchmail をデーモンとして動かしておけば、ダイアルアップしたとき に自動的にメールは取り込まれます。それでおしまいです。(訳注 : fetchmail -d でデーモンとして動かせます。詳しくは fetchmail(1) の man ペー ジを参照して下さい。 ただし、もしパスフレーズが必要だと思った場合には、事態はいくぶん複雑にな ります。ssh は agent の管理下で実行することができます。agent は 鍵を登録し、ssh からのあらゆるコネクションを認証します。それで、 getmail.sh というスクリプトを用意しました。 #!/bin/sh ssh-add while true; do fetchmail --syslog --invisible; sleep 5m; done ダイアルアップしたときに、次のように打ちます。 $ ssh-agent getmail.sh パスフレーズを一度要求されますが、その後は 5 分毎にメールを確認してくれ ます。ダイアルアップ接続を切断するときは、ssh-agent を終了させます。(私 の場合は自分の ip-up と ip-down スクリプトの中で自動的にやっています) fetchmail を使わない場合

もしも fetchmail を使えなかったり、使いたくなかったりしたらどうなるでしょ う。 Pine, Netscape やその他にも POP 機能を持ったクライアントがあります が、まずは fetchmail を使う事を考えましょう! その方が遥かに柔軟ですし、 メールクライアントにはこの種のことをたくさんやらせるべきではありません。 Pine と Netscape の両方ともローカルのメールシステムを使うように設定でき ます。 しかし、あなたのクライアントが fetchmail のような preconnect の機能を持 たない場合には ssh のポート転送をあなたが接続するまでの間ずっとアクティ ブにしておかないといけません。つまりそれはコネクションを保持しておくため に sleep 100000000 のような設定を使うことを意味します。これはお そらくあなたのネットワークの管理者には歓迎されないでしょう。 次に、クライアントの中には (Netscape のように) ポート番号を 110 番に強制 的に設定してあるものもあります。その場合 root になって固定なポートからポー ト転送する必要があります。これも悩ましいことです。でも動きます。 付録

Disclaimer

There is no guarantee that this document lives up to its intended purpose. This is simply provided as a free resource. As such, the author of the information provided within cannot make any guarentee that the information is even accurate. Use at your own risk. この文書が意図した目的に沿っているという保証はありません。そういうものと して、作者はここで提供した情報についていかなる保証も、情報が正しいという 保証すら、できません。あなた自身の責任で使用してください。 Cryptographic software such as ssh may be subject to certain restrictions, depending on where you live. In some countries, you must have a license to use such software. If you are unsure of your local laws, please consult someone who is familiar with your situation for more information. ssh のような暗号化ソフトウェアはあなたの居住している場所によっては特定の 制限を受けるかもしれません。いくつかの国ではそのようなソフトウェアを使う ためには許可が必要です。自分では判断がつかない場合には誰かあなたの状況を よく知っている詳しい人に相談してください。 The use of the information provided in this document is most likely not anticipated by your mail service provider. The author does not encourage the abuse and misuse of network services, and provides this document for informational purposes only. If you are in doubt about whether the use of these techniques falls within the service agreement of your mail provider, please clear that up beforehand. この文書によって提供された情報の使い方があなたのメールサービスプロバイダー に予想される可能性は少ないでしょう。著者はネットワークサービスの悪口をいっ たり、誤用するのを勧めませんし、情報目的でこの文書を提供しただけです。も しあなたが疑問をもったままこれらの技術を使う場合にはメールプロバイダーと の合意の上であろうと、あらかじめ明らかにしておいてください。 著作権

This document is copyright © 1998 Manish Singh この文書は以下に著作権があります。© 1998 Manish Singh Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. 著作権表示とこの許可告知を付けることによって、この文書の文字通りのコピー、 配布を許可します。 Permission is granted to copy and distribute modified versions of this document under the conditions for verbatim copying, provided that this copyright notice is included exactly as in the original, and that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. この著作権表示を完全に原文のまま含み、同様な許可告知の下で配布される場合 この文書の修正版の配布を文字通りのコピーと同様の条件で許可します。 Permission is granted to copy and distribute translations of this document into another language, under the above conditions for modified versions. この文書を他の言語に翻訳し、配布することを上記の修正版と同様の条件で許可 します。 Commercial redistribution is allowed and encouraged; however, the author would like to be notified of any such distributions. 商用の再配布は奨励しますが、そのような配布をする場合には作者に連絡しても らえると嬉しいです。 All trademarks used in this document are acknowledged as being owned by their respective owners. この文書の中のすべての商標は、それぞれの所有者に属します。 感謝

ssh のポート転送の方法について私に教えてくれた Seth David Schoen に感謝を捧げます。 (訳注 : 日本語訳をするのにあたっては以下の方々に大変お世話になりました。 早川さん 土屋さん 幸田さん 岡本さん Hiro Sugawara さん 大西さん 花高さん 中野さん 加茂さん 武井さん 佐野さん どうもありがとうございました。)