11.3. Mail Transport Agents

Red Hat Linux には2つの主要なMTA、SendmailとPostfixが含まれています。Sendmailは デフォルトのMTAとして設定されていますが、デフォルト設定をMTAからPostfixに 切替えることは簡単です。

ティップヒント
 

MTAのデフォルト設定をSendmailからPostfixに切替える方法に関する情報は Red Hat Linux カスタマイズガイド内にあるMail Transport Agent (MTA)の 設定の章を御覧下さい。

Red Hat Linuxには、またFetchmailと呼ばれる特殊目的のMTAが含まれています。 これは、電子メールをリモートMTAからローカルMTAへ配達するのに 使用されます。

このセクションでは、Sendmailと Fetchmailの詳細に触れています。

11.3.1. Sendmail

Sendmailの基本目的は、他のMTAのようにホスト間の電子メールを、通常は SMTPプロトコルを使用して転送することです。しかし、Sendmailは高度な 設定柔軟度を持つことから、使用されるプロトコルを含めてどのように電子メールを 取り扱うかの側面ほとんどすべてを制御できます。このMTAが持つパワーと 拡張性のため、多くのシステム管理者によってSendmailの使用が選択されています。

11.3.1.1. 目的と制限

重要なことは、Sendmailが出来ないことを考えるのでなく、Sendmailが何であるか、及び 何ができるかを知ることです。複数の役割を果たすモノリシックアプリケーションの時代では、 Sendmailが組織内で電子メールサーバーを実行するために必要な唯一のアプリケーションであると 考えることがあり得ます。技術的には事実で、、Sendmailがメールをユーザーのディレクトリに スプールし、コマンドラインを通じて新しい電子メールをユーザーの為に発信することが できます。しかしほとんどのユーザーは実際に簡単なメールの配達だけを求めているのでは ありません。通常、ユーザーはPOPかIMAPを利用するMUAを使ってローカルマシンにメッセージを ダウンロードして電子メールによる交流を望んでいます。または、メールボックスにアクセス する為にWebインターフェイスを好む場合もあるでしょう。これらの他のアプリケーションは Sendmailとの併用で動作することができますが実際には別の理由で存在し、当然独立して 稼働することが出来ます。

Sendmailがすべき、又は出来る設定の全てを言及することはこのセクションの 担当範囲を越えてしまいます。文字通りに数百の異なるオプションと規則の セットがある中で、このマニュアル全項目では実行できるすべてと、物事がうまく 行かない時の修正法を説明することに従事しています。Sendmailのリソースに 関する情報は項11.6でお読み 下さい。

このセクションでは、デフォルトでSendmailと共にインストールされているファイルの 説明をして、さらに迷惑メール(spam)停止の仕方及び(LDAP)Lightweight Directory Access Protocol を使ったSendmailの拡張法などの 基本的設定変更を説明していきます。

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

Sendmailの実行ファイルは /usr/sbin/sendmailです。

Sendmailの長くて詳細に渡る設定ファイルは/etc/mail/sendmail.cfです。 直接sendmail.cfを編集することは避けて下さい。 Sendmailに対し設定の変更をするには、/etc/mail/sendmail.mcファイルを 代わりに編集します。オリジナルの/etc/mail/sendmail.cfをバックアップ して、その後m4マクロプロセッサーを使用して、新しいバージョンの /etc/mail/sendmail.cfを作成します。Sendmailの設定に関する詳細は 項11.3.1.3で御覧下さい。

さまざまなSendmail設定ファイルは、次のような/etc/mail/ディレクトリにインストールされます。

  • access — 発信電子メール用のSendmailを使用する システムを指定します。

  • domaintable — ドメイン名マッピングを指定します。

  • local-host-names — ホストのエイリアスを指定します。

  • mailertable — 特定ドメインのルーティングを無効にする命令を指定します。

  • virtusertable — エイリアスのドメイン特有の形式を指定します。 これにより、複数の仮想ドメインが1つのマシン上でホストされます。

accessdomaintablemailertablevirtusertableなどの /etc/mail/内の設定ファイルのいくつかは、実際に、設定変更を 行う前にデータベースファイルに情報を保存する必要があります。データベースファイルの 設定の中にそのような変更を含めるためには、次のコマンドを実行します:

makemap hash /etc/mail/<name> < /etc/mail/<name>

ここで、<name>は、変換する設定ファイルの名前で 入れ換えます。

例えば、example.comドメインに宛てられた全てのメールを に転送してもらう場合、次の行を virtusertableファイルに追加します:

@example.com     bob@other-example.com

この変更を完結するには、次のコマンドをrootとして使用してvirtusertable.dbファイルを 更新する必要があります:

makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable 

これにより、新しい設定を持つ新規のvirtusertable.dbファイルが 作成できます。

11.3.1.3. 一般的なSendmail設定変更

Sendmailsの設定ファイルを変更する時は、既存のファイルを編集するのではなく、 全く新しい /etc/mail/sendmail.cfファイルを生成することが 推奨されます。

注意重要
 

sendmail.cfファイルを変更する前に、そのファイルの 作業用のバックアップを作成するのが良いでしょう。

Sendmailに必要な機能を追加するには、/etc/mail/sendmail.mcファイルを編集します。 編集が終ったら、m4/etc/mail/sendmail.mc > /etc/sendmail.cfコマンドを実行することにより、 m4マクロプロセッサを使って新しいsendmail.cfを生成します。新しい /etc/sendmail.cfを作成した後、Sendmailを再起動して有効にする必要があります。 これを行う最も簡単な方法として、ルートとして/sbin/service sendmail restartコマンドを 入力して下さい。

デフォルトで、Sendmailにm4マクロプロセッサーがインストールされて います。m4パッケージの一部となっています。

誓要項目重要
 

デフォルトのsendmail.cfは、ローカルコンピュータ以外のいかなるホストからも、 ネットワーク接続を受け入れることをSendmailに許可しません。他のクライアントのサーバーとして Sendmailを設定したい場合は、/etc/mail/sendmail.mcを編集し、ネットワークデバイスを リッスンするようにDAEMON_OPTIONSを変更するか、このオプション全体を コメントアウトして下さい。その後、以下を実行して/etc/mail/sendmail.cfを再生成して下さい:

m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

この設定は、大半のSMTP専用サイトには有効であるはずです。UUCP(UNIX to UNIX Copy)サイトについては 無効です。UUCPメール転送を使用したい場合は、新しいsendmail.cfを 生成する必要があります。

/usr/share/sendmail-cfディレクトリの下のディレクトリ内にある ファイルを編集する前に/usr/share/sendmail-cf/READMEファイルを 参照してください。ディレクトリ内のファイルが将来の/etc/mail/sendmail.cf ファイルの設定に影響を与える可能性があります。

11.3.1.4. マスカレード

一般的なSendmailの設定では、ネットワーク上にあるすべてのマシンのためのメールゲートウェイとしての 役割を1つのマシンに果たさせます。たとえば、ある会社はすべての電子メールを処理し、発信メールに返信用 アドレスを添付するmail.bigcorp.comと呼ぶマシンを持ちたいと想定しましょう。

この様な状況では、Sendmailサーバーは会社のネットワーク上のマシンをマスカレードして その返信用アドレスが、user@devel.bigcorp.com.ではなく、user@bigcorp.comとなるように する必要があります。

そうするには、以下の行を/etc/mail/sendmail.mcに 追加します:

FEATURE(always_add_domain)dnl
FEATURE(`masquerade_entire_domain')
FEATURE(`masquerade_envelope')
FEATURE(`allmasquerade')
MASQUERADE_AS(`bigcorp.com.')
MASQUERADE_DOMAIN(`bigcorp.com.')
MASQUERADE_AS(bigcorp.com)

m4を使用して新しいsendmail.cfを生成した後は この設定が、このネットワーク内部からのメールがすべてbigcorp.comから 送信されたように見えます。

11.3.1.5. スパムの停止

電子メールスパムとは、通信を要求していないユーザーが受け取る、不要で欲しくもない 電子メールと定義出来ます。それは、非常に破壊的でコストのかかる広範囲な インターネット通信標準の乱用です。

Sendmailは、ジャンクメールを送信するための新しいスパミング手法が採用されないように阻止することを 比較的容易にしました。デフォルトでさらに一般的なスパミング手法の多くを阻止します。

たとえば、中継とも呼ばれているSMTPメッセージの転送は、Sendmailバージョン8.9以降にデフォルトで無効にされました。 この変更が行われる前であれば、Sendmailはある部署(y.com)からメッセージを受け入れて別の部署 (z.net)に送るようにメールホスト(x.org)に指示できました。しかし、 現在では、こちらのサーバーを通じてメールを中継することをドメインに許可するようにSendmailに具体的に設定する 必要があります。ドメインへの中継を設定するには、/etc/mail/relay-domainsファイルを編集し、 Sendmailを再起動します。

しかし、多くの場合、ユーザーはインターネットを通じて制御できないような他のサーバーからのスパムの砲撃を 受けるおそれがあります。そのような場合、/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 

アクセスの許可とその阻止に関して、この例はSendmailが出来ることのほんの一部しか示していません。 詳細と他の例については/usr/share/doc/sendmail/README.cfを御覧下さい。

Sendmailは、メールを配送する時に、Procmail MDAをコールしますのでSpamAssassinなどの スパムフィルタを使用してユーザーはスパムを認識し、ファイルすることも出来ます。 SpamAssassinの使用については項11.4.2.6を参照して下さい。

11.3.1.6. LDAPでのSendmailの使用

LDAP(Lightweight Directory Access Protocol)を使用すると非常に大きい グループから特定のユーザーに関する特定情報を非常に高速かつ強力に検索できます。たとえば、 LDAPサーバーを使用して、ユーザーのラストネームで一般的な法人ディレクトリから特定の電子メール アドレスを調べることができます。このような実践形態では、LDAPはSendmailと大きく異なり、 LDAPは階層的なユーザー情報を保存し、Sendmailにはすでにアドレス指定された電子メールメッセージ内の LDAPクエリの結果が与えられるだけです。

しかし、SendmailはLDAPとの非常に大きな統合化をサポートします。この場合、 SendmailはLDAPを使用して、中型から企業レベルの組織をサポートするために 協調動作する各種メールサーバー上でaliasesvirtusertablesなどの個別に保守されるファイルを 置き換えます。簡単に言えば、Sendmailとその個別の設定ファイルから、 多数の異なるアプリケーションでサポートされている強力なLDAPクラスタへ、 メールルーティングレベルを抽出することができます。

Sendmailの現在のバージョンには、LDAPに対するサポートが含まれています。 LDAPを使用してSendmailサーバーを拡張するには、まず、OpenLDAP などのLDAPサーバーを動作させ正しく設定します。その後、次をインクルードできるように、 /etc/mail/sendmail.mcを編集します:

LDAPROUTE_DOMAIN('yourdomain.com')dnl
FEATURE('ldap_routing')dnl

注意注意
 

これは、LDAPによるSendmailの非常に基本的な設定のためだけのものです。特に共通の LDAPサーバーを使用するように数台のSendmailマシンを設定する場合、LDAPの実装の 仕方によってはユーザーの設定はこの基本的な設定とは非常に異なるはずです。

詳細なLDAPルーティング設定の手順と例については、/usr/share/doc/sendmail/README.cfを参照してください。

次に、m4を実行してSendmailを再起動することによって、 /etc/mail/sendmail.cfファイルを作成しなおします。 これを行う手順については、項11.3.1.3 を参照して下さい。

LDAPの詳細については、第13章を参照してください。

11.3.2. Fetchmail

Fetchmailは、リモートサーバーから電子メールを呼び込んでローカルのMTAへ それを配送します。多くのユーザーがメッセージをリモートサーバーより ダウンロードするプロセスを、MUAの中で電子メールの読み込みと編成から 分離できる能力を評価しています。ダイヤルアップをするユーザーのニーズを 考慮してデザインされており、Fetchmailは POP3やIMAPなどのプロトコルを使用して 接続して、電子メールスプールファイルにすべての電子メールメッセージを高速に ダウンロードします。Fetchmailは、必要に応じて、SMTPサーバーに電子メール メッセージを転送することもできます。

Fetchmailは、ユーザーのホームディレクトリ内の.fetchmailrcファイルを 使用してユーザーごとに設定されます。

Fetchmailは.fetchmailrcファイルの設定内容を使用して、 リモートサーバー上の電子メールの有無をチェックして抜き出し、電子メールを正しいユーザーの スプールファイルに配置するためにローカルMTAを使用して電子メールをローカルマシンのポート25に 配信しようとします。Procmailが使用できる場合は、それを使用して電子メールをフィルタ処理し、 MUAで読み取れるようにメールボックスに設定します。

11.3.2.1. Fetchmail設定オプション

Fetchmailを実行するときにリモートサーバー上の電子メールの有無をチェックするのに 必要なコマンドライン上のすべてのオプションをパスすることはできますが、 .fetchmailrcファイルを使用したほうがはるかに簡単です。 すべての設定オプションは.fetchmailrcファイル内にありますが、 コマンドラインでそのオプションを指定してFetchmailを実行するときにそのオプションを 上書きすることができます。

ユーザーの.fetchmailrcファイルは、3つの特定タイプの設定オプションに分けられます。

  • グローバルオプション —プログラムの動作を制御したり、電子メールの有無をチェックするすべての接続に設定を与えるための手順をFetchmailに示します。

  • サーバーオプション — ポーリングされるサーバーに関する ホスト名などの必要な情報を指定したり、特定の電子メールサーバーで設定されている、チェックする ポートやタイムアウトまで待つ秒数などの表示したい個人設定を指定したりします。これらの オプションは、そのサーバーで使用されるすべてのユーザーオプションに影響を与えます。

  • ユーザーオプション —特定の電子メールサーバーを使用して電子メールの認証や有無のチェックを行うのに必要なユーザー名やパスワードなどの情報が含まれています。

グローバルオプションは.fetchmailrcファイルの一番上にあり、 その後に1つ又は複数のサーバーオプションがあり、各サーバーオプションはFetchmailがチェック しなければならない異なる電子メールサーバーを指定します。その電子メールサーバー上で チェックしたいユーザーアカウントごとに、サーバーオプションの後にユーザーオプションが あります。サーバーオプションと同様に、特定のサーバー上にある複数の電子メールアカウントを チェックしたいときなど、そのサーバーで使用する複数のユーザーオプションを指定できます。

サーバーオプションは、サーバー情報の前にある特別なオプションの動詞、すなわち、pollskipを使用して.fetchmailrcファイル内のサービスに呼び出されます。pollアクションはこのサーバーオプションの実行時にそのサーバーオプションを使用するようにFetchmailに指示し、そのサーバーオプションは実際に各種のユーザーオプションを使用して電子メールの有無をチェックします。しかし、Fetchmailを呼び出すときにこのサーバーのホスト名を指定しないと、skipアクションの後のサーバーオプションはチェックされません。skipオプションを使用すると、.fetchmailrc内にテスト設定を設定し、現在機能している設定に影響を与えずに特に必要なときだけそのサーバーを使用してチェックします。

.fetchmailrcファイルのサンプルは、次のように表示されます。

set postmaster "user1"
set bouncemail

poll pop.domain.com proto pop3
     user 'user1' there with password 'secret' is user1 here

poll mail.domain2.com
     user 'user5' there with password 'secret2' is user1 here
     user 'user7' there with password 'secret3' is user1 here

この例では、グローバルはオプションセットなので、最終手段としてユーザーに電子メールが送られ (postmasterオプション)、すべての電子メールエラーは、送信者ではなく、 ポストマスターに送られます (bouncemailオプション)。setアクションは、 この行にグローバルオプションが含まれていることをFetchmailに伝えます。その後、2つの メールサーバーが指定され、その1つはPOP3を使用してチェックするようにセットされ、もう1つは 実際に機能するものを検索するために各種のプロトコルを試行するようにセットされます。2つ目の サーバーオプションを使用して2人のユーザーがチェックされますが、ユーザーのいずれかの為の メールはすべてユーザー1のメールスプールに送られます。これにより、複数のサーバー上で 複数のメールボックスがチェックできるようになり、1つのMUAボックスに表示されます。 各ユーザー特有の情報は、userアクションで始まります。

注意注意
 

.fetchmailrcファイルにパスワードを設定する必要はありません。 with password '<password>'を 省略すると、 Fetchmailが起動された時にパスワードを要求するようになります。

Fetchmailには、多くの異なるグローバル、サーバー、及びローカルオプションが 含まれています。これらのオプションの多くは、稀にしか使用されないか、又は 非常に特別な場合のみの使用となります。fetchmailの manページでは、各オプションを詳細に説明していますが、殆どの一般的な ものはここでリストしてあります。

11.3.2.2. グローバルオプション

各グローバルオプションは、setアクションの後の1行に設定してください。

  • daemon <seconds> — Fetchmailがバックグランドにいて、指定した間隔でメールを取り込む デーモンを指定します。

  • postmaster — 配達の問題がある場合、メールを 送るためのローカルユーザーを指定します。

  • syslog — エラーとステータスメッセージ用の ログファイルを指定します。デフォルトでこれは、/var/log/maillogです。

11.3.2.3. サーバーオプション

pollskipのいずれかのアクションの後にサーバーオプションを .fetchmailrc内のそれらの独自の行に設定します。

  • auth <auth-type> — 使用する認証のタイプを指定します。デフォルトでは、password認証が 使用されますが、プロトコルによってはkerberos_v5kerberos_v4sshなどの他のタイプの認証もサポートするものがあります。any 認証タイプを使用すると、Fetchmailはまず、パスワードを必要としない方法を試し、次にパスワードを マスクする方法を試し、最後にサーバーに対して認証するためのパスワードを平文でサーバーに送ろうとします。

  • interval <number> — すべての設定済みサーバー上で電子メールの有無をチェックする <number>回ごとに 指定したサーバーをポーリングします。このオプションは通常、めったに メッセージを受信しない電子メールサーバーで使用します。

  • port <port-number> —指定されたプロトコルのデフォルトポート番号を無効にします。

  • proto <protocol>pop3imapなどの特定のプロトコルを使用して このサーバー上でメッセージの有無をチェックするようにFetchmailに指示します。

  • timeout <seconds> — Fetchmailが接続試行を諦めるまでのサーバーの不活動期間を指定します。 この値が指定されていない場合、デフォルトの300秒が 採用されます。

11.3.2.4. ユーザーオプション

ユーザーオプションは、サーバーオプションの下の独自の行か、サーバーオプションと 同じ行に設定できます。いずれの場合も、定義したオプションはuserオプション (以下で定義している)の後に表示されます。

  • fetchall —すでに表示されているメッセージを含むキュー内のすべてのメッセージをダウンロードするようにFetchmailに指示します。デフォルトでは、Fetchmailは新しいメッセージだけをプルダウンします。

  • fetchlimit <number> —停止する前にある個数のメッセージだけを回収できます。

  • flush —新しいメッセージを回収する前にキュー内のすでに表示されているすべてのメッセージを削除するようにFetchmailに指示します。

  • limit <max-number-bytes> — 特定サイズ以下のメッセージだけを検索できることを指定できます。このオプションは、 大きいメッセージをダウンロードするのに時間がかかりすぎるときの低速ネットワークリンクで便利です。

  • password '<password>' —このユーザーに使用するパスワードを指定します。

  • preconnect "<command>" — このユーザーに対するメッセージを検索する前に指定されたコマンドを実行するようにFetchmailに指示します。

  • postconnect "<command>" — このユーザーに対するメッセージを検索した後に指定されたコマンドを実行するようにFetchmailに指示します。

  • ssl — SSL暗号化を有効にします。

  • user "<username>" — メッセージを検索するためにFetchmailで使用するユーザー名を設定します。 このオプションは、ほかのユーザーオプションの前に表示する必要があります。

11.3.2.5. Fetchmailコマンドオプション

コマンドラインで使用できるFetchmailオプションの大半は、fetchmailコマンドを 実行するときに、.fetchmailrc設定オプションをミラー化します。このミラー化が 行われるのは、設定ファイルがあってもなくてもFetchmailを使用できるようにするためです。大半の ユーザーは、コマンドラインでこれらのオプションを使用しません。それは、Fetchmailを実行するたびに 使用される.fetchmailrcファイルにこれらのオプションを残すほうが簡単であるからです。

しかし、特定目的のために他のオプションを付けてfetchmailコマンドを 実行したい場合があります。コマンドラインで指定されたすべてのオプションは設定ファイルオプションを 無効にするので、コマンドオプションを発行して、エラーを発生させている.fetchmailrcの 設定を一時的に無効にすることもできます。

11.3.2.6. 情報オプション、あるいはデバッグオプション

fetchmailコマンドの後に使用されるある種のオプションは、重要な情報を与える可能性があります。

  • --configdump.fetchmailrcとFetchmailのデフォルトからの情報に基づいてすべての可能なオプションを表示します。このオプションを使用すると、ユーザーに対する電子メールは検索されません。

  • -s — Fetchmailをサイレントモードで実行し、エラー以外のメッセージがfetchmailコマンドの後に表示されないようにします。

  • -v — Fetchmailを冗長モードで実行し、Fetchmailとリモート電子メールサーバーの間のすべての通信を表示します。

  • -V — このオプションを選択すると、Fetchmailは詳細バージョン情報を表示し、 そのグローバルオプションを一覧し、電子メールプロトコルや認証方法などの各ユーザーで使用される設定を 示します。このオプションを使用すると、ユーザーに対する電子メールは検索されません。

11.3.2.7. 特別なオプション

これらのオプションは、.fetchmailrcファイルでよく見られるデフォルトを無効にする場合に便利です。

  • -a — リモート電子メールサーバーからすべてのメッセージを (新しいメッセージかすでに表示されたメッセージかに関係なく)ダウンロードするように Fetchmailに指示します。デフォルトでは、Fetchmailは、新しいメッセージだけをダウンロードします。

  • -k —このオプションを選択すると、Fetchmailはメッセージをダウンロードした後にリモート電子メールサーバー上にメッセージを残します。このオプションは、メッセージをダウンロードした後にメッセージを削除するデフォルト動作を無効にします。

  • -l <max-number-bytes> — 特定サイズ以上のすべてのメッセージをダウンロードせず、リモート電子メールサーバー上に メッセージを残すようにFetchmailに指示します。

  • --quit — Fetchmailデーモンプロセスを終了します。

fetchmailマニュアルページには、以上のコマンド以外のコマンドや .fetchmailrcオプションが表示されています。