1. ホーム
  2. コース一覧
  3. LinuC Level1 v10.0 対策コース(パート2)
  4. メール配送の仕組みとエイリアス設定

LinuC Level1 v10.0 対策コース(パート2)19/29

メール配送の仕組みとエイリアス設定

こちらの記事ではメール配送の仕組みとエイリアスについて解説します。

電子メールを取り扱うソフトウェアの種類

メール配送の仕組みを理解する上で「メールエージェント」という言葉がよく登場し、MTA・MDA・MUAなどがあります。これらはメール送受信におけるそれぞれの機能を担うソフトウェア(プログラム)のことです。

以下では、メールエージェントがそれぞれどのような役割を果たすのかを表にまとめています。

名称説明
MUA (Mail User Agent)メールの作成・送受信・管理などを行うソフトウェア。
MSA (Message Submission Agent)MUAからのメール送信を受け付けるソフトウェア。主にOP25B(Outband Port 25 Block)や認証を行います。一般的にはMSAはMTAとまとめて解釈されることも多いです。
MTA (Mail Transfer Agent)メールを目的のサーバまで転送していくソフトウェア。
MDA (Mail Delivery Agent)MTAが受け取ったメールをユーザ個々のメールボックスに配送するソフトウェア。
MRA (Mail Retrieval Agent)個々のメールボックスに蓄えられているメールをMUAに渡すソフトウェア。MUAからの接続に対して認証を行います。POPサーバーやIMAPサーバーと呼ばれます。

メール配送の仕組み

作成されたメールが相手に届くまでの流れは以下の通りです。

  1. MUAで作成されたメールは、SMTPにしたがってMSAへ送られます。

  2. MSAがSMTP認証等を行い、問題がなければMTAに配送します。

  3. MTAは、配送先がローカル宛か外部宛かを判別します。

  4. ローカルの場合

    1. MTAはMDAにメールを渡し、MUAはMDAからメールを受け取ります。
  5. 外部の場合

    1. MTAは、相手ドメインのDNSへ問い合わせて送信先を特定し、その送信先のMTAへメールを配送します。

    詳しい流れを見ると、MTAは宛先メールアドレスの"@"以降を確認し、送信先メールサーバーの IP アドレスを確認します。 コマンドでは、DNSの動作確認のコマンド(nslookupもしくはdigコマンド)で以下のようにたたくと確認できます。 "mail exchanger =" の後に表示されているホスト名が MX レコード(mail exchanger record)結果で、該当するMTAにたどり着くまで、確認毎にTCP コネクション・SMTP セッションの接続・切断を繰り返します。 (MXレコード:DNSにあるドメイン情報の一つ)

    #"nslookup -type=[レコードタイプ]" で知りたいレコードタイプの情報を取得することができます。
    nslookup -type=mx 〇〇.com
        
    Server:         172.31.0.2
    Address:        172.31.0.2#53
     
     Non-authoritative answer:
    〇〇.com      mail exchanger = 10 smtp.〇〇.com.
    1. 送信先MTAはメールを受け取ると、MDAにそれを渡します。MDAは"@"より前を見て、どのディレクトリ(フォルダ)に格納すればよいかを確認し、定められたメールボックスに割り振ります。
    2. メールを受信するときは、送信先のユーザはMUAからPOP や IMAPを使ってMRAにアクセスし、メールボックスからメールを取り出します。認証が必要なので、LDAPなど を使って ID パスワード情報を確認し、結果が OK であればメールの閲覧が可能となります。

MTAの起動について

1. MTAの確認

システムによってインストールされているMTAの種類が異なります。25番ポートを開いているソフトウェアを調べることで、稼働しているMTAがどの種類であるかを確認できます。 コマンドを使って確認するには、ネットワーク機能に関するさまざまな情報を表示する netstat コマンドを使用します。 電子メールの送信・配達はSMTPで定義されており、通常25番ポートを使用します。そのため、下記のようにgrepコマンドで情報を絞り込むと見やすくなります。

netstat -atnp | grep 25
    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN   [25番ポートを開いているソフトウェア]                   
tcp7       0      0 ::1:25                  :::*                    LISTEN   [25番ポートを開いているソフトウェア]                  

netstatコマンドのオプション

オプション説明
-a全てのソケット(IPアドレスとポート番号の組み合わせ)情報を表示する。
-c情報を1秒おきに更新してリアルタイムで表示する。
-i全てのネットワークインターフェースの状態を表示。
-l接続待ち(LISTEN)状態のソケットだけを表示。
-n名前解決をせずに、アドレスやポートを数値で表示。
-p各ソケットが利用しているPIDとプロセス名を表示。
-rルーティングテーブルを表示。
-tTCPポートの情報のみを表示。
-uUDPポートの情報のみを表示。

2. MTAプログラムの種類

プログラム名説明
SendmailSendmailは、UNIXで古くから使われてきたソフトウェアです。柔軟で高度な配送設定を行えますが、設定が複雑で運用管理にも高度な知識・技術が必要です。さらに、柔軟が故に、セキュリティーへの配慮も慎重に行わなければなりません。標準メールサーバソフトウェアとしての長い歴史と多くの導入実績が特徴です
qmailqmailは、複数のプロセスが連携して機能しているのが特徴です。Sendmailのセキュリティー面などの弱点を克服し、発見された脆弱性も少ないのもポイントです。
Postfix主にRed Hat Enterprise LinuxやCentOSで使用されることが多いです。Sendmailとの互換性が高く、Sendmailの短所だったメンテナンス性や処理性能を補っており、大量のメールを処理できるパフォーマンスの高さが強みです。またセキュリティーに関する機能も豊富で、MSAの役割も兼任しています。
Exim4主にDebian GNU/LinuxやUbuntuで使用されることが多いです。柔軟なメールのルーティング方法と、受信メールをチェックするための機能を多く揃えているのが強みです。Debian系統のLinuxディストリビューションでは、デフォルトMTAとしてEximが含まれています。

3. MTAの起動

Sys Vinit・systemdなどは、Unix系OSのシステム起動の仕組みを提供します。 採用しているシステムにより手順が異なりますので、以下を参考に起動を試みてみてください。

ここでは、Postfixを起動する手順を例とします。

  1. Sys Vinitを利用する場合
#rootユーザーで操作
        
#Postfixを起動
/etc/init.d/postfix start
  1. systemdを使用する場合
#rootユーザーで操作
        
#Postfixを起動
systemctl start postfix.service

メールの送信と確認

コマンドラインでメールの送受信をする際にはmailコマンドを使用します。 ちなみに、mailコマンドを単体で実行すると、メールボックスに届いているメールの確認ができます。

# -s オプションでタイトルを指定、その後ろに宛先のメールアドレスもしくはユーザー名を指定します。
mail -s title hogehoge@example.com  

# 本文を入力
Hello World!

# メッセージの終わりはピリオド(.)で示します。
.

# メッセージ送信後、コントロールをシェルに戻します。

メールの転送

特定の宛先に届いたメールを、別のメールアドレスで受け取れるようにするには、/etc/aliasesファイルを設定する方法と、それぞれのユーザーのホームディレクトリに.forwardファイルを用意する方法があります。 /etc/aliases はシステムとしての設定で、 ~/.forward は各個人毎の設定です。

それぞれ見ていきましょう。

1. /etc/aliasesファイルの場合

/etc/aliasesファイルを使用することで、メールアドレスの別名設定ができます。/etc/aliases内のメールエイリアスは公共用です。なので、例えば/etc/aliases内でhogehogeという名前のメールエイリアスを設定すると、全ユーザがこのエイリアスを利用して、hogehoge@example.com宛てにメールを送信できるようになります。

メールエイリアスを作成するとき、転送先の設定によっては転送元にはメールが届かなくなることもあります。この点に注意しながら設定を進めてください。

# aliasesの中身を見てみる。絞り込みをせずに実行するとたくさん表示されるので、変更が必要なroot項目だけを絞り込み検索すると良い。
/etc $ cat aliases | grep root:
root:          marc
    
# viエディターなどを使って編集できるが、rootユーザー以外では編集を保存できないので注意してください
vi /etc/aliases
    
# 最下部にあるroot:の部分に転送先アドレスを追加する。(今回はhogehogeを追加)
# 今回はrootを例に挙げていますが、「転送元: 転送先」の構成なので、アドレスAからアドレスBに転送することも可能です。
root: marc, hogehoge

ファイルの書式としては、下記の例では,root宛てのメールがhogehoge(アカウント)に転送されることになります。例えば、動作しているサーバのドメイン名がexample.comだった場合、root@example.com宛がhogehoge@example.comに転送されます。

root: hogehoge

下記のような指定を行うと,root宛てのメールが外部ドメインのメールアドレスに転送されます。

root: hogehoge@example.com

/etc/aliases設定を有効にする

上記でエイリアスを設定した後は、有効にするために、newaliasesコマンドを実行します。newaliasesコマンドは、/etc/aliasesで設定した内容をもとに、MTAが実際に参照するエイリアスデータベースファイルの/etc/aliases.dbを再構築します。これで内容が反映されたことになります。

newaliases

2. .forwardファイルの場合

各ユーザーがホームディレクトリに~/.forwardファイルを用意し、このファイルの中に転送先のメールアドレスを記述することもできます。

この ~/.forward ファイルを使用した設定も、 /etc/aliases 設定と同様、転送元にはメールが届かなくなる場合があります。

#ファイルを作成
touch .forward

#viエディターなどで編集
vi .forward 

#ファイルの中身を確認
cat .forward 
hogehoge@example.com

もし転送元にもメールを届けたい場合は、 \ユーザ名 のようにバックスラッシュとユーザ名を記載します。

以下に例を示します。

cat .forward
\hogehoge
hogehoge@example.com

メールキューについて

送信待ち状態のメールは、メールキューという場所に蓄積されていきます。例えば、送信先のメールサーバーが何らかの事情で受付をできない・停止しているような場合、送信されたメールは一度メールキューに保存されます。送信先のメールサーバーが受付可能になったら、メールキューから取り除かれて送信されます。 DNSの検索で送信先が見つからなかった場合も、メールはメールキューに保存されます。

メールキューを確認するには mailq コマンドを使うと確認できます。

mailq

#特にない場合には以下のように表示される。
mailq
Mail queue is empty

まとめ

メール配送の仕組みとエイリアスについて解説しました。メール配送の仕組みを抑えることで、設定が必要になったときに、スムーズに理解できるかと思います。また、エイリアス設定では、/etc/aliases~/.forwardの違いと特徴、newaliasesコマンドがどのように設定変更をしているかを押さえておきましょう。

記事の内容は理解できましたか?