「メールドメイン」は、標準の sendmail.cf ファイルによって使用される概念で、メールを直接配信するか、またはメールホストによって配信するかを判断します。ドメイン内メールは直接 SMTP 接続経由で配信され、ドメイン間メールはメールホストに送られます。
セキュリティの高いネットワークでは、ほんの少数の選ばれたホストだけが、外部宛てのパケットを生成する権限を与えられています。ホストがメールドメイン外のリモートホストの IP アドレスを持っていても、これで SMTP 接続が確立できるとは限りません。標準の sendmail.cf では次のことを仮定しています。
現在のホストは、パケットを直接メールドメイン外のホストに送信する権限がない
メールホストは、パケットを直接外部ホストに送信することが可能な認定ホストにメールを転送できる (実際には、メールホスト自身が認定ホストとなりうる)
このように仮定すると、ドメイン間メールの配信または転送はメールホスト側の責任です。
sendmail は各種の要件をネームサービスに課します。次の節で、これらの要件とその要件を満たす方法を説明します。詳細は、in.named(1M)、nis+(1)、 nisaddent(1M)、および nsswitch.conf(4) のマニュアルページを参照してください。
メールドメイン名はネームサービスドメイン名の接尾辞の 1 つでなければなりません。たとえば、ネームサービスのドメイン名が「A.B.C.D」ならば、メールドメイン名は次のうちのいずれかです。
A.B.C.D
B.C.D
C.D
D
メールドメイン名は、最初に設定されたときには、多くの場合ネームサービスドメインと同じになります。ネットワークが大きくなれば、ネームサービスドメインを小さく分割してネームサービスを管理しやすくすることができます。ただし、メールドメインは、一貫した別名を提供するために分割されないまま残ることがあります。
ネームサービスにおけるホストテーブルまたはマップは、次の 3 種類の gethostbyname() による問い合わせをサポートするように設定しなければなりません。
mailhost - いくつかのネームサービスの構成では、自動的にこの要件を満たします。
完全なホスト名 (たとえば、smith.admin.acme.com) - 多くのネームサービスの構成がこの要件を満たします。
短いホスト名 (たとえば、smith) - sendmail はメールホストに接続し、外部へのメールを転送します。メールアドレスが現在のメールドメイン内であるかどうかを判定するために、gethostbyname() が完全なホスト名で呼び出されます。エントリが見つかると、アドレスは内部にあるとみなされます。
NIS、NIS+、および DNS はすべて、短いホスト名を引数にする gethostbyname() をサポートします。したがって、この要件は自動的に満たされます。
名前空間内で sendmail サービスを適切に確立するには、さらにホスト名空間に関する以下の 2 つのルールに従う必要があります。
完全なホスト名による gethostbyname() と短いホスト名による gethostbyname() で、一致した結果を生じるようにします。たとえば、両関数がメールドメイン admin.acme.com から呼び出される限り、gethostbyname (smith.admin.acme.com) と gethostbyname (smith) は同じ結果になるようにします。
共通のメールドメイン下のすべてのネームサービスドメインに対しては、短いホスト名による gethostbyname() で同じ結果を生じるようにします。たとえば、メールドメイン smith.admin.acme.com があるとして、gethostbyname(smith) は、ebb.admin.acme.com または esg.admin.acme.com のいずれのドメインから呼び出されても同じ結果になるようにします。主なメールドメイン名は通常ネームサービスドメインより短く、このために各種ネームサービスにとって特別な意味のあるものになっています。
ネームサービスとして NIS だけを使用するときは、sendmail 使用時に事前に解決しておかなければならない設定項目を以下に示します。
メールドメイン名 - NIS をプライマリネームサービスとして設定している場合に、sendmail は、自動的に NIS ドメイン名の最初の構成要素を取り除いた結果をメールドメイン名として使用します。たとえば、ebs.admin.acme.com は、admin.acme.com となります。
mailhost ホスト名 - NIS のホストマップには、mailhost エントリが必要になります。
完全なホスト名 - 通常の NIS の設定では、完全なホスト名は認識されません。NIS に完全なホスト名を認識させようとするよりは、sendmail.cf ファイルを編集し %l を %y で置き換えて、sendmail 側からこの要件をなくしてください。こうすることによって、sendmail のドメイン間のメール検出機能をオフにできます。ターゲットとするホストの IP アドレスを取得できれば、SMTP による直接配信が試みられます。NIS のホストマップに現在のメールドメインの外部のホストのエントリが含まれていないことを確認してください。もし、そのエントリがあれば、さらに sendmail.cf ファイルをカスタマイズする必要があります。
ホストの完全名および短縮名のマッチング - 前述した手順を参考にして、完全なホスト名による gethostbyname() をオフにしてください。
1 つのメールドメイン内の複数の NIS ドメイン - 共通のメールドメインの NIS のホストマップは、ホストのエントリは同じである必要があります。たとえば、ebs.admin.acme.com ドメインのホストマップは、esg.admin.acme.com のホストマップと同じものにします。異なる場合には、ある NIS ドメインで有効なアドレスが他の NISドメインでは無効になることがあります。
ネームサービスとして NIS と DNS を同時に使用する場合に、sendmail を使用する前に解決しておかなければならない設定上の問題を以下に示します。
メールドメイン名 - NIS をプライマリネームサービスとして設定している場合には、sendmail は、自動的に NIS ドメイン名の最初の構成要素を取り除いた結果をメールドメイン名として使用します。たとえば、ebs.admin.acme.com は、admin.acme.com となります。
mailhost ホスト名 - DNS の転送機能がオンになっていれば、NIS で解決できない照会は DNS に転送されるため、NIS ホストマップに mailhost エントリは必要ありません。
完全なホスト名 - NIS が完全なホスト名を認識できなくても、DNS が認識します。NIS と DNS の通常の設定手順を踏んでいる場合には、完全なホスト名の要件は満たされます。
ホストの完全名および短縮名のマッチング - NIS のホストテーブルにおけるすべてのホストエントリに対して、DNS にも対応するホストエントリが必要です。
1 つのメールドメイン内の複数の NIS ドメイン - 共通のメールドメインの NIS のホストマップ中のホストのエントリは同じである必要があります。たとえば、ebs.admin.acme.com ドメインのホストマップは、esg.admin.acme.com のホストマップと同じものにします。異なる場合には、ある NIS ドメインで有効なアドレスが他の NIS ドメインでは無効になることがあります。
使用するネームサービスが NIS+ だけの場合、sendmail を使用する前に解決しておかなければならない設定上の問題点を以下に記します。
メールドメイン名 - プライマリネームサービスとして、NIS+ を設定していれば、sendmail は、NIS+ の sendmailvars テーブル (キーと値から構成される 2 列の NIS+ テーブル) からメールドメインを検索します。メールドメインを設定するには、このテーブルにエントリを 1 つ追加する必要があります。このエントリは、キーの列に文字列 maildomain が、値の列には自分のドメイン名 (たとえば、admin.acme.com) が設定されている必要があります。NIS+ では、sendmailvars テーブルにどのような文字列でも設定できますが、メールシステムが正常に機能するように接尾辞の規則が適用されます。nistbladm を使用して、maildomail エントリを sendmailvars テーブルに追加できます。たとえば、次のようになります。
nistbladm -A key="maildomain" value=<mail domain> sendmailvars.org_dir.<NIS+ domain> |
メールドメインは NIS+ ドメインの接尾辞となることに注意してください。
mailhost ホスト名 - NIS+ ホスト名には、mailhost エントリが必要です。
完全なホスト名 - NIS+ は、完全なホスト名を認識することができます。通常の NIS+ の設定手順を行えば、この完全なホスト名の要件は満たされます。
ホストの完全名および短縮名のマッチング - この要件を満たすには、すべてのホストテーブルでエントリをコピーするか、ユーザーネームサービスのドメイン中の全ホストのエントリをメールドメインレベルのマスターホストテーブルに入力する必要があります。
1 つのメールドメイン内の複数の NIS ドメイン - この項目を満たすには、すべてのホストテーブルのエントリをコピーするか、ユーザーネームサービスのドメイン中の全ホストのエントリをメールドメインレベルのマスターホストテーブルに入力する必要があります。これは、(論理的または物理的に) 複数のホストテーブルを 1 つのホストテーブルに結合することになるので、メールドメインを共有する複数のネームサービスドメインで同じホスト名を再使用することはできません。
ネームサービスとして NIS+ と DNS を同時に使用する場合に、sendmail 使用前に解決しておかなければならない設定上の問題点を以下に記します。
メールドメイン名 - プライマリネームサービスとして、NIS+ を設定していれば、sendmail は、NIS+ の sendmailvars テーブル (キーと値から構成される 2 列の NIS+ テーブル) からメールドメインを検索します。メールドメインを設定するには、 1 つのエントリをこのテーブルに追加する必要があります。このエントリは、キーの列に文字列 maildomain が、値の列に自分のドメイン名 (たとえば、admin.acme.com) が設定されている必要があります。NIS+ では、sendmailvars テーブルに、どのような文字でも設定できますが、メールシステムが正常に機能するように接尾辞の規則が適用されます。nistbladm を使用して、maildomail エントリを sendmailvars テーブルに追加できます。たとえば、次のようになります。
nistbladm -A key="maildomain" value=<mail domain> sendmailvars.org_dir.<NIS+ domain> |
メールドメインは NIS+ ドメインの接尾辞となることに注意してください。
mailhost ホスト名 - ネットワークがホストデータベースのソースとして NIS+ と DNS の両方を使用しているときは、mailhost エントリを NIS+ あるいは DNS ホストテーブルのいずれかに置くことができます。NIS+ と DNS をホストデータベースのソースとして /etc/nsswitch.conf ファイルで指定するようにしてください。
完全なホスト名 - NIS+ も DNS も完全なホスト名を認識します。通常の NIS+ と DNS の設定手順を踏めば、この項目の要件は満たされます。
ホストの完全名および短縮名のマッチング - NIS+ ホストテーブルの全ホストエントリに対して、対応するエントリが DNS に必要です。
1 つのメールドメイン内の複数の NIS ドメイン - この要件を満たすには、全ホストテーブルエントリをコピーするか、ネームサービスのドメイン中の全ホストのエントリをメールドメインレベルのマスターホストテーブルに入力する必要があります。