21.5. トラブルシュート

21.5.1. どうして自分のサイトのホストなのに FQDN を使わなければいけないのですか?
21.5.2. sendmail が “mail loops back to myself” というメッセージを出すのですが。
21.5.3.
21.5.4. なぜ他のホストにメールを送ろうとすると、いつも “Relaying Denied” と怒られてしまうの ?

21.5.1. どうして自分のサイトのホストなのに FQDN を使わなければいけないのですか?

恐らく、そのホストは実際には別のドメインにあるのでしょう。 例えば foo.bar.edu ドメインにいて、 bar.edu というドメイン内の mumble というホストにアクセスしたいとします。 この時は単に mumble ではなく mumble.bar.edu と FQDN で参照しなければなりません。

そもそも、BSD BIND のリゾルバー (resolver) ではこのようなことが可能でしたが、 FreeBSD に入っている最新版の BIND では自分のドメイン以外に対する FQDN でない省略形は許されません。 従ってホストを mumble と曖昧に指定した場合は mumble.foo.bar.edu という名前があればそれになり、 そうでなければ root ドメインから検索されます。

これは、 mumble.bar.edumumble.edu ということなったドメイン名に対してホスト名のサーチがおこなわれていた以前の振る舞いとは異なったものです。 このような事が悪い例もしくはセキュリティホールとみなされる理由については RFC 1535 を見てください。

/etc/resolv.conf

domain foo.bar.edu
と書いてある行を
search foo.bar.edu bar.edu
と書き換えることで上のようなことができます。 しかし、RFC 1535 にあるように検索順序が “内部 (local) と外部 (public) の管理の境界” をまたがないようにしてください。

21.5.2. sendmail が “mail loops back to myself” というメッセージを出すのですが。

sendmail FAQ に次のように書いてあります。

“Local configuration error” というメッセージが出ます。例えば、

553 relay.domain.net config error: mail loops back to myself
554 <[email protected]>... Local configuration error

のような感じですが、どうしたら解決できますか?

これは、例えば domain.net のようなドメイン宛てのメールを
MX レコードで特定のホスト(ここでは
relay.domain.net) に送ろうとしたのに、
そのホストでは domain.net
宛てのメールを受け取れるような設定になっていない場合です。
設定の際に
FEATURE(use_cw_file) を指定してある場合には
/etc/mail/local-host-names の中に domain.net を追加してください。
もしくは、/etc/mail/sendmail.cf の中に “Cw domain.net”
を追加してください。

sendmail FAQ は http://www.sendmail.org/faq にありますので、 メールの設定に “おかしなこと” があれば常に読んでください。

21.5.3.

ダイアルアップ PPP ホストでメールサーバを実行するにはどうしたらいいの?

LAN 上にある FreeBSD マシンを、 インターネットに接続したいとします。FreeBSD マシンは、その LAN でのメールゲートウェイになります。FreeBSD マシンは専用線接続ではありません (訳注: ダイアルアップ接続など)。

これには、少なくとも二つの方法があります。 一つは UUCP を使うことです。

もう一つの方法は、あなたのドメインに対するセカンダリ MX サービスを提供する常時稼働のインターネットサーバを用意することです。 たとえば、あなたの会社のドメインが example.com で、 ISP があなたのドメインに セカンダリ MX サービスを提供するために example.net ドメインを 用意するとしたら次のようにします。

example.com.	MX	10	example.com.
MX	20	example.net.

最終的なメール受信先としては、 一つのホストだけが定義されるべきです (example.com 上の /etc/mail/sendmail.cf ファイルに、 Cw example.com を追加します)。

送信側の sendmail が、 メールを配送しようとしている時、モデムの接続を介してあなたのところ (example.com) に接続しようとします。大抵の場合、 あなたのマシンがオンラインでないために、 接続はタイムアウトしてしまうでしょう。 sendmail プログラムは自動的に、 たとえばあなたのインターネットプロバイダなどのセカンダリの MX サイト (example.net) にメールを配送するでしょう。 セカンダリ MX サイトは定期的にあなたのホストに接続し、 プライマリ MX ホスト (example.com) にメールを配送しようとするでしょう。

ログインスクリプトとして、 このようなものを使うとよいでしょう。

#!/bin/sh
# Put me in /usr/local/bin/pppmyisp
( sleep 60 ; /usr/sbin/sendmail -q ) &
/usr/sbin/ppp -direct pppmyisp

ユーザごとにログインスクリプトを作りたい場合には、 上記のスクリプトの代わりに、 sendmail -qRexample.com を使用することもできます。 このようにすると、 キューの中の example.com に対するすべてのメールは、すぐに強制的に処理されます。

さらに、次のような改良もできます。

以下は、FreeBSD Internet service provider's メーリングリスト から抜粋してきたメッセージです。

> 私たちはお客様に対して、セカンダリ MX を提供しています。
> お客様は一日に何回か私たちのサービスに接続し、メールを彼らのプライマリ MX
> に受け取ります (彼らのドメインに対するメールが到着した時には、
> 私たちは彼らのサイトを呼び出しません)。
> 私たちの sendmail は、30 分ごとにメールキューに溜っているメールを配送します。
> ちょうどその時に、すべてのメールがプライマリ MX に送られたかどうかを確かめるためには、
> 彼らは 30 分は オンラインでいなければなりません。
>
> すべてのメールを今すぐ送るために sendmail を初期化するコマンドはあるでしょうか?
> もちろん私たちのマシン上には、ユーザはルート (root) 権限を持っていません。

sendmail.cf の “privacy flags” セクションに、
Opgoaway,restrictqrun の定義があります。

root 以外のユーザがキューを処理できるようにするには、
restrictqrun を削除してください。また、MX の再調整が必要かもしれません。
あなたがたは、顧客のサイトに対する一番優先度の高い MX なので、
次のように定義します。

# If we are the best MX for a host, try directly instead of generating
# local config error.
OwTrue

このようにすると、リモートサイトからのメールが、
顧客のマシンと接続しようとせず、直接あなたがたのホストマシンに配送されるようになります。
ホストマシンに配送されたメールは、続いて顧客のマシンに送られます。
これはホスト名にのみ有効なので、顧客のメールマシンに、
“host.customer.com” とは別に、“customer.com” も定義する必要があります。
DNS 上で、“customer.com” に対する A レコードを定義してください。

21.5.4. なぜ他のホストにメールを送ろうとすると、いつも “Relaying Denied” と怒られてしまうの ?

FreeBSD がインストールされたデフォルトの状態では、 sendmail は動作しているホストからのメールだけを送るように設定されています。 たとえば POP3 サーバがインストールされているとすると、 ユーザは学校や職場など他のリモートの場所からメールを確認することが できます。しかし、彼らは外部からそのホスト以外へのメールを 送ることはやはりできません。 通常、メールを送ろうとしてから少しすると、 “5.7 Relaying Denied” というエラーメッセージの書かれたメールが MAILER-DAEMON から送られてくるでしょう。

これを解決する方法はいくつかあります。 一番の正攻法は /etc/mail/relay-domains リレードメインファイルにあなたの ISP のアドレスを書くことです。 これをするのに簡単な方法は次のとおりです。

# echo "your.isp.example.com" > /etc/mail/relay-domains

このファイルを作成または編集したら、 sendmail を再起動してください。 もしあなたがサーバ管理者でメールをローカルに送りたくないか、 ポイントを使用して他のマシン (や、さらに他の ISP) の クライアントまたはシステムへ送りたい時は、とても効果があります。 さらに、あなたが一つあるいは二つだけのメールアカウントを 設定している場合でもこれは非常に有用です。 追加すべきアドレスがたくさんある場合には、 単にこのファイルをあなたの好きなテキストエディタで開いて、 そして一行に一つずつドメインを追加してください。

your.isp.example.com
other.isp.example.net
users-isp.example.org
www.example.org

これで、リストに掲載されているすべてのホスト (ユーザがあなたのシステムにアカウントを持っていると規定する) からあなたのシステムを通るすべてのメールは送信に成功するでしょう。 これはあなたのシステムから SPAM を送ることを認めることなく、 リモートであなたのシステムからメールを送ることをユーザに 認めるためのとてもよい方法です。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、ドキュメント を読んだ上で <[email protected]> まで (英語で) 連絡してください。
本文書に関する質問については、<[email protected]> まで電子メールを (英語で) 送ってください。