16.3.2. Sendmail

Sendmail の主要な目的は、他の MTA と同様に、通常 SMTP プロトコルを使用するホスト間で電子メールを安全に転送することです。ただし、Sendmail は高度に設定可能なため、使用するプロトコルをはじめとする電子メール処理のほぼすべての側面を制御することが可能です。多くのシステム管理者は、能力と拡張性から MTA に Sendmail の使用を選択しています。

16.3.2.1. 用途と制約

認識すべき重要な点は、Sendmail ができないことではなく、Sendmail が何であるか、何ができるのかということです。複数の役割を果たすモノリシックなアプリケーションの時代には、Sendmail は組織内で電子メールサーバーを稼働するのに必要な唯一のアプリケーションに思われるかもしれません。技術的にはこれは真実です。Sendmail はメールを各ユーザーのディレクトリにスプールして、ユーザーに送信メールを配信できるからです。しかし、実際は大半のユーザーは単なるメール配信以上の機能を必要とします。ユーザーは通常、POP または IMAP を使用する MUA で電子メールとやりとりを行い、ローカルマシンにメッセージをダウンロードする方法を望みます。あるいは、メールボックスへのアクセスに Web インターフェースを好むユーザーもいます。こうした他のアプリケーションを Sendmail と連動させることは可能ですが、実際、それらが存在する理由は異なり、独立して機能することができます。
Sendmail で設定すべきまたは設定できるすべての用途の説明は、本項の範囲外となります。Sendmail には文字通り数百におよぶ様々なオプションやルールセットがあるため、Sendmail のあらゆる能力や問題修正方法に関する専門的な資料があります。Sendmail に関するリソースの一覧は 「その他のリソース」 を参照してください。
本項では、Sendmail と共にデフォルトでインストール済みのファイルを概説し、迷惑メール (スパム) の停止方法や LDAP での Sendmail の拡張方法など基本設定の変更について説明します。

16.3.2.2. Sendmail のデフォルトのインストール

Sendmail を使用するには、root で以下を実行して、ご使用のシステムに sendmail パッケージがインストールされていることを確認します:
~]# yum install sendmail
Sendmail を設定するには、root で以下を実行して、ご使用のシステムに sendmail-cf パッケージがインストールされていることを確認します:
~]# yum install sendmail-cf
Yum を使用したパッケージのインストールについての詳細は、「パッケージのインストール」 を参照して下さい。
Sendmail を使用する前に、デフォルトの MTA が Postfix から切り替わっている必要があります。デフォルトの MTA の切り替え方法については 「メール転送エージェント (MTA)」 を参照してください。
Sendmail 実行可能ファイルは /usr/sbin/sendmail です。
Sendmail の長い詳細設定ファイルは /etc/mail/sendmail.cf です。sendmail.cf ファイルは直接編集しないようにしてください。Sendmail に設定変更を加えるには、/etc/mail/sendmail.mc ファイルを編集して、元の /etc/mail/sendmail.cf をバックアップした上で、以下のような別の方法で新規設定ファイルを生成します。
  • /etc/mail に格納された makefile を使用して (~]# make all -C /etc/mail/)、新しい /etc/mail/sendmail.cf 設定ファイルを作成します。/etc/mail にある生成された他のすべてのファイル (db ファイル) は、必要に応じて再生成されます。旧 makemap コマンドは現在も使用可能です。make コマンドは、service sendmail start | restart | reload で自動的に使用されます。
  • 別の方法として、m4 マクロプロセッサを使用して新しい /etc/mail/sendmail.cf を作成することも可能です。m4 マクロプロセッサはデフォルトではインストールされていません。/etc/mail/sendmail.cf の作成に使用する前に、root で m4 パッケージをインストールしてください。
    ~]# yum install m4
Sendmail の設定に関する詳細は 「Sendmail の一般的な設定変更」 を参照してください。
以下のような様々な Sendmail 設定ファイルが、/etc/mail/ ディレクトリにインストールされています:
  • access — Sendmail を送信電子メールに使用できるシステムを指定します。
  • domaintable — ドメイン名のマッピングを指定します。
  • local-host-names — ホストのエイリアスを指定します。
  • mailertable — 特定のドメインのルーティングを上書きする方法を指定します。
  • virtusertable — ドメイン固有のエイリアシング (aliasing) 形式を指定し、単一のマシン上における複数の仮想ドメインのホスティングを可能にします。
accessdomaintablemailertablevirtusertable など /etc/mail/ にある設定ファイルの数点は、Sendmail が設定変更を利用できる前に、実際にそれらの情報をデータベースファイルに保存する必要があります。データベースファイル内のそうした設定への変更を含めるには、root で以下のコマンドを実行します:
~]# makemap hash /etc/mail/<name> < /etc/mail/<name>
<name> は更新される設定ファイル名を表します。場合によっては、変更を反映させるために以下を実行して sendmail サービスも再起動させる必要があります:
~]# service sendmail restart
例えば、example.com ドメイン宛のすべての電子メールが bob@other-example.com に配信されるようにするには、virtusertable ファイルに以下の行を追加します:
@example.com bob@other-example.com
変更を完了するには、virtusertable.db ファイルを更新する必要があります:
~]# makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable
Sendmail は、新規設定を格納している更新済みの virtusertable.db ファイルを作成します。

16.3.2.3. Sendmail の一般的な設定変更

Sendmail 設定ファイルを変更する場合は、既存ファイルを編集せずに、全く新しい /etc/mail/sendmail.cf ファイルを生成するのが最適な方法です。

警告

sendmail.cf ファイルを変更する前に、バックアップコピーを作成しておいた方が良いでしょう。
希望する機能を Sendmail に追加したい場合は、root として /etc/mail/sendmail.mc ファイルを編集します。編集が終了したら、sendmail サービスを再起動します。m4 パッケージがインストールされている場合は、m4 マクロプロセッサにより新しい sendmail.cf 設定ファイルが自動的に生成されます。
~]# service sendmail restart

重要

デフォルトの sendmail.cf ファイルでは、Sendmail はローカルコンピューター以外のホストからのネットワーク接続を受け入れないように設定されています。Sendmail を他のクライアント用のサーバーとして設定するには、/etc/mail/sendmail.mc ファイルを編集して、DAEMON_OPTIONS 指示文の Addr= オプションで指定されているアドレスを 127.0.0.1 からアクティブなネットワークデバイスの IP アドレスに変更するか、行頭に dnl を付けて、 DAEMON_OPTIONS 指示文を一斉にコメントアウトします。終了したら、サービスを再起動して /etc/mail/sendmail.cf を再生成します:
~]# service sendmail restart
Red Hat Enterprise Linux に同梱されているデフォルトの設定ファイルは、大半の SMTP 専用サイトで機能します。ただし、UUCP (UNIX-to-UNIX Copy Protocol ユニックストゥユニックスコピープロトコル) サイトでは機能しません。UUCP メール転送を使用する場合は、/etc/mail/sendmail.mc ファイルを再設定して、新しい /etc/mail/sendmail.cf ファイルを生成する必要があります。
/usr/share/sendmail-cf ディレクトリ下のディレクトリにあるファイルを編集する前には、/usr/share/sendmail-cf/README ファイルを確認してください。/etc/mail/sendmail.cf ファイルの今後の設定に影響を及ぼす場合があるためです。

16.3.2.4. マスカレード

一般的な Sendmail の設定の 1 つとして、単一のマシンがネットワーク上の全マシンのメールのゲートウェイとして機能するように設定する方法があります。例えば、ある企業が mail.example.com という名前のマシンで、すべての電子メールを処理して、すべての送信メールに対して一貫した返信アドレスを割り当てたいとしましょう。
このような状況では、Sendmail サーバーは、返信アドレスが user@host.example.com ではなく user@example.com となるように、その企業のネットワーク上のマシン名をマスカレードする必要があります。
これを行うには、/etc/mail/sendmail.mc に以下の行を追加します:
FEATURE(always_add_domain)dnl
FEATURE(`masquerade_entire_domain')dnl
FEATURE(`masquerade_envelope')dnl
FEATURE(`allmasquerade')dnl
MASQUERADE_AS(`bigcorp.com.')dnl
MASQUERADE_DOMAIN(`bigcorp.com.')dnl
MASQUERADE_AS(bigcorp.com)dnl
m4 マクロプロセッサを使用して、新しい sendmail.cf を生成した後には、この設定によりネットワーク内のメールはすべて bigcorp.com から送信されたかのように表示されます。

16.3.2.5. スパムの防止

電子メールのスパムは、通信を要求したことがないユーザーから受信した、不要な迷惑メールと定義することができます。これは、破壊的で高コストを伴う、広く蔓延したインターネット通信標準の悪用です。
Sendmail を使うと、迷惑メールの送信に使用されている新たなスパム技術を比較的に簡単にブロックすることができます。さらに、数多くの一般的なスパム手法もデフォルトでブロックします。Sendmail で利用できる主要なアンチスパム機能は ヘッダーのチェックリレーの否認 (バージョン 8.9 からデフォルト)、アクセスのデータベース、送信者情報の確認 です。
例えば、リレーとも呼ばれる SMTP メッセージの転送は、Sendmail バージョン 8.9 以降デフォルトでは無効になっています。このように変更される前には、Sendmail はメールホスト (x.edu) に対して、ある当事者 (y.com) からのメッセージを受け入れるよう指示し、そのメッセージを別の当事者 (z.net) に送信していました。しかし、現在は任意のドメインがサーバーを介してメールをリレーするよう Sendmail を設定する必要があります。リレードメインを設定するには、/etc/mail/relay-domains ファイルを編集して Sendmail を再起動してください。
~]# service sendmail restart
しかし、ユーザーはインターネット全体で他のサーバーから大量のスパムを受け取ることが何度もあります。そのような場合は、/etc/mail/access ファイルで利用可能な Sendmail のアクセス制御機能を使用して、迷惑なホストからの接続を阻止することができます。以下の例は、このファイルを使用したブロックと Sendmail サーバーへのアクセスを具体的に許可する方法を示しています:
badspammer.com ERROR:550 "Go away and do not spam us anymore" tux.badspammer.com OK 10.0 RELAY
この例では、badspammer.com から送信された電子メールはいずれも 550 RFC-821 準拠のエラーコードでブロックされ、メッセージはスパム送信者に送り返されます。tux.badspammer.com のサブドメインから送信される電子メールは受け入れられます。最後の行には、10.0.*.* ネットワークから送信された電子メールがメールサーバーを通してリレー可能であることを示しています。
/etc/mail/access.db ファイルはデータベースであるため、makemap コマンドを使用して変更を有効にします。これを行うには、root として以下のコマンドを使用します:
~]# makemap hash /etc/mail/access < /etc/mail/access
メッセージヘッダーの分析により、ヘッダーのコンテンツに基づいたメール拒否が可能となります。SMTP サーバーは、電子メールの送信経路に関する情報をメッセージヘッダー内に保管します。メッセージがある MTA から別の MTA に送られると、その他すべての Received ヘッダーの上にそれぞれ Received ヘッダーを付けます。ただし、注意すべき重要なポイントは、この情報はスパム送信者が変更できるという点です。
上記の例は、アクセスの許可や阻止に関する Sendmail の機能のほんの一部です。詳細情報と例は /usr/share/sendmail-cf/README を参照してください。
Sendmail は、メールを配信する時に Procmail MDA を呼び出すため、SpamAssassin のようなスパムフィルタリングプログラムを使用して、ユーザー用にスパムを識別してファイル保存することも可能です。SpamAssassin 詳細については 「スパムフィルター」 を参照してください。

16.3.2.6. LDAP での Sendmail の使用

LDAP の使用は、大規模なグループからある特定のユーザーに関する特定の情報を検索する、非常に迅速かつ強力な方法です。例えば、LDAP サーバーを使用すると、一般的な企業ディレクトリから特定の電子メールアドレスをユーザーの姓で検索することができます。この種の実装では、LDAP はほどんど Sendmail から分離されており、LDAP が階層別のユーザー情報を保存して、Sendmail は事前にアドレスが入力された電子メールメッセージの形式で LDAP のクエリ結果を知らされるだけです。
ただし、Sendmail は LDAP との非常に大規模な統合をサポートします。この統合では、Sendmail は LDAP を使用して、中規模からエンタープライズレベルの組織をサポートするために連携する異なるメールサーバー上の /etc/aliases/etc/mail/virtusertables などの個別に管理されているファイルを置き換えます。一言でいうならば、LDAP はメールルーティングレベルを Sendmail とその別個の設定ファイルから多くの様々なアプリケーションで活用できる強力な LDAP クラスタに抽象化します。
Sendmail の現行版は LDAP に対応しています。LDAP を使用して Sendmail を拡張するには、最初に OpenLDAP などの LDAP サーバーを稼働して、適切な設定を行います。次に、/etc/mail/sendmail.mc を編集して以下を追加します。
LDAPROUTE_DOMAIN('yourdomain.com')dnl
FEATURE('ldap_routing')dnl

注記

これは LDAP を使った非常に基本的な Sendmail の設定にすぎません。実際の設定は LDAP の実装によりこれとは大幅に異なる可能性があります。特に、共通の LDAP サーバーを使用するために数種の Sendmail マシンを設定する場合がそうです。
詳しい LDAP のルーティング設定に関する説明と例は、 /usr/share/sendmail-cf/README を参照してください。
次に、m4 マクロプロセッサを実行し、再び Sendmail を再起動して、/etc/mail/sendmail.cf ファイルを再作成します。この方法については、「Sendmail の一般的な設定変更」 を参照してください。
LDAP の詳細は 「OpenLDAP」 を参照してください。