108.3 レッスン 1
Certificate: |
LPIC-1 |
---|---|
Version: |
5.0 |
Topic: |
108 基本的なシステムサービス |
Objective: |
108.3 メール転送エージェント(MTA)の基礎 |
Lesson: |
1 of 1 |
はじめに
LinuxなどのUnix系オペレーティングシステムでは、すべてのユーザーが専用の 受信箱(メールボックス)を持っています。受信箱の正体は、他のユーザーがアクセスできないそのユーザー専用のファイルないしディレクトリです。メールメッセージの受信から受信箱への配送、ならびに、メールメッセージのポストから宛先アドレスのメールサーバーへの配送全体を制御するソフトウェアを、歴史的に メール転送エージェント(Mail Transfer Agent) と呼びます。その役割の1つは、ネットワークないしはローカルユーザーから届いたローカルユーザ宛のメールメッセージを、そのユーザーのメールボックスに配送することです。
MTAのもうひとつの重要な役割は、ローカルユーザーが投函したメッセージ(ローカルマシンにログインして投函するケースと、ネットワーク経由で投函するケースがあります)を、宛先アドレスのメールサーバーに宛てて SMTP(Simple Mail Transfer Protocol) というプロトコルを使ってネットワーク経由で送信することです。宛先アドレスに応じたメールサーバーは、アドレスのドメイン部(`@`記号以降の部分)から判断します。ネットワークのトラブルなどに対応するために、代行の宛先メールサーバーを使用したり、時間を空けて配送を再試行するといった仕組みも備わっています。
ローカルMTAとリモートMTA
ローカルユーザー同士でメッセージをやりとりするのが、電子メールの最もシンプルなケースです。この場合は、MTAのみでメッセージをメールメッセージを相手のメールボックスに届けることができます。ローカルマシンのメールボックスを読み出すためのユーティリティについては後で説明します。現在では、リモートのメールサーバーにアカウントを作成して、メールクライアントアプリケーション(Mail User Agent)からネットワーク経由でサーバーにアクセスするのが一般的です。この場合、各ユーザーのクライアントマシンに、MTAをインストールする必要はありません。
メールクライアントからメールサーバー上のメールボックスにアクセスするには、ユーザー認証を行ってからPOP3やIMAPと呼ばれるプロトコルを使います(LPIC-1の範囲外ですので本レッスンでは触れません)。また、メールクライアントからメールサーバーにメッセージを送信する際には、やはりユーザー認証を行ってから、電子メールサーバー間でのやりとりと同様のSMTPを使います。これをSubmissionサービスと呼ぶことがあります。
Note
|
現在では、ユーザーが使うローカルマシンにメールメッセージを配送することは稀で、すべての従業員アカウントをホストする会社の集中メールサーバーや、Gmail などのメールサービスにリモートアクセスするのが一般的です。ローカルマシンにメッセージを配信するのではなく、メールクライアントアプリケーションでリモートメールボックスに接続して、メッセージを読み出します。 |
MTAを実行しているマシンのユーザーは、同様にMTAを実行しているリモートマシンのユーザーに宛てたメールを送信することも出来ます。ローカルマシンでポストされたメッセージは、ローカルのMTAによって、リモートマシンのMTAに伝送されます。その際に使用されるSMTPは、TCPポート25番を使用します。(同じSMTPですが、Submissionサービスでは587(STARTTLS)ないし465(SSL)を使うのが普通です。)
MTAサービスを実行しているシステム間で、電子メールの交換を行う仕組みは以下の通りです:
-
送信するメッセージを、送信キューと呼ばれる所定のディレクトリに置きます。ローカルMTAはメッセージファイルを1つずつ取り出して、その宛先アドレスから送信先のシステムを決定します(後述)。
-
ローカルMTAは、SMTPを使用してリモートMTAにメールメッセージを送信します。
-
リモートMTAは、宛先のユーザーが存在することを確認します。ユーザーが存在しなければ、SMTPの中で「宛先ユーザーが居ない」エラーで受信を拒否します。
-
宛先ユーザーが存在すれば、そのメールボックスにメッセージを追加します。メールボックスは、mbox 形式と呼ばれるすべてのメールメッセージを順に並べた1つのテキストファイルか、Maildir 形式と呼ばれる個々のメールメッセージファイルを収めたディレクトリです。
メールアドレスのドメイン名(例えば info@lpi.org
の lpi.org
)から、配送先のホストが分かります。つまり、送信元のMTAは、宛先のドメイン名に対するMXレコードをDNSに問い合わせます。MXレコードには、そのドメイン宛のメールを受信して処理するメールサーバーのホスト名ないしIPアドレスが記載されています。ひとつのドメインに複数のMXレコードが定義されていることがあり、その場合は優先度にしたがって順に接続を試みます。ドメイン名に対応するMXレコードが無い場合は、@
より右側の部分を ホスト名 と見なしてそのホストに対して接続を試みます。
MTAを実行するホストをインターネットに接続する場合は、セキュリティに十分に注意しなくてはなりません。たとえば、迷惑メール(SPAM)の送信を行いたい攻撃者は、送信者の身元を確認することなくメールを中継する オープンリレー と呼ばれるMTAを常に探し回っています(後述)。認証によって身元が確認された場合にのみメール送信を許可すると共に、自分とは無関係なドメインからのメッセージを中継しないように設定することが必須です。
Linuxには、それぞれに特徴を持ったいくつかのMTA実装がありますが、いずれも同じ原則に則って、同じような機能を実現しています。
LinuxのMTA
Linuxに限らず多くのUNIX系オペレーティングシステムで実行できるMTAでは、Sendmail が最も歴史があるものです。後に Postfix、qmail、Exim などが登場してきました。これらを使うと、Sendmail では複雑な設定作業が必要となる機能を、比較的簡単に実現することができます。また、多くのディストリビューションでは、一般的な構成用の設定を含む優先MTAを提供しています。また、新しいMTAはいずれもSendmailと互換性がありますので、Sendmail用に書かれたアプリケーションはそのまま動作します。(訳注:2023年現在、Linuxで人気のMTAは Exim
、Postfix
、Sendmail
の3つです)。
メールは重要なアプリケーションであり、その中核となるMTAの設定は運用環境によって異なります。実用的なメールサーバーを構築するためには、さまざまなツールを複合的に組み合わせることも必要です。そのため、MTAの設定はLPIC-1の範囲外となっています。しかしながら、ごく一般的かつ汎用的な構成 --- たとえば、インターネットに接続して1つのドメインのメールサーバーとする、中央のメールサーバー(スマートホスト)に全メッセージを転送する、ローカルメールだけを取り扱う、など --- を指定して、半自動でMTAの設定を行うツールが、ディストリビューションから提供されていることがあります。簡単なメール送受信の実験環境を構築してみる場合には利用してみましょう。ここでは、SMTPの概要を紹介します。
Tip
|
セキュリティの理由から、ほとんどのLinuxディストリビューションは、デフォルトではMTAをインストールしません。以下の例を試してみる場合には、すべてのマシンでMTAデーモンが実行されていて、TCP25番ポートで接続を受け入れていることが必要です。テストマシンがファイアウォールの内側にあり、インターネットから接続できないことを確認して下さい。 |
MTAデーモンがネットワークからの着信を受け付ける場合、メッセージの送受信には SMTP(Simple Mail Transfer Protocol) を使用します。ネットワーク上でデータをやり取りする汎用的なユーティリティである nc
コマンドを使用して、MTAにSMTPコマンドを送信することができます。(nc
コマンドは、ncat パッケージ、ないし nmap-ncat パッケージに含まれているのが一般的です)。MTAと直接SMTPをやり取りしてみると、プロトコルと電子メールの仕組みをより深く理解できますし、トラブルシュートの際にも役立ちます。(訳注: いずれもLPIC-2の出題範囲で、LPIC-1では取り上げられません)。
lab1.campus
のユーザー emma
が、lab2.campus
のユーザー dave
にメッセージを送信する例を見ていきましょう。nc
コマンドを使用して lab2.campus
のMTAに直接接続します。MTAデーモンはTCPポート25番で待ち受けています。(訳注: lab1.compus
や lab2.campus
は、ローカルネットワークにおける「ホスト名」であることに注意してください。組織内DNSやhostsファイルで名前解決ができることが必要です。)
$ nc lab2.campus 25 220 lab2.campus ESMTP Sendmail 8.15.2/8.15.2; Sat, 16 Nov 2019 00:16:07 GMT HELO lab1.campus 250 lab2.campus Hello lab1.campus [10.0.3.134], pleased to meet you MAIL FROM: emma@lab1.campus 250 2.1.0 emma@lab1.campus... Sender ok RCPT TO: dave@lab2.campus 250 2.1.5 dave@lab2.campus... Recipient ok DATA 354 Enter mail, end with "." on a line by itself Subject: Recipient MTA Test Hi Dave, this is a test for your MTA. . 250 2.0.0 xAG0G7Y0000595 Message accepted for delivery QUIT 221 2.0.0 lab2.campus closing connection
リモートMTAに接続すると、ホスト名やプロトコル名、バージョン番号などが提示されます。送信する最初の文字列 HELO lab1.campus
は、自分のホスト名が lab1.campus
であることを提示します。続く2つのコマンド、MAIL FROM: emma@lab1.campus
と RCPT TO: dave@lab2.campus
は、送信者メールアドレスと受信者メールアドレスを示します。DATA
コマンドの後からピリオドだけの1行の直前までが、電子メールメッセージになります。メールヘッダとして subject
などのフィールドを追加するには、例に示すように、DATA
コマンドの後に続けて送信します。すべてのヘッダー行を送信したら、1つの空行を空けてからメッセージ本文を送信し、最後にピリオドのみの行を送信します。メッセージが受け付けられて、配信に回されたことがリモートMTAから通知されます。最後の QUIT
コマンドは、lab2.campus
ホストのMTAとの接続を終了します。
lab2.campus
ホストでユーザー dave
がシェルセッションを開始するとすぐに、You have new mail in /var/spool/mail/dave
のようなメッセージを受け取ることでしょう。このファイル(メールボックス)には、emma
によって送信されたメールメッセージ本文と、MTAによって追加されたヘッダーが含まれます。
$ cat /var/spool/mail/dave From emma@lab1.campus Sat Nov 16 00:19:13 2019 Return-Path: <emma@lab1.campus> Received: from lab1.campus (lab1.campus [10.0.3.134]) by lab2.campus (8.15.2/8.15.2) with SMTP id xAG0G7Y0000595 for dave@lab2.campus; Sat, 16 Nov 2019 00:17:06 GMT Date: Sat, 16 Nov 2019 00:16:07 GMT From: emma@lab1.campus Message-Id: <201911160017.xAG0G7Y0000595@lab2.campus> Subject: Recipient MTA Test Hi Dave, this is a test for your MTA.
Received:
ヘッダーは、lab1.campus
からのメッセージを lab2.campus
が受信したことを示しています。通常、MTAはローカル受信者へのメッセージのみを受け入れます。次の例では、ユーザー emma
が lab3.campus
ホストのユーザー henry
に電子メールを送信しようとしていますが、lab3.campus
のMTAではなく、lab2.campus
のMTAに接続しているためにエラーとなっています。
$ nc lab2.campus 25 220 lab2.campus ESMTP Sendmail 8.15.2/8.15.2; Sat, 16 Nov 2019 00:31:44 GMT HELO lab1.campus 250 lab2.campus Hello lab1.campus [10.0.3.134], pleased to meet you MAIL FROM: emma@lab1.campus 250 2.1.0 emma@lab1.campus... Sender ok RCPT TO: henry@lab3.campus 550 5.7.1 henry@lab3.campus... Relaying denied
受信側の lab2.campus
が返すメッセージの先頭にある3桁の数字は、応答のステータスを示しています。100の位が5でである番号はエラーを示していて、この場合は Relaying denied
がその理由を示しています。(訳注: lab1.campus
から lab3.campus
に宛てたメールですから、lab2.campus
から見ると「中継」を依頼されたように見えるため「中継拒否」のエラーになります。このような「中継」を無条件に受け入れてしまうのが「オープンリレー」です)。100の位が2である番号は正常に受け付けられたことを示し、4である番号は一時的に受け付けられないので後で再送して欲しいことを示します。
この場合はエラーを返していますが、リレーが望ましい場面もあります。たとえば、大きな組織で部署ごとにメールドメインとメールサーバーを利用しているような場合には、全社で共通利用する親メールサーバーを用意して、外部と各部署メールサーバ間のリレーを許可します(スマートホストと言います)。そして、部署メールサーバーでは自分の部署ドメイン宛て以外のメールメッセージをすべて親メールサーバーに送信するように設定します。
こうすると、それぞれの部署サーバーではメール配送のために外部DNSを検索する必要が無くなりますし、すべてのメールメッセージがスマートホストを経由するので、スマートホストのセキュリティを強化することで全社のメールセキュリティを強化することができます。
ほとんどすべてのMTAには、伝統的なsendmailと互換性を維持するための sendmail
コマンドが備わっています。通常は後述する MUA(Mail User Agent) を使用してメールを送信しますが、sendmail
コマンド直接呼び出してメールを送信することもできます。たとえば、ユーザー emma@lab1.campus
が dave@lab2.campus
にメッセージを送信する例を見てみましょう。この場合も、メールヘッダーはユーザーが入力する必要があります。
$ sendmail -f emma@lab1.campus dave@lab2.campus From: emma@lab1.campus To: dave@lab2.campus Subject: Sender MTA Test Hi Dave, this is a test for my MTA. .
-f
オプションで送信者のアドレスを、引数で宛先のアドレスを指定します。sendmail
コマンドは、標準入力からメールメッセージの入力を待ち受けますので、ヘッダー行に続けて1行の空行を置いてメールメッセージの本文を入力します。ピリオド(ドット)のみの行を入力して、メッセージの終了を示します。ローカルMTAが宛先のリモートMTAに接続できればメッセージはすぐに送信されますが、宛先MTAが応答しないといった場合には、送信キュー と呼ばれるディレクトリにメッセージファイルが保存されて、所定の時間が経過した後に再度送信を試みます。
送信キュー に保留されているメッセージの一覧を、mailq
コマンドで確認することができます。lab2.campus
が応答しなかった場合には、次のように未配信のメッセージとその理由を表示します。
# mailq /var/spool/mqueue (1 request) -----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient----------- xAIK3D9S000453 36 Mon Nov 18 20:03 <emma@lab1.campus> (Deferred: Connection refused by lab2.campus.) <dave@lab2.campus> Total requests: 1
送信キューのデフォルトは /var/spool/mqueue/
ですが、MTAによって異なります。たとえば、Postfixは、/var/spool/postfix/
の下にディレクトリツリーを作成してキューを管理します。mailq
は sendmail
へのシンボリックリンクであり、sendmail -bp
と同じ働きをします。
SMTPでは、DNSで宛先ドメインのMXレコードを検索して送信先メールサーバーを見つけることを述べました。複数のMXレコードがある場合には、優先度に従ってすべてのメールサーバーへの接続を順に試みます。いずれにも接続できなかった場合には、送信キューにメッセージを置いて、いったん処理を終了します。MTAは送信キューを常時監視しており、所定の時間が経過するたびにキューに残っているメッセージの再配送を試みます。sendmail -q
コマンドで、送信キューに残っているすべてのメールメッセージの再送をすぐに試みさせることができます。所定の期間(通常は数日から1週間)が過ぎても送信キューに残っているメッセージは、エラーメッセージを添えて送信者に返送されます。
ユーザー毎のメールボックス(受信箱)はMTAごとに異なり、たとえば dave
のメールボックスは、sendmailでは /var/spool/mail/dove
、postfixでは /var/mail/dave
がデフォルトです。メールボックスを直接読み出して、メールメッセージの正体をもう一度見てみましょう。今度は、メールメッセージが中継されていく模様に着目します。前の例と同じく、emma@lab1.campus
がsendmailコマンドを使用して、dave@lab2.campus
にメッセージを送った場合を取り上げます。
$ cat /var/spool/mail/dave From emma@lab1.campus Mon Nov 18 20:07:39 2019 Return-Path: <emma@lab1.campus> Received: from lab1.campus (lab1.campus [10.0.3.134]) by lab2.campus (8.15.2/8.15.2) with ESMTPS id xAIK7clC000432 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for <dave@lab2.campus>; Mon, 18 Nov 2019 20:07:38 GMT Received: from lab1.campus (localhost [127.0.0.1]) by lab1.campus (8.15.2/8.15.2) with ESMTPS id xAIK3D9S000453 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT) for <dave@lab2.campus>; Mon, 18 Nov 2019 20:03:13 GMT Received: (from emma@localhost) by lab1.campus (8.15.2/8.15.2/Submit) id xAIK0doL000449 for dave@lab2.campus; Mon, 18 Nov 2019 20:00:39 GMT Date: Mon, 18 Nov 2019 20:00:39 GMT Message-Id: <201911182000.xAIK0doL000449@lab1.campus> From: emma@lab1.campus To: dave@lab2.campus Subject: Sender MTA Test Hi Dave, this is a test for my MTA.
メールヘッダの Received:
行は、下から順にメッセージがたどった経路を示しています。一番下の Received:
ヘッダーは、lab1.campus
で、ユーザー emma
が、sendmail
コマンドを直接使って、dave@lab2.campus
宛のメッセージを送信したことを示しています。
次の Received:
行は、lab1.campus
のMTAデーモン(この場合はsendmail)が、そのメッセージを受け付けたことを示しています。3分ほど経過していることから、メッセージを送信してからMTAデーモンを起動したことが推察されます。
一番上の Received:
ヘッダは、lab1.campus
からESMTPS(暗号化されたSMTPの改良版)で送られたメッセージを、lab2.campus
のMTAが受信したことを示しています。lab1@campus
のIPアドレスが記録されていることにも着目しましょう。このように、メールヘッダの Received:
行をたどると、メッセージがたどってきたホストのIPアドレスや、利用されたプロトコルなどを調べることが出来ます。
ユーザーのメールボックスにメッセージを保存したら、MTAの仕事は完了です。ただし現在は、スパムブロッカーやユーザーによるフィルタリングなど、追加の処理を行うことが一般的です。それらの処理は、MTAと連携する別のアプリケーションで行います。たとえば、SpamAssassin(スパムアサシン)という迷惑メールフィルタリングアプリケーションを呼び出して、メッセージテキストを分析して迷惑メールをマークするなどの処理を行います。
メールボックスのファイルを直接読み出すこともできますが、通常はメールクライアントアプリケーション(たとえば ThunderbirdやEvolution、KMailなど)を使います。多くのメールクライアントは、メールボックスを分かりやすく表示するだけでなく、「返信」などの一般的なメール操作や、個人用フォルダなどの機能も備えています。
mail
コマンドとMUA(Mail User Agent)
送信するメールメッセージを適切なフォーマットで作成するためにも、メールクライアントアプリケーションである MUA(Mail User Agent) を使用することがお勧めです。
MUAには多くの種類があります。Mozilla ThunderbirdやGnomeのEvolutionのようなデスクトップアプリケーションは、ローカルとリモートの両方のメールアカウントをサポートしています。WebメールもMTAと連係して動作しますから、一種のMUAと考えられます。MUAにはCLIで動作するものもあり、特にシェルスクリプトでメール関連タスクを行う場合に広く使われています。
Unixの mail
コマンドは、元々はローカルシステムユーザー間でメッセージをやり取りすることだけを目的としていました(最初の mail
コマンドは、1971年にリリースされた最初のUnixにまでさかのぼります)。ネットワーク上でのメール交換が一般的になると、新しい配信システムに対処するためにさまざまなプログラムが作成されて、古い mail
プログラムを置き換えていきました。
現在も広く使われている mail
コマンドは、最新のメール機能に対応している mailx パッケージによって提供されています(訳注: mailx パッケージが見つからない場合は、s-nail パッケージを探してみてください。ディストリビューションによっては、mail
コマンドで s-nail
が呼び出されます)。GNU Mailutils パッケージなど、基本的に mailx
と同じ機能を備えた別の実装もありますが、コマンドラインオプションなどにわずかな違いがあります。このレッスンでは、最も基本的な使用方法のみを説明します。
どの実装でも、mail
コマンドは 受信モード と 送信モード を持っています。コマンド引数にメールアドレスを指定すると送信モードで、その他の場合はノーマル(受信)モードです。ノーマルモードでは、メールボックスにある受信したメッセージの一覧が番号付きで表示されるので、プロンプトに対してコマンドを入力します。たとえば、print 1
コマンドは、1番のメッセージを表示します。コマンドには省略形があり、print
は p
、delete
は d
、reply
は r
などが使えます。メッセージ番号を省略した時には、直近に到着したメッセージか、直近に参照したメッセージを仮定します。quit
ないし q
コマンドで、プログラムは終了します。
メール送信を自動化する場合には、送信モード を使います。たとえば、定時のメンテナンススクリプトの実行に失敗した場合に、管理者宛にメールを送信するといった場合です。送信モードでは、標準入力の内容を、メッセージ本文として使用します。
$ mail -s "Maintenance fail" henry@lab3.campus <<<"The maintenance script failed at `date`"
この例では、メッセージに件名(Subject)フィールドを追加するために、-s
オプションを指定しています。標準入力がメッセージ本文になりますから、直接タイプするか、ヒアドキュメントやパイプで本文を入力します。直接タイプする場合、入力の終了にはEOF(Ctrl+D)を使います。オリジナルの mail
コマンドはメッセージを送信キューに置いて終了しますが、現在は sendmail
コマンドを呼び出してメールを送信するものが多いようです。オプションで送信方法を指定できるものもあるので、インストールしたパッケージのマニュアルを参照してください。
配信のカスタマイズ
デフォルトでは、システムにおけるアカウント名がそのままメールアドレスになります。たとえば、Carolの lab2.campus
におけるアカウントが carol
である場合、そのメールアドレスは carol@lab2.campus
になります。アカウント名とメールアドレスは1対1に対応付けられますが、ほとんどのLinuxディストリビューションが備えている、/etc/aliases
ファイルによるメールアドレスの別名機能によって、対応付けを変更したり、拡張することができます。
メールの別名(エイリアス)は 仮想的な メール受信者であり、受信したメッセージは、既存アカウントのメールボックスや、その他のメールストアに保存されるか、別のアドレスに宛てて転送されます。たとえば、postmaster@lab2.campus
宛に送信されたメッセージを、lab2.campus
のユーザー carol のローカルメールボックスに配送することができます。そのためには、lab2.campus
の /etc/aliases
ファイルに、postmaster: carol
という行を追加します。/etc/alias
ファイルを変更した後には、newaliases
コマンドを実行してMTAが参照する別名データベースを更新して有効化します。sendmail -bi
ないし sendmail -I
を使用して、別名データベースを更新することもできます。
エイリアスは1行に1つずつ、<alias(別名)>: <destination(宛先)>
という形式で定義します。カンマ ,
で区切って、複数の <destination>
を指定できます。ユーザーアカウントに対応する通常のローカルメールボックスだけでなく、次のような宛先も指定できます。
-
ファイルの(
/
で始まる)フルパス名。エイリアス宛のメッセージは、ファイルに追記されます。 -
メッセージを処理するコマンド。
<destination>
の先頭にパイプ文字(|
)を置き、コマンドを続けます。コマンドに特殊文字(空白など)が含まれる場合は、二重引用符で囲みます。たとえば、lab2.campus
のエイリアスsubscribe: |subscribe.sh
は、subscribe@lab2.campus
宛に送られたメッセージを、コマンドsubscribe.sh
の標準入力に送ります。現在のsendmailでは、制限付きモードのシェル(rmrsh)を用いてコマンドを呼び出すので、所定のディレクトリ(ディストリビューションによって異なる)にあるコマンドのみを実行することができます。(訳注: sendmail以外のMTAでは特別な制約はありませんが、潜在的なセキュリティリスクに注意してください)。 -
ファイルの取り込み。1つのエイリアスに対して複数の宛先を指定することができるため、エイリアス毎の外部ファイルを使って宛先アドレスを指定すると便利です。たとえば
:include:/var/local/destinations
のように、キーワード:include:
に続けて、宛先アドレスを収めたファイルパスを指定します。 -
外部アドレス。ローカルユーザーだけでなく、インターネット形式の外部メールアドレスにメッセージを転送することもできます。
-
別のエイリアス名。
一般ユーザーは、自分専用のエイリアスを定義することができます。すなわち、自分のアドレスに届いたメールを、別のアドレスに転送することができます。ホームディレクトリに、.forward
というファイルを作成し、1行に1つずつ<destination>を記入します。たとえば、ユーザー dave
がすべての受信メールを emma@laba1.campus
に転送するには、次の ~/.forward
ファイルを作成します。なお、.forward
ファイルのパーミッションは、所有者のみが書き込み可能でなくてはなりません。
$ cat ~/.forward emma@lab1.campus
転送を行いながら、ローカルマシンのメールボックスにもメッセージを残したい場合は、<destination>の一つとして自分のユーザー名を置きます。ただし、エイリアスのループを避けるために、ユーザー名の前に \
を付ける必要があります(例の場合は \dave
になります)。.forward
には、/etc/aliases
ファイルと同様に、パイプなどのルールを置くこともできます。なお、.forward
は隠しファイルですから、ユーザーがエイリアスに気付かない可能性があります。メール配信の問題を診断するときは、.forward
ファイルの存在を確認することが重要です。
演習問題
-
mail henry@lab3.campus
コマンドを実行すると入力待ち状態になるので、henry@lab3.campus
宛のメッセージを入力します。メッセージが終了した後に、入力モードを終えてメールを送信するにはどのキーを入力しますか? -
ローカルシステムに留まっている未配信のメッセージを、一覧表示するコマンドは何ですか?
-
標準的なMTAを利用しているシステムで、一般ユーザーが自分宛のすべてのメールを、
dave@lab2.campus
に自動的に転送するにはどうしますか?
発展演習
-
mail
コマンドで、emma@lab1.campus
宛に、uname -a
コマンドの出力を本文とし、log.tar.gz
ファイルを添付したメールを送信するには、どのようなコマンドを使いますか? -
ネットワーク経由のメール転送を監視したいが、自分やユーザーのメールボックスにテストメッセージを送りたくありません。
test
宛に送られたすべてのメールを、ファイル/dev/null
にリダイレクトするには、システム全体のエイリアスをどのように設定しますか? -
/etc/alias
に新しいエイリアスを追加した後に、そのデータベースを更新するnewaliases
以外のコマンドにはどのようなものがありますか?
まとめ
このレッスンでは、Linuxシステムにおける MTA(Mail Transfer Agent) の役割と使用方法について説明しました。MTAは、標準的な電子メールの送受信方法を提供し、他のソフトウェアと組み合わせて機能を追加することもできます。このレッスンでは、次のトピックについて説明しました。
-
メール関連技術、メールボックス、プロトコルの概念
-
MTAがネットワーク経由でメッセージを交換する方法
-
さまざまな MUA(Mail User Agents)。特にCLIで使用する
mail
コマンドの基本的な使い方 -
メールのエイリアスと転送
以下の技術、コマンド、手順を説明しました:
-
SMTP関連のプロトコル
-
Linuxで利用可能なMTA: Sendmail、Postfix、qmail、Exim
-
MTAコマンドとMUAコマンド:
sendmail
、mail
-
管理ファイルとコマンド:
mailq
、/etc/aliases
、newaliases
、~/.forward
演習の解答
-
mail henry@lab3.campus
コマンドを実行すると入力待ち状態になるので、henry@lab3.campus
宛のメッセージを入力します。メッセージが終了した後に、入力モードを終えてメールを送信するためにはどのキーを入力しますか?EOF(Ctrl+D)を押すと、プログラムが閉じて電子メールが送信されます。
-
ローカルシステムに留まっている未配信のメッセージを、一覧表示するコマンドは何ですか?
mailq
ないしsendmail -bp
-
標準的なMTAを利用しているシステムで、一般ユーザーが自分宛のすべてのメールを、
dave@lab2.campus
に自動的に転送するにはどうしますか?~/.forward
に、dave@lab2.campus
と書きます。
発展演習の解答
-
mail
コマンドで、emma@lab1.campus
宛に、uname -a
コマンドの出力を本文とし、log.tar.gz
ファイルを添付したメールを送信するには、どのようなコマンドを使いますか?uname -a | mail -a logs.tar.gz emma@lab1.campus
-
ネットワーク経由のメール転送を監視したいが、自分やユーザーのメールボックスにテストメッセージを送りたくありません。
test
宛に送られたすべてのメールを、ファイル/dev/null
にリダイレクトするには、システム全体のエイリアスをどのように設定しますか?/etc/aliases
にtest: /dev/null
という行を追加します。これにより、test
宛のすべてのメッセージが、ファイル/dev/null
にリダイレクトされます。 -
/etc/alias
に新しいエイリアスを追加した後に、そのデータベースを更新するnewaliases
以外のコマンドにはどのようなものがありますか?sendmail -bi
ないしsendmail -I