第18章 メール転送エージェントの基礎
LPIC-1 108.3 相当
サーバーが送信するアラートメールや、システムユーザー宛の通知など、Linuxのメールの仕組みは今でも多くの場面で使われています。この章では、メールが配送される仕組みの基礎を扱います。
MTA・MDA・MUAの役割分担
| 略称 | 正式名称 | 役割 |
|---|---|---|
| MUA | Mail User Agent | ユーザーがメールを読み書きするソフト(mailコマンド、Thunderbirdなど) |
| MTA | Mail Transfer Agent | メールをサーバー間で転送するソフト(Postfixなど) |
| MDA | Mail Delivery Agent | 受信したメールを、実際にユーザーの受信箱へ配送するソフト |
メールが送信されるとき、大まかには「MUAで作成 → 送信元のMTAへ渡す → 複数のMTAを経由して宛先のMTAへ届く → MDAがユーザーの受信箱に格納 → MUAで読む」という流れをたどります。1台のサーバーの中でこれらすべての役割を1つのソフトが兼ねていることも多く、境界を意識しにくいのですが、試験でも実務でも、この3層構造を理解しておくとトラブルの切り分けがしやすくなります。
主要なMTAの特徴
| MTA | 特徴 |
|---|---|
| Postfix | 設定のわかりやすさとセキュリティを重視した設計で、現在多くのディストリビューションで既定のMTAとして採用されている |
| Sendmail | 歴史的にもっとも古くから使われてきたMTA。設定ファイルの記法が独特で難解とされる |
| Exim | Debian系で長らく既定として使われてきた、柔軟な設定が可能なMTA |
| qmail | セキュリティを重視した設計で知られるが、開発が比較的落ち着いている |
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番は用途が異なる点に注意してください。
ローカル配送とスマートホスト
メールの配送方式には、大きく分けて、自分のサーバー自身が直接インターネットへ配送するローカル配送と、いったん別の中継用メールサーバー(スマートホスト)に転送し、実際の送信をそちらに任せる方式があります。多くのクラウド環境では、自前のサーバーから直接メールを送ろうとすると、スパム対策の観点から送信元IPの評価が低く扱われがちなため、外部のメール配送サービスをスマートホストとして設定するのが一般的な運用です。
受信したメールの保存先にも違いがあります。mbox形式(/var/spool/mail/ユーザー名のように1ユーザー1ファイルにすべてのメールをまとめて格納する形式)と、Maildir形式(~/Maildir/のように1通ごとに個別のファイルとして保存する形式)があり、Maildir形式のほうが複数プロセスからの同時アクセスに強いという特徴があります。