\documentstyle[a4j,graphicx]{jarticle} \begin{document} \title{SMTP,POP} \author{久保 正明} \date{Jul/04/2002} \maketitle \section{メールに必要なプログラム} \subsection{MTA(Mail Transfer Agent)} 計算機間でメールの送受信を行います.MTAは,送信しようとするメールの宛先 から,受信先のリモートホストを調べ,受信先リモートホスト上で動いている MTAと通信を行ってメールを送受信します. なお,他の計算機のMTAから受信したメールの宛先によっては,自分自身の計算 機が受け取るべきメールでない場合があります.その場合,第3者の計算機にメー ルを送信する必要があります. Unixで代表的なMTAがSendmailです. \subsection{MDA(Mail Delivery Agent)} MTAによって受信したメールの宛先を解釈し,そのメールを受け取るべき適切な ユーザのメール受信ファイル(メールスプールファイル)に書き込みます. \subsection{MUA(Mail User Agent)} ユーザがメールを読んだり,メールの文章を書いたりするプログラムです.メー ルを出すときにはMTAと通信を行い,MTAにメールの送信を依頼します.そしてメー ルを読むときには,MDAが書き込んだメールスプールファイルからメールを呼び 出します. \section{メールを扱うためのプロトコル} \subsection{SMTP(Simple Mail Transfer Protocol)} SMTPは電子メールの転送を行うためのプロトコルです.このプロトコルは,MTA間 で電子メールを配送したり,MTAとMUA間で電子メールを差し出すときに使われま す.TCPポート番号は25です.sendmailでは拡張SMTPプロトコル(ESMTP)が使用 されています. \subsection{POP/APOP/IMAP} POP/APOP/IMAPはいずれもメールをサーバから受信するときに使うプロトコルで す。 POP3(Post Office Protocol Version3)はメールサーバからクライアントへメールを持って くるためのプロトコルで,これによりメールクライアントは、電子メールをスプー ルしているサーバからメッセージを取得します。TCPポート番号は110です.メー ルスプールからメールを読むためには,メールスプールを読み書きできる計算機 でMUAを動かす必要がありますが,POPを利用するとメールスプールを持たない計 算機から,NFSを使わずにメールを読み出すことができます. APOP(Authenticated POP)は、「認証を強化したPOP」です。 POP3では受信サーバにアクセスする際に必要なパスワードは平文で流されている ので、その安全性を強化するため、APOPではパスワードを暗号化して送ります。 IMAP(Internet Message Access Protocol)はPOP3/APOPのようにメールをクライ アントにダウンロードして読まれるのではなく、常にサーバ上に存在し、ユーザ がそこからメールを読み出します。 \begin{figure}[hbt] \begin{center} \includegraphics{mail2.eps} \caption{メールの流れ} \label{mailp} \end{center} \end{figure} \section{sendmail} sendmailはメール送信要求が来ると,sendmail.cf(/etc/mail/sendmail.cf)の指示に 従って動作します.sendmail.cfの記述に照らして,それが自ホスト宛てのメー ルかどうか判定します.自ホスト宛てなら,メールスプールにメールを格納しま す.自ホスト宛てでないときは,sendmail.cfのルールにしたがって,そのメー ルをどこにむけて転送するか決め,配送します. \subsection{sendmail.cf} sendmailはsendmail.cfの内容にしたがって動作します.しかし,sendmail.cfの 中身は難しくて,これを直接書くのは困難です.そのため,sendmail.cfを作る ためのCFというツールを使用します. \section{課題:CFを使ったsendmail.cfの作成} \begin{enumerate} \item suになる \item backupをとっておく \begin{itemize} \item cd /etc/mail \item cp sendmail.cf sendmail.cf.back \end{itemize} \item cd /tmp \item ソースファイルを取得% \begin{itemize} \item cp -r /u/kubo/work/rinkou/sendmail/CF* . \item 以下の3つのファイルがあることを確認 \item CF-3.7Wpl2.tar.gz \item CF-3.7Wpl2-smtpcheck.patch1 \item CF-3.7Wpl2-smtpcheck.patch2 \end{itemize} \item cd CF \item 展開する% \begin{itemize} \item gunzip CF-3.7Wpl2.tar.gz \item tar xvf CF-3.7Wp12.tar \end{itemize} \item cd CF-3.7Wpl2/Master \item patchをあてる% \begin{itemize} \item patch $\langle$ /tmp/CF/CF-3.7Wpl2-smtpcheck.patch1 \item patch $\langle$ /tmp/CF/CF-3.7Wpl2-smtpcheck.patch2 \end{itemize} \item cd .. \item make cleantools \item make tools \item make samples \item sendmail.cfを作る元になるファイルをコピーする% \begin{itemize} \item cp Standards/sendmail-v8.def ./sendmail.def \end{itemize} \item viでsendmail.defを編集% \begin{itemize} \item OS\_TYPE=bsd4.5 \item MX\_SENDMAIL=yes \item MY\_DOMAIN=4f.db.is.kyushu-u.ac.jp \item MY\_NAME=(自分のマシン名) \item FROM\_ADDRESS='\$m' \item RECIPIENT\_GENERIC=yes \item REWRITE\_GENERIC\_FROM=lower \item REWRITE\_GENERIC\_TO=yes \item REWRITE\_LOCAL\_ON\_RELAY=generic \item ACCEPT\_ADDRS='\$m' % \item SPECIAL\_FROM % \item SPECIAL\_USER % \item SPECIAL\_FROM\_REWRITE \item SPOOL\_HOST='popple.db.is.kyushu-u.ac.jp' % \item REJECT\_SOURCE\_ROUTE\_RELAY=yes \item BITNET=mx \item REJECT\_JUNET=yes \item ALIAS\_FILE\_PATH='/etc/mail/aliases' \item PRIVACY\_FLAGS='noexpn,novrfy,authwarnings' \item MAIL\_RELAY\_RESTRICTION=yes \item LOCAL\_HOST\_IPADDR=/etc/mail/sendmail.localip \item LOCAL\_HOST\_DOMAIN=/etc/mail/sendmail.localdomain % \item SPAM\_LIST\_TYPE=dbm \end{itemize} \item 編集した後,make sendmail.cf \item sendmailをとめる% \begin{itemize} \item ps -ax $\mid$ grep sendmail \item kill sendmailのプロセス番号 \end{itemize} \item sendmail.cfをコピーする \begin{itemize} \item cp sendmail.cf /etc/mail/sendmail.cf \end{itemize} \item sendmailをデバッグモードで動かす \begin{itemize} \item sendmail -bt \item $\rangle$ 0 ユーザ名\\ (最後に...returns \$\# local \$: ユーザ名と出ればOK) \item $\rangle$ 0 ユーザ名@マシン名.4f.db.is.kyushu-u.ac.jp\\ (最後に...returns \$\# local \$: ユーザ名と出ればOK) \item $\rangle$ 0 外部のメールアドレス(自宅のPCのアドレスなど)\\ (最後に...returns \$\# smtp \$: 外部アドレスと出ればOK) \end{itemize} \item C-d でデバッグモード終了 \item sendmail を動かす \begin{itemize} \item sendmail -bd \end{itemize} \item mailコマンドで自分にメール送信 \begin{itemize} \item mail 自分のメールアドレス \item subject:(テストメールの題名) \item テストメールの文章入力(日本語不可) \item . を入力し、送信。 \end{itemize} \item exit で su から戻る \item minakoで受信確認 \begin{itemize} \item ssh minako \item mail \item 先ほど送ったメールを受信していることを確認 \item 確認後は q で終了 \end{itemize} ここまで出来ればOKです\\ あとは、編集前の状態に戻しときましょう \begin{itemize} \item su \item cd /etc/mail \item ps -ax $\mid$ grep sendmail \item kill sendmailのプロセス番号 \item mv sendmail.cf.back sencmail.cf \end{itemize} \end{enumerate} \end{document}