授業資料/第08回 の変更点

Top / 授業資料 / 第08回

#contents

* RFC について [#sd791364]

メールサーバの話を書く前に,ここで RFC(Request For Comment) について記しておこう.
RFC とは,IETF  (Internet Engineering Task Force)((http://www.ietf.org)) という, ネットワークのための「標準化団体」によって標準化された規格書のことである.

&ref(./warning.png); 現在 使われているネットワークプロトコルのほとんどは基本的にこの RFC に従っているものばかりなので,詳しいことを知りたければ該当する RFC を読めばよい,ということになる.

ただし,規格そのものがバージョンアップされると新しい RFC を用意することになるので,その規格に対応した最新の RFC がどれかわかりにくいのだが.

以下,メールの規格について記すときに RFC について時おり触れているので,気になる者は自分で読んでみるとよい.
なお,ネットワーク上では親切にも日本語に翻訳して置いてくれている人もいるので,そちらから読んでみた方が楽だろう.

* メールサーバ [#t403e0b5]

メールサーバと一口に言ってもその仕事は様々だ.
その説明を行う前に,電子メールがどのように配達されていくのか,おおよそのところとその役割分担を知っておこう.

** メールの送信,転送,受信 [#z9b7c89e]

メールの配信過程はおよそ送信,転送,受信という段階に分かれる.

このうち,送信(これも一種の転送と見なせる)と転送は SMTP (= Simple Mail TransferProtocol. RFC821((http://www.ietf.org/rfc/rfc821.txt )) を見よ) というプロトコルにしたがって行われ,基本的に MTA(後述)のお仕事である.

ユーザビリティに直結することもあって受信の仕方はいくつもの方法があり,今日広く使われているのは POP (Post Office Protocol) ver.3 = RFC1939((http://www.ietf.org/rfc/rfc1939.txt )) と IMAP (Internet Message Access Protocol) ver.4rev1 = RFC3501((http://www.ietf.org/rfc/rfc3501.txt )) である.

これらの役割分担をまとめると,

: MTA = Message Transfer Agent | メールの転送を行うソフトウェア. 郵便局のような役割を果たす.有名なのは,sendmail, postfix, qmail というところか. メール配信の主役.
: MDA = Message Derivery Agent | 届いたメールをローカルユーザに配信する過程で働くソフトウェア. MTA の最後の段階の仕事の下請け的存在.  通常業務は単なる配達だが,メールのフィルタや転送し直し等の「水際処理」も受け持つのでそれなりに重要. 有名どころは mail, procmail などである. 今回はあまり意識しなくてもよいだろう.
: MUA = Mail/Message User Agent | メールの読み書き,サーバへの送信,サーバに届いているメールを取ってくる,などのユーザ向け作業を行うソフトウェア. メーラなどとも言われる.

というソフトウェア同士が, 典型的な場合は以下のように繋がっている.
CENTER:&ref(./mail-transfer-simple_s2.png);
CENTER:(電子メールのおおよその配信図)

よって,メールサーバの管理とはおおまかに
- MTA の管理
- POP, IMAP 等 MUA の手前のサーバソフトウェアの管理

の二つに分類できることになる.

* メール送受信のセキュリティ(安全性) [#n7970903]

メールの送信,転送,配信は基本的に「平文」でネットワークの上を流れる.
そのため,各種パスワードもメール本文も同じネットワークにいるマシンには筒抜けであるので,これを経路の暗号化により防ぐということが考えられる.

そのもっともよく使われる技術が, 前回紹介した TLS/SSL を使って通信内容を暗号化するものである.
また,TLS/SSL を使うことで,改竄検出も可能となる.
// これは,ネットワークの通信経路を暗号化する目的にかなり汎用的に使える技術 TLS/SSL を用いてメールのやり取りも安全にしよう,というものである.
// より詳細を述べると(web サーバのところでも簡単に説明したが),通信経路において「認証+暗号化」機能を提供するのが TSL/SSL 技術である.

&ref(./warning.png); TLS 1.0 は SSL 3.0 にほぼ等しく,RFC2246((http://www.ietf.org/rfc/rfc2246.txt )) を見ればよい. ちなみに TLS 1.1 は RFC4346((http://www.ietf.org/rfc/rfc4346.txt )).

//SSL は Netscape Communications の開発したものであったが,IETF による標準化作業を経て TLS として [[RFC2246:]] に標準規定された経緯がある.
//実質的には SSL ver3.0 と TLS ver 1.0 がほぼ同等であると言われているので,どちらでも適宜読み替えれば問題ないだろう((なお,TLS ver 1.1 が既に [[RFC4346:http://www.ietf.org/rfc/rfc4346.txt]] に規定されているので,少しずつずれていくとは思うが.)).

前回も述べたように,* over TLS/SSL にはいろんなものがある.
あまり見掛けないところでは FTP over TLS/SSL RFC4217((http://www.ietf.org/rfc/rfc4217.txt ))なんてのもある.

** SMTP/POP/IMAP over TLS/SSL [#p98a7c76]

上の図の緑色の経路は基本的にネットワーク上をデータが流れる経路であるが,これらの経路全てに対し,over TLS/SSL によって暗号化と改竄検出が可能である.

具体的には,MTA として関係する SMTP over TLS (RFC3207)((http://www.ietf.org/rfc/rfc3207.txt, 最初のバージョンは RFC2487(http://www.ietf.org/rfc/rfc2487.txt ) だが,これは obsolete 扱いになった. ))と MUA がデータを読み込む際の IMAP/POP over TLS (RFC2595)((http://www.ietf.org/rfc/rfc2595.txt )) とにわけられる.

ちなみに,TLS/SSL の原理だけ考えれば,*** over TLS/SSL をクライアントの「認証」に使う,つまり後述の smtp auth などの代りに使えるのではと思うところだが,正式な TLS/SSL 証明書を取得することが大変なことと有料なことから,クライアント認証に用いるのは非現実的であると考えられているようだ.

* spam 対策 : 加害者になるのを防ぐ : 送信ポートのブロック [#b516102a]

現在,ネットワークのメールにおいて spam (=受取り手の意図に関係なく送られてくる広告,商業用等のメール. UCE = Unsolicited Commercial E-mail ともよばれる.)が非常に大きな問題となっている.
&ref(./warning.png); ちなみに spam の語源は面白い. 調べてみるとよいだろう.

これを防ぐ,減少させるための仕組みは様々なものがあるが,「最寄りのメールサーバMTA において」 spam の「送信段階をブロックする」という目的の技術が以下に紹介されるものである.
他にも "Outbound Port25 Blocking" なども同じ目的の技術である. ただ,Outbound ... はメールサーバで行うものではなくて,ネットワークの出入り口で行うものであるのでここでは紹介しない.

これらは,自分の管理するメールサーバ(MTA)が spam 送信に使われるのを防ぐためのもので,いわば「加害者にならないための」技術である.

** SMTP Auth [#z12aaff4]

RFC2554((http://www.ietf.org/rfc/rfc2554.txt ))に規定されている SMTP の拡張規格で,大ざっぱに言えばSMTP クライアントがサーバに認証してもらう時に用いられる. 
つまり,「SMTP 通信したいんですけど」「あんた誰?」「◯◯です」「ほんと?」「これが証拠です」「OK→通信開始, NG→通信拒否」 という仕組みを実現するものである.

肝心の認証は,実質的に SASL(Simple Authentication and Security Layer) RFC2222((http://www.ietf.org/rfc/rfc2222.txt )) を用いるということが RFC 冒頭に書かれている.

この技術は主に,メール送信(実質的にメール転送に相当する)時に認証できるクライアントだけを受け付けることで,見知らぬ第三者によってそのサーバからメールを送信されることを防ぐために使える.

** Message Submission [#cfbc01fe]

RFC2476((http://www.ietf.org/rfc/rfc2476.txt )) に規定されている規格.
通常はメールの送信と転送の両方が port 25 で受けられるのであるが,これをやめて port 25 は転送のみを受付け,送信は port 587(Submission port とよばれる)で受け付けるようにするというものである.
分けただけではセキュリティ上の意味はそんなにないので(^-^), 各々の port にしかるべき認証ないしは他の方法での制限を導入することが前提となっている.
例えば,送信受付口 submission port では smtp auth をかける.  MTA 相手の認証方法は Sender ID, SPF, DomainKeys など,メールサーバに適したものが提案されている.

より分かり易く示すと,MTA からみたときに基本的に
- 送信してくる相手は MUA
- 転送してくる相手は MTA

であり,メールに関する仕事の内容によって相手が異なるのである.
そこで,仕事の内容に応じて port を分けて,相手毎に対応を変えてセキュリティを高めようという考えである.

具体的には,MTA はそれなりのサーバであるのできちんとした対応を期待しても良さそうとか,MUA は様々なメーラからなるのであまり厳しいことを要求できないなど,各々の性格に応じて相手にあわせた認証方法を導入する,ということになる.

* spam 対策 : 被害者になるのを防ぐ : 受信時のブロック [#cad5dfa7]

spam の「被害者にならないためには」,基本的に転送/送信されてきたメールを受けるところでの水際での措置ということになる. 考え方は大きく二つあって,

: 接続してきた相手をチェックして,ダメなら接続そのものを拒否する | 利点と欠点は以下の通り.
:: 利点 | そもそもメールを受け取らずに済むので,virus などの問題が全くない. 
::| メールの内容に依存しないので「内容に依存する検閲ではないか」という心配がない.
:: 欠点 | 相手が実は問題ないときでも誤って排除してしまうと被害が大きい. 
:|そこで,実際には
-- 正しいSMTP 接続以外は拒絶する
-- 相手が MTA の◯◯の機能を持っている場合に限り接続を許可する(上の特殊なもの)
-- (全世界で集められている)ブラックリストに載っている相手は拒絶する
:|というような手法がとられる.
: とりあえずメールを受け取り,内容をチェックしてダメなら… | 利点と欠点は以下の通り.
:: 利点 | 例えばユーザ毎になど, 柔軟な設定が可能. 
::| 内容に依存する高度なチェックが可能. 具体的には,近年は届いたメールをベイジアンフィルタにかけて分類する手法が広く使われているようだ.
:: 欠点 | 内容をチェックするので,サーバで行った場合は「一種の検閲」という指摘/批判はうけうる. 
::|負荷が高い. 

というものに分けられる. いずれもそれなりの欠点を抱えるため,サーバとユーザの性質によって検討が必要である.

今回はこれらについて詳しく述べないが,一度勉強しておくとよいだろう.
&ref(./warning.png); 例えば,(教官の経験では)サーバ側で「正しい SMTP接続以外は拒絶する」だけで spam の 95%以上を無くすことができる. ただし,世の中には「正規のメールサーバのくせに動作がルール違反である」サーバもあり,こうしたサーバを「ホワイトリスト」に入れていくなどの日々の調整/設定はなかなか大変であるのだが…

&ref(./notes.png); 「spam 被害を減らすために」実際にどのような防御方法があるのか,調べてみよ. このとき,「加害者にならないための」対策と「被害者にならないための」対策にわけて,両方調べよ.

* MTA : Postfix [#b89422e3]

さて,ではメールサーバソフトウェアの本質である MTA をインストール,設定してみよう. 
上に書いたように MTA の有名どころは sendmail, postfix, qmail というところだが,sendmail は「手で設定するのは至難」と言われるし((sendmail.cf という設定ファイルがほぼ呪文. 実際にこれを手で編集できる人曰く,この設定能力は「額だけを使ってビール缶をつぶせる能力と同じようなもの」とのことだ…)),qmail は sendmail との互換性が低いために少し苦労することもある.
無難なところで Postifx をインストールし,設定を行ってみよう.

&ref(./notes.png); sendmail の設定がどのように難しいのかを知るためにはその設定ファイルである /etc/mail/sendmail.cf を見てみるのが一番手っ取り早い. このファイルの,REWRINTING RULES というあたりからを見てみて,自分で理解できそうか,間違えずに編集できそうか,考えてみよ.

&ref(./notes.png); sendmail, postfix, qmail の各々の特徴を少し詳しく調べておこう.

* Postfix のインストール,設定 [#f334eeb0]

** 上に述べた技術との関係 [#eb98dcc9]

まず,Postfix と上のセキュリティ,spam 対策との関係を述べておこう.
&ref(./warning.png); そもそも Postfix は上に述べたような技術と相性が良いソフトウェアとして知られており,こうした新しい対策技術を導入するのに適している.

*** SMTP over TLS/SSL について [#e0d12563]

現時点での FreeBSD で Postfix を ports からインストールしようとすると "Enable SSL and TLS support" というオプションを選択可能なのでこれを選択しておけばよいだけである. 以前から比較的楽だったとはいえ,ここまで楽になっているとは…と思うぐらい簡単になっている.

*** SMTP Auth について [#x6e3d5f9]

原則として Postfix インストール「前」に認証のために用いられる SASL を提供するソフトウェアをインストールする必要がある.
しかし,現時点では ports からインストールしようとした時に "Cyrus SASLv2" というオプションを選択可能なのでこれを選択しておけばCyrus-SASL を自動的に事前にインストールしてくれるので,何もしなくてよい.

** インストール [#q35c6b16]

*** sendmail が既に動いていないかチェック [#m9bd0225]

まず,多くの OS でデフォルトで動いていることが多い sendmail が動いていたりしないかチェックする((FreeBSD も sendmail がデフォルトで動いている OS の一つだ)). 
具体的には,前回の授業で Web サーバが既に動いているかどうかをチェックしたのと同じ方法だ.

&ref(./notes.png); そこで,以下のようにして sendmail が動いていないかチェックしよう.


- まず,/etc/rc.conf を読んで sendmail についての記述がないかチェックする.
sendmail_enable="YES" などとあったら sendmail が起動しているはずだ.
もし sendmail に関する記述が rc.conf になければ,/etc/defaults/rc.conf (これには必ず書いてある)の記述が有効になるのでそちらも読もう.
&ref(./warning.png); /etc/defaults/rc.conf に sendmail_enable="NO" と書いてあるが安心してはいけない. /etc/defaults/rc.conf を注意深く読めばわかるが,これは sendmail の機能の一部が起動しないだけで,sendmail の他の部分は起動してしまう. sendmail 全ての起動を止めたい場合は sendmail_enable="NONE" とするとよい.

&ref(./notes.png); /etc/rc.conf に特に sendmail に関する記述がなく,かつ, /etc/defaults/rc.conf に sendmail_ほげほげ_enable="YES" という記述がある場合は, これ以降の sendmail の自動起動を防ぐために /etc/rc.conf に
>  sendmail_enable="NONE"

と書きこんでおこう.
- 次に,
  ps -axuww | grep -i sendmail
の出力結果を見て,sendmail が動いていないかチェック(sendmail はいろいろな別名を持っているが,本体は同じ).
- 次に,
  lsof -i4 | grep -i mail

として mail とか post とか drop とかいう文字列を含む daemon が動いていないか調べよう. 
//また,/etc/rc.conf を見て,
//  sendmail_enable = "NONE"
//という文字列が"無かったら" sendmail が動いている可能性がそれなりにある((/etc/defaults/rc.conf を見て確認する必要があるが,デフォルトで sendmail_enable = "YES" になっていることがあるのだ.)).
- また,
  telnet localhost 25
として
>  Trying 127.0.0.1...
>  Connected to localhost.
>  Escape character is '^]'.
>  220 &color(blue){ホスト名}; ESMTP Sendmail 8.14.2/8.14.2; Sun, 7 Dec 2008 20:51:38 +0900 (JST)

というように,SMTP を受け付けているよという返事が来て接続できるようだったらおそらく sendmail が動いている((sendmail 以外の MTA をインストールしていたら動いてるのはその MTA かもしれない…)).
&ref(./warning.png); 上で telnet を用いて sendmail に接続した後に切断したい場合は,^] (Ctrl キーを押しながら ] を押す) としてから,quit と打てばよい. この ^] は "ネットワークに関する操作の停止" という意味で,時々役に立つので覚えておこう.

さて,これまでのチェックでもし sendmail が動いているようだったら,
  /etc/rc.d/sendmail stop
として sendmail を停めよう.
念の為にリブートして,sendmail がもはや最初から動かないようになっていることを確認しておくとなおよい.

*** インストール作業 [#ec20c985]

まずいつものように ports コレクションを更新しておこう.
  portsnap fetch
  portsnap update

//次に,これからの作業のログが取れるように portupgrade を設定し直しておこう(これから使う portinstall も portupgrade の一部であるので).
//というのも,途中で何回か大事なメッセージが出てくるのである. 読み取れれば問題ないが,そうもいかないだろうからこうした前準備が必要だ.
//まず,ログファイルの置き場を用意する.
//  cd /var/log; mkdir ports
//次に,portupgrade の設定を書き換えておく. 具体的には,/usr/local/etc/pkgtools.conf ファイルのほぼ最後にある行を
//  PORTUPGRADE_ARGS = ENV['PORTUPGRADE'] ||  \
//   '-v -L /var/log/ports/%s::%s.log'
//などと修正しておこう(portupgrade のマニュアル(man portupgrade でみられる)にいろいろ書いてあるので,それをみて最後の行は好みに応じて変えてもよい).
//こうしておけば,これからは portupgrade, portinstall などのログが /var/log/ports 以下に置かれるようになるので少し安心だ.

では,ports から postfix をインストールする. インストールするバージョンは最新の ver.2.5.5,1 でよいだろう. 
ただし,ports コレクションをざっとみただけでも ver.1系, ver. 2.1系, ver. 2.2系, ver. 2.3系, ver.2.4系 が他にコレクションされているので,インストールの際には間違ったバージョンをインストールしないよう注意しよう((また,ports 以外のインストール方法は大変ではあるが,何をしているかを知るにはとてもよい. 勉強したい,という人にはお勧めだ.)).
さて,
  cd /usr/ports
  portinstall mail/postfix
でインストールが始まるだろう((ちなみに,この時点でインストールされる cyrus-sasl は ver. 2.1.22,2 であるようだ)). もしもバージョン選択を迫られるようならば注意深く選択しよう.

ports からインストールする際,途中で選択/決定 を迫られる場面が3回ほど出てくる. それらについて解説しよう.

たぶん最初に
&ref(postfix-option-1.png);
のような画面が出て,postfix のインストールオプションを聞かれるだろう.
これに対しては,上に述べたように "Cyrus SASLv2", "Enable SSL and TLS support" の二つは "ON" にしておきたい. また,デフォルトで選択されているだろう "Perl Compatible Regular Expressions" も "ON" でよい. 他はそのままでよいだろう.

すると,最初に cyrus-sasl2 のインストール作業が行われ,それから postfix のインストール作業になる. しばらくは黙って待とう.

そしてしばらくすると,
>  Added group "postfix".
>  Added group "maildrop".
>  Added user "postfix".
>  You need user "postfix" added to group "mail".
>  Would you like me to add it [y]?

と聞かれるだろう.
これはソフトウェア postfix を動かす特別なユーザ postfix を mail グループに入れてよいか? という質問だが,こうしておかないと SMTP Auth が使えない(後述)ので,"y" と答えておこう.

また,
>  Would you like to activate Postfix in /etc/mail/mailer.conf [n]?

とも聞かれるだろう.
これは mail 関連のソフトウェア対応表とでもいうべき /etc/mail/mailer.conf を書き換えてもよいか? という質問なのだが,これまたそうしておかないと何かと不便なのでこれも "y" と答えるべきである.
&ref(./warning.png); デフォルトが "n" となっているので,そのまま enter キーを押さないよう気をつけよう.

ちなみに,書き換え前の mailer.conf は
>  sendmail        /usr/libexec/sendmail/sendmail
>  send-mail       /usr/libexec/sendmail/sendmail
>  mailq           /usr/libexec/sendmail/sendmail
>  newaliases      /usr/libexec/sendmail/sendmail
>  hoststat        /usr/libexec/sendmail/sendmail
>  purgestat       /usr/libexec/sendmail/sendmail

となっているが,書き換え後は
>  sendmail        /usr/local/sbin/sendmail
>  send-mail       /usr/local/sbin/sendmail
>  mailq   /usr/local/sbin/sendmail
>  newaliases      /usr/local/sbin/sendmail

となる.
この /usr/local/sbin/sendmail は名前こそ sendmail だが,実際は postfix そのものである(互換性のために sendmail と同じ名前にしてある).

さて,あとは放っておけばインストール作業そのものは終了する.

** 設定 [#d598ebf4]

*** インストールログのチェック [#b1d4724e]

さて,インストール途中に出てくるメッセージを注意深く見ていると「以下の作業を行え」とか,「こういうときはこうしろ」などのと指示が出ているのが分かる. 以前も注意したようこれを読まないと痛い目にあうことがあるので,ログを読んでこのメッセージに従おう.

以前の設定通りにしていれば,今回のログファイルは /var/log/ports/mail::postfix.log であるので,これを読めばよい.
&ref(./warning.png); このファイルがない,名前が違う,という人は portupgrade の設定の項目が違っているということなので,その時の授業の資料を読んで自分で調べて何とかしよう.

ログファイルからまず見つかるメッセージ等は

>  *** Added group `cyrus' (id 60)
>  *** Added user `cyrus' (id 60)

という部分で,これにより,cyrus というユーザとグループがつくられたことが分かる.
次にライブラリに関して利用したければ云々…といういつものメッセージの他に,
>  You can use sasldb2 for authentication, to add users use:
>  &br;
>          saslpasswd2 -c username
>  &br;
>  If you want to enable SMTP AUTH with the system Sendmail, read
>  Sendmail.README
>  &br;
>  NOTE: This port has been compiled with a default pwcheck_method of
>        auxprop.  If you want to authenticate your user by /etc/passwd,
>        PAM or LDAP, install ports/security/cyrus-sasl2-saslauthd and
>        set sasl_pwcheck_method to saslauthd after installing the
>        Cyrus-IMAPd 2.X port.  You should also check the
>        /usr/local/lib/sasl2/*.conf files for the correct
>        pwcheck_method.

というメッセージがある.
これは SMTP Auth がどのようにインストールされているかとその使い方についての指示である.
よく分からない人も英語は読めるだろうから一応読んでおこう((やや驚いたことに,この段階では saslauthd そのものはインストールされていないらしいことがわかる. pwcheck_method だけならば saslauthd なし,ライブラリあたりだけで使えるようだ.)).
ちなみに,ここで書いてある Sendmail.README というファイルは cyrus-sasl2 のインストール/コンパイル途中で出来ているもののはずだ.
だから,通常ならば /usr/ports/security/cyrus-sasl2/files などに見つかる.
ただし,今回は sendmail ではなくて postfix を使うので,この Sendmail.README を読む必要はない.

さて,次に見つかるメッセージは

>      Warning: you still need to edit myorigin/mydestination/mynetworks
>      parameter settings in /usr/local/etc/postfix/main.cf.
>  &br;
>      See also http://www.postfix.org/STANDARD_CONFIGURATION_README.html
>      for information about dialup sites or about sites inside a
>      firewalled network.
>  &br;
>      BTW: Check your /etc/aliases file and be sure to set up aliases
>      that send mail for root and postmaster to a real person, then
>      run /usr/local/bin/newaliases.

である.
これは,postfix インストール後にどのような設定が必要か,ごく大ざっぱに指示している.
/usr/local/etc/postfix/main.cf を書き換えろよ, dialup するホストや firewall の内側にあるホストに関する情報はこの Web を見ろよとか,/etc/aliases をこれこれを確認して直して newaliases を実行しろよ,ということが言われている.

また,次のようなメッセージが含まれている.
>  To enable postfix startup script please add postfix_enable="YES" in
>  your rc.conf
>  &br;
>  If you not need sendmail anymore, please add in your rc.conf:
>  &br;
>  sendmail_enable="NO"
>  sendmail_submit_enable="NO"
>  sendmail_outbound_enable="NO"
>  sendmail_msp_queue_enable="NO"
>  &br;
>  And you can disable some sendmail specific daily maintenance routines in your
>  /etc/periodic.conf file:
>  &br;
>  daily_clean_hoststat_enable="NO"
>  daily_status_mail_rejects_enable="NO"
>  daily_status_include_submit_mailq="NO"
>  daily_submit_queuerun="NO"

&ref(./warning.png); これは重要なメッセージである.
まず,起動時に postfix が動くようにするにはどうしたらよいかが書かれており,つぎに,これまでデフォルトで利用されていた sendmail に関しての動作をどう停止させるかが書かれている. 注意深く読んでおこう.

すぐ次にこのメッセージが続く.
>  If you are using SASL, you need to make sure that postfix has access to read
>  the sasldb file.  This is accomplished by adding postfix to group mail and
>  making the /usr/local/etc/sasldb* file(s) readable by group mail (this should
>  be the default for new installs).

このメッセージからは先のインストール時の質問
>  You need user "postfix" added to group "mail".
>  Would you like me to add it [y]?

に "y" と答えないといけなかった理由が分かる. 先に言え,という気がするけどね.
それから御丁寧にも
>  If you are upgrading from postfix version prior to 2.0, please see the README
>  files for recommended changes to your configuration.

というメッセージがあり,古い postfix からバージョンアップした場合はどうすればよいかがわかる.

その後に
>        This port has installed the following binaries which execute with
>        increased privileges.
>  /usr/local/sbin/postdrop
>  /usr/local/sbin/postqueue
>  &br;
>        This port has installed the following files which may act as network
>        servers and may therefore pose a remote security risk to the system.
>  /usr/local/libexec/postfix/nqmgr
>  /usr/local/libexec/postfix/qmgr
>  /usr/local/libexec/postfix/showq
>  /usr/local/libexec/postfix/master
>  /usr/local/libexec/postfix/error
>  /usr/local/libexec/postfix/scache
>  /usr/local/libexec/postfix/qmqpd
>  /usr/local/libexec/postfix/anvil
>  /usr/local/libexec/postfix/cleanup
>  /usr/local/libexec/postfix/pickup
>  /usr/local/libexec/postfix/discard
>  /usr/local/libexec/postfix/virtual
>  /usr/local/libexec/postfix/oqmgr
>  /usr/local/libexec/postfix/verify
>  /usr/local/libexec/postfix/spawn
>  /usr/local/libexec/postfix/local
>  /usr/local/libexec/postfix/flush
>  /usr/local/libexec/postfix/tlsmgr
>  /usr/local/libexec/postfix/bounce
>  /usr/local/libexec/postfix/smtpd
>  /usr/local/libexec/postfix/pipe
>  /usr/local/libexec/postfix/smtp
>  /usr/local/libexec/postfix/proxymap
>  /usr/local/libexec/postfix/trivial-rewrite
>  /usr/local/libexec/postfix/lmtp
>  &br;
>        This port has installed the following startup scripts which may cause
>        these network services to be started at boot time.
>  /usr/local/etc/rc.d/postfix
>  &br;
>        If there are vulnerabilities in these programs there may be a security
>        risk to the system. FreeBSD makes no guarantee about the security of
>        ports included in the Ports Collection. Please type 'make deinstall'
>        to deinstall the port if this is a concern.
>  &br;
>        For more information, and contact details about the security
>        status of this software, see the following webpage:
>  http://www.postfix.org/

というメッセージがあり,特権をもつプログラムがインストールされたこと,ネットワーク系のプログラムは以下これこれで,セキュリティ上のリスクとなりうること,システムブート時などに postfix を起動するために使われるスクリプトは /usr/local/etc/rc.d/postfix だということ,セキュリティ上のいつもの警告,そして postfix に関する Web の案内などが述べられている.

*** 最低限の設定 [#r6a33d0a]

さて,postfix に関して最低限の設定を行おう. 
先のログファイルのメッセージを一通り読んだ今となっては,何をすれば良いのかがだいたいわかるはずだ.

&br;
まずは,デフォルトの sendmail に関する設定を全て無効にし,postfix を使うように設定しなおそう.
&ref(./notes.png); それには,ログファイルの "To enable postfix startup script please ..." という部分の指示に従えばよい. まずはその通りに作業しよう.
&ref(./warning.png); ただし,sendmail_enable="NO" から始まる4行の設定は先にした sendmail_enable="NONE" で代用できるはずである. よって,実質的な作業は「/etc/rc.conf に一行書き加える」「/etc/periodic.conf に4行書き加える」の二つで済むはずだ.

//これを読むと,/etc/rc.conf に記述を 5行加えないといけないことが分かる. 
//また,/etc/periodic.conf にも 4行加えるべきだということも書いてある.
//早速この二つの作業を行おう.

&br;
さて,次に,メールサーバとして最低限の設定(SMTP Auth も SMTP over TLS/SSL もなし)を行おう.
これは /usr/local/etc/postfix/main.cf を編集するだけでよい.
  cd /usr/local/etc/postfix/
//  cp main.cf main.cf.ORG
  emacs main.cf
などとして編集しよう.
&ref(./warning.png); この main.cf のバックアップも忘れないように.

&ref(./notes.png); 以下に修正した箇所のみ抜き出した例を書くので,これを参照してとりあえず編集しよう
なお,デフォルト値が気になる設定は /usr/local/etc/postfix/main.cf.default を見れば書いてあるのでそれを見よう.

>  myhostname = q17.cl.math.sci.osaka-u.ac.jp  &color(blue){← 自分の hostname を書くこと!};
>  mydomain = cl.math.sci.osaka-u.ac.jp
>  alias_maps = hash:/etc/aliases
>  alias_database = hash:/etc/aliases
>  home_mailbox = Maildir/

&ref(./warning.png); home_mailbox の設定値の最後の /(スラッシュ) を忘れないように. 重要な意味がある.
&ref(./warning.png); ただし,変数の依存関係があることがあるので main.cf の最後にまとめてこれを書くのはよくない.  main.cf の中に該当する部分があるので,そこで各々きちんと書き込もう.

&br;
次に,これもやはり先のログファイル中のメッセージに従い,"root" や新しく増えたユーザ "cyrus", "postfix" 宛のメールが確実に適切な管理者に転送するようにしておこう.
&ref(./notes.png); 具体的には,/etc/aliases を編集して,まず
>  root : (自分のメールアドレス)

を修正し,その後,同じファイルの適当な場所に(uucp: root の下あたりが無難か)
>  cyrus:  root
>  postfix: root

を付け加えればよい. ただし,これだけでは変更は反映されないので,反映させるために次のコマンドを実行しておく.
  rehash
  newaliases

&ref(./warning.png); 上の rehash は重要だ. なぜなら,newaliases コマンド等も新しいものに置き換わっているからだ.

さて,ここで念の為リブートしよう. 設定が正しければこれで postfix が動き出すはずだ.

*** postfix の起動確認 [#t55ff26c]

&ref(./notes.png); まず,先に sendmail が動いているかどうかをチェックしたのと同じ方法で postfix が起動しているかチェックしよう. 
> ps -axuww | grep postfix

として,何か動いているか,
> lsof -i4 -P | grep 25 

として,ポート25番で誰かきちんと待ち受けているか,を見よう.
&ref(./warning.png); postfix の場合,25番ポートで待ち受けているプログラムは master という名前だ.

動いていないようならこれまでの作業を再チェックし,動くまで直そう.

&br;
&ref(./notes.png); 動いているようならば,先と同様に telnet で port 25 にアクセスしてみてどんな返事が返ってくるか見てみよう. 
>  telnet localhost 25

として,
>  Trying 127.0.0.1...
>  Connected to localhost.
>  Escape character is '^]'.
>  220 &color(blue){ホスト名}; ESMTP Postfix

と出るはずなので,ここで
>  EHLO localhost

と入力してみよう. すると,
>    250-&color(blue){ホスト名};
>    250-PIPELINING
>    250-SIZE 10240000
>    250-VRFY
>    250-ETRN
>    250-ENHANCEEDSTATUSCODES
>    250-8BITMIME  
>    250 DSN

という返事が返ってくるはずだ(このあとは ^], quit で抜けられる).
これは postfix が正常にメールのやり取りをしようとしているということであり, とりあえず postfix が port 25 できちんと待ち受けているのが分かる.

&ref(./notes.png); では次に,自分宛にメールを出してみてチェックしよう.
やり方は簡単で,&color(blue){通常のユーザになってから};
  mail -s "test" 自分のユーザ名
として,それから何でもいいので入力する(これがメールの本文になる).
メールの本文をうち終わったら,「ピリオド一つのみからなる行」を入力すると入力全て終わったことになり,メールが送信できる.
例えば,ユーザ名が taro の場合は次のような感じだ.
>  >mail -s "test" taro
>  This is a test mail.
>  .
>  EOT  &color(blue){← 上で . だけの行を入力するとこういうメッセージが返ってくる};

こうしてから自分のディレクトリの Maildir/new というディレクトリに行ってみる. 何か新しいファイルがあれば,それを less などで読んでみよう. 
それが今送ったメールならば,今送ったメールが無事に届いたということになる.
例えば上のケースだと以下のような感じのファイルになっているだろう.

>  Return-Path: <taro@&color(blue){ホスト名};>
>  X-Original-To: taro
>  Delivered-To: taro@&color(blue){ホスト名};
>  Received: by &color(blue){ホスト名}; (Postfix, from userid 1001)
>          id 552561D1B6; Thu, 11 Dec 2008 21:56:22 +0900 (JST)
>  To: taro@&color(blue){ホスト名};
>  Subject: test
>  Message-Id: <20081211125622.552561D1B6@&color(blue){ホスト名};>
>  Date: Thu, 11 Dec 2008 21:56:22 +0900 (JST)
>  From: taro@&color(blue){ホスト名}; (Taro Yamada)
>  &br;
>  This is a test mail.


これがうまくいっていなければ何かおかしいので,スーパーユーザ権限で /var/log/maillog を読んでみよう. エラー等があれば出力されていて,トラブルの原因が掴めるだろう.

&ref(./notes.png); さて次に,「存在しないユーザ宛に」メールを出してみて,エラーが返ってくるかチェックしよう.
これは上とほぼ同様の作業で,(念の為に通常ユーザになって)
  mail -s "test2" 存在しないユーザ名
として,あとは適当に本文入力後に「ピリオド一つのみからなる行」を入力するだけである.
例えば, usotaro というユーザが居ないとして次のような感じだ.
>  >mail -s "test2" usotaro
>  This is a test mail to nonexistent user.
>  .
>  EOT  &color(blue){← 上で . だけの行を入力するとこういうメッセージが返ってくる};

さてこれもまた自分のディレクトリの Maildir/new というディレクトリに新しいファイルがあり,それが「そんなユーザいないからメール出せないよ」という内容のエラーメールだったら OK だ.
具体的には,この場合はメール中に
>  This is the mail system at host &color(blue){ホスト名};
>  &br;
>  I'm sorry to have to inform you that your message could not
>  be delivered to one or more recipients. It's attached below.
>  &br;
>  For further assistance, please send mail to postmaster.
>  &br;
>  If you do so, please include this problem report. You can
>  delete your own text from the attached returned message.
>  &br;
>                     The mail system
>  &br;
>  <usotaro@&color(blue){ホスト名};> (expanded from <usotaro>): unknown
>      user: "usotaro"

というように,そんなユーザ居ないよ,というメッセージが書かれているはずだ.


&br;
今回の説明は少し長くなったので,このあたりで一旦停めておこう.

* レポート [#l51d2454]
メール送受信の際に,「安全性(暗号化)」「SPAM対策」についてサーバやネットワークでできることについて調べよ.
また,本日行った作業について報告せよ.
もちろん各自の

+ 所属(学部,学科)
+ 学籍番号
+ 学年
+ 氏名
+ 日時
+ 肝心のレポート内容(得た知見,作業について気づいたこと等)

を書くのを忘れないように. 

*** about Icons [#v3d7ae04]
Some icons in this page are downloadable at [[ICONFINDER:http://www.iconfinder.net/]].
The "note" icon designed by [[Marco Martin:http://www.notmart.org/]] is distributed with the LGPL licence
and the "warning" icon designed by [[Alexandre Moore:http://nuovext.pwsp.net/]] with the GPL licence.