FreeBSD ハンドブック
前のページ | 第 21章電子メール | 次のページ

# 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.edu` と `mumble.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 <user@domain.net>... 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 を送ることを認めることなく、 リモートであなたのシステムからメールを送ることをユーザに 認めるためのとてもよい方法です。

前のページ | ホーム | 次のページ
MTA の変更 | 上に戻る | 先進的なトピックス

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

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