21.3. sendmail の設定

寄稿: Christopher Shumway.

sendmail(8) は FreeBSD のデフォルトの メールトランスファエージェント (MTA) です。 sendmail の仕事はメールユーザエージェント (MUA) からのメールを受け取り、 それを設定ファイルで定義された適当なメーラに届けることです。 sendmail はネットワーク接続を受け入れて、 ローカルのメールボックスにメールを届けたり 別のプログラムにメールを渡したりもできます。

sendmail は次の設定ファイルを使用します。

ファイル名 機能
/etc/mail/access sendmail アクセスデータベースファイル
/etc/mail/aliases メールボックスエイリアス
/etc/mail/local-host-names sendmail が受け付ける配送先ホストのリスト
/etc/mail/mailer.conf メーラプログラムの設定
/etc/mail/mailertable メーラ配送表
/etc/mail/sendmail.cf sendmail の主設定ファイル
/etc/mail/virtusertable 仮想ユーザおよび仮想ドメイン表

21.3.1. /etc/mail/access

アクセスデータベースは、 どのホストまたは IP アドレスがローカルメールサーバに接続できるか、 そして接続の種類は何か、ということを定義します。 ホストは OK, REJECT, RELAY として指定できます。 または、メーラエラーを指定することで、 単に sendmail の エラー処理ルーチンに渡されます。 OK として指定されたホスト (これはデフォルトです) は、 メールの最終宛先がローカルマシンである限り、 このホストへメールを送ることを認められます。 REJECT として指定されたホストは、 すべてのメール接続を拒絶されます。 ホスト名に対して RELAY オプションを指定されたホストは、 このメールサーバを通過して任意の宛先へメールを送ることを認められます。

例 21-1. sendmail アクセスデータベースの設定

cyberspammer.com                550 We don't accept mail from spammers
FREE.STEALTH.MAILER@            550 We don't accept mail from spammers
another.source.of.spam          REJECT
okay.cyberspammer.com           OK
128.32                          RELAY

この例では五つのエントリがあります。 表の左側に当てはまるメール送信者は、表の右側の動作に支配されます。 はじめの二つの例は、エラーコードを sendmail のエラー処理ルーチンに渡します。 メールが表の左側に当てはまると、リモートホストにそのメッセージが表示されます。 次のエントリは another.source.of.spam というインターネット上の特定のホストからのメールを拒絶します。 次のエントリは okay.cyberspammer.com からのメール接続を受け入れます。 このエントリは上にある cyberspammer.com という行よりもさらに厳密です (厳密に一致すればするほど、そうでないものより優先されます)。 最後のエントリは 128.32 から始まる IP アドレスのホストからの電子メールのリレーを認めます。 これらのホストは他のメールサーバに到達できるこのメールサーバを使ってメールを送ることができるでしょう。

このファイルを変更したら、 データベースを更新するために /etc/mail/ ディレクトリで make コマンドを実行する必要があります。

21.3.2. /etc/mail/aliases

エイリアスデータベースには、 他のユーザ、ファイル、プログラムまたは他のエイリアスに展開される 仮想的なメールボックスの一覧が記載されています。 /etc/mail/aliases において使用できる例をいくつかあげます。

例 21-2. メールエイリアス

root: localuser
ftp-bugs: joe,eric,paul
bit.bucket:  /dev/null
procmail: "|/usr/local/bin/procmail"

ファイル形式はシンプルです。 コロンの左側にあるメールボックス名は、右側のターゲットに展開されます。 はじめの例は単純に root のメールボックスを localuser のメールボックスに展開し、 それからエイリアスデータベースをもう一度調べます。 一致するエントリがなければメッセージはローカルユーザである localuser に配送されます。 次の例はメールリストです。 ftp-bugs のメールボックスへのメールは joe, eric および paul の三つのローカルメールボックスに展開されます。 リモートメールボックスは user@example.com のように指定できることに注意してください。 次の例はメールをファイル、この場合 /dev/null に書き込みます。 最後の例はメールをプログラムに送ります。 この場合メールのメッセージは UNIX® パイプを通じて /usr/local/bin/procmail の標準入力に書き込まれます。

このファイルを変更したら、 データベースを更新するために/etc/mail/ ディレクトリで make コマンドを実行する必要があります。

21.3.3. /etc/mail/local-host-names

これは sendmail(8) がローカルホスト名として認めるホスト名のリストです。 sendmail がメールを受け取るすべてのドメインやホストにこのファイルを置いてください。 たとえば、このメールサーバは example.com というドメインおよび mail.example.com というホストへのメールを受け取るとすると、 local-host-names ファイルの内容は次のようになるでしょう。

example.com
mail.example.com

このファイルを更新したら、変更を読み込むために sendmail(8) を再起動する必要があります。

21.3.4. /etc/mail/sendmail.cf

sendmail の主設定ファイルである sendmail.cf は、電子メールアドレスの書き換えから、 リモートメールサーバへ拒絶メッセージを送ることまで sendmail の全般的な動作をすべて制御します。 当然、そのようなさまざまな役割によりこの設定ファイルは大変複雑で、 その詳細についてはこの節の少し範囲外です。好運なことに、 標準的な構成のメールサーバではこのファイルをめったに変更する必要はありません。

sendmail の主設定ファイルは sendmail の機能と動作を決定する m4(1) マクロから構築できます。 詳細については /usr/src/contrib/sendmail/cf/README を参照してください。

このファイルを更新したら、その変更を反映するために sendmail を再起動する必要があります。

21.3.5. /etc/mail/virtusertable

virtusertable は仮想ドメインおよび仮想メールボックスに対するアドレスを実際のメールボックスと対応づけます。 これらのメールボックスにはローカル、リモート、 /etc/mail/aliases に定義されたエイリアス、 またはファイルを使用できます。

例 21-3. 仮想ドメインメール対応表の例

root@example.com                root
postmaster@example.com          postmaster@noc.example.net
@example.com                    joe

上の例では example.com ドメインへの対応づけをしています。 このファイルはファイルの下までファーストマッチ (訳注: 一致するルールが複数ある場合、 一番最初に一致したルールが適用されること) で処理されます。 はじめの行では root@example.com を ローカルの root メールボックスに対応づけています。 次のエントリでは postmaster@example.comnoc.example.net ホスト上の postmaster メールボックスに対応づけています。 最後に、今までのところでは example.com に関して何も一致しない場合、最後のエントリと一致するでしょう。 これは example.com の誰かに送ったすべてのメールが一致します。これは joe のローカルメールボックスに対応づけられています。

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

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