第18章 メール転送エージェントの基礎

LPIC-1 108.3 相当

サーバーが送信するアラートメールや、システムユーザー宛の通知など、Linuxのメールの仕組みは今でも多くの場面で使われています。この章では、メールが配送される仕組みの基礎を扱います。

MTA・MDA・MUAの役割分担

略称正式名称役割
MUAMail User Agentユーザーがメールを読み書きするソフト(mailコマンド、Thunderbirdなど)
MTAMail Transfer Agentメールをサーバー間で転送するソフト(Postfixなど)
MDAMail Delivery Agent受信したメールを、実際にユーザーの受信箱へ配送するソフト

メールが送信されるとき、大まかには「MUAで作成 → 送信元のMTAへ渡す → 複数のMTAを経由して宛先のMTAへ届く → MDAがユーザーの受信箱に格納 → MUAで読む」という流れをたどります。1台のサーバーの中でこれらすべての役割を1つのソフトが兼ねていることも多く、境界を意識しにくいのですが、試験でも実務でも、この3層構造を理解しておくとトラブルの切り分けがしやすくなります。

主要なMTAの特徴

MTA特徴
Postfix設定のわかりやすさとセキュリティを重視した設計で、現在多くのディストリビューションで既定のMTAとして採用されている
Sendmail歴史的にもっとも古くから使われてきたMTA。設定ファイルの記法が独特で難解とされる
EximDebian系で長らく既定として使われてきた、柔軟な設定が可能なMTA
qmailセキュリティを重視した設計で知られるが、開発が比較的落ち着いている
試験対策: どのMTAを使っていても、メールを送信するコマンドとしてsendmail互換のコマンド(/usr/sbin/sendmailなど)が用意されているのが慣習です。アプリケーション側は「sendmailコマンドを呼び出せばメールを送れる」という前提で作られていることが多く、これによりMTAを入れ替えてもアプリケーション側の変更が不要になります。

エイリアスと個人単位の転送

システム全体で有効な転送ルールは/etc/aliasesに定義します。例えばroot宛のメールを実際の管理者アドレスに転送する、といった設定によく使われます。

/etc/aliases
root: admin@example.com
staff: alice@example.com, bob@example.com

/etc/aliasesを編集した後は、変更を反映させるためにnewaliasesコマンドを実行し、内部のデータベース形式に反映させる必要があります。

システム全体の設定とは別に、各ユーザーが自分宛のメールを個人的に転送したい場合は、ホームディレクトリに~/.forwardというファイルを作り、転送先のアドレスを1行書いておきます。/etc/aliasesが管理者による全体設定であるのに対し、~/.forwardはユーザー自身が管理できる点が異なります。

メールの送受信と確認

コマンドラインからメールを送受信するには、mailコマンドや、より高機能なmailxコマンドを使います。

$ echo "本文です" | mail -s "件名" user@example.com   # メール送信
$ mail                                              # 自分宛の受信メールを確認

まだ配送されずにキューに滞留しているメールはmailqで確認できます。何らかの理由で宛先に届かないメールがたまっている場合、この一覧から原因調査を始めます。Postfix環境ではpostqueue -pでも同様にキューの内容を確認できます。キューに残ったメールは、宛先サーバーが一時的に応答しない場合など、MTAが自動的に再送を試みますが、一定期間(多くの場合は数日程度)配送できないと、送信者に配送失敗が通知され、キューから取り除かれます。

よくある間違い: メールが届かないというトラブルの多くは、実はキューに滞留したままになっているだけということがあります。「送信できたはず」と思い込む前に、まずmailqで自分が送ったメールがキューに残っていないかを確認する習慣をつけると、切り分けが早くなります。

SMTPの基本的な流れとセキュリティ上の注意

MTA同士がインターネット上でメールをやり取りする際に使われるプロトコルがSMTP(Simple Mail Transfer Protocol)です。送信元のMTAは、宛先ドメインのメールサーバーをDNSのMXレコードで調べ、そのサーバーのTCPポート25番に接続してメールを渡します。ユーザーがメールソフトから送信する際には、認証を伴うサブミッションポート(一般に587番)が使われることが多く、25番と587番は用途が異なる点に注意してください。

注意: MTAの設定で、外部から誰でも自由に別ドメイン宛のメールを中継できてしまう状態をオープンリレーと呼びます。かつては初期設定のまま放置されがちでしたが、現在ではスパムメールの踏み台として悪用されるため、送信元を認証済みユーザーや特定のネットワークに限定する設定が必須とされています。

ローカル配送とスマートホスト

メールの配送方式には、大きく分けて、自分のサーバー自身が直接インターネットへ配送するローカル配送と、いったん別の中継用メールサーバー(スマートホスト)に転送し、実際の送信をそちらに任せる方式があります。多くのクラウド環境では、自前のサーバーから直接メールを送ろうとすると、スパム対策の観点から送信元IPの評価が低く扱われがちなため、外部のメール配送サービスをスマートホストとして設定するのが一般的な運用です。

受信したメールの保存先にも違いがあります。mbox形式(/var/spool/mail/ユーザー名のように1ユーザー1ファイルにすべてのメールをまとめて格納する形式)と、Maildir形式(~/Maildir/のように1通ごとに個別のファイルとして保存する形式)があり、Maildir形式のほうが複数プロセスからの同時アクセスに強いという特徴があります。

確認クイズ

Q1. 受信したメールを実際にユーザーの受信箱へ配送する役割を持つのはどれですか?

解説: MDA(Mail Delivery Agent)は、受信したメールを実際にユーザーの受信箱へ配送する役割を持ちます。MTAはサーバー間の転送、MUAはユーザーがメールを読み書きするソフトです。

Q2. システム全体で有効な転送ルールを定義し、編集後にnewaliasesコマンドで反映させる必要があるファイルはどれですか?

解説: /etc/aliases はシステム全体の転送ルールを定義するファイルで、編集後は newaliases コマンドで反映させる必要があります。~/.forward は個々のユーザーが自分で設定する転送先です。

Q3. まだ配送されずキューに滞留しているメールを確認するコマンドはどれですか?

解説: mailq は、配送待ちでキューに滞留しているメールの一覧を表示するコマンドです。

Q4. 1通ごとに個別のファイルとしてメールを保存し、複数プロセスからの同時アクセスに強い保存形式はどれですか?

解説: Maildir形式は1通ごとに個別のファイルとして保存する形式で、mbox形式(1ファイルにまとめる形式)よりも同時アクセスに強い特徴があります。