The Linux Electronic Mail Administrator HOWTO Guylhem Aznar v3.1, July 1999 The Linux JF Project v3.1j, 1 January 2000 この文書では、Linux における電子メール (e-mail) の設定・管理・配送につ いて説明します。この文書は主に管理者向けであり、ユーザ向けではありませ ん。 (ユーザに関連する話題やユーザエージェントに関する情報については、 Mail-User's-HOWTO をご覧ください。) 電子メールを使ってローカルで通信し たり、リモートサイトと通信したりするつもりなら、この文書を読みましょ う。自分のシステムの他のユーザや、他のサイトと電子メールの交換をしない なら、この文書は多分読まなくても良いでしょう。 ______________________________________________________________________ 目次 1. 序文、著作権表示、放棄声明 1.1 電子メールとスパム避け 1.2 目的 1.3 最新版の入手方法 1.4 フィードバック 1.5 著作権表示 1.6 保証の限定について 2. 他の情報源 2.1 Mail User's HOWTO 2.2 ネットニュース 2.3 メーリングリスト 2.4 LDP の他の文書 2.5 書籍 3. 電子メールはどのように動作するか 3.1 常時インターネットに接続しているマシン間のメール 3.2 通知プログラム 3.3 インターネットに常時接続していないマシンへのメール 3.4 リモートメールとリモートメールのプロトコル 3.5 メールボックスのフォーマット 4. 必要なもの 4.1 ハードウェア 5. メール配送エージェントを選択する 5.1 sendmail 5.2 smail v3.2 5.3 qmail 5.4 exim 6. 配送ソフトウェアのインストール 6.1 Qmail v1.03 6.1.1 qmail の入手 6.1.2 ソースの展開 6.1.3 コンパイルの準備 6.1.4 qmail の設定 6.1.4.1 defaultdomain, me, plusdomain 6.1.4.2 locals, rcpthosts 6.1.4.3 virtualdomains 6.1.5 qmail のテスト 6.1.6 他の MTA を削除する 6.1.7 まあこんなところでしょう、みなさん! 6.2 Smail v3.1 6.2.1 smail の設定 6.2.1.1 "config" ファイル 6.2.1.2 "directors" ファイル 6.2.1.3 "fidopaths" ファイル 6.2.1.4 "routers" ファイル 6.2.1.5 "transports" ファイル 6.2.1.6 "maps/" ディレクトリ 6.2.2 他の役立つ設定例 6.2.3 inetd の再起動 6.2.4 Smail を SMTP で使用する 6.3 時代遅れになってしまった章: Sendmail+IDA 6.3.1 ソースからのインストール 6.3.2 sendmail.m4 ファイル 6.3.3 ローカルメイラの設定 6.3.4 sendmail+IDA の dbm テーブル 6.3.5 本当に必要なのはどの項目か。 6.4 Sendmail 8.x 6.4.1 8.7.x 用 mc ファイルの例 6.4.2 Sendmail v8 について少々 6.4.3 CF パッケージ (訳者追記) 6.5 ローカル配信エージェント 7. ユーザエージェントの管理 7.1 Mutt 7.2 Elm 7.3 Mailx 7.4 旧 Mail HOWTO 日本語版から 7.4.1 metamail 7.4.2 VM (View Mail) 8. リモートメールの取り扱い 8.1 歴史 8.2 メールの取得 8.3 メールの送信 8.4 メールを読む 8.5 テスト 8.6 利用する 9. 謝辞 10. 日本語訳について ______________________________________________________________________ 1. 序文、著作権表示、放棄声明 1.1. 電子メールとスパム避け この文書に書かれている人にメールを送るには、電子メールアドレスの "at" の部分を "@" に置き換えてください。 この決まりは人間にとっては簡単ですが、スパムを出す連中が使っているメー ルアドレス収集プログラムにとっては簡単ではありません。したがって、この 決まりはこの文書に貢献してくださった素晴らしい方々をスパムから守るのに 役立ちます。 1.2. 目的 この文書の目的は、Linux での電子メール用ソフトウェアの利用に関する、 「よく聞かれる質問 (FAQ, Frequent Asked Question)」の定義に該当する質 問・コメントに答えることです。この文書は Linux 一般向けに書かれていま すが、ディストリビューションとしては Debian と RedHat を特に想定してい ます。 1.3. 最新版の入手方法 この文書の(英語の)最新版は定期的に comp.os.linux.announce, comp.answers, news.answers に投稿されます。また sunsite.unc.edu の /pub/Linux/docs/HOWTO ディレクトリをアーカイブしている各地の anonymous FTP サイトからも取得できます。 さらに、この文書はおそらく Linux の WWW ホームページ http://sunsite.unc.edu/mdw/linux.html からも入手できるはずです。 (訳注: 最新の日本語版は ftp://ftp.linet.gr.jp/pub/JF/ をはじめとする JF の ftp サイトや World Wide Web の http://www.linux.or.jp/JF/ に登録 されます。) 1.4. フィードバック この文書に関するメールでの意見には、肯定的であれ否定的であれ、どんなも のにも関心があります。間違いや明らかな漏れがあれば、私にお知らせくださ い。 (訳注: 日本語版に関する意見は JF プロジェクトまでお知らせください。) 私は、受け取ったメールは全て読みますが、全部に返事を出すわけではありま せん。改善の要望については、空いている時間、要望のメリット、その日の血 圧 :-) などを組み合わせて考慮・対応します。 筋の通らない批判は黙って /dev/null に葬りますので、ざわざ送らなくても 結構です。 文書の具体的なフォーマットに関するご意見は、HOWTO のまとめ役である Greg Hankins (gregh at sunsite.unc.edu) さんに送ってください。 1.5. 著作権表示 Mail-Administrator HOWTO の著作権は Guylhem Aznar にあります (copyrighted (c) 1998 Guylhem Aznar)。配布は LDP ライセンスに従って行 うことができます。疑問点があれば、Linux HOWTO のまとめ役のアドレスであ る linux-howto at sunsite.unc.edu 宛に連絡してください。 1.6. 保証の限定について 当然ながら、この文書の内容に対しては一切の責任を取りません。本文書に書 かれている概念や例、その他の内容は全てあなたの責任で利用してください。 2. 他の情報源 2.1. Mail User's HOWTO Mail User's HOWTO という文書があり、こちらはユーザに関係する話題を対象 にしています。 この文書は現在、Eric S. Raymond さんが管理しており、WWW を使って で読めるはずで す。 (訳注: この文書の日本語訳は にあります。) 2.2. ネットニュース Linux でメールソフトウェアの設定・実行を行うにあたっては、 Linux に特 有な事情は (現在はもう) ありません。したがって、一般的なメール関連の質 問は comp.os.linux.* ニュースグループには投稿しないほうがよいでしょ う。 本当に Linux に特化した話題でない限り (例えば「Debian 1.2 の sendmail はどんなオプションでコンパイルされていますか?」とか「RedHat 5.0 の smail を実行すると落ちてしまうのですが」みたいなものでなければ)。 comp.os.linux 階層には投稿しないでください。 繰り返します。 メールに関連した話題を comp.os.linux 階層にポストする理由は、もうほと んどありません。 comp.mail.* 階層下にあるニュースグループで、あなたの 質問の全てを扱えるはずです。 Linux 固有でない質問を comp.os.linux.* に投稿することは、間違った場所 で助けを求めていることになります。メールの達人は前述のような場所にいま すし、一般には Linux を使っていません。 Linux 階層に Linux 固有でない質問を投稿することは、あなたと他の全ての 人達にとって時間の無駄であり、質問への答を得るのも遅れることが多いで しょう。 適切な場所を以下に示します: comp.mail.elm ELM メールシステム comp.mail.mh MH(Rand Message Handling system)について comp.mail.mime MIME (Multipurpose Internet Mail Extensions)について comp.mail.misc コンピュータのメールに関する一般的な議論 comp.mail.multi-media マルチメディアメールについて comp.mail.mush MUSH(Mail User's Shell) について comp.mail.sendmail BSD sendmail エージェントについて comp.mail.smail smail メールエージェントについて comp.mail.uucp UUCP 環境におけるメールについて 訳注: 日本語で議論されているグループには以下のようなものがあります。 fj.mail fj.mail. fj.mail.reader fj.mail.system fj.mail.system.sendmail fj.mail.system.qmail 2.3. メーリングリスト sendmail, smail, qmail に関するメーリングリストはたくさんあります。 メーリングリストのアドレスは、 /usr/doc/ 以下にある、お使いのメール配 送エージェントのディレクトリを探せば見つかるでしょう。 2.4. LDP の他の文書 たくさんの素晴らしい情報が、他の Linux HOWTO 文書や Linux Documentation Project から提供されています。 特に以下の文書を見るとよいでしょう: o お使いのコンピュータの /usr/doc/ ディレクトリ :-) o Linux Networking Administrators' Guide o Mail Users HOWTO o Serial Communications HOWTO o Ethernet HOWTO o UUCP 経由でメールを受け取っているならば UUCP HOWTO 2.5. 書籍 以下に示すのは役に立つ本ですが、全てを網羅できていません: o "Managing UUCP and USENET". O'Reilly and Associates 発行。筆者の意 見では、この本は USENET サイトを運営するために使われるプログラムや プロトコルを解説しており、市販の本の中では最高だと思います。 o "Unix Communications". The Waite Group 発行。必要な部品全て (及び それ以上) がうまく解説されており、これらを組み合わせる方法も書かれ ています。 o "Sendmail". O'Reilly and Associates 発行。この本は sendmail-v8 と sendmail+IDA の参考文献としては決定版でしょう。苦しむことなく sendmail を理解しようと考えている人には「必携の書」です。 (訳注: 第二版の日本語版がオライリー・ジャパンより出版されています。 「sendmail システム管理」と「sendmail リファレンス」の 2 分冊になっ ています。) o "The Internet Complete Reference". Osborne 発行。この本はインター ネットで利用できる各種サービスを説明している優れた参考書であり、 ニュースやメールなどを含むインターネットのリソースについての優れた 情報源です。 o "The Linux Networking Administrators' Guide". Linux Documentation Project の Olaf Kirch 氏が著者です。この本はネットワークから入手で きますし、 (少なくとも) O'Reilly と SSC からも出版されています。 これは優れた「なんでも屋さん」で、 Unix のネットワークに関すること なら、あなたが必要と思ったことはなんでもこの本で学べるでしょう。 (訳注: オライリー・ジャパンより「Linux ネットワーク管理」というタイ トルで日本語版が出ています。) 3. 電子メールはどのように動作するか さて、2 人の人間が電子メールを使ってやりとりするときに通常起こる情報の 流れを説明しましょう。 Alice (彼女のマシンは wonderland.com) が Bob (彼のマシンは dobbs.com) にメールを送ろうとしているものとします。どち らのマシンもインターネットに繋がっています。 インターネットのメールは 2 つの部分からできていることを知っておきま しょう。メールヘッダとメール本文です。これらは空行で区切られます。メー ルヘッダにはメールの差出人と宛先、ユーザが指定したサブジェクト行、メー ルが送られた日付、その他にも必要な情報が含まれています。メール本文は メッセージの実際の内容です。例を以下に示します: From: "Alice" Message-Id: <199711131704.MAA18447@wonderland.com> Subject: 私の白うさぎを見なかった? To: bob@dobbs.org (Bob) Date: Thu, 13 Nov 1997 12:04:05 -0500 (EST) Content-Type: text とっても心配なの。穴に落ちてしまったのかもしれないわ。 -- >>alice>> インターネットメールのヘッダの配置と意味は、 RFC822 というインターネット標準で定義 されています。 3.1. 常時インターネットに接続しているマシン間のメール 全体の処理を図示します。全ての処理と用語については後述します。 ______________________________________________________________________ +---------+ +-------+ +-------+ 入力 | 送信側 | 呼出 |送信側 | | Alice |--------->| MUA |--------->| MTA |::::>:::: +-------+ | | | | :: 送信側 +---------+ +-------+ :: の :: マシン ....................................................................... SMTP :: ::::::::::::::::::::::::::::<:::::::::::::::::::::::::::: :: :: +---------+ +-----+ +--------+ :: | 受信側 | 呼出 | | 配送 | Bob の | ::::>| MTA |--------->| LDA |===============>| メール | 受信側 | | | | |ボックス| の +---------+ +-----+ +--------+ マシン | | | | +----------------<-------------+ | | | +----------+ +-------+ | | Bob の | |Bob の |<----------+ |通知ソフト| | MUA | +----------+ +-------+ | | | +-----+ | +----->| Bob |<----+ +-----+ ______________________________________________________________________ メールを送るために、 Alice はメールユーザエージェント (mail user agent, 略して MUA とも呼ばれます) と呼ばれるプログラムを呼び出します。 MUA はユーザが「メーラ」と考えているものです。このプログラムはメッセー ジ作成の補助を行います。普通はユーザが選んでおいたテキストエディタを呼 び出すことになります。 MUA の「送信」ボタンを押すと、ユーザが処理する 部分は終わりです。有名な MUA についてはこの HOWTO の後の部分でざっと説 明します。 Alice が使った MUA は、 Alice が書いたメッセージを即座にメール配送エー ジェント (mail transport agent, または MTA) と呼ばれるプログラムに渡し ます。このプログラムは普通は sendmail でしょうが、これ以外の MTA も一 般的になりつつあるので、将来は Linux ディストリビューションに入るかも しれません。 MTA についても、この HOWTO の後の部分でざっと説明します。 MTA の仕事は、メールを Bob のマシンの MTA に渡すことです。 Alice のマ シンの MTA は To: ヘッダを解析し、 Bob のアドレスの右側にある dobbs.com を見て、 Bob のマシンを決定します。 Alice のマシンの MTA は、このアドレスを使って Bob のマシンへのインターネット接続をオープン します。この接続を確立する機構は、本文書とは全く関係がない話題です。こ こでは、この接続の目的: Alice の MTA からテキスト形式のコマンドを Bob のマシンに送信すること、そのコマンドに対する応答を受け取ること、を理解 していれば十分です。 MTA のコマンドはシェルには送られません。 MTA のコマンドは Alice のマシ ンのサービスポートに送られます。サービスポートとは待ち合わせ場所のよう なもので、インターネットサービス用のプログラムがやってくるリクエストを 監視しているポートです。サービスポートには番号が振られており、 Bob の マシンにメールを渡すには 25 番ポートに話しかければ良いことを Alice の マシンは知っています。 Bob のマシンの 25 番ポートでは、コマンドを待っている MTA がいます (た ぶん別の sendmail でしょう)。 Alice の MTA は Simple Mail Transfer Protocol (または SMTP) を使って Bob の MTA とやりとりを行います。 SMTP でどういったやりとりが行われるかを以下に示します。 Alice のマシンが 送った行は S: で示し、 Bob のマシンからの応答は R: で示します: S: MAIL FROM: R: 250 OK S: RCPT TO: R: 250 OK S: DATA R: 354 Start mail input; end with . S: From: "Alice" S: Message-Id: <199711131704.MAA18447@wonderland.com> S: Subject: 私の白うさぎを見なかった? S: To: bob@dobbs.org (Bob) S: Date: Thu, 13 Nov 1997 12:04:05 -0500 (EST) S: Content-Type: text S: S: とっても心配なの。穴に落ちてしまったのかもしれないわ。 S: -- S: >>alice>> S: . R: 250 OK (訳注: Subject や本文で日本語を扱うにはそれなりの注意が必要になります が、 MUA 側の問題なのでここでは割愛します :-) 通常 SMTP コマンドはテキスト行 1 行であり、応答も同じく 1 行です。ただ し DATA コマンドだけは例外です。 DATA コマンドの後には、 SMTP の受信側 はピリオド (".") が単独で現われる行までメッセージ行を受け取り続けま す。 (SMTP はインターネット標準 RFC821 で定義されています。) これで Bob の MTA は Alice のメッセージを受け取りました。 Bob の MTA は、以下のようなヘッダをメッセージに付け加えます: Received: (from alice@wonderland.com) by mail.dobbs.com (8.8.5/8.8.5) id MAA18447 for alice; Thu, 13 Nov 1997 12:04:05 -0500 このヘッダは、メールがエラーを起こした時に追跡するために使います (メッ セージが複数のマシンに中継され、このヘッダがたくさん付くこともありま す)。 Bob の MTA は修正されたメッセージをローカル配送エージェン ト(local delivery agent, あるいは略して LDA)に渡します。 Linux システ ムでは、普通 LDA は procmail と呼ばれるプログラムですが、 LDA は他にも あります。 LDA の仕事は、このメッセージを Bob のメールボックスに追加することで す。 LDA と MTA とは分離されていて、双方のプログラムの仕事をより単純に しています。これによって MTA は、ユーザのメールボックスの場所などのロ ーカルな細かい事情を気にすることなく、インターネット関連の処理に専念で きます。 Bob のメールボックスは、普通は /usr/spool/mail/bob や /var/mail/bob と いったファイルです。 Bob がメールを読む時には、自分の好きな MUA (mail user agent)を実行し、このファイルを参照・編集します。 3.2. 通知プログラム 他にも電子メールに関係する重要なプログラムがあります。ただし、それ自身 はメールを読んだり配送したりはしません。これはメールの到着通知プログラ ムというもので、メールボックスを監視して、新しいメールが来た時にユーザ に知らせるプログラムです。 最初の通知プログラムは、 biff(1) と comsat(8) という、対になる Unix 用 プログラムでした。 biff プログラムは comsat サービスを有効にするフロン トエンドです。このサービスが有効になっていると、新しいメールが到着した 時にそのヘッダが端末に出力されます。この機能は、CRT 上で行指向のプログ ラムを使う人向けに設計されました。そのため、今日の環境ではあまり使いで がありません。 ほとんどの Unix シェルにはメールチェック機能が付いており、あまり邪魔に ならない (新しいメールが来るとプロンプトの直前にメッセージを出力するな ど) ような方法でメールの通知を行うことができます。普通この機能は、環境 変数を設定することによって有効にできます。お使いのシェルのオンラインマ ニュアルで説明されているでしょう。 sh/ksh/bash 系のシェルを使っている 方なら、環境変数 MAIL と MAILPATH を調べてください。 X をサポートしているシステムには、定期的に新着メールを確認し、メールの 到着を絵と音の両方で知らせてくれるデスクトップ用の小物プログラムが付い てきます。この類のプログラムで最も古く、かつ最も広く使われているのが xbiff です。お使いの Linux ディストリビューションで最初から X のデスク トップが使える設定になっていれば、たぶん xbiff もデスクトップ上にある でしょう。詳しくはオンラインマニュアルの xbiff(1) を見てください。 3.3. インターネットに常時接続していないマシンへのメール この文書を注意深く読んできた人は、あることに気付いたかもしれません。こ こで説明した情報の流れでは、 Alice のマシンはただちに Bob のマシンと会 話できなければならないのです。 Bob のマシンが落ちていたらどうなるので しょうか? あるいは Bob のマシンが起動していても、インターネットに繋 がっていなかったらどうなるのでしょうか? Alice の MTA がすぐに Bob の MTA と通信できなければ、 Alice の MTA は メッセージを wonderland.com のメールキューにしまっておきます。 Alice の MTA は期限切れになるまでは定期的に何度も再送を試み、期限切れになっ た時点で、送信に失敗したことを知らせるバウンスメッセージを Alice に送 り返します。もっともよく使われている MTA (sendmail)では、再送の間隔は 15 分、送信の期限は 4 日です。 3.4. リモートメールとリモートメールのプロトコル 現在の多くの Linux ユーザは、ISP (Internet Service Provider, インター ネット接続業者) 経由でインターネットに接続しており、自分自身のドメイン を持っていません。その代わり、こういったユーザは ISP のマシンにアカウ ントを持っています。彼ら宛のメールは ISP のマシン上のメールボックスに 配送されます。しかしユーザは自分のマシンを使ってメールを読み書きしたい のが普通です (これらのマシンは、SLIP や PPP を使って断続的に ISP に接 続します)。 Linux ではこれを支援する リモートメールプロトコルが使えま す。 これは前の節で説明したシナリオとは異なっています。キューに入って再送を 待っているメールは、サーバのメールボックスに送られたメールとは違いま す。キューに入っているメールはまだ配達されていないので、期限切れになる ことがあります。しかし ISP のサーバのメールボックスに配送されたメール は「配達済み」なので、いつまででもそこに置いておくことができます。 リモートメールプロトコルを使うと、クライアントはサーバ上にあるメールを ネットワーク接続経由で引き出すことができます (これは通常の配送の逆で す。普通の配送では送信側の MTA が受信側の MTA にメールを送り付けま す)。一般的に使われているリモートメールプロトコルは 2 つあります。 POP3 (インターネット標準 RFC1939 で定義) と IMAP (インターネット標準 RFC2060 で定義)です。事実上全ての ISP が POP3 をサポートしています。ただし IMAP (こちらの方が強力です) をサ ポートしている ISP の数も増えつつあります。 POP3 のセッションの例を以下に示します: S: <クライアントがサービスポート 110 に接続します> R: +OK POP3 server ready <1896.697170952@mailgate.dobbs.org> S: USER bob R: +OK bob S: PASS redqueen R: +OK bob's maildrop has 2 messages (320 octets) S: STAT R: +OK 2 320 S: LIST R: +OK 2 messages (320 octets) R: 1 120 R: 2 200 R: . S: RETR 1 R: +OK 120 octets R: R: . S: DELE 1 R: +OK message 1 deleted S: RETR 2 R: +OK 200 octets R: R: . S: DELE 2 R: +OK message 2 deleted S: QUIT R: +OK dewey POP3 server signing off (maildrop empty) S: <クライアントが接続を切ります> IMAP のセッションで使われるコマンドや応答は POP3 と違いますが、ロジッ クはよく似ています。 POP3 や IMAP の利点を生かすためには、リモートメールクライアントプログ ラムを使ってメールを取り寄せる必要があります。一部のメールユーザエー ジェントにはクライアント機能が組み込まれており (どのクライアントがどの プロトコルをサポートしているのかは後述します)、例えば Netscape ブラウ ザは POP と IMAP の機能を最初からサポートしています。 MUA に組み込まれている POP クライアント機能の大きな欠点は、サーバにポ ーリングをかけるよう明示的にメーラに指示しなければならない点です。 xbiff(1) や同じ機能を持つプログラムから通知は受けられません。これらは ローカルのメールか、従来の SMTP による「push」型接続を使って配送された メール用のものだからです。また当然ながら、全ての MUA が POP/IMAP を使 えるわけではないので、他の機能をあきらめなければならないかもしれませ ん。 お使いの Linux ディストリビューションにはたぶん fetchmail というプログラムが入っていると 思います。このプログラムは特別に設計されていて、リモートメールサーバと 通信し、メールを取り込み、ローカルのメール受信プログラムと SMTP で通信 して、このメールを通常のメール配送経路に送ることができるようになってい ます。 メールをサーバ上に保管する必要がある場合 (例えば、クライアントマシンが しょっちゅう変わる場合) を除くと、 POP/IMAP 機能を持つどんなユーザエー ジェントよりも fetchmail の方がたぶん優れています。 fetchmail はバック グラウンドで動作して定期的にサーバに問い合わせることができるので、 xbiff(1) や他のメール到着通知プログラムを SMTP メールの場合と同じよう に使うことができます。また fetchmail を MUA に付いているクライアント機 能と比べると、風変わりなサーバや標準に準拠していないサーバの癖に対して 強く、エラー回復機能も優れています。 (fetchmal がある場合とない場合の)両方の動作を表す図を示します: ______________________________________________________________________ +---------+ +-------+ +-------+ 入力 | 送信側 | 呼出 |送信側 | | Alice |--------->| MUA |--------->| MTA |::::>:::: +-------+ | | | | :: +---------+ +-------+ :: 送信側 :: の SMTP :: マシン ::::::::::::::::::::::::::::<:::::::::::::::::::::::::::: :: .::....................................................................... :: :: +---------+ +-----+ +--------+ :: | 受信側 | 呼出 | | 配送 | Bobの | ::::>| MTA |--------->| LDA |============>|サーバの|::::>:::: | | | | |メール | :: | | | | |ボックス| :: メール +---------+ +-----+ +--------+ :: サーバ :: POP または IMAP :: ::::::::::::::::::::::::::::<::::::::::::::::::::::::::::::::::: :: .::........................................................................ :: :: +-----------+ :: | | :::::::>::::::::::::| fetchmail |:::::::: 受信側 :: | | :: マシン :: +-----------+ :: (fetchmail :: :: がある場合) :: ::::::::::::::::<::::::::::::::::::: :: :: :: :: +---------+ +-----+ +--------+ :: :: | 受信側 | 呼出 | | 配送 | Bob の | :: ::::>| MTA |--------->| LDA |===============>| メール | :: | | | | |ボックス| :: +---------+ +-----+ +--------+ :: | | :: | | :: +----------------<-------------+ | :: | | :: +--------------+ +-------+ | :: | Bob の | | Bob の|<----------+ :: |通知プログラム| | MUA | :: +--------------+ +-------+ :: | | .::........................................................................ :: . | | :: fetchmail . | | :: がない場合 . | | :: . | +-----+ | :: +----------+ . +----->| |<----+ :: | Bob の | . | Bob | :::::| POP/IMAP |----.--------->| | | 対応 MUA | . +-----+ +----------+ . ______________________________________________________________________ 3.5. メールボックスのフォーマット 届いたメールがメールボックスに追加される時に、あるメッセージの終わりと 次のメッセージの始まりを示す何らかの区切り記号を入れるのは MTA の役割 です。 Unix においてほとんどのメーラが従っている慣習として、 ``From '' で始ま る (空白にも意味があります) それぞれの行がメッセージの先頭であるという 決まりがあります。本文中に ``From '' で始まる行が現われた場合には、 Unix の MTA は通常「小なり」の記号を前に置き、 ``>From '' という形にし ます。 RFC822 形式のヘッダがこの From 行に続きます (普通は送信者の名前 と受信日が続きます)。 この慣習は Unix バージョン 7 が起源なので、この形式のメールボックスは 「V7 メールボックス」と呼ばれます。「mbox 形式」と呼ばれることもありま す。特に断らない限り、本 HOWTO で説明する全てのプログラムはこの形式を 使います。しかしこれはそんなに普遍的ではなく、異なる形式を利用・生成す るツールによって、お互いが混乱する可能性もあります。 他に知られている (そして注意しなければならない!) 形式は 4 つあります。 BABYL, MMDF, MH, qmail maildir です。これらの中では MMDF が最も単純で す。 MMDF は Ctrl-A (ASCII の 001) 4 つの後に CR-LF が続く形式の区切り 記号を使います。 MMDF は昔に使われていた、比較的大雑把なインターネット メール配送方式です。その子孫はまだ SCO システムで使われています。 BABYL は MMDF とは別の生き残りであり、 MIT の昔のメールシステムが起源 です。 BABYL はまだ Emacs のメールリーダモードで使われています。 MH と qmail maildir は「メールボックス」の形式ですが、実際にはメール ボックスをメッセージ 1 つずつに分割してディレクトリに置く方式です。こ のような「メールボックス」に grep をかけても無駄です。なぜならディレク トリファイルに grep しても、ディレクトリの内部データを示すデータ列を参 照するだけからです。 (訳注: まあ後半はあまりできの良くない冗談でしょう(^_^;) Microsoft Outlook Express の .mbx 形式のメールボックスは、 mbx2mbox と いうアプリケーションを使えば RFC822 形式に変換できます。 4. 必要なもの 4.1. ハードウェア Linux でメールを使うには、特殊なハードウェアは必要ありません。 必要なのは、リモートシステムと接続する何らかの通信ソフトウェアです。こ こで接続とは TCP/IP または UUCP のことです。 つまり、モデムかイーサネットカードが必要ということです。どちらが必要か はシステムの設定によって決まります。ほとんどの場合は、できるだけ高速な モデム (例えば現在では V90 の 57,600 bps モデム) が欲しいところです。 一般的には、9600 ボー以上の速度を処理するためには 16550 UART がシリア ルポートに付いているか、モデムに組み込まれている必要があります。 一つ前の文章の意味が分からなければ、 comp.dcom.modems ニュースグループ で質問するか、 USENET に定期的に投稿されるモデムとシリアル通信に関する 素晴らしい FAQ を参照してください。 5. メール配送エージェントを選択する メール配送エージェントはローカルシステムからリモートシステムにメールを 転送するソフトウェアです。最近の Linux では、お使いの MTA をいじったり 置き換えたりする必要はめったにありませんし、壊れていないものは変えない ほうがよいでしょう。とはいえ、より強固なセキュリティが必要だったり、シ ステムのデフォルトよりも高い性能が必要な場合もあるでしょうから、ここに 情報を集めておきます。ここから出発すると良いでしょう。 (これらの他にも Unix MTA はありますが、 Linux box 上でそれらに出会うこ とはほとんどないでしょう。) それぞれ独自の機能を持っていますが、もっとも良い妥協案は qmail でしょ う。 qmail は、高いセキュリティ (vmail はより安全ですが)、高速 (smail はローカルユーザにより高速ですが)、そして設定の容易さを特徴にしていま す。もちろんどのメールソフトウェアを選ぶのも自由です。ここでお知らせす る情報はあなたが上手く選ぶのを助けるためのものです。 sendmail は複雑な条件のあるサイトには良いでしょうが、設定は初心者には 難しすぎますし、その割にはあまり安全でも高速でもありません (と私は思い ます)。ですので、この HOWTO の sendmail の章は、ほんとに古くなってし まった内容しかありません。 自分のやってることがわかっているなら、 sendmail を選ぶのもいいでしょう (その場合はこの HOWTO を読むべきではありません!)。そうでなければ qmail をお勧めします。 以下にこれらのプログラムの詳細を記します。 5.1. sendmail BSD sendmail は インターネット MTA のおじいさんです。 sendmail は、そ の後継 (となるはずだった) プログラムよりも長生きし続けています。現在の ほとんどの Linux ディストリビューションは sendmail を使っており、これ をプリインストールしています。 sendmail は長年、管理者にとっての悪夢と評されてきました -- 理解が困 難、設定がトリッキー、セキュリティホールが広まりやすい、などなど。しか しインターネットのテクノロジーと標準が安定するにつれて、このような評判 のもとになった sendmail のたくさんのオプションや設定ルールは、もはやサ イトごとにいじる必要はなくなっています (UUCP のような非 TCP/IP ネット ワークレイヤの事実上の消滅が拍車をかけました)。また最新版の sendmail では設定システムが改善されていて、伝説的ともいえる sendmail.cf という 設定ファイルのおぞましさからは逃れることができるようになっています。さ らに重要なことですが、現在 sendmail は一般的にはあらかじめ設定されてお り、あなたが特別な要求 (非 TCP/IP ネットワークを越えてメールを送る必要 があるなど) をしない限りはいじる必要がありません。 sendmail のホームページは にあります。ここで は sendmail の膨大な文書を参照できます。実際に sendmail のカスタム設定 に取り組む必要が生じたら、これらの文書を見てみましょう。 その他の MTA は、もし 'sendmail'と称しているなら、 sendmail のコマンド オプションを真似たものでしょう。これは、sendmail と通信することを前提 としているメールユーザエージェントへの配慮です。 5.2. smail v3.2 smail は sendmail を置き換える最初の本格的な試みでした。よりシンプル で、 sendmail よりもずっとわかりやすい設定システムを持ち、かなり安全な ものです。 sendmail ではなくこれをプリインストールしている Linux ディ ストリビューションもあります。 TCP/IP と UUCP を混在させているサイトにおける smail の優れたサポート は、ひと頃は大きなセールスポイントでしたが、 UUCP が衰退してきたので smail も廃れてしまいました。また smail は、通信量の大きな接続では sendmail よりも効率がよくありません。 sendmail と同じく、プリインストールされた smail の設定をいじる必要はほ とんどありません。 (たまに 'smail 2.5 ' に出会うかもしれません。このプログラムはずっと昔 に廃れています。相手にしないことです。) 5.3. qmail qmail プログラムは sendmail 互換の MTA で、セキュリティを高めるような 特別に設計がなされています。作者は検証可能なセキュリティホールが初めて 公表されれば、 500 ドルの賞金を約束しています。しかしこの報償は 1997 年4 月以来獲得されていません。 qmail のホームページはこちらです。 5.4. exim exim プログラムは smail3 とよく似ていますが、より高機能です。 spam メ ールのブロックに対して特に強いこと、同じホスト上に複数のバーチャルホス ト (バーチャル DNS ドメイン) が置けることを宣伝文句にしています。 exim のホームページはこちらです。 私も自分のコンピュータで exim を試してみました。 smail の設定システム と qmail のセキュリティとの両方をうまくあわせ持っており、さらに GPL で あるという利点を持っています。 exim によって現在使っている MTA を置換するやり方を、近いうちに新たに章 を加えて説明するつもりです。 6. 配送ソフトウェアのインストール 6.1. Qmail v1.03 安全・高速で、利用も簡単。これは私のお気に入りの MTA (mail transport agent) です。 現在 qmail を同梱しているディストリビューションはありません。ここでは qmail のコンパイルとインストールについて中心に見ていきます。これが qmail で唯一面倒な所だからです。設定はとてもわかりやすいです。 6.1.1. qmail の入手 へ行き、最新版をダウンロードします。 (訳注:日本からはミラーサイト に行くと良いで しょう。 なおソフトウェアアーカイブが から、作 者による qmail 関連文書群の翻訳が からそれ ぞれ利用できます。) 6.1.2. ソースの展開 次にファイルを展開します。 mv qmail.tar.gz /usr/local/src cd /usr/local/src ; tar -zxvf qmail.tar.gz (訳注: qmail-1.03.tar.gz という名前かもしれません) bz2 バージョン (圧縮率の良い新しいフォーマット) を入手した場合は、 tar の部分を次のように置き換えてください。 bunzip2 qmail.tar.bz2 tar -xvf qmail.tar 6.1.3. コンパイルの準備 では qmail のディレクトリに移動し、設定のデフォルト値を見てみましょ う。 cd qmail; more conf-* デフォルト値を変更する必要はないはずですが、 (例えば) インストール先の ディレクトリを変えたり、コンパイルの際のフラグをより良いものに指定した りできます。 (訳注:例えばインストールディレクトリを /usr/local/qmail にするには ``echo /usr/local/qmail > conf-qmail'' などのようにして、 conf-qmail に指定します。詳細は同梱のドキュメントファイルを参照してください) 次にインストール先のディレクトリを作ります。 mkdir /var/qmail Debian 以外のディストリビューションでは、qmail が使用するユーザ ID を いくつか追加する必要があるでしょう。 qmail の高いセキュリティはこれら に依存しているのです。 qmail はいくつかのモジュールに分割されていて、それぞれは独立した UID で動作します。このことにより、侵入者がメールシステム全体を乗っ取った り、 root 権限を奪い取ったりするのが難しくなっています。 ユーザの追加は以下を実行するか、 # groupadd nofiles # useradd -g nofiles -d /var/qmail/alias alias # useradd -g nofiles -d /var/qmail qmaild # useradd -g nofiles -d /var/qmail qmaill # useradd -g nofiles -d /var/qmail qmailp # groupadd qmail # useradd -g qmail -d /var/qmail qmailq # useradd -g qmail -d /var/qmail qmailr # useradd -g qmail -d /var/qmail qmails もしくは /etc/passwd と /etc/group を手作業で編集します。 Evan E. によると、 groupadd には "-g groupid" パラメータを使用する必要 があったそうです(Caldera 1.2)。使用しないと groupadd が次のエラーを 出してしまうのだそうです。 "A groupwith that name already exists." /etc/group と /etc/passwd それぞれには、例えば次のような行を追加しま す。 qmail:*:2107: nofiles:*:2108: および alias:*:7790:2108::/var/qmail/alias:/bin/true qmaild:*:7791:2108::/var/qmail:/bin/true qmaill:*:7792:2108::/var/qmail:/bin/true qmailp:*:7793:2108::/var/qmail:/bin/true qmailq:*:7794:2107::/var/qmail:/bin/true qmailr:*:7795:2107::/var/qmail:/bin/true qmails:*:7796:2107::/var/qmail:/bin/true 設定を確認するために以下を実行します。 make setup check 次に qmail の設定を行います。 ./config 注意してほしいのですが、このときあなたのサーバ名は DNS によって名前解 決できなければいけません。さもないと ./config は混乱してしまいます。 (訳注: DNS が無い場合などは ``./config-fast foo.bar.com'' のようにし て直接サーバ名を指定することもできます。./config を実行した場合は、ホ スト名や IP アドレスを DNS から直接検索して設定ファイルが生成されます) 次にいくつか alias (別名) を追加する必要があります。 qmail は /etc/alias を使用しないからです (オプションパッケージをコンパイル・イ ンストールすれば使用するようにできます)。 これは私の設定です。 File : ".qmail-MAILER-DAEMON" &postmaster File : ".qmail-bin" &root File : ".qmail-daemon" &root File : ".qmail-decode" &root File : ".qmail-dumper" &root File : ".qmail-games" &root File : ".qmail-ingres" &root File : ".qmail-mailer-daemon" &postmaster File : ".qmail-manager" &root File : ".qmail-news" &root File : ".qmail-nobody" &root File : ".qmail-operator" &root File : ".qmail-postmaster" &root File : ".qmail-root" &guylhem File : ".qmail-system" &root File : ".qmail-toor" &root File : ".qmail-uucp" &root File : ".qmail-uucp-default" |preline -dr /usr/bin/uux - -r -gC -a"${SENDER:-MAILER-DAEMON}" lm!rmail "($DEFAULT@$HOST)" これらの各ファイルは ~alias に作る必要があります。 .qmail-root の &guylhem は root 宛のメールを受け取るログイン名で置き換えます。 (訳注、ここでいう ~alias の `~'とはユーザ `alias' のホームディレクト リ、つまり /var/qmail/alias の事です) UUCP ユーザは注意!!!!! QMAIL FAQ の UUCP に関する記述を信用してはいけません。私の .qmail- uucp-default を代わりに使用してください! さもなければ UUCP 接続ではど のようなメールも送ることはできないでしょう。 さて、ここで各ユーザが受け取るメールのフォーマットを決めなければなりま せん。 私のおすすめは以下です。 o NFS マウントされたホームディレクトリには、 MAILDIR フォーマットを用 いましょう。このときローカルメールリーダ用のパッチを使用します (パッチは から入手できます)。 o パッチが存在しない場合は、 MAILFILE フォーマットが良いでしょう。メ ールの入ったファイルはどんなメールリーダでも読むことができます。メ ールリーダ用に alias (bash の場合) か setenv (csh の場合) を設定し さえすれば OK です。 o /var/spool/mail/$USER フォーマットは避けてください。セキュリティ上 危険です。 デフォルトのフォーマットを変更するには、 /var/qmail/boot の各ファイル を見て、一番気に入ったものを /var/qmail/rc へコピーします。 home や proc は安全な選択ですが、セキュリティを考慮すると home がより 好ましいでしょう。 6.1.4. qmail の設定 /var/qmail/control で次のものを編集します。 6.1.4.1. defaultdomain, me, plusdomain o me はあなたのマシンの FQDN (full qualified domain name) です。例え ば私のマシンでは barberouge.linux.lmm.com になります。 o defaultdomain はドットのないホスト名 (例えば defaulthost など) に追 加されます。例えば localnetwork と設定すれば、 joe@hisbox 宛の全て のメールは joe@hisbox.localnetwork へ送られることになります。 o plusdomain は例外です。これは + 記号で終わるホスト名に追加されま す。例えば (me で設定されている) defaulthost が + 記号で終わってい れば、これに追加されることになります。 これら 3 つの例は qmail の凄さと設定の簡単さを示しています! 6.1.4.2. locals, rcpthosts virtual domain name をサポートしたければ、これらのファイルに追加の名前 を加えるだけです。追加した名前あてに送られた全てのメールはローカルのメ ールとして扱われます。 locals と rcpthosts の違いは、後者はローカルのエイリアスとしては扱われ ないということです。これは yahoo.com や lemel.fr といった freeemail ア ドレスからメールを受け取る際に便利です。またメールをそういったローカル 以外のユーザへも送る、つまり例えば someone@yahoo.com 宛のメールをロー カルで処理したくない場合も便利です。 6.1.4.3. virtualdomains これによりデフォルトの外向け送信モードを指定できます。例えば次のように すれば、送出メールのデフォルトを uucp ではなく smtp にできます。 #:alias-uucp uucp で送るのであればこのようにします。 :alias-uucp 6.1.5. qmail のテスト さて設定が終わりましたので、以下を実行しましょう。 sh -cf '/var/qmail/rc &' qmail が起動します (現在稼働中の MTA を邪魔することはないです)。次に: echo to: mylogin | /var/qmail/bin/qmail-inject あなたはこのメールを /var/qmail/boot/ で選択したフォーマットで受け取る はずです。 6.1.6. 他の MTA を削除する テストに成功したら、現行の MTA を kill しましょう。 killall -STOP daemon_name ; 子プロセスが走っている場合、killall -CONT 子プロセス名 を実行、待機、 killall -STOP を再度実行、をいやになるまで 繰り返してください。 子プロセスが存在しなければ、killall -TERM して、 killall -CONT を実行 します。 その後、古い MTA をディスクから削除します (方法はインスールしたディス トリビューションによります。例えば Redhat, Caldera, Suse なら rpm -e --nodeps を、 Debian なら dpkg -r --force-depends になります)。次に以 下を実行します。 # ln -s /var/qmail/bin/sendmail /usr/lib/sendmail # ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail 次に /etc/inetd.conf の qmail-smtpd を設定します (全てを一行に書きま す)。 smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env tcp-env /var/qmail/bin/qmail-smtpd SysV-init を採用していない古いディストリビューションを使っている場合 は、単にブートスクリプトに以下を追加します。 sh -cf '/var/qmail/rc &' 追加先は普通 /etc/rc.local でしょうが、違うかもしれません。 SysV-init に準じたディストリビューション (RedHat, Caldera, Suse, Debian) の場合は、以下のスクリプトを /etc/init.d/ に追加します。 (訳注:RedHat の場合 /etc/rc.d/init.d/ に追加します) Debian の場合 #!/bin/sh test -x /var/qmail/rc || exit 0 case "$1" in start) echo -n "Starting mta: " sh -cf '/var/qmail/rc &' echo "qmail." ;; stop) echo -n "Stopping mta: " killall qmail-lspawn echo "qmail." ;; restart) echo -n "Restarting mta: " killall -HUP qmail-lspawn killall -ALRM qmail-lspawn echo "qmail." ;; *) echo "Usage: /etc/init.d/qmail {start|stop|restart}" exit 1 esac exit 0 RedHat の場合 #!/bin/sh # # qmail This shell script takes care of starting and stopping qmail. # # description: qmail is a Mail Transport Agent, which is the program \ # that moves mail from one machine to another. # processname: qmail # config: /var/qmail/control/ # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network export PATH=$PATH:/var/qmail/bin # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -f /usr/sbin/sendmail ] || exit 0 # See how we were called. case "$1" in start) # Start daemons. echo -n "Starting qmail: " qmail-start '|preline procmail' splogger qmail & touch /var/lock/subsys/qmail echo ;; stop) # Stop daemons. echo -n "Shutting down qmail: " killproc qmail-lspawn echo rm -f /var/lock/subsys/qmail ;; restart) $0 stop $0 start ;; status) status qmail ;; *) echo "Usage: qmail {start|stop|restart|status}" exit 1 esac exit 0 そしてシンボリックリンクを /etc/rcN.d/ に作ります。例えば次のようにな ります。 (訳注:RedHat の場合 /etc/rc.d/rcN.d/ になります。また N はランレベル を表しています) ln -sf /etc/init.d/qmail /etc/rc1.d/K19qmail 始めの文字が K なら、このランレベル (ランレベル 1 はシングルモード、6 はリブートを表します) では qmail を kill します。始めの文字が S ならこ のランレベルでは qmail を実行します。 o K か S のどちらを指定するべきかを決めるには?そのランレベルの他の daemon の指定を真似しましょう。 o K や S の後に何番の数値を指定すればよいのか? network daemon の次の 番号を指定しましょう。(訳注:例えば RedHat の場合 S10network ですか らこれ以降の、15 とかの数字がよいでしょう) RedHat, Caldera, Suse では Debian のように /etc/ 直下ではなく、 /etc/rc.d/ を使用します。つまり例えば /etc//rc.d/rc1.d や /etc/rc.d/init.d のようになります。 6.1.7. まあこんなところでしょう、みなさん! 変更を反映するのにリブートする必要はありません (使ってるのは Linux だ というのをお忘れですか? 他の安っぽい OS とは違いますよ!)。単に次のコ マンドを実行するだけです。 killall inetd init 1 これによってシングルユーザーモードに入ります。そして次を実行して、デ フォルトのランレベル (/etc/inittab の initdefault ラベルで指定されてい ます)に戻ります。 exit 手動で qmail スクリプトを起動する事もできますが、 "init" の方法を使え ば qmail スクリプトが正しい位置にあるかどうかがわかります。すなわち network スクリプトの後で、かつ email に依存したプログラムの前に実行さ れるかどうかです (例えば inn の前に起動されていないと警告が表示されま す)。 6.2. Smail v3.1 smail 3.1 は、UUCP だけのサイトや、 SMTP でも一部のサイトではデファク トスタンダードの転送エージェントのようです。 smail は設定が簡単で、ソ ースにパッチを当てなくてもコンパイルでき、かなり安全です。 6.2.1. smail の設定 お使いのディストリビューションから smail のバイナリをインストールする か、 smail のソースを入手してコンパイルしてください (筆者は前者の方法 をお勧めします)。 smail をソースから作る場合は、以下の行を os/linux ファイルに加える必要があります。これは、正しく動作するシェルスクリプト を 'sed' に生成させるためです。 CASE_NO_NEWLINES=true インストールが済んだら、設定ファイルがいくつか /etc/smail ディレクトリ に入っているはずです (ただし古いディストリビューションではインストール 先が違うかもしれません)。それでは、設定ファイルの編集を始めましょう! 6.2.1.1. "config" ファイル # From smart_path=polux smart_transport=uux # To hostname=barberouge domains=linux.lmm.com visible_name=barberouge.linux.lmm.com uucp_name=barberouge.linux.lmm.com # max_message_size=512k # auth_domains=foo.bar # more_hostnames=barberouge.polux.freenix.fr さてまず、メールを配送してくれるのは誰でしょうか? 筆者のマシンは UUCP (つまり uux 配送) 経由で "polux" からメールを受け取っています。もちろ ん、このファイルはあなたの環境に合わせて変える必要があります。例えば "bargw.bar.foobar.com" から "smtp" 経由でメールを受け取っている場合に は、 transports ファイルは必要ありません。この場合には "-transport_file " を定義すれば、ファイルが不要であることを示すことが できます。 また "postmaster_address = yourname" を使ったり、 "visible_name" を 使って外部向けのアドレスからネットワークトポロジーを隠したり (ゲート ウェイマシンの場合)、 "more_hostnames" を使ってメールを受け取る際に使 える別名アドレスを設定したりできます。 詳しい説明については smail の文書を見てください。また /usr/doc/smail/examples に入っている例を見て、あなたの環境に合う例があ るかどうかも調べるとよいでしょう。 6.2.1.2. "directors" ファイル # aliasinclude - expand ":include:filename" addresses produced by alias files # This entry and the next one are pretty much boiler-plate. Reasons # for making significant changes are few. The sole purpose of these # is to match and expand addresses of the form: # :include:pathname # which may occur in alias files or mailing-list/forward files # (produced by any director with a driver of forwardfile). aliasinclude: driver = aliasinclude, # use this special-case driver nobody; # associate nobody user with addresses # when mild permission violations # are encountered copysecure, # get permissions from alias director copyowners, # get owners from alias director # forwardinclude - expand ":include:filename" addrs produced by forward files forwardinclude: driver = forwardinclude, # use this special-case driver nobody; copysecure, # get perms from forwarding director copyowners, # get owners from forwarding director # aliases - search for alias expansions stored in a database # This is the standard aliases file. It is used for generic things, # like mapping root, postmaster, MAILER-DAEMON and uucp to site # admins, creating some small system alias expansions, and such. In # this site configuration, the aliases file is used mostly for # machine-specific aliasing/forwarding information. Global forwarding # information should be put in the "forward" database. aliases: driver=aliasfile, # general-purpose aliasing director -nobody, # all addresses are associated # with nobody by default, so setting # this is not useful. sender_okay, # don't remove sender from expansions owner=owner-$user; # problems go to an owner address file=/etc/aliases, modemask=002, # should not be globally writable optional, # ignore if file does not exist proto=lsearch, # unsorted ASCII file # forward - search for expansions stored in a forwarding database # This is the subdomain-wide user forwarding database. Entries are # maintained here for current or past users, to forward their mail to # their preferred mail-reading machine. The forward database is # shipped around the TCP/IP network as changes are made, to keep the # network consistent. #forward: # driver = aliasfile, # general-purpose aliasing director # -nobody, # all addresses are associated # # with nobody by default, so setting # # this is not useful. # owner = real-$user; # problems go to an owner address # # file = /etc/forward, # modemask = 002, # proto = dbm, # use dbm(3X) library for access # dotforward - expand .forward files in user home directories # For users that have an entry in the "forward" database, a ".forward" # file is only used if it is on the "home" machine, as identified in # the forward database. If used, it is treated as a list of addresses # to which mail should be delivered, rather than (or in addition to) # the user identified in the local address. dotforward: driver = forwardfile, # general-purpose forwarding director owner = postmaster, nobody, sender_okay; file = ~/.forward, # .forward file in home directories checkowner, # the user can own this file owners = root, # or root can own the file modemask = 002, # it should not be globally writable caution = daemon:root, # don't run things as root or daemon # be extra careful of remotely accessible home directories unsecure = "~uucp:/tmp:/usr/tmp:/var/tmp" # forwardto - expand a "Forward to " in user mailbox files # This emulates the V6/V7/System-V forwarding mechanism which uses a # line of forward addresses stored at the beginning of user mailbox files # prefixed with the string "Forward to " forwardto: driver = forwardfile, owner = postmaster, nobody, sender_okay; file = /var/spool/mail/${lc:user}, # point at user mailbox files forwardto, # enable "Forward to " function checkowner, # the user can own this file owners = root, # or root can own the file modemask = 0002, # under System V, group mail can write caution = daemon:root # don't run things as root or daemon # user - match users on the local host with delivery to their mailboxes user: driver = user; # driver to match usernames transport = local # local transport goes to mailboxes # real_user - match usernames when prefixed with the string "real-" # This is useful for allowing an address which explicitly delivers to a # user's mailbox file. For example, errors in a .forward file expansion # could be delivered here, or forwarding loops between multiple machines # can be resolved by using a real-username address. Also, users that # wish to use mail as a means of transferring data to a machine that # is not their "home" machine can mail to real-login-name@remote.host. real_user: driver = user; transport = local, prefix = "real-" # for example, match real-root # lists - expand mailing lists stored in a list directory # mailing lists can be created simply by creating a file in the # /etc/smail/lists directory. lists: driver = forwardfile, caution, # flag all addresses with caution nobody, # and then associate the nobody user owner = owner-$user; # system V sites may wish to use # o-$user, as owner-$user may be # too long for a 14-char filename. file = lists/${lc:user} # lists is under $smail_lib_dir # owners - expand mailing lists stored in a list owner directory # mailing lists owner lists can be created simply by creating a file # in the /etc/smail/lists/owner directory. Mailing list owners # are sent locally generated errors dealing with a mailing list of the # same name. To create an owner list for a mailing list, create a # file with the name of the list in /etc/smail/lists/owner. This # will create a list address of owner-listname, as is used by the # "lists" director above. owners: driver = forwardfile, caution, # flag all addresses with caution nobody, # and then associate the nobody user owner = postmaster; # system V sites may wish to use # o-$user, as owner-$user may be # too long for a 14-char filename. prefix = "owner-", file = lists/owner/${lc:user} # lists is under $smail_lib_dir # request - expand mailing lists stored in a list request directory # mailing lists request lists can be created simply by creating a file # in the /etc/smail/lists/request directory. Request addresses # are typically used as a standard address for queries about a mailing # list. For example, requests for additions or deletions to a list # will generally be sent to "list-request", which should be set up to # forward to the appropriate person or persons. request: driver = forwardfile, caution, # flag all addresses with caution nobody, # and then associate the nobody user owner = postmaster; # system V sites may wish to use # o-$user, as owner-$user may be # too long for a 14-char filename. suffix = "-request", file = lists/request/${lc:user} # lists is under $smail_lib_dir このファイルを変える必要はほとんどないはずです。ただし smail を使って メーリングリストを運用したい場合はメーリングリスト関係のオプションが必 要ですし、例えばメールの転送を無効化したければ転送関係のオプションが必 要です。 6.2.1.3. "fidopaths" ファイル .f105.n324.z2.fidonet.org f105.n324.z2.fidonet.org!%s .n324.z2.fidonet.org f105.n324.z2.fidonet.org!%s .z2.fidonet.org f105.n324.z2.fidonet.org!%s .fidonet.org f105.n324.z2.fidonet.org!%s このようなファイルは、 ifmail と FIDO を使っている場合だけ作成してくだ さい。 6.2.1.4. "routers" ファイル # forces - force certain paths # This database exists as a means of hardcoding the paths to various # machines or domains. It is for use in creating temporary tweaks to # the other routing databases. To change the database, edit the file # maps/force.path and type "make" in the maps/ subdirectory. forces: driver = pathalias, # router to search paths file method = /etc/smail/maps/table; # transports are in this file file = forcepaths, # file containing force path info proto = lsearch, # use the sorted path file optional, reopen # close when not being used uucp_neighbors: driver=uuname, # use a program which returns neighbors transport=uux; cmd="/usr/bin/uuname -a", # specifically, use the uuname program # domain=uucp # strip ending ".uucp" # smart_host - a partially specified smarthost director # If the config file attribute smart_path is defined as a path from the # local host to a remote host, then hostnames not matched otherwise will # be sent off to the stated remote host. The config file attribute # smart_transport can be used to specify a different transport. # If the smart_path attribute is not defined, this router is ignored. smart_host: driver = smarthost, # special-case driver transport = uux # by default deliver over UUCP # path=phreak # ifmail - to send mails to fidonet and vice versa ifmail: driver=pathalias, transport=ifmail; file=fidopaths, proto=lsearch ifmail の部分は、 FIDO メール用の ifmail を使っている場合だけ書いてく ださい。転送モードは、 "uux" (つまり UUCP) から例えば "smtp" に変えた り、さらには "/etc/smail/maps/table" に書かれた「特定のマシンやドメイ ンへのパスの直書き」に変えることもできます。 この機能は、内部ネットワーク宛に出したメールをすぐに配送したい場合に便 利です。なぜならこういったメールはインターネットに UUCP 接続して配送す る必要がないからです。 6.2.1.5. "transports" ファイル # local - deliver mail to local users # Tell smail to append directly to user mailbox files in the /var/spool/mail # directory. #local: driver = appendfile, # append message to a file # -return_path, # include a Return-Path: field # local, # use local forms for delivery # from, # supply a From_ envelope line # unix_from_hack; # insert > before From in body # # file = /var/spool/mail/${lc:user}, # use this location for Linux # # Note, mail spool must be 1777 # file = ~/mailfile, # use this location for better security # group = mail, # group to own file for System V # mode = 0660, # under System V, group mail can access # suffix = "\n", # append an extra newline # append_as_user, # This allows each user to have a ~/.procmailrc file to control filtering # of mail and saving mail from mail lists in separate mailboxes if they wish. local: +inet, -uucp, driver = pipe, # append message to a file return_path, # include a Return-Path: field local, # use local forms for delivery from, # supply a From_ envelope line unix_from_hack; # insert > before From in body cmd = "/usr/bin/procmail", # use procmail for local delivery parent_env, # environment info from parent addr pipe_as_user, # use user-id associated with address umask = 0022, # umask for child process # -ignore_status, # exit status should be believed # -ignore_write_errors, # retry on broken pipes # pipe - deliver mail to shell commands # This is used implicitly when smail encounters addresses which begin with # a vertical bar character, such as "|/usr/lib/news/recnews talk.bizarre". # The vertical bar is removed from the address before being given to the # transport. #pipe: driver = pipe, # pipe message to another program # return_path, local, from, unix_from_hack; # # cmd = "/bin/sh -c $user", # send address to the Bourne Shell # parent_env, # environment info from parent addr # pipe_as_user, # use user-id associated with address # umask = 0022, # umask for child process # -log_output, # do not log stdout/stderr # ignore_status, # exit status may be bogus, ignore it # ignore_write_errors, # ignore broken pipes # file - deliver mail to files # This is used implicitly when smail encounters addresses which begin with # a slash or squiggle character, such as "/usr/info/list_messages" or # perhaps "~/Mail/inbox". #file: driver = appendfile, # return_path, local, from, unix_from_hack; # # file = $user, # file is taken from address # append_as_user, # use user-id associated with address # expand_user, # expand ~ and $ within address # check_path, # suffix = "\n", # mode = 0644 # uux - deliver to the rmail program on a remote UUCP site # # As many as five recipient addresses will be delivered to the remote # host in one UUCP transaction. uux: driver = pipe, -uucp, inet, # uucp, # use UUCP-style addressing forms from, # supply a From_ envelope line max_addrs = 5, # at most 5 addresses per invocation max_chars = 200; # at most 200 chars of addresses # the -r flag prevents immediate delivery, parentheses around the # $user variable prevent special interpretation by uux. cmd = "/usr/bin/uux - -r -g$grade $host!rmail $((${strip:user})$)", # cmd="/usr/bin/uux - $host!rmail $(($user)$)", ignore_write_errors, # ignore broken pipes umask = 0022, # pipe_as_sender, # uux_one_addr - deliver mail over UUCP to a remote host that can take # one address at a time. # This is often necessary when delivering to a site running an unmodified # version of 4.1BSD. uux_one_addr: driver = pipe, uucp, # use UUCP-style addressing forms from; # supply a From_ envelope line # the -r flag prevents immediate delivery cmd = "/usr/bin/uux - -r -g$grade $host!rmail (${strip:user})", umask = 0022, pipe_as_sender queueonly: driver = pipe; # send the message to a pipe cmd = "/usr/lib/sendmail -Q -f $sender -bm $user", # use getmail for local delivery user=root, # execute getmail as "root" group=mail, # execute getmail as "mail" parent_env, # environment info from parent addr -pipe_as_user, # use user-id associated with address umask = 0007, # umask for child process # to deliver the message. The smtp transport is included only if BSD # networking exists. # The uucp attribute can be specified for transfers within the UUCP # zone. The inet attribute must be specified for transfers within the # Internet. # NOTE: This is hardly optimal, a backend should exist which can handle # multiple messages per connection. # ALSO: It may be necessary to restrict max_addrs to 100, as this is the # lower limit SMTP requires an implementation to handle for one # message. smtp: driver=tcpsmtp, inet, # if UUCP_ZONE is not defined # uucp, # if UUCP_ZONE is defined -max_addrs, -max_chars; # no limit on number of addresses short_timeout=5m, # timeout for short operations long_timeout=2h, # timeout for longer SMTP operations service=smtp, # connect to this service port # For internet use: uncomment the below 4 lines use_bind, # resolve MX and multiple A records defnames, # use standard domain searching defer_no_connect, # try again if the nameserver is down local_mx_okay, # fail an MX to the local host ifmail: from,received,max_addrs=5,max_chars=200, driver=pipe; pipe_as_sender, cmd="/usr/local/bin/ifmail -x9 -r$host $((${strip:user})$)" ifmail の部分は、 FIDO メール用の ifmail を使っている場合だけ書いてく ださい。それ以外には、このファイルを編集する必要はないはずです。この ファイルは配送エージェント (uux, smtp 等)を定義し、他の設定ファイルの パラメータとして使えるようにします。 セキュリティを向上させるため、筆者は "pipes" や "file" などをコメント アウトしている点に注意してください。 6.2.1.6. "maps/" ディレクトリ このディレクトリには map ファイルと table ファイルが入っています: まず map ファイルの例を示します。 #N foo.bar foo2.bar2 #S AT 486/RedHat Linux 1.2.13 #O organization #C contact #E administration (email) #T phone #P address #R #U hosts connected via uucp #W created/edited by # hname polux hname linux.eu.org hname = polux hname = polux.linux.eu.org 繰り返しますが、このファイルはあなたの環境に合わせて編集してください (筆者は polux.linux.eu.org からメールを配送してもらっています)。 次は table ファイルの例です。 * uux 異なる配送エージェントを異なるパスに向けるように定義することもできま す。例えば、"smtp" を内部ネットワークに向け、 "uux" (つまり UUCP) を世 界の残りの場所に向けることができますし、その逆の設定も可能です (筆者は 出したメールは全て UUCP で送っているので、 "*" を使っています!)。 6.2.2. 他の役立つ設定例 これまで示したファイルは、筆者が現在自分のサイトで使っているファイルな ので、読者の皆さんが作る独自の設定ファイルの例/雛型として使っても何の 問題もないはずです。 以下に示すファイルは、別の方法で smail を設定する際に役立つ例として用 意しました。 #ident "@(#) transports,v 1.2 1990/10/24 05:20:46 tron Exp" # See smail(5) for a complete description of the contents of this file. # local - deliver mail to local users # # Tell smail to append directly to user mailbox files in the /usr/mail # directory. local: driver = appendfile, # append message to a file return_path, # include a Return-Path: field local, # use local forms for delivery from, # supply a From_ envelope line unix_from_hack; # insert > before From in body file = /usr/mail/${lc:user}, # use this location for System V group = mail, # group to own file for System V mode = 0660, # under System V, group mail can access suffix = "\n", # append an extra newline append_as_user, # pipe - deliver mail to shell commands # # This is used implicitly when smail encounters addresses which begin with # a vertical bar character, such as "|/usr/lib/news/recnews talk.bizarre". # The vertical bar is removed from the address before being given to the # transport. pipe: driver = pipe, # pipe message to another program return_path, local, from, unix_from_hack; cmd = "/bin/sh -c $user", # send address to the Bourne Shell parent_env, # environment info from parent addr pipe_as_user, # use user-id associated with address umask = 0022, # umask for child process -log_output, # do not log stdout/stderr ignore_status, # exit status may be bogus, ignore it ignore_write_errors, # ignore broken pipes # file - deliver mail to files # # This is used implicitly when smail encounters addresses which begin with a # slash or squiggle character, such as "/usr/info/list_messages" or perhaps # "~/Mail/inbox". file: driver = appendfile, return_path, local, from, unix_from_hack; file = $user, # file is taken from address append_as_user, # use user-id associated with address expand_user, # expand ~ and $ within address suffix = "\n", mode = 0644 # uux - deliver to the rmail program on a remote UUCP site # # As many as five recipient addresses will be delivered to the remote host in # one UUCP transaction. uux: driver = pipe, uucp, # use UUCP-style addressing forms from, # supply a From_ envelope line max_addrs = 5, # at most 5 addresses per invocation max_chars = 200; # at most 200 chars of addresses # the -r flag prevents immediate delivery, parentheses around the # $user variable prevent special interpretation by uux. cmd = "/usr/bin/uux - -r -g$grade $host!rmail $((${strip:user})$)", umask = 0022, pipe_as_sender # uux_one_addr - deliver mail over UUCP to a remote host that can take one # address at a time. # # This is often necessary when delivering to a site running an unmodified # version of 4.1BSD. uux_one_addr: driver = pipe, uucp, # use UUCP-style addressing forms from; # supply a From_ envelope line # the -r flag prevents immediate delivery cmd = "/usr/bin/uux - -r -g$grade $host!rmail (${strip:user})", umask = 0022, pipe_as_sender # demand - deliver to a remote rmail program, polling on demand demand: driver = pipe, uucp, from, max_addrs = 5, max_chars = 200; # with no -r flag, try to contact remote site immediately cmd = "/usr/bin/uux - -g$grade $host!rmail $(($user)$)", umask = 0022, pipe_as_sender # uusmtp - deliver to the rsmtp program on a remote UUCP site # # Deliver using a simple Batched SMTP protocol to the remote machine. # This allows much more arbitrary addresses to be used. It also # removes the limit on recipient addresses per invocation of uux. uusmtp: driver = pipe, bsmtp, # send batched SMTP commands -max_addrs, # there is no limit on the number or -max_chars; # total size of recipient addresses. # supply -r to prevent immediate delivery, the recipient addresses # are stored in the data sent to the standard input of rsmtp. cmd = "/usr/bin/uux - -r -g$grade $host!rsmtp", umask = 0022, pipe_as_sender # demand_uusmtp - deliver to a remote rsmtp program, polling on demand demand_uusmtp: driver = pipe, bsmtp, -max_addrs, -max_chars; # with no -r flag, try to contact remote site immediately cmd = "/usr/bin/uux - -g$grade $host!rsmtp", umask = 0022, pipe_as_sender # smtp - deliver using SMTP over TCP/IP # # Connect to a remote host using TCP/IP and initiate an SMTP conversation to # deliver the message. The smtp transport is included only if BSD networking # exists. # NOTE: It may be necessary to restrict max_addrs to 100, as this is the # lower limit SMTP requires an implementation to handle for one # message. smtp: driver = smtp, -max_addrs, -max_chars #ident "@(#) table,v 1.2 1990/10/24 05:20:31 tron Exp" # This file names the transports that are to be used in delivering # to specific hosts from bargw. #host transport #-------- --------- curdsgw demand_uusmtp # deliver using batched SMTP oldbsd uux_one_addr # 4.1BSD sites cannot take more than one addr sun demand # call sun when their is mail to send * uux # for all others, poll at intervals 6.2.3. inetd の再起動 smail を SMTP デーモンとして実行するには、以下の設定のどちらかを /etc/inetd.conf に加えてください: smtp stream tcp nowait root /usr/bin/smtpd smtpd または: smtp stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.smtpd elm を使った場合には、出したメールは自動的に送信されます。 6.2.4. Smail を SMTP で使用する 一般に ISP は SMTP を使っているので、メールを送る際の問題はないはずで す。メールを送っている途中にインターネット接続が切れた場合には、そのメ ールは "/var/spool/smail/input" に残ります。次に接続が回復した時に "runq" を実行すれば、そのメールが送られます。ただしメールの受信には問 題があります。というのも ISP はあなただけではなく、たくさんの顧客の面 倒を見なくてはならないからです! 普通は POP プロトコルを使ってメールを受け取ることができます。後述の POP に関する章を見てください。 6.3. 時代遅れになってしまった章: Sendmail+IDA 大きなサイトには、 sendmail を選んでもいいかもしれません。なんせ「びっ くりするほど使いやすい」そうですから (qmail を知っている人には、比較対 象が悪いということになるのでしょうが)。もっとも、 sendmail+IDA と sendmail 8.x のどちらを選ぶかを決めなくてはなりません。 o 古いカーネル (1.0) をお使いの場合: sendmail+IDA o やや古いカーネル (1.2)をお使いの場合: sendmail+IDA(ソースの編集が必 要) o 新しいカーネル (2.0) をお使いの場合: sendmail 8.x Linux の初心者やセキュリティ担当者への注意: 簡単に設定できる方がいいの なら smail か qmail をお試しください。ずっと使いやすい上に、安全面でも 優れています。 6.3.1. ソースからのインストール お使いのディストリビューションが、すぐに使える状態の sendmail パッケー ジ (RedHat, Caldera, Suse なら .rpm, Debian なら .deb) を提供してくれ いていない場合には、ソースを入手して以下の手順で作業してください。 o cd / ; tar -zxvf sendmail5.67b+IDA1.5.tpz o /usr/local/lib/mail/CF に移動し、 sample.m4 local.m4 を "yourhostname.m4" にコピーする。 あらかじめ書いてある hostname, aliases, smarthost の名前を、自分のサイ トのものに変更してください。もとのファイルは uuup だけを使うサイト用に なっています。またこのサイトはドメイン化したへッダを持ち、 smart host と通信することが前提となっています。変更が終わったら、"make yourhostname.cf" を実行し、できあがったファイルを /etc/sendmmal.cf に 移動してください。 o uuup しか使わないのなら、 README.linux に記載してある表の類いを作る 必要は「いっさい」ありません。 必要なことは、 Makefile がキチンと働くようにファイルに手を入れるだけで す。 .m4 ファイルを編集してから、 sendmail.cf の作成・テストを行えば OK です。 o uuup だけを使っており、自分の "smart-host" 以外のサイトとも通信する 場合には、各サイトごとに uucpxtable を作る必要があります (あるいは 各サイト宛のメールを smart host 経由とする)。さらに、変更した uucpxtable に対して dbm を実行してください。 o Rich Braun 氏は 5.67a のオリジナルバイナリを配布しています。これを 利用する時には、 .cf ファイルを変更したら、 "/usr/lib/sendmail -bz" を実行して設定を固定しないと、変更が反映されません。 5.67a 以前のものにはたちの悪い安全上の問題があるので、 5.67b 以降のも のにアップデートするべきです。 mail.debug セットが手元にあり、 syslogd を走らせている場合には、出入りするメールメッセージのログを取っておくの もいいでしょう。詳しくは "/etc/syslog.conf"をご覧ください。 sendmail+IDA のソースは vixen.cso.uiuc.edu にあるはずです。 1.00 カー ネルあたりの Linux で利用するなら、パッチは不要です。 1.1.50 以降のカーネルで使用する場合には、もとのソースに入っている Linux 用パッチの大部分が失敗するというふざけた事態に遭遇することになり ます (この sendmail が古いカーネル専用だといっているわけでは「ありませ ん」)。 どうすればいいかは明々白々です。とにかく "make" と打ち込んで、もし何か 文句を言われたら、ソースのその行にある Linux 専用パッチをコメントアウ トしてください。 sendmail+IDA を使うおつもりなら、是非とも sendmail5.67b+IDA1.5 になさ ることをお勧めします。というのも、Linux 専用パッチがもとのソースに完備 している上に、 1993 年12月1日以前の古い版が抱えていた安全上の問題も解 決しているからです。 すでに申し上げた通り、現在のカーネル 2.0 の場合には、 sendmail+IDA で はなく sendmail 8.x を使うべきです。 6.3.2. sendmail.m4 ファイル Sendmail+IDA を利用する場合には、 sendmail.cf を直接編集するのではな く、 sendmail.m4 を設定することになります。こちらの方法には、メールの 設定が簡単という利点があります。 Smail や 昔ながらの sendmail の設定は (大抵の人は正しい設定ができない、というほどではないとしても) 極端に難 しいのです。 上記の smail の例と同じ設定にする場合の sendmail.m4 ファイルは以下のよ うになります。 dnl #------------------ SAMPLE SENDMAIL.M4 FILE ------------------ dnl # dnl # (the string 'dnl' is the m4 equivalent of commenting out a line) dnl # dnl # you generally don't want to override LIBDIR from the compiled in paths dnl #define(LIBDIR,/usr/local/lib/mail)dnl # where all support files go define(LOCAL_MAILER_DEF, mailers.linux)dnl # mailer for local delivery define(POSTMASTERBOUNCE)dnl # postmaster gets bounces define(PSEUDODOMAINS, BITNET UUCP)dnl # don't try DNS on these dnl # dnl #------------------------------------------------------------- dnl # dnl # names we're known by define(PSEUDONYMS, myhostname.subdomain.domain myhostname.UUCP) dnl # dnl # our primary name define(HOSTNAME, myhostname.subdomain.domain) dnl # dnl # our uucp name define(UUCPNAME, myhostname)dnl dnl # dnl #------------------------------------------------------------- dnl # define(UUCPNODES, |uuname|sort|uniq)dnl # our uucp neighbors define(BANGIMPLIESUUCP)dnl # make certain that uucp define(BANGONLYUUCP)dnl # mail is treated correctly define(RELAY_HOST, my_uucp_neighbor)dnl # our smart relay host define(RELAY_MAILER, UUCP-A)dnl # we reach moria via uucp dnl # dnl #-------------------------------------------------------------------- dnl # dnl # the various dbm lookup tables dnl # define(ALIASES, LIBDIR/aliases)dnl # system aliases define(DOMAINTABLE, LIBDIR/domaintable)dnl # domainize hosts define(PATHTABLE, LIBDIR/pathtable)dnl # paths database define(GENERICFROM, LIBDIR/generics)dnl # generic from addresses define(MAILERTABLE, LIBDIR/mailertable)dnl # mailers per host or domain define(UUCPXTABLE, LIBDIR/uucpxtable)dnl # paths to hosts we feed define(UUCPRELAYS, LIBDIR/uucprelays)dnl # short-circuit paths dnl # dnl #-------------------------------------------------------------------- dnl # dnl # include the 'real' code that makes it all work dnl # (provided with the source code) dnl # include(Sendmail.mc)dnl # REQUIRED ENTRY!!! dnl # dnl #------------ END OF SAMPLE SENDMAIL.M4 FILE ------- 6.3.3. ローカルメイラの設定 他の Unix とは違って、 Linux はローカルメール配送システムを最初からは 備えていません。いまでは deliver か procmail がインストールしてあるの が普通になってます。したがって、そうでなくても十分ややこしい設定がさら に複雑になることはありません。手に入りやすい deliver か procmail を使 うことにしましょう。この二つをオプションパッケージとしている Linux ディストリビューションもあります。 deliver をローカルメイラに設定するためには、 sendmail.m4 にある LOCAL_MAILER_DEF の項目を次のようにしてください。 # -- /usr/local/lib/mail/mailers.linux -- # (local mailers for use on Linux ) Mlocal, P=/usr/bin/deliver, F=SlsmFDMP, S=10, R=25/10, A=deliver $u Mprog, P=/bin/sh, F=lsDFMeuP, S=10, R=10, A=sh -c $u Sendmail.mc には deliver 用の初期値があらかじめ設定してあります。 Sendmail.mc は sendmail.cf の一部に組み込まれるものです。これを指定す る場合には mailers.linux は使わず、代わりに sendmail.m4 ファイルに以下 の設定を行います。 dnl --- (in sendmail.m4) --- define(LOCAL_MAILER_DEF, DELIVER)dnl # mailer for local delivery Sendmail.mc は deliver を /bin にインストールしてあることを前提にして います。残念ながら、Slackware 1.1.1 の場合はこうなっていません (/usr/bin にインストールしてあります)。この場合には、リンクを張ってご まかしてやるか、 deliver をソースから作り直して /bin にインストールす ることになります。メールの振り分け作業など、総じて deliver よりも procmail の方が優れていることをお忘れなく。 6.3.4. sendmail+IDA の dbm テーブル サイト用・ドメイン用に特殊な設定を行う場合には、 sendmail.cf を直接編 集するよりも、オプションとなっている一連の dbm テーブルを利用する方が いいでしょう。 詳しくは、 1994 年 7 月号の Linux Journal (まだ入手できればの話ですが) や、ソースファイルに添付の文書、まもなく刊行予定となっている LDP (Linux Documentation Project) の Networking Administration Guide最新版 を参照してください。 (訳注: この辺は書いた時代が古いんですね(^^;) o mailertable - リモートホスト・ドメインの特殊な挙動を定義 o uucpxtable - DNS 形式を採用しているホストへのメール配送に UUUP を強制使用 o pathtable - リモートホスト・ドメインへの UUUP パスを指定 o uucprelays - 良く知っているリモートホストへのショートカット用エ イリアス o genericfrom - 内部アドレスを外部からみえる一般的アドレスに変換 o xaliases - 一般的アドレスと内部アドレスの相互変換 o decnetxtable - RFC-822 アドレスを DECnet-形式 のアドレスに変換 6.3.5. 本当に必要なのはどの項目か。 インターネットに接続していて、DNS を使用しているという一般的なサイト、 あるいは UUCP だけを利用しており、すべてのメールを smart RELAY_HOST 経 由の UUCP でフォワードしているサイトの場合には、特別なテーブルの設定は おそらく必要ないでしょう。 DEFAULT_HOST と PSEUDONYMS マクロの設定は、ほぼすべてのシステムで必須 です。この二つは、正式サイト名と設定済みの aliases を指定するもので す。 リレーホストとリレーメーラしか使っていないのなら、この二つを設定しなく てもかまいません。 UUCP ホストの場合には UUCPNAME を公式の UUCP 名に設 定する必要があるでしょう。 さらに メールリレーを使った smart ホストルーティングを可能にするため に、 RELAY_MAILER と RELAY_HOST を設定することにもなるでしょう。 メールの送付に何を用いるかは RELAY_MAILER で設定します。 UUCP サイトの 場合には UUCP-A と指定するのが普通です。もし SMTP だけを利用し、そのう え DNS を用いているという場合には、 RELAY_MAILER の設定を変更すること になるでしょう。 SLIP サイトの場合には、外部宛てのメールは全部サービスプロバイダに任せ て処理してもらうという安易な道をとりたくなるでしょうね。そうするには、 ISOLATED_DOMAINS と VALIDATION_DOMAINS を自ドメイン名とせず、さらに RELAY_HOST をサービスプロバイダの名前にし、 RELAY_MAILER を TCP として ください。もちろん、システムを汎用リレーに仕立てる場合には、いつも事前 に許可をえておくことが必要です。 6.4. Sendmail 8.x Berkeley 版の sendmail 8.7.x は、 sendmail5 以降の大規模な改訂版として は最新のものでした。 Linux でのコンパイルを組み込みでサポートしたすば らしいものになっています。 "make linux" をするだけで、すべてが揃いま す。 Berkeley dbm などに自力で立ち向かうよりは、そこらへんにあるLinux アー カイブにころがっているバイナリを見つけてくるほうがずっとお手軽でしょ う。 Jason Haar 氏 j.haar at lazerjem.demon.co.uk の Sendmail 8.6.12 ディス トリビューションは良くできています。これは sunsite.unc.edu の /pub/Linux/system/Mail/delivery/sendmail-8.6.12-bin.tgz で入手できま す。ソースについての解説文書や v8 を標準的に設定する方法についての簡潔 明解な説明もあります。 動かすために最低限必要なものだけを設定するというのが結論です。少なくと も以下の例で示すことだけは、きっちりと把握してください。 6.4.1. 8.7.x 用 mc ファイルの例 sendmail+IDA と同じように、 sendmail v8 でも 設定ファイルから sendmail.cf を作成する際には m4 を使用します。以下の例は、私が自分のサ イト用に利用している設定です (メールを外部に送信する場合には ppp -- イ ンターネットを、メールの受信には uucp を使用)。 dnl divert(-1) #--------------------------------------------------------------------- # # this is the .mc file for a linux host that's set up as follows: # # - connected to Internet for outbound mail (ppp here) # - connected via UUCP for incoming mail # - domainized headers # - no local mailer (use 'deliver' instead) # - no DNS running so don't canonicalize outgoing via DNS # - all non-local outbound mail goes to the RELAY_HOST over smtp # (we run ppp and let our service provider do the work) # # vds 3/31/95 # #--------------------------------------------------------------------- include(`../m4/cf.m4') VERSIONID(`linux nodns relays to slip service provider smarthost')dnl Cwmyhostname.myprimary.domain myhostname.UUCP localhost OSTYPE(linux) FEATURE(nodns)dnl FEATURE(always_add_domain)dnl FEATURE(redirect) FEATURE(nocanonify) dnl MAILER(local)dnl MAILER(smtp)dnl MAILER(uucp)dnl define(`RELAY_HOST', smtp:my.relay.host.domain) define(`SMART_HOST', smtp:my.relay.host.domain) define(`UUCP_RELAY', smtp:my.relay.host.domain) define(`LOCAL_MAILER_PATH', `/bin/deliver') define(`LOCAL_MAILER_ARGS', `deliver $u') 6.4.2. Sendmail v8 について少々 IDA 原理主義者にいわせれば、 IDA と sendmail にはいささかの相違がある ということになるでしょう。今のところ私は次の件を見つけました。 キューを実行するときに、 'runq' ではなく 'sendmail -q' と打ち込んでし まう! 6.4.3. CF パッケージ (訳者追記) sendmail.cf を生成するマクロパッケージとしては、 WIDE Project の中村素 典さんが作成された CF も日本では良く利用されています。 一次配布先は です。日本語で 分かりやすく書かれた解説も同梱されているので、こちらを利用するのもいい でしょう。 6.5. ローカル配信エージェント ほかの大部分の OS とは違って、 Linux はメールシステムを内蔵していませ ん。したがって、ローカルメールの配送には "lmail", "procmail", "deliver" といったようなプログラムが必要です。 とはいっても、最近のディストリビューションは、どれもローカルメイラを同 梱するようになっています。 各ローカルメイラの使い方については、上述した sendmail5.67b+IDA1.5 のバ イナリ付属文書をご覧ください。 7. ユーザエージェントの管理 7.1. Mutt mutt のコンパイル、インストール、実行に問題は起きないでしょう。 qmail を使っている場合には、パッチを当てるか -f オプションを付けて起動するか すれば、ローカルのメールフォルダからメールを読むことができます。 ディストリビューションをアップグレードすると、 mutt が "unknown terminal error"(端末の種類が不明です) というエラーメッセージを出すこと があります。この場合は単に再コンパイルしてください。 7.2. Elm elm は Linux 上で全く問題なしにコンパイル、インストール、実行できま す。より詳しい情報は elm のソースとインストールの説明を見てください。 elm とフィルタプログラムを動作させるには、パーミッションを 2755 (グル ープは mail) とし、 /var/spool/mail のパーミッションを 775、 グループ を mail としなければいけません。 qmail ユーザが qmail の便利な機能をそのまま使うにはパッチがいります。 あるいは elm に -f フラグを付けて、ローカルメールフォルダを指定しま す。 注意してほしいのですが、 elm を MIME サポート付きでコンパイルした場合 には、 metamail を標準の (コマンド検索) パスにインストールしておかない と MIME 形式のメールを取り扱えません。 metamail は thumper.bellcore.com から、またはもちろん "archie" した先から入手でき ます。 バイナリ配布を使う場合には、以下に示すような "/usr/local/lib/elm/elm.rc" というファイルを作って、コンパイル時に埋め 込まれたホスト名とドメイン名を上書きするようにしてください。 o "subdomain.domain" はあなたのドメイン名に置き換えます o "myhostname" はあなたのホスト名に置き換えます #---------- /usr/local/lib/elm/elm.rc ------------------ # # this is the unqualified hostname hostname = myhostname # # this is the local domain hostdomain = subdomain.domain # # this is the fully qualified hostname hostfullname = myhostname.subdomain.domain # #-------------------------------------------------------- "それってカッコよすぎ" 的なものになりますが、 "PGP 装備" の Elm-2.4.24 というものもあります。これを試してみるには elm-2.4.24 に PGP フックを 追加した ftp://ftp.viewlogic.com/pub/elm-2.4pl24pgp3.tar.gz を入手して ください。 coufigure と build の方法は通常の elm とほとんど一緒、つま り上記のパッチも必要に応じて当てる必要があるでしょう。ちなみに、これは 私も使っていて、たいへん気にいっています。もちろん elm-ME+ のような もっと新しいバージョンもありますが。 これは Linux に限ったことではないのですが、 elm にはバグがあるという (間違った) 評判があります。 elm はときどき大きな領域を malloc()できな いというメッセージを表示して落ちてしまう、と聞いたことがあります。これ に対処する確認された方法は、処理済のグローバルなメールエイリアス (alieses.dir と aliases.pag) を削除することです。 これは elm のバグではありません、この現象は、バイナリで配布された elm をコンパイルした人が設定を誤っていたためなのです。 elm のエイリアスファイルは拡張されていて互換性がありません。このため elm がエイリアスとして使用するファイルのパスには sendmail/smail が使用 するものとは違ったものを指定しなければいけません。この問題に関する報告 の量からすると、「世間で」有名なディストリビューションの少なくとも一つ が、以前にこの過ちを犯したようです。 (catzen.gun.de の Scot (Scot W. Stevenson) より) 現行の metamail パッケージには csh を使用したスクリプトが含まれていま す。もし csh (または tcsh) がインストールされていなければ、とても不思 議なエラーがでるでしょう... 7.3. Mailx ローカルに mailx プログラムがない場合には、無駄な苦労は避けましょう -- mailx 5.5 の優れた実装である、 Slackware 2.1.0 以降の mailx キットを利 用するだけですみます。プログラムをソースから作成する場合には、 Linux 環境下でパッチなしでコンパイルするには "pmake" をインストールしておく 必要があります。 もし SLS1.00 の古い "edmail" を今でも使っているならば、それは削除して mailx に置き換えることを強くお勧めします。 7.4. 旧 Mail HOWTO 日本語版から 訳者注:この節は、本文書の旧版 Mail HOWTO を翻訳された、さとけん@Fo rUs さん、箕浦 逸史 さんが日本語版で独自に追加された部分です。 7.4.1. metamail これは Linux の問題ではなく、一般的なことですが、メールの Subject など のヘッダに日本語を使うためには MIME エンコードされた文字を用いなくては なりません。エンコードされていない漢字のヘッダをつけることは、メールリ ーダによっては文字化けの原因になります。 metamail による MIME エンコー ディングをすれば、ヘッダの漢字のみならず、画像や音声などのデータをメー ル本文に含めることもできます。 metamail は MIME エンコードされたネット ニュースを読むためにも必要です。 (GNUS などのニュースリーダから呼び出 されます) metamail はたとえば以下のサイトから入手できます。 o ftp.iij.ad.jp: /pub/mail/mime/mm2.7/ : mm2.7.tar.gz などというファイル名で登録されています。config.h の冒頭に #define LINUX を宣言してやれば簡単にコンパイルできます。 7.4.2. VM (View Mail) VM は Emacs から利用できるメ! フォルダを作ってメールを分類する機能が あります。 metamail を利用して MIME を読むことのできるパッチ (5.35W) などもあります。 VM およびそのパッチは以下のサイトなどから入手できるでしょう。 o ftp.iij.ad.jp: /pub/misc/elisp/package/vm o ftp.cs.titech.ac.jp: /pub/gnu-rel/vm/ わたしの経験では、5.35W はいくつかの emacs lisp ファイルを手動でコンパ イルしなくてはなりませんでしたが、それでもインストールは簡単です。 8. リモートメールの取り扱い 本章では、 POP とIMAPを使ってリモートのメールを処理する方法を説明しま す。 その他にはメールスプールを NFS で共有するという手段や (おっとご注意! みんなが使ってるロックの方法は同じ?)最近一般的になった、 WWW-メールゲ ートウェイを使う手段などがあります。 8.1. 歴史 ワークステーションのネットワークにおいて、メールは常に悩みの種でした。 o "user@computer.foo.com" を使うやり方。これには "computer" がダウン した場合にネットワークが部外者に知れてしまう、同じ人なのにコンピュ ータが変わると別のアドレスになってしまう、などの問題があります。 o あるいは "mailhost.foo.com" というメールハブを採用して、アドレスの 書き直しをするようにしますか。そうすれば、それぞれ違うコンピュータ にいる人達でも、みんな同じアドレスから発信したように見えます。 でもその場合、各ユーザはどうやってメールを読めばいいのでしょう? rsh と elm を使いましょうか? :-) きっとメールハブが負荷でパンクしてしまいますね。フォワーディングしたり UUCP や SMTP を使うこともできますが、これはまた複雑すぎます。 そこで POP/IMAP の登場です。どちらも初期にはセキュリティの問題がありま した (新しいバージョンでは ssh を使うように改良されました)。ローカルに 何かメール配送プログラムが必要な場合も有ります (例えば elm を使う場合 なら qmail, smail, vmail など。 mozilla を使うならそんな手間はいりませ ん!)。でもとにかく、メールの送受信は単純になります。 8.2. メールの取得 以下に POP の主な欠点を列記します。 o パスワードはネットワークに平文で送出されます。 o いまは大抵大丈夫ですが、 POP に対応したメーラを使ってください (例え ば Pine, Emacs, Mozilla, Netscape, Mutt, IE, Pegasus, Eudora, Claris などなど) o ローミングする (あちこちのコンピュータからメールを読む) なら、昨日 使っていたコンピュータに引き出したメールが頭痛の種になりかねませ ん。 o POP サーバプログラムによっては(例えば qpopper や ipop3d)使用率の 高いメールハブに非常に高い負荷を与える原因になります。メールハブに メールを残さない設定にしたり、POP サーバプログラムを cucipop のよう な軽いものにしたり、また inetd 経由で起動するのをやめたりすることを 検討してください。 平文パスワードの問題は、 POP の通信路を暗号化したり APOP や RPOP のよ うな拡張機能を使用することで解決できます。メールリーダ側の問題は、メー ルリーダを交換してしまう (ユーザを再教育する労力は軽視しないほうがいい ですよ)、あるいは POP 受信プログラムとローカルのメールプログラムとを併 用することで解決できます。 IMAP が POP よりおすすめできるような状況もいろいろあります。例えばリモ ートアクセス (とくにローミングアクセス) する場合などです。 POP を使う のはパスワードの盗聴をそれ程気にしないですむ LAN の内部に限定すべきで しょう。 Mark Aitchison が hosts.deny と hosts.allow を使った解決法を レポートしてくれました(Net-3 HOWTO を見てください、これは POP を inet 経由で起動することを前提にしています)。 メールをメールハブに残すかどうかを決めるには、メールハブ機のディスク容 量・バックアップのしやすさ・メールのセキュリティ・ローミングを許可する かどうか、などを考慮する必要があります。つまりどうするのが最善かはその 組織によるわけです。もちろんこの場合、メールが他人に読まれないとは保証 できませんが、少なくとも他人がメールを削除することはできません。全ての メールが PGP 暗号化されているなら、これがベターな解でしょう。 お勧めの POP プログラムをいくつか挙げます。 o gwpop (a Good Way to POP) は、暗号化された通信路を使用し、メールを 直接スプールに保存するため、とても安全です。しかし Perl が必要で す。 o popclient は簡単に使えます。 例えばログイン名が john でパスワードが PrettySecret ならば、このよ うに起動します。 $ popclient -3 -v mail.acme.net -u john -p "PrettySecret" -k -o JOHN-INET-MAIL (訳注: ただしこの方法には、 ps axuww などとすれば、そのマシンにログイ ンしているユーザなら誰にでもパスワードが見えてしまうという強烈な欠点が あります。控え目に言っても、まったくお勧めできません) o fetchmail は活発にサポートされていて、使い方も非常に簡単です。設定 は ~/.fetchmailrc ファイルで行うので、メールを取得する時には fetchmail と実行するだけです。 私の .fetchmailrc はこんな内容です。 poll mail.server protocol pop3: forcecr password PrettySecret; (訳注: なお生のパスワードを記入する以上、 chmod 600 .fetchmailrc など として、他のユーザに .fetchmailrc を覗き見されないようにしてください) fetchmail を (RFC に厳格に準拠した) qmail と併用する際には、 forcecr オプションが必要なことにご注意を。 8.3. メールの送信 送信には SMTP 対応のソフトウェア、例えば qmail, smail, vmail または mozilla (こいつはメールリーダ、POP 受信、SMTP 送信と全てをこなします) が必要です。 これまでに述べたセクションに従って、気に入ったものをインストールして設 定してください。そして「送信試験」にこぎつけたら、メールハブ上のローカ ルなアカウントに送信してみましょう。 8.4. メールを読む お使いのプログラムに全部の機能が揃っていなくても、 elm, pgp, mush, pine ... といった、フリーで入手できる多くの優れたプログラムが Linux で は動作しますから、これらをインストールすれば OK です。 8.5. テスト お使いのメールハブで POP サーバが動いているかはこうして調べます。 $ telnet mailhost 110 もしうまくいけば、"OK Pop server (...) starting" というようなメッセー ジが表示されるでしょう。 "quit" と入力して終了します。 ssh で暗号化された「通信路」をインストールするには、まず以下のようにし てメールハブを調べます。 $ ssh mailhost date 日付が表示されれば大丈夫でしょう。 ssh がパスワードを聞いてこないよう にするには、クライアントの名前を書いた ".shosts" というファイルをメー ルハブ上に作る必要があります。 gwpop が使用する ssh のポート転送をテス トするにはこうします。 $ ssh -n -f -L 12314:localhost:110 mailhost sleep 30 続いて $ telnet localhost 12314 うまくいけば POP サーバの開始メッセージが表示されるでしょう。 ssh を使 わないときには gwpop のスクリプトから $ssh をコメントアウトするのをお 忘れなく。 procmail が動いているか確認するには "procmail -v" を試して みてください。 8.6. 利用する さあ、gwpop の Perl スクリプトを編集して全てが OK かを確かめ、 gwpop を実行しましょう。 $ gwpop -v your-username POP password on mailhost: yoursecretpasword もし gwpop の「エラーメッセージ」が正常ならば、メールハブ上のメールは gwpop に指示したローカルホスト上の場所にダウンロードされたはずです (何 通かメールのある状態で試験しましょう)。 gwpop はデーモンとして動かすこともできます。 $ gwpop -d $HOME/tmp your-username これで gwpop は常駐し、メッセージは syslog に送られます。 gwpop に HUP シグナルを送ればメールを強制的に取得させることができます。 POP ソフトウェアはこちらから入手できます。 ftp://ftp.unina.it/pub/Unix/pkgs/network/mail/gwpop ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail http://www.cs.hut.fi/ssh/ 9. 謝辞 以下の方々が、情報と経験とをまとめ上げ、この文書を完成させる手伝いをし てくださいました。 Steve Robbins, Ian Kluft, Rich Braun, Ian Jackson, Syd Weinstein, Ralf Sauther, Martin White, Matt Welsh, Ralph Sims, Phil Hughes, Scot Stevenson, Neil Parker, Stephane Bortzmayer, そして大きな貢献をしてく ださった Vince Skahan には特に感謝します。 Eric S. Raymond はこの文書を編集し、たくさんの間違いを訂正し、彼の Mail User's HOWTO から「電子メールはどのように動作するか」の章を転載す ることを許可してくださいました。 誰かを忘れていたらごめんなさい。その場合はメールで教えてください! 10. 日本語訳について この文書の日本語訳は Linux Japanese FAQ Project が行いました。誤訳の指 摘やご意見などは、当プロジェクト() 宛にお願いします。 改定履歴を以下に示します。 Mail-HOWTO, 29 November 1995 Mail-User-HOWTO と Mail-Administrator-HOWTO (本文書) とに分割さ れる前の文書です。さとけん@ForUsさん と箕浦 逸史さん が翻訳されました。 v3.1j, 25 December 1999 以下の JF Project メンバーにより翻訳されました。 訳出: o 藤原輝嘉 : 1-4 章, 6 章 (6.2), 9 章 o 中谷千絵 : 5 章 o 早川仁 : 6 章 (6.1) o 佐藤亮一 : 6 章 (6.3-6.5) o Yuichi ITO : 7-8 章 校正・コメント: o 菊谷 誠 o 佐野 武俊 o 武井 伸光 o 水原 文 o 高城 正平 o 森本 淳 o 中野 武雄