SMTP, POP
電子メールシステムの基本構成について説明する.メールの送受信に必要なプログラム(MTA,MDA,MUA)の役割と,メール転送・受信に使用されるプロトコル(SMTP,POP,IMAP)の仕組みを理解することで,メールサーバの設定や障害対応に必要な基礎知識を習得できる.
メールに必要なプログラム
電子メールシステムは,MTA,MDA,MUAという3種類のプログラムが連携して動作する.この分離により,各プログラムが単一の機能に特化でき,保守性と拡張性が向上する.
MTA(Mail Transfer Agent)
MTAは,計算機間でメールの送受信を行うプログラムである.MTAは,送信しようとするメールの宛先から受信先のリモートホストを調べ,受信先リモートホスト上で動作しているMTAと通信を行ってメールを送受信する.
他の計算機のMTAから受信したメールの宛先によっては,自分自身の計算機が受け取るべきメールでない場合がある.その場合,第三者の計算機にメールを転送する必要がある.
Unixで代表的なMTAとしてSendmailがある.
MDA(Mail Delivery Agent)
MDAは,MTAによって受信したメールの宛先を解釈し,そのメールを受け取るユーザのメールスプールファイル(受信メールを一時的に保存するファイル)に書き込むプログラムである.
MUA(Mail User Agent)
MUAは,ユーザがメールを読んだり,メールの文章を作成したりするためのプログラムである.メールを送信するときにはMTAと通信を行い,MTAにメールの送信を依頼する.メールを読むときには,MDAが書き込んだメールスプールファイルからメールを取得する.
メールを扱うためのプロトコル
SMTP(Simple Mail Transfer Protocol)
SMTPは,電子メールの転送を行うためのプロトコルである.このプロトコルは,MTA間で電子メールを配送する場合や,MTAとMUA間で電子メールを送信する場合に使用される.TCPポート番号は25である.sendmailでは拡張SMTPプロトコル(ESMTP:認証機能や大容量メール対応などの機能を追加したSMTP)が使用されている.
POP/APOP/IMAP
POP,APOP,IMAPは,いずれもメールをサーバから受信するときに使用するプロトコルである.
POP3(Post Office Protocol Version 3)は,メールサーバからクライアントへメールを取得するためのプロトコルである.これにより,メールクライアントは電子メールをスプールしているサーバからメッセージを取得する.TCPポート番号は110である.メールスプールからメールを読むためには,メールスプールを読み書きできる計算機でMUAを動かす必要があるが,POPを利用するとメールスプールを持たない計算機から,NFS(Network File System:ネットワーク経由でファイルを共有する仕組み)を使わずにメールを読み出すことができる.
APOP(Authenticated POP)は,認証を強化したPOPである.POP3では受信サーバにアクセスする際に必要なパスワードが平文で送信されるため,APOPではパスワードを暗号化して送信することで安全性を向上させている.
IMAP(Internet Message Access Protocol)は,POP3やAPOPのようにメールをクライアントにダウンロードするのではなく,メールを常にサーバ上に保持し,ユーザがサーバからメールを読み出す方式のプロトコルである.複数の端末から同じメールボックスにアクセスする場合に適している.
sendmail
sendmailは,メール送信要求を受けると,sendmail.cf(/etc/mail/sendmail.cf)の指示に従って動作する.sendmail.cfの記述に基づいて,そのメールが自ホスト宛てかどうかを判定する.自ホスト宛てであれば,メールスプールにメールを格納する.自ホスト宛てでない場合は,sendmail.cfのルールに従って転送先を決定し,配送を行う.
sendmail.cf
sendmailはsendmail.cfの内容に従って動作する.しかし,sendmail.cfの記述は複雑であり,直接編集することは困難である.そのため,sendmail.cfを生成するためのCF(Configuration File generator)というツールを使用する.CFを使用することで,簡潔な定義ファイルから複雑なsendmail.cfを自動生成できる.
課題:CFを使ったsendmail.cfの作成
本課題では,CFツールを使用してsendmail.cfを作成し,メールの送受信が正常に動作することを確認する.この作業を通じて,sendmailの設定ファイルの構造と,メール配送の仕組みを理解する.
注意事項
- 作業前に必ず既存のsendmail.cfのバックアップを取得すること
- テストメールの本文には日本語を使用できない
- 課題完了後は必ず元の設定に戻すこと
suになる
バックアップを取得する
cd /etc/mail
cp sendmail.cf sendmail.cf.back
cd /tmp
ソースファイルを取得する
cp -r /u/kubo/work/rinkou/sendmail/CF* .
以下の3つのファイルがあることを確認する
CF-3.7Wpl2.tar.gz
CF-3.7Wpl2-smtpcheck.patch1
CF-3.7Wpl2-smtpcheck.patch2
cd CF
展開する
gunzip CF-3.7Wpl2.tar.gz
tar xvf CF-3.7Wpl2.tar
cd CF-3.7Wpl2/Master
パッチを適用する
patch < /tmp/CF/CF-3.7Wpl2-smtpcheck.patch1
patch < /tmp/CF/CF-3.7Wpl2-smtpcheck.patch2
cd ..
make cleantools
make tools
make samples
sendmail.cfの元になるファイルをコピーする
cp Standards/sendmail-v8.def ./sendmail.def
viでsendmail.defを編集する
OS_TYPE=bsd4.5
MX_SENDMAIL=yes
MY_DOMAIN=4f.db.is.kyushu-u.ac.jp
MY_NAME=(自分のマシン名)
FROM_ADDRESS='$m'
RECIPIENT_GENERIC=yes
REWRITE_GENERIC_FROM=lower
REWRITE_GENERIC_TO=yes
REWRITE_LOCAL_ON_RELAY=generic
ACCEPT_ADDRS='$m'
SPOOL_HOST='popple.db.is.kyushu-u.ac.jp'
BITNET=mx
REJECT_JUNET=yes
ALIAS_FILE_PATH='/etc/mail/aliases'
PRIVACY_FLAGS='noexpn,novrfy,authwarnings'
MAIL_RELAY_RESTRICTION=yes
LOCAL_HOST_IPADDR=/etc/mail/sendmail.localip
LOCAL_HOST_DOMAIN=/etc/mail/sendmail.localdomain
編集後,make sendmail.cfを実行する
sendmailを停止する
ps -ax | grep sendmail
kill sendmailのプロセス番号
sendmail.cfをコピーする
cp sendmail.cf /etc/mail/sendmail.cf
sendmailをデバッグモードで起動する
sendmail -bt
> 0 ユーザ名
(最後に...returns $# local $: ユーザ名と出力されれば正常)> 0 ユーザ名@マシン名.4f.db.is.kyushu-u.ac.jp
(最後に...returns $# local $: ユーザ名と出力されれば正常)> 0 外部のメールアドレス(自宅のPCのアドレスなど)
(最後に...returns $# smtp $: 外部アドレスと出力されれば正常)
C-dでデバッグモードを終了する
sendmailを起動する
sendmail -bd
mailコマンドで自分にメールを送信する
mail 自分のメールアドレス
subject:(テストメールの題名)
テストメールの文章を入力する(日本語は使用不可)
. を入力して送信する
exitでsuから戻る
minakoで受信を確認する
ssh minako
mail
先ほど送信したメールを受信していることを確認する
確認後はqで終了する
以上で課題は完了である.以下の手順で編集前の状態に戻す.
su
cd /etc/mail
ps -ax | grep sendmail
kill sendmailのプロセス番号
mv sendmail.cf.back sendmail.cf
校閲を実施