高橋 聡 hisai@din.or.jp 2000/04/19 sendmail address rewrit- ing mini-HOWTO Thomas Roessler, roessler@guug.de v0.0, 6 May 1998 このドキュメントは、自宅からダイヤルアップでアクセスしている方々を対象 に sendmail の簡単な設定方法を説明します。 1. はじめに このドキュメントでは、大学の設備やオンラインサービスを通じて、最近の主 流と言えそうなありふれた形でインターネットに接続している読者を想定して います。具体的にはこういう方が対象です。 o 接続時はプロバイダにダイヤルしてシリアル回線で PPP 接続している o メールはプロバイダの POP サーバか IMAP サーバにスプールされているも のを受信し、SMTP を通じて送信している o 自前のドメイン名は持っていないため、いつ何時もひとつのアドレスを使 用するしかない 上記に加えて、すでに Eric Allman 氏作成の sendmail の新し目のバージョ ンがインストールされているものとします(バージョン 8.8.8 がこのドキュメ ントを書いている時点での最新版で、問題なく動作すると思います)。 このドキュメントでは Debian GNU/Linux 独自の構成を例にあげていま す。Debian GNU/Linux 以外のディストリビューションを利用されている場合 はご注意ください。 下記の情報を事前に調べておいてください。 o 加入している ISP のメール・サーバ o 自分のインターネット上のメール・アドレス これから行う設定には主に 2 つの目標があります。 1. ローカルなユーザ間でメールのやり取りができること 2. 外部に対しては、ローカルのメール・アドレスではなく ISP のメール・ア ドレスを使用すること sendmail の機能の 1 つである genericstable を使うことによって、この目 標を達成することができるようになります。 2. 設定ファイルの構成 まず /etc にある sendmail 関連の設定ファイルすべてを /etc/mail に移動 して、他の設定ファイルと分けましょう。sendmail はこれらのファイルが /etc にあるものと仮定していますので、問題が生じないように /etc/sendmail.cf は /etc/mail/sendmail.cf にシンボリック・リンクを張っ ておきましょう。 下記のファイルが /etc/mail に存在していると思います。 o aliases - ローカルで使用されるアドレスが書かれている o genericsdomain - ローカルに接続されているホストの設定情報が書かれて いる o genericstable - アドレスを書き換えるルールが書かれている o sendmail.cf - sendmail の設定が書かれている o sendmail.mc - sendmail.cf のソース これらのファイルの内 .db ファイルを合わせて持っているものもあります。 これらはハッシュされているデータベースで、sendmail は直接こちらを参照 します。 sendmail の cf 関連のソース・ツリーが /usr/lib/sendmail.cf にあるもの とします。これは Debian GNU/Linux の場合です。他のディストリビューショ ンでは違う所にあるかもしれないので、ディストリビューション付属の資料を 読んで詳細を確認してください。 3. sendmail の設定 3.1. 主な設定ファイル sendmail の設定には、とても複雑なルールを使用する必要があります。それ だけいろいろ工夫をこらした設定を行うことが可能ですが、普通は一か らsendmail.cf を書くようなことは行いません。それは時間の無駄です。書き 上げること自体に興味を持っているなら、このドキュメントを読むことを即刻 止めて、かわりに O'Reilly から出版されている「コウモリ本」を読むことを お薦めします。 これらのルールを手書きするかわりに、m4 マクロ・プロセッサのお世話にな ることにしましょう。そうすれば sendmail 付属の雛形のファイルから設定 ファイルを生成できます。 まず sendmail.mc ファイルのはじめの部分を見ましょう。 ______________________________________________________________________ include(/usr/lib/sendmail.cf/m4/cf.m4) VERSIONID(`sendmail.mc - roessler@guug.de') OSTYPE(debian) define(`ALIAS_FILE',`/etc/mail/aliases') ______________________________________________________________________ 最初に cf.m4 を include しています。この m4 マクロのファイルにはこの後 で利用することになるマクロが数多く定義されています。指定しているパスが 正しいかチェックしてください。なおここであげているのは、Debian GNU/Linux での例です。OSTYPE はいろいろなデフォルトの設定値をセットす るのに便利なマクロです。Debian を使っていないなら、「debian」を 「linux」に置き換えてください。ALIAS_FILE によって sendmail が参照する エイリアスのリストを決めています。 下記の行は sendmail の機能である genericstable を使用する指定していま す。またそれを使用するために必要な設定ファイルがどこにあるのかも指定し ています。 ______________________________________________________________________ FEATURE(masquerade_envelope) FEATURE(genericstable, `hash -o /etc/mail/genericstable') GENERICS_DOMAIN_FILE(`/etc/mail/genericsdomain') ______________________________________________________________________ masquerade_envelope 機能は、sendmail がメッセージに書かれているエンベ ロープの送信者(Sender)の部分を書き換えます。外部のメール配送システムが メールを配送できなかった場合や、何らかの警告メッセージを送信者に知らせ る場合にこのアドレスを使用します。generics* ファイルについては後で説明 します。 それではここで、スマートホストと呼ばれている、外部にメールを配送する役 目を負うマシンについて説明しておきましょう。このマシンが ISP の POP、IMAP サーバとは違う役割を果たしているということに注意してくださ い。本当かな、とお思いなら、 ISP に電話して聞いてみてください。主な設 定ファイルの内容は下記の通りです。 ______________________________________________________________________ define(`SMART_HOST',`mail-out.your.provider') ______________________________________________________________________ mail-out.your.provider の部分を ISP のホスト名に置き換えてください。こ の名前はインターネット上で一意に識別できる名前である必要があります。 「mailer」の記述がある最後の 2 行は sendmail がいろいろな種類のメール をどのように処理するかを決定するために必要です。 ______________________________________________________________________ MAILER(local) MAILER(smtp) ______________________________________________________________________ この sendmail.mc から sendmail.cf を生成するには、下記のコマンドを root で実行してください。 ______________________________________________________________________ # m4 sendmail.mc > _sendmail.cf # mv -f _sendmail.cf sendmail.cf ______________________________________________________________________ m4 による処理結果をテンポラリファイルにいったん書いてから、正式の名前 に変更してください。こうすることによって、sendmail がまだきちんと設定 していないファイルを使用してしまうことを防ぐことができます。 3.2. アドレスの書き換え まず sendmail にどれがローカルなアドレス(つまり書き換えの対象になる)な のかを判断させる必要があります。このやり方はとても単純です。マシンにつ いているインターネットで一意に識別できるホスト名を /etc/mail/genericsdomain に書くだけです。そのホスト名を調べるには下記 のコマンドを入力してください。 ______________________________________________________________________ $ hostname -f ______________________________________________________________________ それではアドレスの書き換え方を決めるテーブルである /etc/mail/genericstableをきちんと書いてみましょう。このファイルは、ス ペースで区切られた 2 つのカラムから構成されています。左側のカラムがロ ーカルで使われるアドレスで、右側がその代わりに使用されるアドレスです。 下記のような形になります。 ______________________________________________________________________ harry harryx@your.isp maude maudey@her.isp root fredx@your.isp news fredx@your.isp ______________________________________________________________________ 1 つの指定ごとにローカルにあるマシンのそれぞれのアカウントを指定してく ださい。そうするとローカルなシステムから自動的に出されたメールに正しい ヘッダー情報がつけられることになります。 パフォーマンスを上げるため、sendmail はテキストで書かれたこのファイル を直接利用しません。その代わりに「ハッシュ済み」のファイルを使います。 そのファイルを作るには、下記の通りに入力します。 ______________________________________________________________________ # makemap -r hash genericstable.db < genericstable ______________________________________________________________________ genericstable にある書き換えのルールはローカルでのやり取りや外部から配 送されるメールには適用されません。この書き換えはローカルなシステムから ISP のスマートホストに送る場合にだけ行われます。 3.3. Aliases aliases ファイルには、ローカルでやりとりするメールが使用する名前を定義 してあります。root のように、自動的にシステムからのメールを送られる、 何かを管理するためのアカウントにとっては便利な機能です。 /etc/mail/aliases の正しい例は下記のような内容のファイルになるでしょ う。 ______________________________________________________________________ root: fred news: root postmaster: root mail: root www: root nobody: /dev/null MAILER-DAEMON: nobody ______________________________________________________________________ この例ですと、root、news、postmaster、mail、 www ユーザ宛のメールは fred に送られ、nobody と MAILER-DAEMON 宛のメールは /dev/null 行きにな ります。 aliases は genericstable と同様に多くのエントリを含みます。したがっ て、genericstable と同じ理由で sendmail がこのファイルをテキストで扱う のは得策ではありません。genericstable と同じ仕組みである ハッシュされ たデータベースが aliases にも利用されています。ただ makemap を直接使用 せずに、newaliases というコマンドを使ってもかまいません。このコマンド が必要な処理をすべて自動的に行ってくれます。 4. さらに知りたい場合は sendmail のソースには、ドキュメントがかなりたくさんついています。まず これを読んでみてください。特に cf/README を。 sendmail の設定方法を深く究めたいならば、「コウモリ本」と呼ばれている O'Reilly Bryan Costales, Eric Allman, and Neil Rickert: "sendmail". O'Reilly, 1993 を読んでください。 訳註:日本語版として、村井純 監訳、鈴木克彦 訳:『sendmail 解説』(イン タ−ナショナル・トムソン・パブリッシング・ジャパン、1994)があります。 5. 日本語版謝辞 翻訳を行うに当たって下記の方々にお世話になりました。ありがとうございま した。 o 高城@長野高専 さん o 山下義之 さん