この章ではメールサービスを設定し、管理する方法について説明します。メールサービスの管理についてまだ理解していない場合は、メールサービスの用語や構造の紹介、またメールサービス構成の説明について、第 33 章「メールサービスの導入」を参照してください。
この節では、4 つの基本的なメール構成のタイプについて説明し、各構成を設定するために必要とされる作業について簡単に説明します。新しいメールシステムを設定する必要がある場合や、既存のものを拡張しようとする場合、この節が役立ちます。構成の最も基本的なケース (メールが完全にローカルで、外部との接続がない) から始め、メールゲートウェイを持つ 2 つのドメインの構成へと、順に複雑なものを取り上げます。まず最初に、これらの構成のどれを使用するのかを決める必要があります。次の構成が対象となります。
システム管理者として、別名の更新とメールメッセージの転送の方法を決定してください。ユーザーがメールの転送要求やデフォルトのメール別名の変更要求を送る場所として、aliases メールボックスを設定できます。システムで NIS または NIS+ を使用する場合、転送の管理は、ユーザーではなく管理者が行うことができます。
図 34-1 で示すように、最も単純なメール構成は、1 つのメールホストと、それに接続する複数のワークステーションです。メールは完全にローカルです。すべてのクライアントがローカルのディスクにメールを格納し、メールサーバーとして機能します。メールアドレスは /etc/mail/aliases ファイルを使用して構文解析されます。
メールホストに指定されたサーバー (メールホストの /etc/hosts ファイルに mailhost.domainname を追加。NIS または NIS+ を実行していない場合は、すべてのメールクライアントの /etc/hosts ファイルにメールホスト IP アドレス行を追加)
ローカルメールボックスを持つ任意のシステム上にある同じ内容の /etc/mail/aliases ファイル (NIS または NIS+ を実行していない場合)
この構成では、各メールクライアントが、クライアントのメールボックスにメールのスプーリングが行える 1 つのメールサーバーから、メールをマウントします。このサーバーがメールホストになっても構いません。この構成では、各クライアントのメールボックスのバックアップが簡単に行えます。
メールホストとして指定されたサーバー (メールホストの /etc/hosts ファイルに mailhost.domainname を追加。NIS または NIS+ を実行していない場合は、すべてのメールクライアントの /etc/hosts ファイルにメールホスト IP アドレス行を追加)
ローカルメールボックスを持つ任意のシステムにある同じ内容の /etc/mail/aliases ファイル (NIS または NIS+ を実行していない場合)
/var/mail ディレクトリをマウントするため、各メールクライアントの /etc/vfstab ファイルまたは /etc/auto_direct (autofs が使用されている場合) ファイルにエントリが必要
小規模のネットワークにおける最も一般的なメール構成を図 34-2 に示します。1 つのシステムが、メールサーバー、メールホスト、および外部へのメールゲートウェイを兼ねます。メールは /etc/mail/aliases ファイルを使用して配信されます。ネームサービスは必要ありません。
メールクライアントがメールホストの /var/mail からメールファイルをマウントする場合、この種のメール構成を設定するには、次の条件が必要です。
メールホストに指定したサーバー (メールホストの /etc/hosts ファイルに mailhost.domainname を追加。NIS または NIS+ を実行していない場合は、すべてのメールクライアントの /etc/hosts ファイルにメールホスト IP アドレス行を追加)
ローカルメールボックスを持つ任意のシステム上にある同じ内容の /etc/mail/aliases ファイル (NIS や NIS+ を実行していない場合)
メールボックスがメールホストにあるときに、/var/mail ディレクトリをマウントするための各メールクライアントの /etc/vfstab ファイルか /etc/auto_direct (autofs が使用されている場合) にあるエントリ
メールサーバーの /var/mail にクライアントメールボックスを格納できるだけの十分な領域
図 34-3 に示したメール構成には、2 つのドメインと 1 つのメールゲートウェイがあります。この構成では、各ドメインのメールサーバー、メールホストおよびメールゲートウェイ (複数も可) が、異なるシステムの場合も多くなります。メールの管理や配信の過程をより簡単にするため、ネームサービスを使用します。
メールクライアントがメールホストの /var/mail からメールファイルをマウントする場合、この種のメール構成を設定するには、以下の条件が必要です。
特別な規則が追加された、カスタマイズされた sendmail.cf ファイルを必要とする複雑なゲートウェイシステム
メールゲートウェイに main.cf ファイル (MX レコードが使用される場合には編集は不要)
メールホストとして指定されたサーバー (メールホストの /etc/hosts ファイルに mailhost.domainname を追加。NIS や NIS+ を実行していない場合は、すべてのメールクライアントの /etc/hosts ファイルにメールホスト IP アドレス行を追加)
ローカルメールボックスを持つ任意のシステム上にある同じ内容の /etc/mail/aliases ファイル (NIS や NIS+ を実行していない場合)
ユーザーにメールが格納される場所 (NIS+ では mail_aliases.org_dir、NIS では別名マップ) を示す別名エントリ
各メールクライアントシステムに、デフォルトの /etc/mail/sendmail.cf ファイル (編集は不要)
メールボックスがメールホストにあるときに、/var/mail ディレクトリをマウントするための各メールクライアントの /etc/vfstab ファイルまたは /etc/auto_direct (autofs が使用されている場合) ファイルにエントリが必要
メールサーバーの /var/mail に、クライアントのメールボックスを格納できるだけの十分な領域
サイトが企業外の電子メール (email) サービスに接続していないか、または企業が 1 つのドメイン内にある場合は、メールサービスを比較的容易に設定できます。
メールでは、ローカルメール用に 2 種類の構成と、ドメイン外のネットワークとの通信用にさらに 2 つの構成が必要です。これらの構成は、同じシステムで組み合わせるか、または別のシステムで提供できます。機能を使用するには、サイト上のシステムを設定する必要があります。
メールサービスの設定を始める前に、メールサーバー、メールホスト、およびメールゲートウェイとして機能するシステムを選びます。サービスを提供するすべてのメールクライアントのリストも作成し、メールボックスの位置を入れてください。このリストは、ユーザーのメール別名を作成するときに有用です。これらの各システムの持つ機能の詳細は、第 33 章「メールサービスの導入」を参照してください。便宜のために、どのシステムがメールサーバー、メールホスト、およびメールゲートウェイとして適しているかのガイドラインをこのあとの節でも再度説明します。
設定を簡単にするために、この章では、個々のメールサーバー、メールホスト、メールクライアント、およびリレーホストを設定するのに必要な操作を示します。メールサービス構成のシステムが複数の機能構成で動作する場合、システムのタイプごとに適切な操作説明に従ってください。たとえば、メールホストとメールサーバーの機能が同じシステムにある場合は、そのシステムをメールホストとして設定するための指示に従い、次に同じシステムをメールサーバーとして設定するための指示に従ってください。
次のメールサーバーとメールクライアントの設定の手順は、メールボックスが NFS でマウントされているときに適用されます。ただし、通常、メールボックスはローカルにマウントされた /var/mail ディレクトリで管理されます。この場合、このあとの手順は必要ありません。
メールサーバーはローカルユーザーにメールサービスを提供するだけなので、設定には特別な手順は必要ありません。ユーザーはパスワードファイルか名前空間にエントリが必要です。そのエントリは、メールの配信用にローカルのホームディレクトリが ‾/.forward を確認できるために必要です。このためにホームディレクトリサーバーがしばしばメールサーバーとして設定されます。
メールサーバーは、クライアントからのすべてのメールのルーティングを行います。メールサーバーに必要な唯一のリソースは、クライアントメールボックスのための十分なスプール空間です。リモートのマウントでは、/var/mail ディレクトリを使用できるようにする必要があります。
この作業のために、/etc/dfs/dfstab ファイルを確認して /var/mail ディレクトリがエクスポートされていることを確認します。
メールサーバー上でスーパーユーザーになります。
/var/mail ディレクトリをリモートアクセスに使用できるかどうかを確認します。
share と入力して Return キーを押します。/var/mail ディレクトリがリストになっていれば、これで終了です。/var/mail ディレクトリがリストされていなければ、次の手順に進みます。
/var/mail ディレクトリをリモートアクセスに使用できるようにします。
以下のコマンドをキー入力します。
# share -F nfs /var/mail |
ファイルシステムを永続的にリモートアクセスに使用できるようにします。
/etc/dfs/dfstab を編集し、2. で使用したコマンド行を追加します。
# cat /etc/dfs/dfstab .. share -F nfs -o rw /var/mail |
mail.local プログラムは、メッセージが初めて配信されたときに /var/mail ディレクトリでメールボックスを自動的に作成します。メールクライアントのためにメールボックスを作成する必要はありません。
メールクライアントは、メールボックスがメールサーバーにあり、 /etc/mail/aliases ファイルのメール別名がメールボックスの位置を指しているメールサービスのユーザーです。
メールクライアントのシステム上でスーパーユーザーになります。
メールクライアントのシステムで /var/mail マウントポイントがあることを確認します。
ls を使用するとファイルシステムが存在するかどうかがわかります。次の例はファイルシステムが作成されていない場合の応答を示しています。
# ls -l /var/mail /var/mail not found |
メールファイルがこのディレクトリにある場合は、ファイルを移動させておくと、サーバーから /var/mail ディレクトリがマウントされるときにその対象となりません。
メールサーバーから /var/mail ディレクトリをマウントします。
このメールディレクトリは自動的にマウントさせることも、起動時にマウントさせることもできます。
/var/mail を自動的にマウントさせる場合
/etc/auto_direct を編集し、次のようなエントリを加えます。
/var/mail -rw,hard,actimeo=0 server:/var/mail |
起動時に /var/mail をマウントする場合
/etc/vfstab ファイルを編集し、/var/mail ディレクトリのためのエントリを追加して、そのディレクトリをローカルの /var/mail ディレクトリにマウントします。
server:/var/mail - /var/mail nfs - no rw,hard,actimeo=0 |
システムをリブートするたびに、クライアントのメールボックスが自動的にマウントされます。クライアントのメールボックスをマウントするには、システムをリブートするまでは、mountall と入力します。
NFS サーバーからメールをマウントするときは、メールボックスのロックとアクセスが適切に行われるように、actimeo=0 オプションを含める必要があります。
/etc/hosts を編集します。
admintool を使用して /etc/hosts ファイルを編集し、メールサーバーのためのエントリを追加します。ネームサービスを使用している場合はこの作業は必要ありません。
別名ファイルの 1 つにクライアントのエントリを追加します。
異なるタイプのメール構成に対してメール別名を作成する方法については、「メール別名ファイルの管理」を参照してください。
mail.local プログラムは、メッセージが初めて配信されるときに /var/mail ディレクトリでメールボックスを自動的に作成します。メールクライアントのために個々のメールボックスを作成する必要はありません。
sendmail を再起動します。
メールホストは、電子メールアドレスを解決し、ドメイン内でメールを再度ルーティングします。メールホストに適しているシステムは、ドメイン外または親ドメインに接続されているシステムです。
メールホストシステムでスーパーユーザーになります。
ホスト名の構成を確認します。
次のように check-hostname スクリプトを実行し、sendmail が、このサーバーの完全指定ホスト名を識別できるかどうかを確認します。
% /usr/lib/mail/sh/check-hostname hostname phoenix OK: fully qualified as phoenix.eng.acme.com |
このスクリプトによる完全指定ホスト名の識別ができなかった場合は、完全指定ホスト名を、/etc/hosts 内のホストの最初の別名として追加する必要があります。
/etc/hosts を更新します。
admintool を使用して /etc/hosts ファイルを更新します。メールホストシステムの IP アドレスとシステム名のあとに mailhost および mailhost.domainname を入れます。このシステムはメールホストとして指定されます。この domainname は、次のコマンドの出力にサブドメイン名として指定されてる文字列と同じにする必要があります。
% /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 ======================================================== |
上記の変更のあとのホストファイルの例を示します。
# cat /etc/hosts # # Internet host table # 127.0.0.1 localhost 129.0.0.1 phoenix mailhost mailhost.eng.acme.com loghost |
NIS または NIS+ を使用する場合は、mailhost および mailhost.domainname と呼ばれるホスト別名を含むエントリを、新規メールホストのホストエントリに追加します。
NIS または NIS+ を使用しない場合は、ネットワーク上の各システム用に、/etc/hosts にエントリを作成する必要があります。エントリでは、必ず IP_address mailhost_name mailhost mailhost.domainname というフォーマットを使用してください。
正しい構成ファイルを変更します。
このコマンドで /etc/mail/main.cf ファイルをコピーし、ファイルの名前を変更します。
# cp /etc/mail/main.cf /etc/mail/sendmail.cf |
sendmail を再起動し、メール構成をテストします。
詳細は、「メール構成をテストする方法」を参照してください。
メールゲートウェイは、ドメイン外のネットワークとの通信を管理します。送信側メールゲートウェイ上のメールプログラムは、受信側システムのメールプログラムと同じでなければなりません。
メールゲートウェイに適しているシステムは、Ethernet および電話回線に接続されているシステムか、またはインターネットへのルーターとして設定されているシステムです。メールホストをメールゲートウェイとして設定するか、または別のシステムをメールゲートウェイとして設定できます。複数のメールゲートウェイを自分のドメイン用として設定できます。UUCP 接続がある場合は、UUCP 接続をメールゲートウェイとするシステム (1 つまたは複数のシステム) を設定してください。
メールゲートウェイでスーパーユーザーになります。
構成ファイルを変更します。
次のコマンドは main.cf ファイルをコピーし名前を変更します。
# cp /etc/mail/main.cf /etc/mail/sendmail.cf |
ホスト名の構成を確認します。
次のように check-hostname スクリプトを実行し、sendmail が、このサーバーの完全指定のホスト名を識別できるかどうかを確認します。
# /usr/lib/mail/sh/check-hostname hostname phoenix OK: fully qualified as phoenix.eng.acme.com |
このスクリプトによる完全指定のホスト名の識別ができなかった場合は、完全指定のホスト名を、/etc/hosts 内のホストの最初の別名として追加する必要があります。
sendmail を再起動し、メール構成をテストします。
「メール構成をテストする方法」を参照してください。
DNS ネームサービスは個人別の別名をサポートしませんが、メール交換局 (MX) レコードおよび cname レコードを使用して、ホストおよびドメイン用の別名はサポートします。ホスト名とドメイン名は両方またはいずれか一方を DNS データベースで指定することができます。DNS の管理の詳細については、『Solaris ネーミングの設定と構成』を参照してください。
スーパーユーザーになります。
DNS ホストルックアップ機能を有効にします (NIS のみ)。
/etc/nsswitch.conf ファイルを編集し、dns フラグを含むホストの定義から # を削除します。使用される DNS ホスト別名のために、ホストエントリには次に示すように dns フラグを入れる必要があります。
# grep hosts /etc/nsswitch.conf #hosts: nisplus [NOTFOUND=return] files hosts: nisplus dns [NOTFOUND=return] files |
mailhost と mailhost.domainname エントリを確認します。
DNS データベース内に mailhost と mailhost.domainname のためのエントリが存在することを確認してください。
sendmail 構成ファイルを作成するプロセスが変わりました。多くのサイトについて、この変更により構成ファイルの管理が容易になります。sendmail.cf ファイルの古いバージョンはまだ使用できますが、適当な時期に新しいシステムに移行することをお勧めします。新しいプロセスの詳細は、/usr/lib/mail/README で説明します。
スーパーユーザーになります。
# cd /usr/lib/mail/cf # cp main-v7sun.mc myhost.mc |
必要に応じて新しい構成ファイルを編集します (たとえば、myhost.mc など)。
m4 を使用して構成ファイルを構築します。
# /usr/ccs/bin/make myhost.cf |
-C オプションを使用して、新しい構成ファイルをテストし、新しいファイルを指定します。
# /usr/lib/sendmail -C myhost.cf -v testaddr </dev/null |
このコマンドは testaddr にメッセージを送り、その一方で稼動時にメッセージを表示します。システム上で sendmail サービスを再起動せずに、送信メールだけがテストできます。まだメールを処理していないシステムでは、「メール構成をテストする方法」に記載される、完全なテスト手順を使用してください。
(省略可能) オリジナルのコピーを作成した後に新しい構成ファイルをインストールします。
# cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.save # cp myhost.cf /etc/mail/sendmail.cf |
# pkill -HUP sendmail |
メール別名はドメイン独自にする必要があります。この節ではコマンド行を使用してメール別名テーブル内の別名を検索し、NIS+、NIS に対して、またはローカルシステム上で、メール別名を作成する方法について説明します。また、AdminTool のデータベースマネージャアプリケーションを使用して別名データベース上でこれらの作業を実行することもできます。
また、データベースファイルは、makemap を使用してローカルメールホスト用に作成できます。これらのデータベースファイルの使用により、NIS または NIS+ などの名前空間を使用する場合の利点をすべて提供できるわけではありませんが、データの検索速度は、ローカルファイルを使用するよりも速くなります。
aliasadm コマンドを使用するには、root、mail_aliases テーブルを所有する NIS+ グループのメンバー、またはテーブルを作成したユーザーでなければなりません。
aliasadm -l と入力して Return キーを押します。
これにより、別名によるアルファベット順に別名テーブルの内容が表示されます。
大きな別名テーブルがある場合、全体の内容の表示には、やや時間がかかることがあります。特定のエントリを検索する場合は、grep 検索機能を使用して特定のエントリを探し出すことができるように、出力をパイプを通して grep コマンドに入力してください (aliasadm -l | grep entry)。
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+ テーブルを作成します。
まったく新しい NIS+ mail_aliases テーブルを作成する場合は、最初に NIS+ テーブルを初期設定しなければなりません。aliasadm -I と入力して Return キーを押します。
それぞれの別名について、aliasadm -a alias expanded_alias [options comments] と入力して Return キーを押します。
これにより、別名が NIS+ mail_aliases テーブルに追加されます。
# aliasadm -a iggy iggy.ignatz@saturn "Iggy Ignatz" |
aliasadm -m alias と入力して Return キーを押します。
これにより、作成したエントリが表示されます。
2 つまたは 3 つ以上の別名を追加する場合は、NIS+ テーブルを直接編集することもあります。
メールクライアント、メールボックスの位置、およびメールサーバーシステムの名前の各リストをコンパイルします。
任意のシステムでスーパーユーザーになります。
aliasadm -e と入力して Return キーを押します。
別名テーブルは、$EDITOR 環境変数で設定されているエディタを使用して表示されます。変数が設定されていなければ、vi がデフォルトのエディタです。
次のフォーマットを使用してそれぞれの別名を別の行に入力します。
エントリが正しいことを確認します。
変更を保存します。
任意のシステムでスーパーユーザーになります。
aliasadm -m alias と入力して Return キーを押します。
別名の情報が表示されます。
aliasadm -c alias expanded_alias [options comments] と入力して Return キーを押します。
別名は、入力した新しい情報を使用して変更されます。
aliasadm -m alias と入力して Return キーを押します。
作成したエントリが表示されます。
エントリが正しいことを確認します。
メールクライアント、メールボックスの位置、およびメールサーバーシステムの名前の各リストをコンパイルします。
NIS マスターサーバーでスーパーユーザーになります。
/etc/mail/aliases ファイルを編集し、次のようなエントリを作成します。
メールクライアントごとにエントリを追加します。
エントリ Postmaster: root をポストマスターとして指定された個人のメールアドレスに変更します。
詳細は、「ポストマスター別名を設定する」を参照してください。
メールサーバーの管理のためのメールボックスを作成した場合は、root:mailbox@mailserver のエントリを作成します。
変更を保存します。
cd /var/yp と入力して Return キーを押します。
make と入力して Return キーを押します。
/etc/hosts と /etc/mail/aliases ファイルでの変更が NIS スレーブシステムに転送されます。別名が有効になるのに、数分かかることがあります。
メールクライアントとメールボックスの位置の各リストをコンパイルします。
メールサーバーでスーパーユーザーになります。
/etc/mail/aliases ファイルを編集し、次のようなエントリを作成します。
メールクライアントごとにエントリを追加します。
エントリ Postmaster: root をポストマスターとして指定された個人のメールアドレスに変更します。
詳細は、「ポストマスター別名を設定する」を参照してください。
メールサーバーの管理のためのメールボックスを作成した場合は、root: mailbox@mailserver のエントリを作成します。
変更を保存します。
newaliases と入力して Return キーを押します。
これにより、sendmail が使用できるバイナリ形式で alias ファイルが作成されます。ファイルは、/etc/mail/aliases.dir と /etc/mail/aliases.pag ファイルに格納されます。
/etc/mail/aliases、/etc/mail/aliases.dir、および /etc/mail/aliases.pag ファイルを他の各システムにコピーします。
3 つのファイルをすべてコピーしたら、newaliases コマンドを他の各システムで実行する必要はありません。
rcp または rdist コマンドを使用してファイルをコピーするか、またはこの目的のために作成したスクリプトを使用してファイルをコピーできます。メールクライアントを追加または削除するたびにすべての /etc/mail/aliases ファイルを更新しなければならないので注意してください。
選択したエディタを使用して、入力ファイルを作成します。
エントリは以下のようになります。
sandy@newdomain.com ssmith@newdomain.com ssmith@olddomain.com error:nouser No such user here @olddomain.com %1@newdomain.com |
この例では、最初のエントリにより、メールは新しい別名に転送されます。2 番目のエントリにより、不適切な別名が使用された時にメッセージが作成されます。さらに、最後のエントリにより、すべての着信メールは olddomain から newdomain へ転送されます。
データベースファイルを作成します。
# /usr/sbin/makemap -o dbm newmap < newmap |
-o |
ファイルを上書きする代わりに追加する。使用できるオプションのリストは、makemap(1M) のマニュアルページを参照 |
dbm |
dbm データベースタイプを選択する。この他のマップタイプには、btree または hash がある |
newmap |
入力ファイル名とデータベースファイル名の最初の部分。dbm データベースタイプを選択すると、データベースファイルは接尾辞に .pag または .dir を使用して作成される。他の 2 つのデータベースタイプの場合、ファイル名には .db が付く |
各システムは 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 として指定された個人のアカウントを作成し、アスタリスク (*) をパスワードフィールドに入れます。
メールが配信されたら mail -f postmaster と入力して Return キーを押します。
mail プログラムはメールボックス名を読んだり、書き込んだりできます。
各システムでスーパーユーザーになり、/etc/mail/aliases ファイルを編集します。
ネットワークが NIS または NIS+ を実行しない場合は、/etc/mail/aliases ファイルを編集します。
ポストマスター別名を root から Postmaster: postmastermailbox@postmasterhost に変更し、その変更を保存します。
ポストマスターのローカルシステムで、別名の名前 (たとえば、sysadmin) を定義する /etc/mail/aliases ファイルにエントリを作成し、ローカルメールボックスへのパスを入れます。
newaliases と入力して Return キーを押します。
あるいは、aliases ファイルで Postmaster: エントリを Postmaster: /usr/somewhere/somefile エントリに変更することもできます。
この節では、メールサービスをスムーズに動作させる方法について説明します。
待ち行列の内容は mailq で印刷できます。このコマンドは sendmail に -bp フラグを指定するのと同じです。
/usr/bin/mailq | more と入力して Return キーを押します。
待ち行列 ID のリスト、メッセージのサイズ、メッセージが待ち行列に入れられた日付、メッセージの状態、および発信者と受信者が表示されます。
/usr/lib/sendmail -q -v と入力して Return キーを押します。
これで待ち行列の処理が強制的に行われ、待ち行列の処理中にジョブの進行状況が表示されます。
-qRstring (どれかの受信者名が string に一致する場合に待ち行列を実行) または -qInnnnn (待ち行列 IDnnnnn の 1 つのメッセージを実行) でいつでも待ち行列のサブセットを実行できます。string はホスト名とも一致することができるので、user@host.domain のサブ文字列も一致します。
この例では、受信者 wnj の待ち行列にあるものをすべて処理します。
# /usr/lib/sendmail -qRwnj |
/etc/init.d/sendmail stop と入力して Return キーを押します。
これで古い sendmail デーモンは削除されるので、古い待ち行列ディレクトリが処理されることはありません。
cd /var/spool と入力して Return キーを押します。
mv mqueue omqueue; mkdir mqueue と入力して Return キーを押します。
これでディレクトリの mqueue とその内容のすべてが omqueue ディレクトリに移動し、新規の空の Rmqueue ディレクトリを作成します。
chmod 755 mqueue; chown daemon.daemon mqueue と入力して Return キーを押します。
これらのコマンドでディレクトリのアクセス権を設定し、所有者による読み込み、書き込み、実行、またグループや他のユーザーによる読み込み、実行が行えるようにします。またこれらのコマンドでは、所有者やグループを daemon に設定します。
/etc/init.d/sendmail start と入力し Return キーを押します。
これで新規 sendmail デーモンが起動します。
/usr/lib/sendmail -oQ/var/spool/omqueue -q と入力して Return キーを押します。
-oQ フラグは代替待ち行列ディレクトリを指定し、-q フラグは待ち行列での各ジョブを処理するように指示します。詳細 (verbose) 表示にしたい場合は、-v フラグを使用します。
待ち行列が最後に空になったら、rmdir /var/spool/omqueue と入力して Return キーを押します。
これにより空のディレクトリが削除されます。
この節では、.forward ファイルの管理に関する複数の手順を説明します。これらファイルはユーザーが編集できるので、ファイルが問題の原因になる場合があります。
この手順は特定のホスト用の .forward ファイルだけを無効にします。
スーパーユーザーになります。
/usr/lib/mail/domain/solaris-generic.m4 またはサイト固有のドメイン m4 ファイルのコピーを作成します。
# cd /usr/lib/mail/domain # cp solaris-generic.m4 mydomain.m4 |
define(`confFORWARD_PATH',`')dnl |
使用中のドメイン m4 ファイルにすでにこの行が存在する場合には、行を置き換えます。
新しい構成ファイルを構築してインストールします。
完全な手順については、「新しい sendmail.cf ファイルを構築する方法」を参照してください。
スーパーユーザーになります。
/usr/lib/mail/domain/solaris-generic.m4 またはサイト固有のドメイン m4 ファイルのコピーを作成します。
# cd /usr/lib/mail/domain # cp solaris-generic.m4 mydomain.m4 |
作成したファイルに次のような行を追加します。
define(`confFORWARD_PATH',`‾z/.forward:/var/forward/$u')dnl |
使用中のドメイン m4 ファイルにすでにこの行が存在する場合には、行を置き換えます。
新しい構成ファイルを構築してインストールします。
完全な手順については、「新しい sendmail.cf ファイルを構築する方法」を参照してください。
このファイルは標準のリリースには含まれていないので、プログラムまたはファイルにメールを転送するためにユーザーが .forward ファイルを使用できるようにする場合には、追加する必要があります。このファイルは、grep を使用し、パスワード内にリストされたすべてのシェルを特定した後に、これらのシェルを入力してファイルを作成できますが、ダウンロードして入手できるスクリプトを使用した以下の手順を使用すると、より簡単に作成できます。
http://www.sendmail.org/sun-specific/gen-etc-shells.html からスクリプトをダウンロードします。
スーパーユーザーになります。
シェルのリストを作成するために、gen-etc-shells を実行します。
# ./gen-etc-shells.sh > /tmp/shells |
このスクリプトでは、getent コマンドを使用して、/etc/nsswitch.conf 内にリストされたパスワードファイルソースに組み込まれたシェルの名前を収集します。
/tmp/shells 内のシェルのリストを調べます。
選択したエディタを使用し、組み込みたくないシェルを削除します。
ファイルを /etc/shells に移動します。
# mv /tmp/shells /etc/shells |
この節では、メールサービスの問題解決に使用できるヒントとツールをいくつか示します。
構成ファイルを変更したシステム上で、sendmail を再起動します。
# pkill -HUP sendmail |
/usr/lib/sendmail -v names </dev/null と入力して Return キーを押すことにより、各システムからテストメッセージを送信します。
names には、受信者の電子メールアドレスを指定します。
このコマンドは、指定された受信者に空のメッセージを送信し、動作している間メッセージを表示します。
次のテストを実行します。
メッセージを通常のユーザー名に送ることによってメールを自分自身またはローカルシステム上の他の人に送信します。
Ethernet の場合は、別のシステムの誰かにメールを送信します。
メインシステムからサブシステムへ、サブシステムからメインシステムへ、およびサブシステムから別のサブシステムへの 3 つの方向で送信します。
メールゲートウェイがある場合、メールホストから別のドメインにメールを送信してリレーメールプログラムおよびホストが適切に設定されていることを確認します。
電話回線上に別のホストへの UUCP 接続を設定している場合は、そのホストの誰かにメールを送信し、その個人にメールを返信してもらうか、またはその個人がメッセージを受信したときに電話してもらいます。
UUCP 接続を介してメールを送信するように他の人に頼みます。
sendmail プログラムでは、メッセージが受信されたかどうかは通知されません。これは、メッセージが配信のために UUCP に渡されるためです。
異なるシステムの postmaster にメッセージを送り、自分のポストマスターのメールボックスに送られることを確認します。
別名と受信者にメールを配信できるかどうかを調べるには、次のようにします。
このコマンドは別名を表示し、最終アドレスが配信可能かどうかを識別します。
次に出力例を示します。
% /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 % |
ローカルとドメイン全体で有効な別名を両方使用するときには、ループしたりデータベースの一貫性が失われたりしないように十分に注意する必要があります。ユーザーをあるシステムから別のシステムに移動するときは、別名のループを作成しないように特に注意してください。
/usr/lib/sendmail -bt と入力して Return キーを押します。
情報が表示されます。
最後のプロンプト (>) で、3,0 とテストしたいメールアドレスを入力します。
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 |
他のシステムへの接続を調べるには、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 ポートに接続できない場合は、次の条件を確認してください。
システム負荷が高すぎないか
sendmail デーモンが動作しているか
システムに適切な /etc/mail/sendmail.cf ファイルがあるか
ポート 25 (sendmail が使用するポート) がアクティブであるか
メールサービスは、syslogd プログラムを使用してほとんどのエラーを記録します。デフォルトでは、syslogd は loghost にメッセージを送ります。
/etc/hosts ファイルの loghost というシステムを、NIS ドメイン全体のすべてのログを管理するように定義できます。システムログは syslogd プログラムによってサポートされます。 /etc/hosts で loghost を指定します。loghost を指定しなければ、syslogd からのエラーメッセージはレポートされません。
例 34-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 デーモンを再起動する必要があります。メールに関する情報収集のため、次の選択項目をファイルに追加できます。
mail.alert - ここで訂正する必要のある状態メッセージ
mail.crit - クリティカルメッセージ
mail.warning - 警告メッセージ
mail.notice - エラーではないが注意すべきメッセージ
mail.info - 情報的なメッセージ
次のエントリにより、重要なメッセージ、単なる情報としてのメッセージ、およびデバッグメッセージのすべてのコピーが、/var/log/syslog に送られます。
mail.crit;mail.info;mail.debug /var/log/syslog |
システムログの各行には、タイムスタンプ、ログを生成したシステム名、およびメッセージが入っています。syslog ファイルは、大量の情報を記録できます。
ログは、連続したレベルとして並べられます。最下位レベルでは、異常なイベントだけが記録されます。最上位レベルでは、もっとも必須なイベントと注目する必要のないイベントが記録されます。通常、10 以下のログレベルが「有用」とみなされます。10 を超えるログレベルは通常、デバッグに使用されます。loghost と syslogd プログラムについては、『Solaris のシステム管理 (第 2 巻)』を参照してください。
その他の診断情報については、次の情報源を確認してください。
メッセージのヘッダーの Received 行を調べます。これらの行は、メッセージがリレーされるときにとった経路を追跡できます。UUCP ネットワークでは、多くのサイトがこれらの行を更新せず、またインターネットでは、行がしばしば再編成されるので注意してください。これらを適切に処理するには、各行の日時を調べてください。時間帯の違いを考慮するのを忘れないでください。
ワークステーショングループの配信上の問題を記録するシステムログを確認します。sendmail プログラムは常に、処理の内容をシステムログに記録します。crontab ファイルを修正してシェルスクリプトを夜間に実行できます。これは、ログから SYSERR メッセージのログを検索し、見つかったものをポストマスターに送信します。