minimize

さて、ここからはメールサーバを導入する。
まず、基本的なところから押さえていく。
わかってる人は 飛ばして 下さい。

SMTP Server

メール転送サーバ。常駐型のプロセス。
メールというとインターネットに繋がないと使えないと思ってる人もいると思うが
それは大きな間違い。
基本的にメールシステムはマシン1台さえあれば成り立つ。

例えば、このマシン(通称moon)をAさんとBさんが使っているとする。
二人はそれぞれ異なるUnixアカウントを持っていて、AさんがBさんにメールを送信する。
するとSMTPサーバがそのメールをBさんのメールボックスに格納する。
これがSMTPサーバの基本動作。

Bさんは後でメールチェックをしたときに、そのメールを読むことができる。
ここで使うのが、POP / IMAP というメール受信サーバ。
これについては後で説明する。

インターネットからメールを自分のマシンに送信した場合

今度は、インターネットの向こう側にいるCさんを考える。
当然、CさんはmoonマシンのUnixアカウントは持っていない。

まず、CさんがAさん宛てにメールを送信する。
するとmoonマシンの25番ポートにTCP/IPでパケットが飛んでくる。
このパケットを受け取るのは、SMTPサーバ。
これをAさんのメールボックスに格納し、処理は完了する。

そう、SMTPは「転送」サーバ。受信も送信もこのサーバが担当する。
25番ポートで口を空けて待っている。これが受信。
自分のマシンにいるUnixユーザのメールボックスにメールを格納する。これが送信。

インターネットからメールを他のマシンに送信する場合

こういうパターンもある。
今度は、インターネットの向こう側にいるDさんを考える。
DさんもmoonマシンのUnixアカウントは持っていない。

CさんがDさんに向けてメールを送信した。
なぜこのメールがmoonマシンに届くのか不思議に思う人もいるかもしれないが
そういうことはある(悪意がある可能性もある)。

で、moonはこのメールを受信し「Dさんはうちのユーザじゃないな」と判断する。
そしてこれを別の(インターネットの向こう側にいる)どこかのマシンに送信する。
これがいわゆる「バケツリレー」の機能で
大抵のスパムメールは色んなメールサーバを複数経由して大量に発信される。

後述するが、個人で自宅サーバを運営する場合
メールサーバに転送させる必要性はほぼ無い。なので、必ず転送しない設定にしておく事。

絵が無いとわかりにくいかもしれない。
そんな人はここら辺、見てくれ…投げやりだな、おい(笑)。
http://www.geekpage.jp/technology/ip-base/mail-2.php

POP Server

メール受信サーバ。
受信といってもSMTPがやっていた受信とはだいぶ違う。
POP Server がやるのは、メールボックスからメールを読み込んで
その情報をクライアントに返す、というもの。

110番のポートで口を空けて待っている。そしてクライアントがメーラーを立ち上げて
「受信」ボタンを押したとしよう。
するとこのポートにパケットが飛んでくる。
POP Server はそれを受け取り、メールボックスを読みにいく。
メールボックスにメールがあれば、それをまたパケット経由でクライアントに返す。
通常の設定ならば、この段階でメールボックスからメールを削除する。

つまり、メールは一度クライアントに送ったらもうUnixマシンからは消えてしまう。

IMAP Server

こちらもメール受信サーバ。

POP Server と違って、クライアントに送ったメールをサーバ側から消さない。
こうすることで、環境を移行した場合などにも過去のメールがちゃんと消えずに
残ることになる。
もちろんサーバのディスク容量はその分必要。
個人で自宅サーバを運営するのならば、充分にディスク容量は空きがあるはずなので
是非 IMAP Server の導入をオススメする。

qmail

ここからは実際にメールサーバをインストールしていく。
まずはSMTPから。qmail は非常にシンプルで高速なSMTPサーバ。

http://cr.yp.to/qmail.html

qmail のインストール方法はかなり特殊。
全て root で作業する。INSTALL ファイルにやり方が書いてあるので、ここに転記する。

まず、インストールディレクトリの作成とUnixグループ、ユーザの作成。

mkdir /var/qmail
groupadd nofiles
useradd -g nofiles -d /var/qmail/alias alias
useradd -g nofiles -d /var/qmail qmaild
useradd -g nofiles -d /var/qmail qmaill
useradd -g nofiles -d /var/qmail qmailp
groupadd qmail
useradd -g qmail -d /var/qmail qmailq
useradd -g qmail -d /var/qmail qmailr
useradd -g qmail -d /var/qmail qmails

ソースを一部修正する。
error.h に以下の一文を追加。

#include <errno.h>

そしてコンパイル、インストール。

make setup check
./config-fast limy.org

これで、/var/qmail/control 以下にデフォルトの設定ファイルが作成される。
qmail はデフォルトでどこにも転送しない設定になっているから、セキュリティも問題ない。

次に、エイリアスの設定。

(cd ~alias; touch .qmail-mailer-daemon .qmail-root)
chmod 644 ~alias/.qmail*

~alias/var/qmail/alias に展開される。
このディレクトリに .qmail-ユーザ名 という名前のファイルを作ると
そのユーザ宛てのメールはそのファイルに書いた内容に応じて処理される。
今回は以下のようにした。

moon:/var/qmail/alias # cat .qmail-root
&postmaster
moon:/var/qmail/alias # cat .qmail-mailer-daemon
&postmaster

こうすると、root および mailer-daemon 宛てのメールは
postmaster のメールボックスに格納される。
※ postmaster のユーザおよびメールボックスは別途作成する必要がある

ちなみに、qmail は root 宛てのメールは絶対にそのまま受信しないので、
最低でも .qmail-root は作っておいた方がよい。

最後に起動スクリプトを作成する。

cp /var/qmail/boot/home /var/qmail/rc

/var/qmail/rc をちょっと修正。
最後の行を以下に変更。

qmail-start "./Maildir/"

qmail はデフォルトだと Mailbox 形式になっている。
上のようにすると、デフォルト転送方式が Maildir 形式になる。

Maildir は、メール1通につき一つのファイルで管理する。
それに対して Mailbox 形式は、一つのファイル内に複数のメール情報を格納する形式。
人によって好みはあると思うが、Maildir 方式の方が管理しやすい。

/var/qmail/rc &

で、qmail が起動する。
qmail-send, qmail-lspawn, qmail-rspawn, qmail-clean の4プロセスがあれば成功。
自動起動の方法は、後で説明する。

メールディレクトリ作成

以下のコマンドで Maildir 用のディレクトリが作成される。

/var/qmail/bin/maildirmake ~/Maildir

必ず自身の(そのメールボックスを利用する)ユーザで作成すること。
そうしないと、qmail はそこにメールを格納できない。

ディレクトリ構成は以下のようになっている。

% find Maildir
Maildir
Maildir/tmp
Maildir/new
Maildir/cur

送信確認

まずはローカルユーザにメール送信確認。

echo to: USERNAME | /var/qmail/bin/qmail-inject

USERNAME の箇所は適切な Unix ユーザ名に置き換えること。
これでメールが送信され、~/Maildir/ に届く。
今のところはまだ POP Server を導入していないので、上記ディレクトリを直接見ること。
Maildir 形式は先程言ったようにメール1通がファイル一つになるので、確認もしやすい。

echo to: xxx@internet.mail.host | /var/qmail/bin/qmail-inject

こんな風に外部へも送信できた。

echo to: nonuser | /var/qmail/bin/qmail-inject

存在しないユーザへの送信。
エラーになり、MAILER-DAEMON 宛てにエラーの通知メールが送信される。
先程の設定にしていれば、~postmaster/Maildir/ 以下に届いているはず。

[コメント(0)]