Secure POP via SSH mini-HOWTO Manish Singh, v1.0, 30 September 1998 高城 正平, 14 September 1999 この文書では ssh を用いた安全な POP 接続の設定方法について説明していま す。 ______________________________________________________________________ 目次 1. 導入 2. 基本的な使い方 2.1 ポート転送の設定 2.2 外部へのテスト 3. メーラーでやってみましょう 3.1 fetchmail の設定 3.2 自動化の方法 3.3 fetchmail を使わない場合 4. 付録 4.1 Disclaimer 4.2 著作権 4.3 感謝 ______________________________________________________________________ 1. 導入 通常の POP メールセッションは、その性質上安全ではありません。パスワー ドは誰からでも読まれるクリアテキストとしてネットワークを通過します。信 用できる環境やファイアウォールで守られた環境ならこのことはまったく問題 にならないかもしれません。しかし大学や普通の ISP のような公共のネット ワークならどこでも、簡単なネットワーク盗聴ソフトを使用して、あなたのパ スワードを見ることができてしまいます。しかも、多くの人が定期的にメール をチェックするように設定しているために、かなり頻繁にパスワードが送られ て、盗聴するのはさらに容易になっています。 アタッカーはこのパスワードを持っていれば、機密情報、あるいは私的な情報 がつまっているかもしれないあなたの E-mail アカウントにアクセスすること ができます。たいていこのパスワードはシェルアカウントのパスワードと同じ になっているので、さらに被害が大きくなる可能性があります。 POP 通信を行うときは常に暗号化されたチャネルを使うようにすれば、ネット ワーク越しのクリアテキストによる通信はなくなります。ssh の持つ多様な認 証方法をプレーンテキストの代わりに利用することもできます。この方法を用 いる真の意味は、メールを暗号化して送信することではなく (この時点で暗号 化しても無駄です。メールボックスに届く前に通ったネットワーク上ではおそ らく暗号化しないまま通ってしまっているからです。通信内容の暗号化は GNU Privacy Guard や PGP の仕事であって、ssh の仕事ではありません)、安全な 認証をすることにあります。 その他にも APOP, KPOP そして IMAP のように安全な認証を成し遂げる方法が ありますが、 ssh を用いる利点はそれが通常の POP の設定で動くということ です。何も特別なクライアントを使う必要はありません (すべてのメールクラ イアントがAPOP, KPOP, IMAP のようなプロトコルをサポートしている訳では ありません ) 。そしてサーバ側でもサポートは不要です (サーバで sshd が 動いていることを除けば) 。あなたのプロバイダはこれ以上安全なプロトコル を使うことができない、もしくは使う気がないかもしれません。その他にも ssh を用いることによってトラフィックを圧縮することもできます。低速な接 続のユーザにとっては一石二鳥という訳です。 (訳注 : この話題に関する情報は、SSH-FAQ の中にも見つけられます。日本語 訳は http://www.vacia.is.tohoku.ac.jp/%7Es-yamane/FAQ/ssh/ にあります ) 2. 基本的な使い方 この方法は ssh の基本的な機能である、ポート転送 (port forwarding) を 使っています。 このテーマについては、あなたのメールの設定の好みに依存してさまざまなバ リエーションがあります。とにかく ssh が必要です。次のところから入手で きます。 http://www.ssh.fi/ とそのミラーサイト。 RPM 版は ftp://ftp.replay.com/pub/crypto/ から。それから Debian 版は ftp://non- us.debian.org/debian-non-US/ から (そしてそれぞれのミラーサイトか ら)。(訳注 : 一般的にいって暗号関係のソフトウェアは国内からの入手の方 が問題が少ないように思います。 ftp://ftp.kyoto.wide.ad.jp/pub/security/ssh/ などから入手できることと 思います) 2.1. ポート転送の設定 ポート転送を始めるには次のコマンドを (訳注 : クライアント側で) 入力し てください。 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'' と表示する時間だけで、コネクションを設定するには 十分です。 2.2. 外部へのテスト ポート転送するためのコマンドの詳細について理解したなら、以下のコマンド を試してみてください。 $ 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 サーバ内のループバック インタフェース上だけです。 3. メーラーでやってみましょう このセクションでは ssh フォワードコネクションを使用するために POP クラ イアントソフトウェアを設定する方法を説明します。まず私の知っている POP を取り扱う最も柔軟なソフトウェアである fetchmail (ESR による優れたメー ルの取得と転送のユーティリティ) を見ていきます。 fetchmail は http://www.tuxedo.org/~esr/fetchmail/ でみつけることができます。 fetchmail に付いてくる優れた文書を読むことによって fetchmail は素晴し い働きをしてくれるでしょう。 3.1. 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 をバックグラウンドで動かす時 (私はそうしています) にはそれは少々都合が 良くありません。その場合は次のセクションに進みましょう。 3.2. 自動化の方法 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 スクリプトの中で自動的にやって います) 3.3. fetchmail を使わない場合 もしも fetchmail を使えなかったり、使いたくなかったりしたらどうなるで しょう。 Pine, Netscape やその他にも POP 機能を持ったクライアントがあ りますが、まずは fetchmail を使う事を考えましょう! その方が遥かに柔軟 ですし、メールクライアントにはこの種のことをたくさんやらせるべきではあ りません。 Pine と Netscape の両方ともローカルのメールシステムを使うよ うに設定できます。 しかし、あなたのクライアントが fetchmail のような preconnect の機能を 持たない場合には ssh のポート転送をあなたが接続するまでの間ずっとアク ティブにしておかないといけません。つまりそれはコネクションを保持してお くために sleep 100000000 のような設定を使うことを意味します。これはお そらくあなたのネットワークの管理者には歓迎されないでしょう。 次に、クライアントの中には (Netscape のように) ポート番号を 110 番に強 制的に設定してあるものもあります。その場合 root になって固定なポートか らポート転送する必要があります。これも悩ましいことです。でも動きます。 4. 付録 4.1. 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. この文書によって提供された情報の使い方があなたのメールサービスプロバイ ダーに予想される可能性は少ないでしょう。著者はネットワークサービスの悪 口をいったり、誤用するのを勧めませんし、情報目的でこの文書を提供しただ けです。もしあなたが疑問をもったままこれらの技術を使う場合にはメールプ ロバイダーとの合意の上であろうと、あらかじめ明らかにしておいてくださ い。 4.2. 著作権 This document is copyright (C) 1998 Manish Singh この文書は以下に著作権があります。(C) 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. この文書の中のすべての商標は、それぞれの所有者に属します。 4.3. 感謝 ssh のポート転送の方法について私に教えてくれた Seth David Schoen に感謝を捧げます。 (訳注 : 日本語訳をするのにあたっては以下の方々に大変お世話になりまし た。 o 早川さん o 土屋さん o 幸田さん o 岡本さん o Hiro Sugawara さん o 大西さん o 花高さん o 中野さん o 加茂さん o 武井さん o 佐野さん どうもありがとうございました。)