14.電子メ−ルの仕組みと使い方
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 ではユ−ザがメ−ルサ−バまで来たメ−ルを自分で
取りに行くことになる。詳しくは "15-2. POPサ−バの設定" を見られたい。
[設定の手順]
1. DNS の MX レコ−ドの設定
2. メ−ルサ−バとクライアントの sendmail.cf の設定
3. メ−ルサ−バでの aliases ファイルの記述
4. メ−ル配送先EWSでのユ−ザ passwd の登録
5. POP サ−バ、クライアントの設定
* 用語の定義
メ−ルの集配収するホストを、先にメ−ルサ−バと呼んだ。これにはさまざまな呼び方が
されている。雑誌等ではメ−ルホストをよく使っているみたいである。しかし本書ではメ
−ルクライアントに対するサ−バという意味で、メ−ルサ−バを使うことにする。よって
単なる電子メ−ルのクライアントでないものは、すべて総称してメ−ルサ−バと呼ぶ。メ
−ルサ−バの中で、インタ−ネットの接続口にあたるものを特にメ−ルゲ−トウェイとも
呼ぶことにする。メ−ルリレ−は、最終的にメ−ルをクライアントに配送しない中継サ−
バである。ただし単にメ−ルリレ−といった場合は、メ−ルゲ−トウェイのこととする。
メ−ルサ−バ:メ−ルホスト、メ−ルエクスチェンジャ−、
メ−ルリレ−やメ−ルリレ−ホスト、メ−ルゲ−トウェイ
下の図で hostA には外部からの電子メ−ルがいったん入り、すぐ hostB に転送するとし
よう。hostB は内部ネットのメ−ルクライアントの hostC などに配送する。 hostC が外
部に電子メ−ルを送る場合は、この逆で hostB に送り、hostB から hostA に行き、イン
タ−ネットに出ていくことになる。この場合 hostA と hostB はそれぞれメ−ルを中継す
るだけだがら、メ−ルリレ−としての機能も持っていることになる。

Fig. e11
* 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.jj は [a] のル−ルにマッチしないの
で、下に降りてきて [b] のル−ルにマッチするかチェックする。 R$*<@$+>$* の $+
は1個以上のト−クンなので、マッチする。
R$*<@$+>$* $#$M $@$2 $:$1<@$2>$3
↑ ↑ ↑ ↑
hanako@iij.ad.jj iij.ad.jj hanako iij.ad.jj
$@$2 は配送先のドメイン名となる。iij.ad.jj の DNS にアクセスして MX レコ−ド
を調べ、iij.ad.jj のメ−ルサ−バのIPアドレスを得る。そしてそのメ−ルサ−バ
に SMTP で電子メ−ルを送る。iij.ad.jj のメ−ルサ−バはこの電子メ−ルを受ける
と、自前の sendmail.cf により該当ユ−ザにメ−ルを配送することになる。
(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 ファイル [ made by katou refered to tic.om ]
#
# 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 とすること。
####################################################################
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 はこちらを使っている。
DVnix.1.0
| ここまでは上記と同じ
# -----------------------------------------------------------
# メ−ルゲ−トウェイのホスト用は、この間コメントにする。
# ル−ルセット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 による電子メ−ル配送の仕組み '96
* 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つメ−ルサ−バを指定することはできない。