メールシステムの管理

第 2 章 メールサービスの設定と管理

この章ではメールサービスを設定し、管理する方法について説明します。

メールサービスの管理についてまだ理解していない場合は、メールサービスの用語や構造の紹介、またメールサービス構成の説明について、第 1 章「メールサービスについて」を参照してください。

次の項目から特定の作業の手順が載っているページを探してください。

メールシステムの計画

この節では、4 つの基本的なメール構成のタイプについて説明し、各構成を設定するために必要とされる作業について簡単に説明します。新しいメールシステムを設定する必要がある場合や、既存のものを拡張しようとする場合、この節が役立ちます。構成の最も基本的なケース (メールが完全にローカルで、外部との接続がない) から始め、メールゲートウェイを持つ 2 つのドメインの構成へと、順に複雑なものを取り上げます。

メールシステムを設定するには、構成とは関係なく、次の要素が必要です。

構成ファイルや別名ファイルを設定する方法や、メールボックスを置く場所は、選ぶ構成によって異なります。

システム管理者として、別名の更新とメールメッセージの転送の方法を決定してください。ユーザーがメールの転送要求やデフォルトのメール別名の変更要求を送る場所として、aliases メールボックスを設定できます。システムで NIS または NIS+ を使用する場合、転送の管理は、ユーザーではなく管理者が行うことができます。

ローカルメール専用

図 2-1 で示すように、最も単純なメール構成は、1 つのメールホストと、それに接続する複数のワークステーションです。メールは完全にローカルです。すべてのクライアントがローカルのディスクにメールを格納し、メールサーバーとして機能します。メールアドレスは /etc/mail/aliases ファイルを使って構文解析されます。

図 2-1 ローカルメール構成

Graphic

この種のローカルメール構成を設定するには、以下が必要となります。

リモートモードにおけるローカルメール

この構成では、各メールクライアントが、クライアントのメールボックスにメールのスプーリングが行える 1 つのメールサーバーから、メールをマウントします。このサーバーがメールホストになっても構いません。この構成では、各クライアントのメールボックスのバックアップが簡単に行えます。

この種類のメール構成を設定するには、以下の設定が必要です。

ローカルメールとリモート接続

小規模のネットワークにおける最も一般的なメール構成を図 2-2 に示します。1 つのシステムが、メールサーバー、メールホスト、および外部へのメールゲートウェイを兼ねます。メールは /etc/mail/aliases ファイルを使って配信されます。ネームサービスは必要ありません。

図 2-2 UUCP 接続を持つローカルメール構成

Graphic

メールクライアントがメールホストの /var/mail からメールファイルをマウントする場合、この種のメール構成を設定するには、以下の条件が必要です。

2 つのドメインと 1 つのゲートウェイ

図 2-3 に示したメール構成には、2 つのドメインと 1 つのメールゲートウェイがあります。この構成では、各ドメインのメールサーバー、メールホストおよびメールゲートウェイ (複数も可) が、異なるシステムの場合も多くなります。メールの管理や配信の過程をより簡単にするため、ネームサービスを使用します。

図 2-3 2 つのドメインと 1 つのゲートウェイ

Graphic

メールクライアントがメールホストの /var/mail からメールファイルをマウントする場合、この種のメール構成を設定するには、以下の条件が必要です。

メールサービスの設定

サイトが企業外の電子メール (email) サービスに接続していないか、または企業が 1 つのドメイン内にある場合は、メールサービスを比較的容易に設定できます。

メールでは、ローカルメール用に 2 種類の構成と、ドメイン外のネットワークとの通信用にさらに 2 つの構成が必要です。これらの構成は、同じシステムで組み合わせるか、または別のシステムで提供できます。表 2-1 の機能を使用するには、サイト上のシステムを設定する必要があります。

表 2-1 メール構成

構成 

説明 

メールクライアント

メールクライアントとは、メールボックスがメールサーバーにあるユーザーを指す 

メールサーバー

メールサーバーは、メールボックスを /var/mail ディレクトリに格納する

メールホスト

少なくとも 1 つのメールホストが必要。メールホストはむずかしい電子メールアドレスを解釈し、ドメイン内でメールを再度ルーティングする 

メールゲートウェイ

メールゲートウェイは、ドメイン外の異なる通信ネットワーク間を接続したり、異なる通信ネットワーク間を接続したりする。ゲートウェイを設定する場合は、必要なゲートウェイ構成ファイルに近いものを探して、それを状況に合わせて修正する 

メールサービスの設定を始める前に、メールサーバー、メールホスト、およびメールゲートウェイとして機能するシステムを選びます。サービスを提供するすべてのメールクライアントのリストも作成し、メールボックスの位置を入れてください。このリストは、ユーザーのメール別名を作成するときに有用です。これらの各システムの持つ機能の詳細は、第 1 章「メールサービスについて」を参照してください。便宜のために、どのシステムがメールサーバー、メールホスト、およびメールゲートウェイとして適しているかのガイドラインをこのあとの節でも再度説明します。

設定を簡単にするために、この章では、個々のメールサーバー、メールホスト、メールクライアント、およびリレーホストを設定するのに必要な操作を示します。メールサービス構成のシステムが複数の機能構成で動作する場合、システムのタイプごとに適切な操作説明に従ってください。たとえば、メールホストとメールサーバーの機能が同じシステムにある場合は、そのシステムをメールホストとして設定するための指示に従い、次に同じシステムをメールサーバーとして設定するための指示に従ってください。


注 -

次のメールサーバーとメールクライアントの設定の手順は、メールボックスが NFS でマウントされているときに適用されます。ただし、通常、メールボックスはローカルにマウントされた /var/mail ディレクトリで管理されます。この場合、このあとの手順は必要ありません。


メールサーバーを設定する方法

メールサーバーはローカルユーザーにメールサービスを提供するだけなので、設定には特別な手順は必要ありません。ユーザーはパスワードファイルか名前空間にエントリが必要です。そのエントリは、メールの配信用にローカルのホームディレクトリが ‾/.forward をチェックできるために必要です。このためにホームディレクトリサーバーがしばしばメールサーバーとして設定されます。

メールサーバーは、クライアントからのすべてのメールのルーティングを行います。メールサーバーに必要な唯一のリソースは、クライアントメールボックスのための十分なスプール空間です。リモートのマウントでは、/var/mail ディレクトリを使用できるようにする必要があります。

この作業のために、/etc/dfs/dfstab ファイルをチェックして /var ディレクトリがエクスポートされていることを確認します。

  1. share と入力して Return キーを押します。

    /var ディレクトリが共用になっていれば、これで終了です。/var ディレクトリがエクスポートされていなければ、次の手順に進みます。

  2. share -F nfs /var/mail と入力して Return キーを押します。

  3. ファイルシステムを永久的に共用するには、/etc/dfs/dfstab を編集して、手順 2 で使用したコマンド行を追加します。


注 -

mail.local プログラムは、メッセージが初めて配信されたときに /var/mail ディレクトリでメールボックスを自動的に作成します。メールクライアントのために個々のメールボックスを作成する必要はありません。


メールクライアントを設定する方法

メールクライアントは、メールボックスがメールサーバーにあり、/etc/mail/aliases ファイルのメール別名がメールボックスの位置を指しているメールサービスのユーザーです。

  1. メールクライアントのシステムでスーパーユーザー になります。

  2. メールクライアントのシステムで /var/mail マウントポイントがあることを確認します。

  3. メールサーバーから /var/mail ディレクトリをマウントします。

    メールディレクトリが自動的にマウントされるか、ブート時にマウントされます。

    1. /var/mail を自動的にマウントするには、/etc/auto_direct を編集して下記のようなエントリを追加します。


      /var/mail -rw,hard,actimeo=0 server:/var/mail 
    2. ブート時に /var/mail をマウントするには、etc/vfstab ファイルを編集して、メールサーバーに /var/mail ディレクトリのエントリを追加し、それをローカルの /var/mail ディレクトリにマウントします。


      server:/var/mail - /var/mail nfs - no rw,hard,actimeo=0

      システムをリブートするたびに、クライアントのメールボックスが自動的にマウントされます。クライアントのメールボックスをマウントするには、システムをリブートする前に、mountall と入力します。


      注意 - 注意 -

      NFS サーバーからメールをマウントするときは、メールボックスのロックとアクセスが適切に行われるように、actimeo=0 オプションを含める必要があります。


  4. システム管理ツール (admintool) を使用して /etc/hosts ファイルを編集し、メールサーバーのエントリを追加します。

    ネームサービスを使用している場合には、この手順は不要です。

  5. 別名ファイルの 1 つにクライアントのエントリを追加します。

    異なるタイプのメール構成に対してメール別名を作成する方法については、「メール別名の作成」を参照してください。


    注 -

    mail.local プログラムは、メッセージが初めて配信されるときに /var/mail ディレクトリでメールボックスを自動的に作成します。メールクライアントのために個々のメールボックスを作成する必要はありません。


メールホストを設定する方法

メールホストは、電子メールアドレスを解決し、ドメイン内でメールを再度ルーティングします。メールホストに適しているシステムは、ドメイン外または親ドメインに接続されているシステムです。

  1. メールホストシステムでスーパーユーザーになります。

  2. ホスト名の構成を確認します。

    次のように check-hostname スクリプトを実行し、sendmail が、このサーバーの完全指定ホスト名を識別できるかどうかを確認します。


    # /usr/lib/mail/sh/check-hostname
    hostname phoenix OK: fully qualified as phoenix.eng.acme.com

    このスクリプトによる完全指定ホスト名の識別ができなかった場合は、完全指定ホスト名を、/etc/hosts 内のホストの最初の別名として追加する必要があります。

  3. 管理ツールを使用して /etc/hosts ファイルを編集します。

    IP アドレスとメールホストシステムのシステム名の後に、mailhostmailhost.domainname を追加します。このシステムがメールホストシステムとして指定されます。domainname は、このコマンド (/usr/lib/sendmail -bt -d0 </dev/null) で出力されるサブドメイン名と同じにする必要があります。


    # /usr/lib/sendmail -bt -d0 </dev/null
    Version 8.9.0+Sun
     Compiled with: MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7 NAMED_BIND 
                    NDBM NETINET NETUNIX NEWDB NIS NISPLUS QUEUE SCANF SMTP
                    USERDB XDEBUG
     
    ============ SYSTEM IDENTITY (after readcf) ============
          (short domain name) $w = phoenix
      (canonical domain name) $j = phoenix.eng.acme.com
             (subdomain name) $m = eng.acme.com
                  (node name) $k = phoenix
    ======================================================== 
  4. ホストファイルの 1 つに新規メールホストのエントリを作成します。

    NIS または NIS+ を使用する場合は、mailhost および mailhost.domainname と呼ばれるホスト別名を含むエントリを、新規メールホストのホストエントリに追加します。

    NIS または NIS+ を使用しない場合は、ネットワーク上の各システム用に、/etc/hosts にエントリを作成する必要があります。エントリでは、必ず IP address mailhost_name mailhost mailhost.domainname というフォーマットを使用してください。

  5. cp /etc/mail/main.cf /etc/mail/sendmail.cf と入力して Return キーを押します。

    これにより、/etc/mail/main.cf ファイルがコピーされ、名前が変更されます。

  6. sendmail を再起動し、メール構成をテストします。

    詳細は、「メール構成をテストする方法」を参照してください。

メールゲートウェイを設定する方法

メールゲートウェイは、ドメイン外のネットワークとの通信を管理します。送信側メールゲートウェイ上のメールプログラムは、受信側システムのメールプログラムと同じでなければなりません。

メールゲートウェイに適しているシステムは、Ethernet および電話回線に接続されているシステムか、またはインターネットへのルーターとして設定されているシステムです。メールホストをメールゲートウェイとして設定するか、または別のシステムをメールゲートウェイとして設定できます。複数のメールゲートウェイを自分のドメイン用として設定できます。UUCP 接続がある場合は、UUCP 接続をメールゲートウェイとするシステム (1 つまたは複数のシステム) を設定してください。

  1. メールゲートウェイでスーパーユーザーになります。

  2. cp /etc/mail/main.cf /etc/mail/sendmail.cf と入力して Return キーを押します。

    このコマンドにより、main.cf ファイルがコピーされ、名前が変更されます。

  3. ホスト名の構成を確認します。

    次のように check-hostname スクリプトを実行し、sendmail が、このサーバーの完全指定ホスト名を識別できるかどうかを確認します。


    # /usr/lib/mail/sh/check-hostname
    hostname phoenix OK: fully qualified as phoenix.eng.acme.com

    このスクリプトによる完全指定ホスト名の識別ができなかった場合は、完全指定ホスト名を、/etc/hosts 内のホストの最初の別名として追加する必要があります。

  4. sendmail を再起動し、メール構成をテストします。

    「メール構成をテストする方法」を参照してください。

sendmail 構成ファイルの構築

sendmail 構成ファイルを作成するプロセスが変わりました。構成ファイルの管理が、多くのサイトで簡単になります。sendmail.cf ファイルの古いバージョンはまだ使用できますが、適当な時期に新しいシステムに移行することをお勧めします。新しいプロセスの詳細は、/usr/lib/mail/README で説明します。

新しい sendmail.cf ファイルを構築する方法

  1. 変更しようとする構成ファイルのコピーを作成します。


    # cd /usr/lib/mail/cf
    # cp main-v7sun.mc myhost.mc 
    
  2. 必要に応じて新しい構成ファイルを編集します (たとえば、myhost.mc など)。

  3. m4 を使用して構成ファイルを構築します。


    # cd /usr/lib/mail/cf
    # /usr/ccs/bin/make myhost.cf 
    
  4. -C オプションを使用して、新しい構成ファイルをテストし、新しいファイルを指定します。


    # /usr/lib/sendmail -C /usr/lib/mail/cf/myhost.cf -v testaddr </dev/null
    

    このコマンドは testaddr にメッセージを送り、その一方で稼動時にメッセージを表示します。システム上で sendmail サービスを再起動せずに、送信メールだけがテストできます。まだメールを処理していないシステムでは、「メール構成をテストする方法」に記載される、完全なテスト手順を使用してください。

  5. (省略可能) オリジナルのコピーを作成した後に新しい構成ファイルをインストールします。


    # cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.save
    # cp /usr/lib/mail/cf/myhost.cf /etc/mail/sendmail.cf
     
    
  6. sendmail サービスを再起動します。


    # pkill -HUP sendmail
    

メール別名の作成

aliasadm コマンドを使用してユーザーのメール別名を作成できます。メール別名はドメイン内で一意でなければなりません。この節では、コマンド行を使用してメール別名テーブルから別名を検索する方法と、NIS+、NIS、DNS、またはローカルシステムのためにメール別名を作成する方法について説明します。あるいは、admintool から Database Manager アプリケーション (Solaris とは別パッケージ) を使用して aliases データベース上でこれらの作業を行うことができます。

また、データベースファイルは、makemap を使用してローカルメールホスト用に作成できます。これらのデータベースファイルの使用により、NIS または NIS+ などの名前空間を使用する場合の利点をすべて提供できるわけではありませんが、データの検索速度は、ローカルファイルを使用するよりも速くなります。

NIS+ mail_aliases テーブルの内容を表示する方法

aliasadm コマンドを使用するには、rootmail_aliases テーブルを所有する NIS+ グループのメンバー、またはテーブルを作成したユーザーでなければなりません。

NIS+ mail_aliases テーブルの全体の内容を表示する

    aliasadm -l と入力して Return キーを押します。

これにより、別名によるアルファベット順に別名テーブルの内容が表示されます。


注 -

大きな別名テーブルがある場合、全体の内容の表示には、やや時間がかかることがあります。特定のエントリを検索する場合は、grep 検索機能を使用して特定のエントリを探し出すことができるように、出力をパイプを通して grep コマンドに入力してください (aliasadm -l | grep entry)。


NIS+ mail_aliases テーブルの個々のエントリを表示する

    aliasadm -m alias と入力して Return キーを押します。

別名エントリが表示されます。


# aliasadm -m ignatz
ignatz: ignatz@saturn # Alias for Iggy Ignatz

注 -

aliasadm -m オプションは、別名が完全に同じものだけを表示します。部分的に同じ文字列は表示しません。aliasadm -m オプションではメタキャラクタ (* および ? など) は使用できません。部分的に一致する文字列も表示したい場合は、aliasadm -l | grep partial-string と入力して Return キーを押してください。


コマンド行から NIS+ mail_aliases テーブルへ別名を追加する方法

まったく新しい NIS+ mail_aliases テーブルを作成する場合は、最初に NIS+ テーブルを初期設定しなければなりません。

NIS+ テーブルを初期設定する

    aliasadm -I と入力して Return キーを押します。

コマンド行から NIS+ mail_aliases テーブルに別名を追加する

  1. メールクライアント、メールボックスの位置、およびメールサーバーシステム名の各リストをコンパイルします。

  2. 任意のシステムでスーパーユーザーになります。

  3. それぞれの別名について、aliasadm -a alias expanded_alias [options comments] と入力して Return キーを押します。

    これにより、別名が NIS+ mail_aliases テーブルに追加されます。


    # aliasadm -a iggy iggy.ignatz@saturn "Iggy Ignatz"
  4. aliasadm -m alias と入力して Return キーを押します。

    これにより、作成したエントリが表示されます。

  5. エントリが正しいことをチェックします。

NIS+ mail_aliases テーブルを編集してエントリを追加する方法

2 つまたは 3 つ以上の別名を追加する場合は、NIS+ テーブルを直接編集することもあります。

  1. メールクライアント、メールボックスの位置、およびメールサーバーシステムの名前の各リストをコンパイルします。

  2. 任意のシステムでスーパーユーザーになります。

  3. aliasadm -e と入力して Return キーを押します。

    別名テーブルは、$EDITOR 環境変数で設定されているエディタを使って表示されます。変数が設定されていなければ、vi がデフォルトのエディタです。

  4. 次のフォーマットを使ってそれぞれの別名を別の行に入力します。

    1. 任意の順序でテーブルの任意の位置に別名を入力します。

      順序は NIS+ mail_aliases 別名テーブルにおいては任意です。aliasadm -l コマンドがリストをソートし、アルファベット順に表示します。

    2. フォーマット alias: expanded_alias # ["option"# "comments"] を使用します。

      オプション列をブランクにする場合は、空の引用符 2 つ ("") を入力し、次にコメントを追加します。

    3. Return キーを押すことにより、それぞれの行を終了させます。

  5. エントリが正しいことをチェックします。

  6. 変更を保存します。

NIS+ mail_aliases テーブルのエントリを変更する方法

  1. 任意のシステムでスーパーユーザーになります。

  2. aliasadm -m alias と入力して Return キーを押します。

    別名の情報が表示されます。

  3. aliasadm -c alias expanded_alias [options comments] と入力して Return キーを押します。

    別名は、入力した新しい情報を使って変更されます。

  4. aliasadm -m alias と入力して Return キーを押します。

    作成したエントリが表示されます。

  5. エントリが正しいことをチェックします。

NIS+ mail_aliases テーブルからエントリを削除する方法

  1. 任意のシステムでスーパーユーザーになります。

  2. aliasadm -d alias と入力して Return キーを押します。

    別名が NIS+ mail_aliases テーブルから削除されます。

NIS mail.aliases マップを設定する方法

NIS マスター上の /etc/mail/aliases ファイルには名前が含まれていて、それによってシステムまたは個人が登録されています。ローカル /etc/mail/aliases ファイルで一致するものがなければ、NIS マスターが検索されます。sendmail プログラムは、NIS マスターファイルを使用してメールアドレスを決定します。aliases(4) のマニュアルページを参照してください。

各システムのファイルを編集するか、またはあるシステムのファイルを編集し、それをほかの各システムにコピーできます。

別名の形式は次のとおりです。


name: name1, name2, ...

ローカル名またはドメインに対して別名を使用できます。たとえば、システム saturn にメールボックスがあり、ドメイン planets 内のユーザー fred の別名エントリでは、/etc/mail/aliases ファイルに次のエントリがあります。


fred: fred@planets

NIS mail.aliases マップを設定する

  1. メールクライアント、メールボックスの位置、およびメールサーバーシステムの名前の各リストをコンパイルします。

  2. NIS マスターサーバーでスーパーユーザーになります。

  3. /etc/mail/aliases ファイルを編集し、次のようなエントリを作成します。

    1. メールクライアントごとにエントリを追加します。

    2. エントリ Postmaster: root をポストマスタとして指定された個人のメールアドレスに変更します。

      詳細は、「ポストマスタ別名を設定する方法」を参照してください。

    3. メールサーバーの管理のためのメールボックスを作成した場合は、root:mailbox@mailserver のエントリを作成します。

    4. 変更を保存します。

  4. NIS マスターサーバーの /etc/hosts ファイルを編集し、メールサーバーごとにエントリを作成します。

  5. cd /var/yp と入力して Return キーを押します。

  6. make と入力して Return キーを押します。

    /etc/hosts/etc/mail/aliases ファイルでの変更が NIS スレーブシステムに転送されます。別名が有効になるのに、数分かかることがあります。

ローカルメール別名ファイルを設定する方法

ローカルシステムの /etc/mail/aliases ファイルには名前が含まれていて、それによってシステムまたは個人が登録されています。sendmail プログラムは、このファイルを使用してメールアドレスを決定します。aliases(4) のマニュアルページを参照してください。

ネットワークがネームサービスを実行していなければ、各システムの /etc/mail/aliases ファイルには、メールクライアントのすべてのエントリが入っていなければなりません。各システムのファイルを編集するか、またはあるシステムのファイルを編集し、それをほかの各システムにコピーできます。

別名の形式は次のとおりです。


name: name1, name2, ...

ローカル名だけに使用する別名、つまり現在のホスト名またはホスト名なしの別名を作成できます。たとえば、システム saturn にメールボックスがあるユーザー ignatz の別名エントリでは、/etc/mail/aliases ファイルに次のエントリがあります。


ignatz: ignatz@saturn

メールサーバーごとに管理アカウントを作成するとよいでしょう。スーパーユーザーにメールサーバーのメールボックスを割り当て、/etc/mail/aliases ファイルにスーパーユーザー用のエントリを割り当てることにより作成できます。たとえば、システム saturn がメールボックスサーバーならば、/etc/mail/aliases ファイルにエントリ root: sysadmin@saturn を追加してください。

ローカルメール別名ファイルを設定する

  1. メールクライアントとメールボックスの位置の各リストをコンパイルします。

  2. メールサーバーでスーパーユーザーになります。

  3. /etc/mail/aliases ファイルを編集し、次のようなエントリを作成します。

    1. メールクライアントごとにエントリを追加します。

    2. エントリ Postmaster: root をポストマスタとして指定された個人のメールアドレスに変更します。

      詳細は、「ポストマスタ別名を設定する方法」を参照してください。

    3. メールサーバーの管理のためのメールボックスを作成した場合は、root: mailbox@mailserver のエントリを作成します。

    4. 変更を保存します。

  4. newaliases と入力して Return キーを押します。

    これにより、sendmail が使用できるバイナリ形式で alias ファイルが作成されます。ファイルは、/etc/mail/aliases.dir/etc/mail/aliases.pag ファイルに格納されます。

  5. /etc/mail/aliases/etc/mail/aliases.dir、および /etc/mail/aliases.pag ファイルを他の各システムにコピーします。

    3 つのファイルをすべてコピーしたら、newaliases コマンドをほかの各システムで実行する必要はありません。

    rcp または rdist コマンドを使用してファイルをコピーするか、またはこの目的のために作成したスクリプトを使ってファイルをコピーできます。メールクライアントを追加または削除するたびにすべての /etc/mail/aliases ファイルを更新しなければならないので注意してください。

キー付きマップファイルの作成方法

  1. 選択したエディタを使用して、入力ファイルを作成します。

    エントリは以下のようになります。


    sandy@newdomain.com     ssmith@newdomain.com
    ssmith@olddomain.com    error:nouser No such user here
    @olddomain.com          %1@newdomain.com 

    この例では、最初のエントリにより、メールは新しい別名に転送されます。2 番めのエントリにより、不適切な別名が使用された時にメッセージが作成されます。さらに、最後のエントリにより、すべての着信メールは olddomain から newdomain へ転送されます。

  2. データベースファイルを作成します。


    # /usr/sbin/makemap -o dbm newmap < newmap
    
    -o

    ファイルを上書きする代わりに追加する。使用できるオプションのリストは、makemap(1m) を参照

    dbm

    dbm データベースタイプを選択する。この他のマップタイプには、btree または hash がある

    newmap

    入力ファイル名とデータベースファイル名の最初の部分。dbm データベースタイプを選択すると、データベースファイルは接尾辞に .pag または .dir を使用して作成される。他の 2 つのデータベースタイプの場合、ファイル名には .db が付く

DNS を設定して sendmail で作業する方法

DNS ネームサービスは、個人の別名をサポートしません。「メール交換 (MX) レコード」および cname レコードを使用してホストまたはドメインの別名をサポートします。ホスト名またはドメイン名、またはその両方を DNS データベースで指定できます。DNS を管理する方法については、『Solaris ネーミングの設定と構成』を参照してください。

sendmail で DNS を使用する

  1. /etc/nsswitch.conf ファイルを編集して、ホストエントリに dns フラグが含まれていることを確認します。

    DNS のホスト別名が使用できるように、ホストエントリには dns フラグが含まれている必要があります。

  2. mailhostmailhost.domainname エントリをチェックします。

    DNS データベースに mailhostmailhost.domainname のエントリがあることを確認してください。

ポストマスタ別名を設定する方法

各システムは postmaster メールボックスにメールを送信できなければなりません。postmaster の NIS または NIS+ 別名を作成するか、または各ローカル /etc/mail/aliases ファイルでこれを作成できます。次に、デフォルトの /etc/mail/aliases エントリを示します。


# Following alias is required by the mail protocol, RFC 822
# Set it to the address of a HUMAN who deals with this system's
# mail problems.
Postmaster: root

postmaster の別名を作成するには、各システムの /etc/mail/aliases ファイルを編集し、root をポストマスタとして機能する個人のメールアドレスに変更します。

ポストマスタがポストマスタメールと個人的メールとを区別するために、別のメールボックスを作成できます。別のメールボックスを作成する場合は、/etc/mail/aliases ファイルを編集するときに、ポストマスタのメールアドレスではなくメールボックスアドレスを使用してください。

postmaster 用に別のメールボックスを作成する

  1. postmaster として指定された個人のアカウントを作成し、アスタリスク (*) をパスワードフィールドに入れます。

  2. メールが配信されたら mail -f postmaster と入力して Return キーを押します。

    mail プログラムはメールボックス名を読んだり、書き込んだりできます。

postmaster メールボックスを別名に追加する

  1. 各システムでスーパーユーザーになり、/etc/mail/aliases ファイルを編集します。

    ネットワークが NIS または NIS+ を実行しない場合は、/etc/mail/aliases ファイルを編集します。

  2. ポストマスタ別名を root から Postmaster: postmastermailbox@postmasterhost に変更し、その変更を保存します。

  3. ポストマスタのローカルシステムで、別名の名前 (たとえば、sysadmin) を定義する /etc/mail/aliases ファイルにエントリを作成し、ローカルメールボックスへのパスを入れます。

  4. newaliases と入力して Return キーを押します。

    あるいは、aliases ファイルで Postmaster: エントリを

    Postmaster: /usr/somewhere/somefile エントリに変更することもできます。

メール待ち行列の管理

この節では、メールサービスをスムーズに動作させる方法について説明します。

待ち行列を印刷する方法

待ち行列の内容は mailq で印刷できます。このコマンドは sendmail-bp フラグを指定するのと同じです。

    /usr/bin/mailq | more と入力して Return キーを押します。

待ち行列 ID のリスト、メッセージのサイズ、メッセージが待ち行列に入れられた日付、メッセージの状態、および発信者と受信者が表示されます。

待ち行列を強制処理する方法

    /usr/lib/sendmail -q -v と入力して Return キーを押します。

これで待ち行列の処理が強制的に行われ、待ち行列の処理中にジョブの進行状況が表示されます。

メール待ち行列のサブセットを実行する方法

    /usr/lib/sendmail -qRstring と入力して Return キーを押します。

-qRstring (どれかの受信者名が string に一致する場合に待ち行列を実行) または -qInnnnn (待ち行列 IDnnnnn の 1 つのメッセージを実行) でいつでも待ち行列のサブセットを実行できます。string はホスト名とも一致することができるので、user@host.domain のサブ文字列も一致します。

この例では、受信者 wnj の待ち行列にあるものをすべて処理します。


# /usr/lib/sendmail -qRwnj

待ち行列を移動する方法

  1. メールホストでスーパーユーザーになります。

  2. /etc/init.d/sendmail stop と入力して Return キーを押します。

    これで古い sendmail デーモンは削除されるので、古い待ち行列ディレクトリが処理されることはありません。

  3. cd /var/spool と入力して Return キーを押します。

  4. mv mqueue omqueue; mkdir mqueue と入力して Return キーを押します。

    これでディレクトリの mqueue とその内容のすべてが omqueue ディレクトリに移動し、新規の空の Rmqueue ディレクトリを作成します。

  5. chmod 755 mqueue; chown daemon.daemon mqueue と入力して Return キーを押します。

    これらのコマンドでディレクトリのアクセス権を設定し、所有者による読み込み、書き込み、実行、グループや、他のユーザーによる読み込み、実行が行えるようにします。またこれらのコマンドでは、所有者やグループを daemon に設定します。

  6. /etc/init.d/sendmail start と入力し Return キーを押します。

    これで新規 sendmail デーモンが起動します。

古いメール待ち行列を処理する方法

  1. /usr/lib/sendmail -oQ/var/spool/omqueue -q と入力して Return キーを押します。

    -oQ フラグは代替待ち行列ディレクトリを指定し、-q フラグは待ち行列での各ジョブを処理するように指示します。詳細 (verbose) 表示にしたい場合は、-v フラグを使用します。

  2. 待ち行列が最後に空になったら、rmdir /var/spool/omqueue と入力して Return キーを押します。

    これにより空のディレクトリが削除されます。

.forward ファイルの管理

この節では、.forward ファイルの管理に関する複数の手順を説明します。これらファイルはユーザーが編集できるので、ファイルが問題の原因になる場合があります。

.forward ファイルを無効にする方法

この手順は特定のホスト用の .forward ファイルだけを無効にします。

  1. スーパーユーザーになります。

  2. /usr/lib/mail/domain/solaris-generic.m4 またはサイト固有のドメイン m4 ファイルのコピーを作成します。


    # cd /usr/lib/mail/domain
    # cp solaris-generic.m4 myhost.domain.m4 
    
  3. 次の行を作成したファイルに追加します。


    define(`confFORWARD_PATH',`')dnl

    使用中のドメイン m4 ファイルにすでにこの行が存在する場合には、行を置き換えます。

  4. 新しい構成ファイルを構築してインストールします。

    完全な手順については、「新しい sendmail.cf ファイルを構築する方法」を参照してください。

.forward ファイルの検索パスを変更する方法

  1. スーパーユーザーになります。

  2. /usr/lib/mail/domain/solaris-generic.m4 またはサイト固有のドメイン m4 ファイルのコピーを作成します。


    # cd /usr/lib/mail/domain
    # cp solaris-generic.m4 myhost.domain.m4 
    
  3. 作成したファイルに次のような行を追加します。


    define(`confFORWARD_PATH',`‾z/.forward:/var/forward/$u')dnl

    使用中のドメイン m4 ファイルにすでにこの行が存在する場合には、行を置き換えます。

  4. 新しい構成ファイルを構築してインストールします。

    完全な手順については、「新しい sendmail.cf ファイルを構築する方法」を参照してください。

/etc/shells の作成および生成方法

このファイルは標準のリリースには含まれていないので、プログラムまたはファイルにメールを転送するためにユーザーが .forward ファイルを使用できるようにする場合には、追加する必要があります。このファイルは、grep を使用し、パスワード内にリストされたすべてのシェルを特定した後に、これらのシェルを入力してファイルを作成できますが、ダウンロードして入手できるスクリプトを使用した以下の手順を使用すると、より簡単に作成できます。

  1. http://www.sendmail.org/sun-specific/gen-etc-shells.html からスクリプトをダウンロードします。

  2. スーパーユーザーになります。

  3. シェルのリストを作成するために、gen-etc-shells を実行します。


    # ./gen-etc-shells.sh > /tmp/shells
    

    このスクリプトでは、getent コマンドを使用して、/etc/nsswitch.conf 内にリストされたパスワードファイルソースに組み込まれたシェルの名前を収集します。

  4. /tmp/shells 内のシェルのリストを調べます。

    選択したエディタを使用し、組み込みたくないシェルを削除します。

  5. ファイルを /etc/shells に移動させます。


    # mv /tmp/shells /etc/shells
    

問題解決のヒント

この節では、メールサービスの問題解決に使用できるヒントとツールをいくつか示します。

メール構成をテストする方法

  1. 構成ファイルを変更したシステム上で、sendmail を再起動します。


    # pkill -HUP sendmail
    
  2. /usr/lib/sendmail -v names </dev/null と入力して Return キーを押すことにより、各システムからテストメッセージを送信します。

    names には、受信者の電子メールアドレスを指定します。

    このコマンドは、指定された受信者に空のメッセージを送信し、動作している間メッセージを表示します。

  3. 次のテストを実行します。

    1. メッセージを通常のユーザー名に送ることによってメールを自分自身またはローカルシステム上のほかの人に送信します。

    2. Ethernet の場合は、別のシステムのだれかにメールを送信します。

      メインシステムからサブシステムへ、サブシステムからメインシステムへ、およびサブシステムから別のサブシステムへの 3 つの方向で送信します。

    3. メールゲートウェイがある場合、メールホストから別のドメインにメールを送信してリレーメールプログラムおよびホストが適切に設定されていることを確認します。

    4. 電話回線上に別のホストへの UUCP 接続を設定している場合は、そのホストのだれかにメールを送信し、その個人にメールを返信してもらうか、またはその個人がメッセージを受信したときに電話をしてもらいます。

    5. UUCP 接続を介してメールを送信するように他の人に頼みます。

      sendmail プログラムでは、メッセージが受信されたかどうかは通知されません。これは、メッセージが配信のために UUCP に渡されるためです。

    6. 異なるシステムの postmaster にメッセージを送り、自分のポストマスタのメールボックスに送られることを確認します。

別名をチェックする方法

別名と受信者にメールを配信できるかどうかを調べるには、次のようにします。

    /usr/lib/sendmail -v -bv recipient と入力して Return キーを押します。

このコマンドは別名を表示し、最終アドレスが配信可能かどうかを識別します。

次に出力例を示します。


% /usr/lib/sendmail -v -bv sandy
sandy... aliased to   ssmith
ssmith... aliased to              sandy@phoenix
sandy@phoenix... deliverable: mailer esmtp, host phoenix, user sandy@phoenix.eng.acme.com
% 

ローカルとドメイン全体で有効な別名を両方使用するときには、ループしたりデータベースの一貫性が失われたりしないように十分に注意する必要があります。ユーザーをあるシステムから別のシステムに移動するときは、別名のループを作成しないように特に注意してください。

sendmail ルールセットをテストする方法

  1. /usr/lib/sendmail -bt と入力して Return キーを押します。

    情報が表示されます。

  2. 最後のプロンプト (>) で、3,0 とテストしたいメールアドレスを入力します。

  3. Control-d を入力してセッションを終了します。

次に出力例を示します。


% /usr/lib/sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 3,0 sandy@phoenix
rewrite: ruleset   3   input: sandy @ phoenix
rewrite: ruleset  96   input: sandy < @ phoenix>
rewrite: ruleset  96 returns: sandy < @ phoenix . eng . acme . com . >
rewrite: ruleset   3 returns: sandy < @ phoenix . eng . acme . com . >
rewrite: ruleset   0   input: sandy < @ phoenix . eng . acme . com . >
rewrite: ruleset 199   input: sandy < @ phoenix . eng . acme . com . >
rewrite: ruleset 199 returns: sandy < @ phoenix . eng . acme . com . >
rewrite: ruleset  98   input: sandy < @ phoenix . eng . acme . com . >
rewrite: ruleset  98 returns: sandy < @ phoenix . eng . acme . com . >
rewrite: ruleset 198   input: sandy < @ phoenix . eng . acme . com . >
rewrite: ruleset 198 returns: $# local $: sandy
rewrite: ruleset   0 returns: $# local $: sandy
 

診断情報の詳細は、第 3 章「sendmail のリファレンス」を参照してください。

他のシステムへの接続を調べる方法

他のシステムへの接続を調べるには、mconnect プログラムを使用してネットワーク上のその他の sendmail システムへの接続をオープンします。mconnect プログラムは対話方式で動作します。さまざまな診断コマンドを実行できます。詳細は、mconnect(1) のマニュアルページを参照してください。次の例では、ユーザー名 shamira へのメールが配信可能かどうかを調べます。


$ mconnect phoenix
connecting to host phoenix (129.144.52.96), port 25
connection open
220 phoenix.Eng.Acme.COM Sendmail 8.9.0+Sun/8.9.0; Tue, 25 Jul 1998 10:45:28 -0700
 vrfy sandy
250 Sandy Smith <sandy@phoenix.Eng.Acme.COM>
> 

mconnect を使用して SMTP ポートに接続できない場合は、次の条件をチェックしてください。

システムログ

メールサービスは、syslogd プログラムを使ってほとんどのエラーを記録します。デフォルトでは、syslogdloghost にメッセージを送ります。

/etc/hosts ファイルの loghost というシステムを、NIS ドメイン全体のすべてのログを管理するように定義できます。システムログは syslogd プログラムによってサポートされます。 /etc/hostsloghost を指定します。loghost を指定しなければ、syslogd からのエラーメッセージはレポートされません。

例 2-1 にデフォルトの /etc/syslog.conf ファイルを示します。


例 2-1 デフォルト /etc/syslog.conf ファイル


#ident "@(#)syslog.conf   1.3        93/12/09 SMI"  /* SunOS 5.0 */  #
# Copyright (c) 1994 by Sun Microsystems, Inc. 
#
# syslog configuration file. 
# 
# This file is processed by m4 so be careful to quote (`') names 
# that match m4 reserved words. Also, within ifdef's, arguments 
# containing commas must be quoted. 
# 
# Note: Have to exclude user from most lines so that user.alert 
#       and user.emerg are not included, because old sendmails 
#       have no 4.2BSD based systems doing network logging, you 
#       can remove all the special cases for "user" logging.
# *.err;kern.debug;auth.notice;user.none         /dev/console 
*.err;kern.debug;daemon,auth.notice;mail.crit;user.none /var/adm/messages 
*.alert;kern.err;daemon.err;user.none            operator 
*.alert;user.none	                               root 
*.emerg;user.none	                               * 
# if a non-loghost machine chooses to have authentication messages 
# sent to the loghost machine, un-comment out the following line:
#auth.notice         ifdef(`LOGHOST', /var/log/authlog, @loghost) 
mail.debug           ifdef(`LOGHOST', /var/log/syslog, @loghost) 
# 
# non-loghost machines will use the following lines to cause "user" 
# log messages to be logged locally. 
# 
ifdef(`LOGHOST', , 
user.err             /dev/console 
user.err             /var/adm/messages 
user.alert           `root, operator' 
user.emerg           * 
) 

/etc/syslog.conf ファイルを編集することにより、デフォルト構成を変更できます。変更内容を有効にするには、syslog デーモンを再起動する必要があります。メールに関する情報収集のため、次の選択項目をファイルに追加できます。

次のエントリにより、重要なメッセージ、単なる情報としてのメッセージ、およびデバッグメッセージのすべてのコピーが、/var/log/syslog に送られます。


mail.crit;mail.info;mail.debug			/var/log/syslog

システムログの各行には、タイムスタンプ、それを生成したシステム名、およびメッセージが入っています。syslog ファイルは、大量の情報を記録できます。

ログは、連続したレベルとして並べられます。最下位レベルでは、異常なイベントだけが記録されます。最上位レベルでは、もっとも必須なイベントと注目する必要のないイベントが記録されます。慣例により、10 以下のログレベルが「有用」とみなされます。10 を超えるログレベルは通常、デバッグに使用されます。loghostsyslogd プログラムについては、『Solaris のシステム管理 (第 2 巻)』の「システムのメッセージ記録のカスタマイズ」を参照してください。

その他の診断情報

その他の診断情報については、次の情報源をチェックしてください。