14.電子メ−ルの仕組みと利用 '96 14-1. 電子メ−ル設定の基本 (1) メ−ル配送の仕組み * 基本 メ−ル配送は郵便の配送に似ている。郵便は中央郵便局から地域の郵便局へ、そして各家 に届けられる。メ−ルが届けられる過程をみると、中央郵便局であるメ−ルサ−バから地 域の郵便局の各ホストに来て、そして各家のユ−ザに届けられる。メ−ルサ−バは、メ− ルをどこのホストに送ればいいか知っていて、各ホストではどのユ−ザに送るのか知って いなければならない。これら配送を制御するために、一般的には sendmail というデ−モ ンと sendmail.cf という制御ファイルを使う。それにメ−ルの宛先の検索に DNS を使う。 sendmail、sendmail.cf、DNS の組み合わせでメ−ル配送が実現されている。 しかし後で 読み返したところこの説明はあまりよくない。この文書を書いた時、イメ−ジしていた中 央郵便局は、ロ−カルなネットワ−クの中でのメ−ルサ−バである。地域の郵便局は各ユ −ザが使用するEWSで、クライアントとしてsendmail が稼働している。 各家のユ−ザ とは、そのEWSホストのマルチユ−ザとしてのそれぞれのユ−ザのことである。 インタ−ネットには実は、中央郵便局に相当するものは存在しない。あるのは全て地域郵 便局である。ただし先の説明の地域郵便局とは意味が異なり、その組織のメ−ルの窓口と してのメ−ルサ−バである。地域郵便局をインタ−ネットにおいて識別するのがドメイン 名である。そしてドメイン名に対応するそのメ−ルサ−バのホストのIPアドレスが最終 的な識別子ということになる。このドメイン名からIPアドレスへの対応を検索するのが DNS という訳である。 EWSでは sendmail はメ−ルサ−バ、メ−ルクライアントのホストで稼働させる必要が ある。サ−バとクライアントの区別は、sendmail.cf の制御ファイルの記述で区別される。 sendmail.cf は極めて複雑なフォ−マットで、理解することはほとんどできないと思った 方がいい。 本書では、少しの変更でどのEWSでも使える万能 sendmail.cf を用意した。 EWSでメ−ルを読み書きするには mail、ucb mail と言うのをかつては用いた。 その後GUIで使えるソフト、INDY では Zmail と言ったのも出て来るようになった。こ れらはメ−ルを送るのは SMTP、受けるのも SMTP で直接配送ができる。Windows のDOS/V パソコンや Macintosh で、 メ−ルのやりとりが何とか出来るようになったのは1996 年年頃からである。メ−ルを送るのは SMTP、受けるのは POP という方法を使う。POP で はユ−ザがメ−ルサ−バまで来たメ−ルを、メ−ルソフトで自分で取りに行く。 [ 設定の手順 ] 1). DNS の MX レコ−ドの設定。 2). メ−ルサ−バとクライアントの sendmail.cf の設定。 3). メ−ルサ−バでの aliases ファイルの記述。 4). メ−ル配送先EWSでのユ−ザ passwd の登録。 5). POP サ−バ、クライアントの設定。 * 用語の定義 メ−ルの集配収するホストを、先にメ−ルサ−バと呼んだ。これにはさまざまな呼び方が されている。雑誌等ではメ−ルホストをよく使っているみたいである。しかし本書ではメ −ルクライアントに対するサ−バという意味で、メ−ルサ−バを使うことにする。よって 単なる電子メ−ルのクライアントでないものは、すべて総称してメ−ルサ−バと呼ぶ。メ −ルサ−バの中で、インタ−ネットの接続口にあたるものを特にメ−ルゲ−トウェイとも 呼ぶことにする。メ−ルリレ−は、最終的にメ−ルをクライアントに配送しない中継サ− バである。ただし単にメ−ルリレ−といった場合は、メ−ルゲ−トウェイのこととする。 メ−ルサ−バ:メ−ルホスト、メ−ルエクスチェンジャ−、 メ−ルリレ−やメ−ルリレ−ホスト、メ−ルゲ−トウェイ 下の図で hostA には外部からの電子メ−ルがいったん入り、すぐ hostB に転送するとし よう。hostB は内部ネットのメ−ルクライアントの hostC などに配送する。 hostC が外 部に電子メ−ルを送る場合は、この逆で hostB に送り、hostB から hostA に行き、イン タ−ネットに出ていくことになる。この場合 hostA と hostB はそれぞれメ−ルを中継す るだけだがら、メ−ルリレ−としての機能も持っていることになる。 :↑インタ−ネットへ hostA □ MX:メ−ルゲ−トウェイ □ router | DNS | ----------------------------------- | □ | ----------------------------------- | | hostB □メ−ルサ−バ hostC □メ−ルクライアント ※後には hostB は社内用メ−ルサ−バ、メ−ルストアと呼ぶようになった。 hostA の方 は社外用メ−ルサ−バ、メ−ルリレ−と呼ぶようになった。`2h/09/M 追記。 * sendmail.cf 作成の変遷 `23/05 1996年当時、トッパン刊の「インタ−ネット構築入門」を元に万能 sendmail.cfなる ものを自作した。その当時、すでにWIDEプロジェクトの sendmail.cfを作成するフリ −ソフト、CF ツ−ルがあったかどうかは知らない。ともかく、いつの間にか国内では CF ツ−ルを用いるのが当り前になり、SPAMメ−ルも対応して行った。万能 sendmail.cf はSPAMにまで対応させるのは、小生の力量として難しかった。その後1998年9月 CF-3.7Wpl2 で、CF の開発およびメンテナンスは止まり、sendmail 8.10.0 以降に対応し ないことになった。ただし、ユ−ザ認証や暗号化機能を使わないのであれば、使うことは まだできる。そして今日では、sendmail 自体に入っている sendmail.cf 作成ツ−ル、cf と呼ばれるのを用いるのが通例となっていく模様である。その後そうなりました。 * 直接相手メ−ルサ−バにメ−ルを送る `24/05 通常のメ−ルサ−バは sendmail や qmail といったソフトで複雑な動きをし、 かなり設 定も難しい。 それがばかちょんで設定できる Windows OS用のメ−ルサ−バのソフトと いうのがある。ざっと調べたところ MELON, Neon, easmtp, Radish, melon とたくさんあ る。これらのソフトは Windows に常駐して SMTP サ−バとしてメ−ルを待ち受ける。 同 じパソコンにあるメ−ルソフトを使い、メ−ルソフトの設定を SMTP サ−バをロ−カルに 向け、メ−ルを送る。すると常駐しているこうしたソフトがメ−ルを受け、相手先のメ− ルサ−バを DNS で検索し、 相手先 SMTP サ−バへ直接に接続してメ−ルを送る動きをす る。ここでは、Portable SMTP サ−バ Radish というのを試してみた。サッポロソフト開 発工場が作成したフリ−ソフトである、http://homepage2.nifty.com/spw/。 親切なログ が出て、メ−ル送信に際して何をやっているかよく分かる。 Radish の最新バ−ジョンは 2004/05/03 リリ−スの Version 3.0.0-b026 で、SMTP,POP3, DNS サ−バの機能がある。精力的にバ−ジョンアップしているもよう。しかしバ−ジョン 3は機能が豊富になっている分、設定がややこしい。DNS の指定は付属の named.ca ファ イルで行うようになっている。 これはインタ−ネットの DNS のル−トファイルそのもの である。バ−ジョン2では DNS の指定は、 画面の項目にIPアドレスを入れることによ る。その方が分かりやすいので、Version 2.2.8 をダウンロ−ドした。圧縮ファイルを展 開して、できた Radish.exe をクリックすると5つのファイルができた。Windows 画面右 下のタスクトレイに "だいこん" のアイコンが出る。これをクリックして[表示]->[設定] で {●指定があるまで送信しない}、{メ−ル保存場所} c:\my documents\katou\radish\、 {プライマリDNS} 202.241.128.3、そして {〆デバッグモ−ド} と設定した。 同じパソコンの Netscape Messenger からメ−ルを東海インタ−ネットの自分宛にメ−ル を送ってみる。Netscape Messenger の送信メ−ル(SMTP)サ−バは [ 127.0.0.1 ] にして である。すると次の Radish では、c:\my documents\katou\radish\mail_00000 にメ−ル のメッセ−ジが一時的に置かれる。 Radish の [メ−ルボックス]->[すべて送信] をクリ ックすると、以下のログの "メールファイルの処理を開始します" から実行されて相手メ −ルサ−バにメ−ルが行く。 Radish で "受信したら直ちに送信" にチェックを入れてお けば、すぐにメ−ルは行く。そうそう Radish.exe をクリックしても、何も画面が現われ なかった。Windows 画面タスクトレイの "だいこん" のアイコンは、パソコンを終了させ ると同時に消える。再起動すると出て来ない。常駐させるにはどうしたらいいのかな?。 [ デバッグモ−ドにして出たログ ] メールの受信を開始しました。 ログには日付と時刻が付いていたが Message-ID: <40A1CA92.E1AFD95B@nix.co.jj> 紙面の都合、取った。直ちに処理さ Date: Wed, 12 May 2004 15:56:19 +0900 せれば、全処理ものの数秒で終わる。 From: =?iso-2022-jp?B?GyRCJCskSCQmGyhC?= X-Mailer: Mozilla 4.78 [ja] (Win98; U) X-Accept-Language: ja パソコンは Windows 98 を使用した。 MIME-Version: 1.0 Radishのバ−ジョン3でもやってみ To: ikken@tcp-ip.or.jj たと。ログ出力は何段階かあって詳 Subject: test 細ログにしたところ、ログのメッセ Content-Type: text/plain; charset=iso-2022-jp −ジは英語で、かなり一杯でてきた。 Content-Transfer-Encoding: 7bit katou . 受信完了 [FROM:katou@nix.co.jj TO:ikken@tcp-ip.or.jj FILE:c:\my documents\kat... メールファイルの処理を開始します。[FILE:c:\my documents\katou\radish\mail_00000] アドレスの検索を開始します。[DOMAIN:tcp-ip.or.jj] DNSサーバとの接続を開始します [DNS:202.241.128.3] DNSサーバと接続しました。[DNS:202.241.128.3] DNSサーバから データを検索しました。 [10] mailgw.tcp-net.ad.jj 157.14.7.8 MX 検索結果 優先順位[1] 157.14.7.8 メールを送信します。[FROM:katou@nix.co.jj TO:ikken@tcp-ip.or.jj ADDR:157.14.7.8] メールサーバとの接続を開始します [ADDR:157.14.7.8] メールサーバと接続しました。 [ADDR:157.14.7.8] R:220 mailgw.tcp-net.ad.jj ESMTP S:HELO Radish R:250 mailgw.tcp-net.ad.jj S:MAIL From: R:250 ok S:RCPT TO: R:250 ok S:Received: from nix.co.jj ([127.0.0.1]) by Radish(2.2.8) with SMTP; Wed, 12 May S:Message-ID: <40A1CA92.E1AFD95B@nix.co.jj> 2004 15:56:19 +0900 S:Date: Wed, 12 May 2004 15:56:19 +0900 S:From: =?iso-2022-jp?B?GyRCJCskSCQmGyhC?= S:X-Mailer: Mozilla 4.78 [ja] (Win98; U) S:X-Accept-Language: ja S:MIME-Version: 1.0 S:To: ikken@tcp-ip.or.jj S:Subject: test S:Content-Type: text/plain; charset=iso-2022-jp S:Content-Transfer-Encoding: 7bit S: S:katou S: S:. R:250 ok 1084348173 qp 14637 S:QUIT 送信完了 [FROM:katou@nix.co.jj TO:ikken@tcp-ip.or.jj] (2) sendmail.cf について * sendmail.cf 自動作成プログラム sendmail.cf ファイルの作成、記述は電子メ−ルをセットアップするには避けて通れない。 しかしこれ程やっかいな代物はない。 少し前までなら mailconf という sendmail.cf 作 成プログラムが使えたが、これは DNS に対応していないのでもう使えない。 DNS 対応の sendmail プログラムは、今では CF-3.3 を使うことになっている。 これで sendmail R8 の V5 フォ−マットや R5 の V1 フォ−マットが作成できることになっている。詳しくは 「UNIX MAGAZINE」'94/05、P.32〜 "電子メ−ルの応用(2)" を参照のこと。 * 万能 sendmail.cf しかし sendmail.cf ファイルは色々なEWSのものと見較べると、 ほとんど同じである。 そこで違いを探し、どのEWSでも共通な sendmail.cf を作成しようと考えていた。同 じことを考えた人がいて、米 Texas Internet Consulting 社 が書いた「インタ−ネット 構築入門」(株)トッパン刊に掲載されていた。sendmail.cf はその会社の ftpサイトにあ る。ftp.tic.com/pub/cf.pn.tar.gz。ここに m4 ファイルという形式で書かれている。ま たこの本ではメ−ルサ−バ用、メ−ルクライアント用などと、それぞれの sendmail.cfに 分けて書かれていた。そこでこれらの sendmail.cf を少し修正し、万能 sendmail.cf フ ァイルを作ってみた。 * m4 マクロファイルの使い方 m4 マクロというのは、簡単に言えばC言語の include と全く同じ。ソ−スを展開して挿 入するだけのことである。sendmail.cf はややこしいけど、部分的には共通なところがあ るので、include 風に記述したわけである。非常にエレガントなやり方である。下手に自 動作成プログラムを使うより、はるかにスマ−トだし、理解するにも役立つ。 tcp.m4 nnn.m4 ---------------- ----------------- |heno heno mohe |KONNITIWA |katoukun desu | |include(tcp.m4) << tcp.m4 ファイルを挿入するだけのこと。 m4 プログラムが無ければ、手作業でや $ /usr/bin/m4 nnn.m4 > nnn.cf ってしまう。 nnn.cf ---------------- |KONNITIWA | |heno heno mohe |katoukun desu * sendmail.cf の読み方のポイント [ 例1 ] ----------------------------- |DDnix.co.jj << ホストのドメイン名。 |DMtcp << SMTP でメ−ルを転送する。 | | |CS cad gear << C はクラス定義を表わす。S というクラスがト−クン cad, gear を | | もつ。 |R$*<@$=S.$D>$* $#$M $@mail_relay.$2.$D $:$1<@$2.$D>$3 << ル−ルセット。 $+ 1個以上のト−クン *** 大文字、小文字は区別しない *** $- ちょうど1個のト−クン $* 0個以上のト−クン $=class_name クラスの値に1つマッチする $=S は cad, gear とマッチしているか調べていることになる。 結局 R$*<@$=S.$D>$* は katou@cad.nix.co.jj や haruo@gear.nix.co.jj といった文字列になっているかどうか調 べている。 [ 例2 ] /etc/aliases ----------------------------- |katou:katou@hostA.nix.co.jj ---------------------------------------------- |DDnix.co.jj | | |R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 [a] |R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 [b] 1) このような状況で katou 宛に電子メ−ルを送ると、エイリアス展開されて [a] のと ころでは katou@hostA.nix.co.jj となって入ってくる。ちょうど [a] の左のル−ル セットにマッチするので、それに続く評価がされ sendmail.cf を抜けることになる。 SMTP で配送 ↓ R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 ↑ ↑ ↑ ↑ katou@hostA.nix.co.jj hostA katou hostA $3 は何もなし。 配送先の 配送先の電子メ−ルアドレス ホスト名 2) 外部宛の電子メ−ル、 例えば hanako@iij.ad.jp は [a] のル−ルにマッチしないの で、下に降りてきて [b] のル−ルにマッチするかチェックする。 R$*<@$+>$* の $+ は1個以上のト−クンなので、マッチする。 R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 ↑ ↑ ↑ ↑ hanako@iij.ad.jp iij.ad.jp hanako iij.ad.jp $@$2 は配送先のドメイン名となる。iij.ad.jp の DNS にアクセスして MX レコ−ド を調べ、iij.ad.jp のメ−ルサ−バのIPアドレスを得る。そしてそのメ−ルサ−バ に SMTP で電子メ−ルを送る。iij.ad.jp のメ−ルサ−バはこの電子メ−ルを受ける と、自前の sendmail.cf により該当ユ−ザにメ−ルを配送することになる。 * エイリアス機能のこと `2e/03 「UNIX Network sendmail メ−ルサ−バの構築と管理」2002年2月25日初版、ソフトバンク パブリッシング(株)。P.161〜169、"4.5 バ−チャルドメインの設定"。P.149 の記述では /etc/mail/aliases で "user1: \user1,user2" とすると "\" すなわちバックスラッシュ を付けると再帰的な解釈をしなくなり、user1 自身と user2 にメ−ルは送られる。 /etc/aliases で user1@hostF.nix.co.jj へメ−ル転送する、それに自分自身にも送って おきたい。aliases は、自分自身には送ることができないのかと思ったが、できる。多分 こういう記述があると最初に user1@nix.co.jj と user1@hostF.nix.co.jj へメ−ル送る のだなと展開がされるのでないか。そして sendmail.cf を見て実際に送付となる。 /etc/aliases Sun Solaris 9 のマシンのメ−ルストアのモニタで改め --------------------------- て見たらバックスラッシュでなくて、¥マ−クが表示さ |user1: \user1,user1@hostF れていた。telnet で入って見たのは "\" だった。 注.上記はメ−ルストアを Solaris 9 のマシンからアプライアンスの FortiMail に移行 するため検討して、調べ直して改めて分かったことである。 (3) 万能 sendmail.cf ファイル * サブドメイン対応の万能 sendmail.cf 米 Texas Internet Consulting 社の sendmail.cf を元に作成したのが以下である。先ず は UUCP をはサポ−トしないため、UUCP に関係する部分を削除した。 それで動作は確認 した。しかしまだ uucp と bitnet という文字が残っている。もう少し整理できるはずで ある。UUCP はまだインタ−ネットがIP接続する以前に、 普通の電話回線で電子メ−ル や Net-News をバケツ・リレ−式で転送し合っていた時の、Unix-to-Unix Copy というプ ロトコルである。現在でもまだ一部残ってはいる。 BITNET はインタ−ネットとは違って 大学や研究機関が独自に形成していたコンピュ−タ・ネットワ−クの1つである。それに インタ−ネットと相互接続するため sendmail.cf に書かれているのである。もう BITNET の記述も無くても問題ないだろう。以下は付録では sendmail.cf.txt である。 空白がタ ブ・コ−ドであったりするので、下記をそのまま sendmail.cf としても働かない。 sendmail.cf.txt #################################################################### # # 万能 sendmail.cf ファイル [ made by katou refered to tic.com ] # # Apollo SR10.4, SunOS 4.1.2-JLE, 4.1.4-JLE, Solaris 2.5.1, # INDY IRIX 5.3 で使用を確認。uucp のメ−ル配送はサポ−トしない。 #------------------------------------------------------------------ # # Dj$w.$D 部は注意が必要。hostname が FQDN の場合はこのまま。 # hostname が FQDN でない場合は Dj$w とする。sendmail-8.8.x を # 使う場合は FQDN 関係なく Dj$w とすること。 # # This sendmail.cf was written refered to m4 sendmail.cf # in ftp.tic.com public directory. Original file are # Copyright (c) 1993 by Texas Internet Consulting. #################################################################### DVnix.1.0 # # [ 共通、ドメイン名が nix.co.jj の例 ] # DDnix.co.jj << ホストのドメイン名。 Dj$w.$D << $w は /etc/hostname を拾ってくる。ここの $w 部分 はホスト名(マシン名+ドメイン名)を期待している。 DMtcp << SMTP でメ−ルを転送する。 # [ メ−ルクライアント用 ] # # メ−ルサ−バ名が host1 とした例。local_names はファイルで、メ−ル # を受けるユ−ザ名を記入する。サブドメインの有る無しは関係しない。 # #FL/etc/local_names #DRhost1.$D # macros De$j Sendmail $v/$V ready at $b DlFrom $g $d DnMailer-Daemon Do.:%@!^=/[]| Dq$g$?x ($x)$. # options # INDY #OA/etc/aliases #OF660 #OH/etc/sendmail.hf #OL9 << syslog へのログ出力レベル。通常はこのレベルでよい。 #OQ/var/spool/mqueue #OS/var/sendmail.st # Apollo OA/usr/lib/aliases OF660 OH/usr/lib/sendmail.hf OL9 OQ/usr/spool/mqueue OS/usr/lib/sendmail.st # SunOS 4.1.x #OA/etc/aliases #OF660 #OH/usr/lib/sendmail.hf #OL9 #OQ/usr/spool/mqueue #OS/etc/sendmail.st # Solaris 2.5.1 #OA/etc/mail/aliases #OF0600 #OH/etc/mail/sendmail.hf #OL9 #OQ/var/spool/mqueue #OS/etc/mail/sendmail.st OT14d << 相手のメ−ルサ−バが止まっていたりした場合、メ−ルを Odbackground 再送し続ける期間。14d は14日間ということである。 Og1 Oo Or15m Os Ou1 Pfirst-class=0 Pspecial-delivery=100 Pjunk=-100 T root daemon uucp # header definition H?P?Return-Path: <$g> HReceived: $?sfrom $s $.by $j ($v/$V) id $i; $b H?D?Resent-Date: $a H?D?Date: $a H?F?Resent-From: $q H?F?From: $q H?x?Full-Name: $x HSubject: H?M?Resent-Message-Id: <$t.$i@$j> H?M?Message-Id: <$t.$i@$j> HErrors-To: S1 S2 S3 R<> $@@ R$*<$+>$* $2 R@$+,$+:$+ @$1:$2:$3 R@$+:$+ $@<@$[$1$]>:$2 R$+:$*;@$+ $@$1:$2;@$3 R$+@$+ $:$1<@$2> R$+<$+@$+> $1$2<@$3> R$+<@$*.$=Z> $@$1<@$2.$3> R$+<@$+> $@$1<@$[$2$]> R$-!$+ $@$2<@$1.uucp> R$-.$+!$+ $@$3<@$1.$2> R$+%$+ $@$>3$1@$2 S4 R$+<@$+.uucp> $2!$1 \ R$+ $: $>9 $1 | これだけがル−ルセット4の範囲。 R$*<$+>$* $1$2$3 / S9 R@ $@$n R<@$+>$*:$+:$+ <@$1>$2,$3:$4 S29 R$* $: $>3 $1 R$* $@ $>0 $1 CZ uucp bitnet << 多分これも削ることができる。Z というクラスはこれ以下では 使われていないため。 # ----------------------------------------------------------- # これ以外のEWSまたは、うまく働かない場合は、それぞれの # EWSの sendmail.cf のサンプルを見て、記述すること。 # ----------------------------------------------------------- # # SunOS & tic.com original #Mlocal, P=/bin/mail, F=rlsDFMmnP, S=10, R=20, A=mail -d $u #Mprog, P=/bin/sh, F=lsDFMeuP, S=10, R=20, A=sh -c $u # Apollo #Mlocal, P=/bin/mail, F=rlsDFMmn, S=10, R=20, A=mail -d $u #Mprog, P=/bin/sh, F=lsDFMe, S=10, R=20, A=sh -c $u # INDY Mlocal, P=/bin/mail, F=EDFMlsmhu, S=10, R=20, A=mail -s -d $u Mprog, P=/bin/sh, F=lsDFMe, S=10, R=20, A=sh -c $u # Solaris #Mlocal, P=/usr/lib/mail.local, F=flsSDFMmnP, S=10, R=20, A=mail.local -d $u #Mprog, P=/bin/sh, F=lsDFMeuP, S=10, R=20, A=sh -c $u S10 S20 # ----------------------------------------------------------- # ここもおなじく。多分 F=CDFMXmu のとこが違ってくるだけ。 # ----------------------------------------------------------- # # Apollo original #Mtcp, P=[IPC], F=CDFMXmu, S=22, R=22, E=\r\n, A=IPC $h # SunOS 4.1.x original #Mtcp, P=[IPC], F=msDFMuCX, S=22, R=22, A=IPC $h # Solaris original #Mtcp, P=[IPC], F=msDFMuCX, S=22, R=22, A=IPC $h, E=\r\n # INDY original ( Apollo, SunOS, INDY 全てOK, Solaris もいいと思う ) Mtcp, P=[IPC], F=msDFMhuXC, S=22, R=22, A=IPC $h, E=\r\n S22 R$*<@$+>$* $@$1<@$2>$3 R$+ $@$1<@$D> S0 R@ $?R $#$M $@$R $:$n $|#local $:$n $. R<@[$+]>:$* $:$>9 <@[$1]>:$2 R<@[$+]>:$* $#$M $@[$1] $:$2 R<@[$+]>,$* $#$M $@[$1] $:$2 R$*<@[$+]> $#$M $@[$2] $:$1 R$*<@$j>$* $1<@>$2 R$*<@$=U.uucp>$* $1<@>$3 R$*<@$D>$* $1<@>$2 R$*<$*.>$* $1<$2>$3 R<@>:$* $@$>29$1 R$*<@> $@$>29$1 # 元は $j だが、Dj$w.$D の場合 local の配送ができない。$w に変更する。 #R$*<@$j> $@$>29$1 R$*<@$w> $@$>29$1 R<@$j>:$+ $@$>29$1 R$* $:$>9 $1 # ========================================================== # 以下の 1 から 4 のうちどれかのコメントを外して使うこと。 # # 注.ここはタブでなければならない。 # ↓ # R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 # ↑ ↑ ↑ # $#メイラ $@配送先 $:宛先 # ========================================================== # # [ 1. メインドメインのメ−ルサ−バ用 ] # # nix.co.jj に cad という sub domain があり、そのメ−ルサ−バ名が # host1 とした例。sub domain が幾つかある場合は、同じように追加する。 # sub domain が無い場合は、ここは記述しない。 # #R$*<@$=cad.$D>$* $#$M $@host1.$2.$D $:$1<@$2.$D>$3 # # ここからは 3. 単体ドメイン と同じ。 #R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 #R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 #R$+%$+ $@$>29$1@$2 #R$+ $#local $:$1 # [ 2. サブドメインのメ−ルサ−バ用 ] # # メインドメインのメ−ルサ−バ名が host1 とした例。2行目に記入。 # #R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 #R$*<@$+>$* $#$M $@host1.$D $:$1<@$2>$3 #R$+%$+ $@$>29$1@$2 #R$+ $#local $:$1 # [ 3. 単体ドメインのメ−ルサ−バ用 ] # R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 R$+%$+ $@$>29$1@$2 R$+ $#local $:$1 << 上記までのル−ルにマッチしないのは自 ホスト宛のメ−ルである。 # [ 4. メ−ルクライアント用 ] # # サブドメインのあるなしは関係しない。 # #R$=L $#local $:$1 #R$+ $#$M $@$R $:$1 * メ−ルリレ−専用の万能 sendmail.cf メ−ルリレ−のホスト、メ−ルサ−バのホスト、 クライアント用の sendmail.cf である。 サブドメインは対応しない。付録では sendmail.cf.relay.txt である。 本書で設定する 万能 sendmail.cf はこちらを使っている。 sendmail.cf.relay.txt ################################################################### # # 万能 sendmail.cf ファイル [ ftp.tic.com の m4 ファイル参考 ] # # メ−ルリレ−専用。サブドメインは対応しない。 # # Apollo SR10.4, SunOS 4.1.2-JLE, 4.1.4-JLE, Solaris 2.5.1, # INDY IRIX 5.3 で使用を確認。uucp のメ−ル配送はサポ−トしない。 #------------------------------------------------------------------ # # Dj$w.$D 部は注意が必要。hostname が FQDN の場合はこのまま。 # hostname が FQDN でない場合は Dj$w とする。sendmail-8.8.x を # 使う場合は FQDN 関係なく Dj$w とすること。 # # This sendmail.cf was written refered to m4 sendmail.cf # in ftp.tic.com public directory. Original file are # Copyright (c) 1993 by Texas Internet Consulting. ################################################################### DVnix.1.0 # # [ 共通、ドメイン名が nix.co.jj の例 ] # DDnix.co.jj << ホストのドメイン名。 Dj$w.$D << $w は /etc/hostname を拾ってくる。ここの $w 部分 はホスト名(マシン名+ドメイン名)を期待している。 DMtcp << SMTP でメ−ルを転送する。 # [ メ−ルクライアント用 ] # # メ−ルサ−バ名が host1 とした例。local_names はファイルで、メ−ル # を受けるユ−ザ名を記入する。サブドメインの有る無しは関係しない。 # #FL/etc/local_names #DRhost1.$D # macros De$j Sendmail $v/$V ready at $b DlFrom $g $d DnMailer-Daemon Do.:%@!^=/[]| Dq$g$?x ($x)$. # options # INDY #OA/etc/aliases #OF660 #OH/etc/sendmail.hf #OL9 << syslog へのログ出力レベル。通常はこのレベルでよい。 #OQ/var/spool/mqueue #OS/var/sendmail.st | この間上に同じ。 OT14d << 相手のメ−ルサ−バが止まっていたりした場合、メ−ルを Odbackground 再送し続ける期間。14d は14日間ということである。 Og1 Oo Or15m Os Ou1 Pfirst-class=0 Pspecial-delivery=100 Pjunk=-100 T root daemon uucp # header definition H?P?Return-Path: <$g> HReceived: $?sfrom $s $.by $j ($v/$V) id $i; $b H?D?Resent-Date: $a H?D?Date: $a H?F?Resent-From: $q H?F?From: $q H?x?Full-Name: $x HSubject: H?M?Resent-Message-Id: <$t.$i@$j> H?M?Message-Id: <$t.$i@$j> HErrors-To: S1 S2 S3 R<> $@@ R$*<$+>$* $2 R@$+,$+:$+ @$1:$2:$3 R@$+:$+ $@<@$[$1$]>:$2 R$+:$*;@$+ $@$1:$2;@$3 R$+@$+ $:$1<@$2> R$+<$+@$+> $1$2<@$3> R$+<@$*.$=Z> $@$1<@$2.$3> R$+<@$+> $@$1<@$[$2$]> R$-!$+ $@$2<@$1.uucp> R$-.$+!$+ $@$3<@$1.$2> R$+%$+ $@$>3$1@$2 S4 R$+<@$+.uucp> $2!$1 \ R$+ $: $>9 $1 | これだけがル−ルセット4の範囲。 R$*<$+>$* $1$2$3 / S9 R@ $@$n R<@$+>$*:$+:$+ <@$1>$2,$3:$4 S29 R$* $: $>3 $1 R$* $@ $>0 $1 CZ uucp bitnet << 多分これも削ることができる。Z というクラスはこれ以下では 使われていないため。 # ----------------------------------------------------------- # これ以外のEWSまたは、うまく働かない場合は、それぞれの # EWSの sendmail.cf のサンプルを見て、記述すること。 # ----------------------------------------------------------- # # SunOS & tic.com original #Mlocal, P=/bin/mail, F=rlsDFMmnP, S=10, R=20, A=mail -d $u #Mprog, P=/bin/sh, F=lsDFMeuP, S=10, R=20, A=sh -c $u # Apollo #Mlocal, P=/bin/mail, F=rlsDFMmn, S=10, R=20, A=mail -d $u #Mprog, P=/bin/sh, F=lsDFMe, S=10, R=20, A=sh -c $u # INDY Mlocal, P=/bin/mail, F=EDFMlsmhu, S=10, R=20, A=mail -s -d $u Mprog, P=/bin/sh, F=lsDFMe, S=10, R=20, A=sh -c $u # Solaris #Mlocal, P=/usr/lib/mail.local, F=flsSDFMmnP, S=10, R=20, A=mail.local -d $u #Mprog, P=/bin/sh, F=lsDFMeuP, S=10, R=20, A=sh -c $u S10 S20 *** 最初からここまでは sendmail.cf.txt と同じ *** # ----------------------------------------------------------- # ここもおなじく。多分 F=CDFMXmu のとこが違ってくるだけ。 # ----------------------------------------------------------- # # Apollo original #Mtcp, P=[IPC], F=CDFMXmu, S=22, R=22, E=\r\n, A=IPC $h # SunOS 4.1.x original #Mtcp, P=[IPC], F=msDFMuCX, S=22, R=22, A=IPC $h # Solaris original #Mtcp, P=[IPC], F=msDFMuCX, S=22, R=22, A=IPC $h, E=\r\n # INDY original ( Apollo, SunOS, INDY 全てOK, Solaris もいいと思う ) Mtcp, P=[IPC], F=msDFMhuXC, S=22, R=22, A=IPC $h, E=\r\n S22 R$*<@$+>$* $@$1<@$2>$3 R$+ $@$1<@$D> S0 R@ $?R $#$M $@$R $:$n $|#local $:$n $. R<@[$+]>:$* $:$>9 <@[$1]>:$2 R<@[$+]>:$* $#$M $@[$1] $:$2 R<@[$+]>,$* $#$M $@[$1] $:$2 # ----------------------------------------------------------- # メ−ルゲ−トウェイのホスト用は、この下の所はコメントにする。 # ル−ルセット0が効かないようにするため。 # ----------------------------------------------------------- #R$*<@[$+]> $#$M $@[$2] $:$1 #R$*<@$j>$* $1<@>$2 #R$*<@$=U.uucp>$* $1<@>$3 #R$*<@$D>$* $1<@>$2 #R$*<$*.>$* $1<$2>$3 #R<@>:$* $@$>29$1 #R$*<@> $@$>29$1 #R$*<@$w> $@$>29$1 #R<@$j>:$+ $@$>29$1 R$* $:$>9 $1 # ========================================================== # 以下の 1 から 3 のうちどれかコメントを外して使うこと。 # ========================================================== # [ 1. メ−ルゲ−トウェイのホスト用 ] # # hostB はメ−ルリレ−先のメ−ルサ−バのホストである。 # hostB をドメイン指定する場合は $@hostB.$D とする。 # R$*<@$D> $#$M $@hostB $:$1<@$D> R$*<@$+.$D> $#$M $@hostB $:$1<@$D> R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 R$+%$+ $@$>29$1@$2 R$+ $#local $:$1 # [ 2. メ−ルサ−バのホスト用 ] # # hostG はメ−ルゲ−トウェイのホスト名。 # R$*<@$+.$D>$* $#$M $@$2 $:$1<@$2.$D>$3 初めこれだった。 # #R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 << 内部ネットのメ−ル配送用。 #R$*<@$+>$* $#$M $@hostG $:$1<@$2>$3 << メ−ルゲ−トウェイにリレ−。 #R$+%$+ $@$>29$1@$2 #R$+ $#local $:$1 # [ 3. メ−ルクライアント用 ] #R$=L $#local $:$1 #R$+ $#$M $@$R $:$1 (4) DNS による電子メ−ル配送の仕組み * DNS での配送 自ドメインのメ−ルサ−バ(正確にはメ−ルゲ−トウェイ)がどれか、named.hosts の中 で MX レコ−ドでもって指定する。下の例では nix.co.jjドメインのホストへの電子メ− ルは、hostA.nix.co.jj ホストで稼働しているメ−ルサ−バに送ることになる。sendmail は DNS に問い合わせて、MX レコ−ドを見て SMTP で配送するIPアドレスを得る。宛先 がマシン名も含んでいて、DNS に該当する A レコ−ドがある場合は直接送る。 /etc/named.hosts -------------------------------------- |nix.co.jj. IN MX 0 hostA.nix.co.jj. << 指定のポイント。 SMTP メ−ルキュ− mqueue/ ------> mqueue/ ↑ ↓ スプ−ル % mail yosi@hostB → sendmail sendmail → mail/yosi ↓↑ ↓↑ ↑ sendmail.cf sendmail.cf mail コマンドで ------- ------- 電子メ−ルを読む |hostA| |hostB| ------- ------- * DNS の完全な記述 /etc/named.hosts -------------------------------------------------------------- |@ IN SOA hostA.nix.co.jj. katou.hostA.nix.co.jj. ( | 1996040101 3600 300 3600000 360000 ) | IN NS hostA.nix.co.jj. | IN MX 0 hostB.nix.co.jj. << メ−ルサ−バ。 |localhost. IN A 127.0.0.1 |hostA IN A 192.9.200.1 |hostB IN A 192.9.200.2 << メ−ルサ−バのIPアドレスも記入すること。 "MX 0 hostB.nix.co.jj." の 0 のところの値は、 予備のメ−ルサ−バを設ける場合に使 用される。メ−ルサ−バが1個の場合は、数字としては 0 以上なら何でも構わない。 * マシン名とホスト名の注意 sendmail.cf の変更 -------------- |#DDnix.co.jj |#Dj$w.$D |Dj$w << $w は hostname コマンドで定義された名前を拾ってくる。 hostname | sendmail.cf -----------------|------------- hostname がドメインを含まないホスト名だ hostA | Dj$w.$D けの場合は、Dj$w.nix.co.jj と記述するか、 hostA.nix.co.jj | Dj$w Dj$w.$D と記述する。 (5) ドメイン構成でのメ−ルサ−バの設定 * 単一ドメインの場合 ホスト hostA,B,C では sendmail デ−モンを稼働させる。hostA ではメ−ルサ−バ用の sendmail.cf を、hostB,hostC ではメ−ルクラインアント用の sendmail.cf をおく。 ユ−ザ taro jiro hana ------- ------- ------- DNS |hostC| |hostB| |hostA| hostA,B,C のメ−ルサ−バ ------- ------- ------- | | | ------------------------------------------ nix.co.jj sendmail sendmail sednmail sendmail.cf sendmail.cf sendmail.cf resolv.conf resolv.conf resolv.conf & named hostA /etc/named.hosts ---------------------------------------- |ホスト A,B,C を管理する。 | | ドメイン ホスト |nix.co.jj. IN MX 10 hostA.nix.co.jj. << 電子メ−ルを管理するホスト。 メ−ルサ−バ hostA sendmail.cf -------------------------------------------- |DDnix.co.jj << ホストのドメイン名。 |Dj$w << ホストのホスト名、hostname コマンドで得られる名前。 |DMtcp << SMTP でメ−ルを転送する。 | | |R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 |R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 |R$+%$+ $@$>29$1@$2 |R$+ $#local $:$1 メ−ルクライント hostB,C の sendmail.cf -------------------------------------------- |DDnix.co.jj |FL/etc/local_name << /etc/local_name も設定すること。 |Dj$w |DMtcp |DRhostA.$D << メ−ルサ−バのドメイン名。 | | |R$=L $#local $:$1 |R$+ $#$M $@$R $:$1 [ メ−ルの別名処理 ] ホストが A,B,C とあれば、メ−ルは katou@hostA.nix.co.jj, yasu@hostB.nix.co.jj の ようにマシン名を付けて送ることになる。マシン名をつけずに katou@nix.co.jj という アドレスでメ−ルを送るようにするために、メ−ルの別名処理を行う。nix.co.jj 内のべ つのクライアントにメ−ルを送ってもメ−ルサ−バを通り、この別名処理を受けることに なる。/etc/aliases ファイルをいじったら、newaliases コマンドを実行しておくこと。 /etc/aliases --------------------------- ※メ−ルサ−バは "別名リスト" を管理すること。 |hana:hana@hostA.nix.co.jj |jiro:jiro@hostB.nix.co.jj |taro:taro@hostC.nix.co.jj * サブドメインがある場合 hostB □ hostA □ DNS,メ−ルサ−バ | | --------------------------------- ドメイン a | | hostD □ hostC □ DNS,メ−ルサ−バ | | | --------------------------------- サブドメイン b.a hostA /etc/named.hosts --------------------------- |a. IN NS hostA.a. |b.a. IN NS hostC.b.a. | xxx@b.a 宛のメ−ルはサブドメイン b.a でメ− |a. IN MX 10 hostA.a. ルを管理している hostC.b.a に送ってくれ。 |b.a. IN MX 10 hostC.b.a. hostA sendmail.cf -------------------------------------------------- |DDa |Dj$w |DMtcp |CS b << 追加。サブドメイン b があることと示す。 | | |R$*<@$=S.$D>$* $#$M $@hostC.$2.$D $:$1<@$2.$D>$3 << hostC の所に注意。 |R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 |R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3 |R$+%$+ $@$>29$1@$2 |R$+ $#local $:$1 hostC /etc/named.hosts ---------------------------- |a. IN MX 10 hostA.a. |b.a. IN MX 10 hostC.b.a. hostC sendmail.cf --------------------------------------------- |DDb.a |Dj$w |DO hostA.a |DMtcp | | |R$*<@$-.$D>$* $#$M $@$2.$D $:$1<@$2.$D>$3 |R$*<@$+>$* $#$M $@$O $:$1<@$2>$3 << 宛先が分からないのは hostA.a に送る。 |R$+%$+ $@$>29$1@$2 |R$+ $#local $:$1 * サブドメインに予備のメ−ルサ−バがある場合 サブドメイン b.a のホストに電子メ−ルを送るのに、先ず hostC.b.a に送り、ダメなら hostD.b.a に送るという設定。hostD が予備のメ−ルサ−バである。 hostB □ hostA □ DNS,メ−ルサ−バ | | --------------------------------- ドメイン a | | hostD □予備 hostC □ DNS,メ−ルサ−バ | | | --------------------------------- サブドメイン b.a hostA /etc/named.hosts ---------------------------- |a. IN NS hostA.a. |b.a. IN NS hostC.b.a. |a. IN MX 10 hostA.a. | |b.a. IN MX 10 hostC.b.a. << ここ追加。10,20 というのは優先を決める。値が |b.a. IN MX 20 hostD.b.a. 小さい方が優先度が高い。0 が一番高い。 [ 単一ドメイン内でも同じ ] メ−ルサ−バの予備を持つ場合の DNS の設定は、 特にサブドメインでなくとも単一ドメ インでも同じことである。MX レコ−ドを2つ設定する。 しかしメ−ル・クライントのソ フトで、2つのメ−ルサ−バを指定できるか、その方が問題である。通常の hostC.b.aが 止まって、手動で予備の hostD.b.a を指定し直す。 一般ユ−ザ全員にそんな操作をして もらうのは現実的でない。Windows パソコンではメ−ル・クライントは POP だが、 そも そも2つメ−ルサ−バを指定することはできない。